{"version":3,"sources":["types/account.tsx","utils/ez_api/contactAPIs.ts","utils/envUtil.ts","assets/Logo.svg","components/social/LogoImg.tsx","components/social/LoginFacebook.tsx","components/social/LoginMicrosoft.tsx","components/social/LoginEmail.tsx","components/input/inputPlaceholder.tsx","pages/subpages/LoginUser.tsx","assets/google.png","assets/microsoft.png","pages/Login.tsx","utils/ez_api/graphService.js","utils/3rd_party_api/microsoftUtils.ts","App.tsx","reportWebVitals.ts","components/social/Fragments/SocialBoxWrapper.tsx","components/social/ForgotPassword.tsx","components/social/ResetPassword.tsx","components/social/ErrorMessage.tsx","components/social/VerifyEmail.tsx","pages/Register.tsx","pages/DocusignRedirect.tsx","pages/tabs/admin/subTabs/integration/docusignCallback.tsx","index.tsx","utils/apiUtil.ts","static/consts.tsx","utils/commonUtil.ts","utils/ez_api/taskAPIs.ts","utils/ez_api/emailTemplateAPIs.ts","utils/notificationUtil.ts","utils/webAppUtil.ts","components/appPage/documents.tsx","components/input/inputNumber.tsx","utils/3rd_party_api/hotjarUtil.ts","utils/data_manipulate/date/calculateDuration.ts","utils/ez_api/memberAPIs.ts","utils/paymentUtil.ts","utils/ez_api/paymentAPIs.ts","utils/ez_api/accountDocumentAPIs.ts","utils/mixPanelUtil.ts","components/appPage/modals/taskEditDetail.tsx","components/appPage/modals/tasklistAddContent.tsx","components/appPage/tasks.tsx","utils/ez_api/docusignAPI.ts","utils/ez_api/transactionContactAPIs.ts","pages/tabs/transaction/modals/Modal_showEditAdditionalContact.tsx","pages/tabs/transaction/subTabs/SubTab_Contacts.tsx","pages/tabs/transaction/partials/ContractInfo_GeneralInformation.tsx","pages/tabs/transaction/modals/Modal_showEditParty.tsx","pages/tabs/transaction/partials/ContractInfo_Parties.tsx","pages/tabs/transaction/partials/ContractInfo_CustomFields.tsx","pages/tabs/transaction/subTabs/SubTab_ContractInfo.tsx","pages/tabs/transaction/subTabs/SubTab_Changelogs.tsx","pages/tabs/transaction/subTabs/SubTab_Emails.tsx","components/select/selectTransactionContact.tsx","pages/tabs/transaction/subTabs/SubTab_Greensheet.tsx","pages/tabs/transaction/ViewDetailTransaction.tsx","pages/tabs/transaction/subTabs/SubTab_Tasks.tsx","pages/tabs/transaction/subTabs/SubTab_Documents.tsx","pages/tabs/transaction/subTabs/SubTab_Notes.tsx","utils/ez_api/emailSignatureAPIs.ts","utils/ez_api/accountAPIs.ts","utils/ez_api/transactionNoteAPIs.ts","components/select/selectEmailRecipient.tsx","components/table/EZProTable.tsx","components/select/selectSaleType.tsx","utils/emailUtil.ts","utils/ez_api/notificationAPIs.ts","components/appPage/modals/emailLogDetail.tsx","components/appPage/partials/emailLogs.tsx","components/partials/emailIntegrationIndicator.tsx","pages/tabs/email/partials/emailForm.tsx","components/appPage/notes.tsx","context/EZContext.tsx","components/appPage/modals/taskEmailModal.tsx","utils/cacheUtil.ts","utils/stringUtil.ts","components/spinner/overlaySpinner.tsx","components/list/EZList.tsx","components/richTextEditor/richTextEditor.tsx","pages/tabs/transaction/modals/Modal_editTransactionInfo.tsx","utils/ez_api/AdminAPIs.ts","components/general/demoBanner.tsx","utils/ez_api/onboardingAPIs.ts","pages/tabs/prospect/modal/Modal_addNewProspectModal.tsx","pages/tabs/prospect/modal/Modal_editProspectInfo.tsx","utils/formUtil.ts","pages/tabs/email/partials/PartialEmailTemplateFormItems.tsx","pages/Home.tsx","utils/permissionUtil.ts","components/social/LoginGoogle.tsx","utils/ez_api/transactionAPIs.ts","types/email.tsx","pages/auth/registerByEmail.tsx","utils/ez_api/documentAPIs.ts","components/select/signatureTracker.tsx","pages/tabs/docLibrary/docLibrary.tsx","pages/tabs/email/subTabs/subTabs_Templates.tsx","pages/tabs/email/modal/emailTemplateEditDetail.tsx","components/appPage/modals/newTransactionModal.tsx","utils/quillUtils.ts","pages/auth/microsoftCallback.tsx","pages/tabs/prospect/subTabs/SubTab_Notes.tsx","pages/tabs/prospect/subTabs/SubTab_ProfilePreference.tsx","utils/ez_api/prospect/prospectTaskAPIs.ts","pages/tabs/prospect/modal/prospectTaskEditDetail.tsx","pages/tabs/prospect/subTabs/SubTab_Tasks.tsx","utils/ez_api/prospect/prospectContactAPIs.ts","pages/tabs/prospect/modal/Modal_showEditAdditionalContact.tsx","pages/tabs/prospect/subTabs/SubTab_Contacts.tsx","utils/ez_api/prospect/prospectDocumentAPIs.ts","pages/tabs/prospect/subTabs/SubTab_Documents.tsx","pages/tabs/prospect/ProspectDetail.tsx","utils/ez_api/prospect/prospectNoteAPIs.ts","components/onboarding/OnboardingListContent.tsx","components/markdown/MarkdownRenderer.tsx","components/onboarding/OnboardingDetailModal.tsx","components/onboarding/OnboardingButton.tsx","pages/home/activities.tsx","pages/home/myinbox.tsx","pages/home/notification.tsx","components/partials/docusignIntegrationIndicator.tsx","components/appPage/modals/esignatureModal.tsx","utils/ez_api/loginUtil.ts","utils/ez_api/summaryAPIs.ts","pages/tabs/summary/index.tsx","pages/tabs/task/index.tsx","pages/tabs/transaction/TransactionList.tsx","types/base.tsx","pages/tabs/calendar/index.tsx","pages/tabs/prospect/ProspectList.tsx","pages/tabs/contact/addressBook/Modal_showEditAddressBook.tsx","pages/tabs/contact/addressBook.tsx","pages/tabs/docReview/docReview.tsx","pages/tabs/account/myProfile.tsx","pages/tabs/admin/subTabs/transaction/customFieldsetting.tsx","pages/tabs/admin/subTabs/transaction/alertSetting.tsx","pages/tabs/admin/subTabs/transaction/taskSetting.tsx","components/table/ExpandedRowTable.tsx","pages/tabs/admin/subTabs/transaction/newDocFolderSetting.tsx","pages/tabs/admin/subTabs/transaction/transactionStatus.tsx","pages/tabs/admin/subTabs/transaction/transactionPropType.tsx","pages/tabs/admin/subTabs/transaction/transactionSaleType.tsx","pages/tabs/admin/subTabs/transactionSetting.tsx","utils/ez_api/officeAPIs.ts","pages/tabs/admin/subTabs/teamAndAccessManagement/subUserSetting.tsx","pages/tabs/admin/subTabs/teamAndAccessManagement/officeSetting.tsx","pages/tabs/admin/subTabs/teamAndAccessManagement/accountRoleSetting.tsx","utils/ez_api/permissionAPIs.ts","pages/tabs/admin/subTabs/teamMemberSetting.tsx","utils/ez_api/prospect/prospectAdminAPIs.ts","pages/tabs/admin/subTabs/prospect/prospectGroupSetting.tsx","pages/tabs/admin/subTabs/prospect/prospectFollowupCodeSetting.tsx","pages/tabs/admin/subTabs/prospect/prospectFlagSetting.tsx","pages/tabs/admin/subTabs/prospect/prospectTaskSetting.tsx","utils/ez_api/prospect/prospectAdminTaskAPIs.ts","pages/tabs/admin/subTabs/prospect/questionSetting.tsx","pages/tabs/admin/subTabs/prospectSetting.tsx","pages/tabs/admin/subTabs/integration/docusignSetting.tsx","pages/tabs/admin/subTabs/integrationSetting.tsx","pages/tabs/admin/admin.tsx","pages/tabs/email/subTabs/subTabs_EmailLogs.tsx","pages/tabs/email/subTabs/subTabs_Integration.tsx","pages/tabs/email/modal/emailSignatureEditDetail.tsx","pages/tabs/email/subTabs/subTabs_Signatures.tsx","pages/tabs/email/email.tsx","types/webAppTab.tsx","utils/ez_api/calendarAPIs.ts","utils/ez_api/emailLogAPIs.ts","types/transaction.tsx","components/copyable/index.tsx","components/popupable/popupable.tsx","components/input/inputMasked.tsx","types/document.tsx","utils/ez_api/fileUploadAPIs.ts","components/upload/upload.tsx","components/table/column/DocumentFilenameColumn.tsx","components/select/selectParty.tsx","components/select/selectTransactionFlag.tsx","components/select/selectTransactionStatus.tsx","components/select/selectPropertyType.tsx","components/select/selectTransaction.tsx","static/US_States.tsx","components/select/selectUSState.tsx","components/select/selectContactRole.tsx","components/select/selectDocument.tsx","components/select/selectTask.tsx","components/formatter/number.tsx","components/formatter/commission.tsx","components/formatter/date.tsx","utils/ez_api/locationAPIs.ts","components/autocomplete/AutocompleteCity.tsx","components/autocomplete/AutocompleteParty.tsx","components/upload/uploadProgress.tsx","static/emailCodes.tsx","components/richTextEditor/emailEditorFormItem.tsx","components/input/datePicker.tsx","utils/onboardingUtil.ts","utils/ez_api/prospect/prospectAPIs.ts"],"names":["PASSWORD_REGEX","ACCOUNT_ROLES","accountrole_id","accountrole","rank","ACCOUNT_ROLE_ID","OWNER","BROKER","COORDINATOR","AGENT","MANAGER","THIRD_PARTY","ACCOUNT_ROLE_HAS_ACCESS_TO_ADMIN_AREA","ACCOUNT_ROLE_HAS_ACCESS_TO_DETAIL_ADMIN_AREA","PERMISSION_TYPE","getAllAddressBooks","objParam","params","qs","stringify","APIRequest","method","url","apiUrl","addNewAddressbookContact","payload","Mixpanel","track","data","useDefaultErrorNotif","updateAddressbookContact","addressbook_id","concat","deleteAddressbookContact","getAddressbookRoles","pageSize","getContactRoles","finalParams","addNewContactRole","NODE_ENV","_process$env$REACT_AP","process","facebookID","_process$env$REACT_AP2","googleID","_process$env$REACT_AP3","microsoftID","_process$env$REACT_AP4","REDIRECT_URI","_process$env$REACT_AP5","serverUrl","_process$env$REACT_AP6","TinyMceUrl","_process$env$REACT_AP7","googleApiKey","_process$env$REACT_AP8","microsoftTenantID","_process$env$REACT_AP9","microsoftClientSecret","_process$env$REACT_AP10","GOOGLE_CLIENTID","_process$env$REACT_AP11","SENTRY_DSN","_process$env$REACT_AP12","SENTRY_ENV","Object","entries","forEach","_ref","key","val","trim","length","Error","Ez_Email_Type","msalConfig","auth","clientId","authority","cache","cacheLocation","storeAuthStateInCookie","system","allowRedirectInIframe","MSloginRequest","redirectUri","scopes","isDemoENV","isProductionENV","LogoImg","memo","props","_jsx","className","children","src","loginLogo","alt","window","LoginFacebook","LoginSocialMicrosoft","onReject","onResolve","onClick","handleLogin","getMSOauthLoginURL","then","resp","_resp$data","open","catch","showMessage","Text","Typography","LoginEmail","form","Form","useForm","isLoggingIn","setIsLoggingIn","useState","setError","userLoggedIn","_jsxs","name","requiredMark","initialValues","remember","layout","onFinish","values","email","password","loginUser","res","showNotification","storeLoginPayload","jwt","loginPayload","setLoggedUserData","err","_err$response$data","_err$response$data2","_err$response$data3","posted_date","Date","response","status","message","finally","Item","label","rules","required","type","Input","placeholder","Row","style","paddingBottom","Col","span","strong","Link","to","float","fontWeight","Password","valuePropName","noStyle","Checkbox","href","target","rel","Button","htmlType","block","size","loading","InputPlaceholder","onChange","isPassword","hideLabel","maxLength","LoginUser","handleReject","handleResolve","isError","setIsError","errorTitle","setErrorTitle","errorDescription","setErrorDescription","Alert","description","showIcon","closable","_setError","_isError","_errorTitle","_errorDescription","GoogleOAuthProvider","LoginGoogle","LoginMicrosoft","Login","React","history","useHistory","useEffect","localStorage","getItem","push","justify","xs","offset","sm","md","lg","xl","_res$data","_res$data2","setItem","portToString","provider","access_token","loginInterface","console","log","DemoBanner","require","instance","accounts","App","useMsal","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","SocialBoxWrapper","width","display","flexDirection","justifyContent","alignItems","background","padding","borderRadius","gap","Title","ForgotPassword","emailToResend","setEmailToResend","errorMessage","setErrorMessage","resendEmail","forgotPassword","level","textAlign","marginBottom","_err$response","validateStatus","help","marginTop","paddingTop","ResetPassword","search","useLocation","resetPasswordCode","URLSearchParams","get","verifyResetPasswordCode","_err$response2","_err$response2$data","newPassword","resetPassword","pattern","dependencies","getFieldValue","validator","_","value","Promise","reject","resolve","color","shouldUpdate","disabled","isFieldsTouched","getFieldsError","filter","_ref2","errors","ErrorMessage","CloseCircleOutlined","VerifyEmail","otp","setOtp","setErrorState","resendSuccess","setResendSuccess","goToLogin","goBack","e","sendVerificationEmail","verifyEmail","parseInt","setNotification","ghost","resendVerifyEmail","setTimeout","Register","notificationSuccess","setNotificationSuccess","isNotification","getNotification","loadSubscriptionListFromServer","RegisterByEmail","DocusignRedirect","useParams","DocusignCallback","query","location","code","state","exchangeDocuSignCode","opener","postMessage","close","_Fragment","keyframes","styles","app","loaderContainer","loader","dot","dot1","dot2","dot3","dot4","backgroundSize","height","overflow","margin","position","top","left","backgroundColor","marginRight","animation","animationDelay","msalInstance","PublicClientApplication","hash","Sentry","dsn","environment","integrations","tracesSampleRate","replaysSessionSampleRate","replaysOnErrorSampleRate","AppContent","HOTJAR_ID","Number","shouldInitializeHotjar","Boolean","hotjar","initialize","StrictMode","ConfigProvider","locale","enUSIntl","MsalProvider","Router","basename","Switch","Route","exact","path","component","Home","MicrosoftLoginCallback","ReactDOM","render","document","getElementById","AxiosInstance","axios","create","baseURL","interceptors","request","use","config","token","headers","common","error","debug","removeItem","reload","RequestParams","async","getData","endPoint","downloadFileRequest","fileName","useAuth","arguments","undefined","responseType","fileDownload","ALLOWED_CONTENT_TYPES","ALLOWED_DOCUSIGN_TYPES","SIMPLE_EMAIL_REGEX","STATUS_CATEGORY","COMMA_TEMPLATE","getInitialFromFullname","fullName","allNames","split","reduce","acc","curr","index","charAt","toUpperCase","formatBytes","bytes","decimals","k","dm","sizes","i","Math","floor","parseFloat","pow","toFixed","getFileExtension","filename","pop","getParentAccountID","account","parent_account_id","account_id","SELECT_OPTGROUP_FILTEROPT","inputValue","option","_option$options","options","toLowerCase","indexOf","getTransactionTasks","contract_id","getTransactionTaskLists","getAllTasks","addNewTask","formType","updateTask","id","task_id","action","deleteTask","getTaskDetail","linkTasksToDocs","taskIDs","docIDs","task_ids","doc_ids","addNewTasklist","updateTasklist","tasklist_id","deleteTasklist","getEmailTemplates","getEmailTemplateDetail","email_template_id","getEmailTemplateFolders","queryParams","generateEmailTemplates","getFoldersWithEmailTemplates","withMessageBody","addNewEmailTemplateFolder","folder_name","editEmailTemplateFolder","record","folder_id","addNewEmailTemplate","template_name","editEmailTemplate","deleteEmailTemplate","deleteEmailTemplateFolder","toggleSharingTemplateFolder","is_shared","moveSelectedEmailTemplates","email_template_ids","template_folder_id","notificationType","title","notification","messageType","content","success","warning","info","getTransactionStatusCategory","status_id","TRANSACTION_STATUSES","categoryObj","status_list","find","sItem","status_category_label","isRentalProperty","STATUS_LIST_RENTAL","isProspectABuyer","inquirytype_id","transformContractCustomFields","transactionData","_transactionData$cont","contract_additional_info_categories","category","_category$contract_ad","contract_additional_info_preferences","field","contract_additional_info_field","class","_field$contract_addit","optValue","contract_additional_info_value","field_value","optObject","contract_additional_info_options","optValObj","additional_info_fields_option_id","option_value","field_option_id","_field$contract_addit2","Paragraph","Option","Select","defaultTableParam","searchKeyword","orderParams","whereParams","whereFilterParams","defaultTableParamMainTaskMenu","DOC_EMBEDDED_TYPE","DocViewerWrapper","docType","fileListIDs","isLoading","setIsLoading","documents","setDocuments","activeDocIndex","setActiveDocIndex","activeDoc","setActiveDoc","getPresignedURLDocsRead","docList","map","doc","uri","presignedURL","fileType","content_type","Pagination","simple","defaultCurrent","total","page","includes","DocViewer","header","disableHeader","pluginRenderers","DocViewerRenderers","minHeight","Skeleton","active","previewDoc","Modal","icon","okText","maskClosable","onOk","EditNoteComponent","_ref3","saveNote","isVisible","setIsVisible","noteContent","setNoteContent","Popover","visible","gutter","TextArea","rows","_e$currentTarget","currentTarget","overlayClassName","trigger","showArrow","PlusOutlined","AppPageDocuments","_ref4","contractID","manualReloadCount","pageType","isTransactionDeleted","reloadTransactionStat","HomeCtx","useContext","HomeContext","UserPermission","userPermission","EZTableRef","useRef","isMainMenuTaskTab","docFolders","setDocFolders","docIDsEdit","setDocIDsEdit","fileUploadList","setFileUploadList","taskList","setTaskList","selectedTaskListBulk","setSelectedTaskListBulk","setQueryParams","getDefaultTableParam","docCompletionTypeFilter","setDocCompletionTypeFilter","filterType","setFilterType","isLoadedTemplate","setIsLoadedTemplate","isLoadingLoad","setIsLoadingLoad","docUploadFolderID","setDocUploadFolderID","docFolderFilter","setDocFolderFilter","executeLoading","setExecuteLoading","activeWeblink","setIsWeblink","weblinkTemp","setWeblinkTemp","bulkLinkTasksVisible","setBulkLinkTasksVisible","selectedRowKeys","setSelectedRowKeys","expandedRecordIDs","setExpandedRecordIDs","_handleFileUploadOnTemplate","_ref6","doc_id","_file$response4","_file$response5","_file$response6","file","fileList","u_filename","newFilename","bucket","Bucket","Key","updateDocument","resetPagination","updateOnboardingStep","refetchOnboardingList","f","uid","_hanldeUploadWeblink","fileLink","callbackIsWeblink","callbackTemp","_reloadSubTabData","silentLoading","_fetchTasks","result","_downloadDocument","getPresignedURLDoc","_resp$data2","downloadLegacyDocument","_changeFileType","newContentType","template_type","_EZTableRef$current","current","modifyData","doc_title","_initiateDocuSign","EsignatureModalContent","okButtonProps","cancelText","_showEsignatureModal","_saveDocumentRecord","newData","oldData","_EZTableRef$current2","_executeSignatures","callback","_EZTableRef$current3","last_execute","executeSignature","_columns","dataIndex","sorter","editable","align","documents_toggle","CheckCircleFilled","CheckCircleOutlined","idx","DocFilenameColumn","uploadProps","_deleteFile","_record$doc_notes","_record$doc_notes2","_record$doc_notes3","_record$task_todolist","_record$task_todolist2","_record$task_todolist3","Tooltip","doc_notes","Tag","_expandSelectedRows","MessageOutlined","task_todolists","CarryOutOutlined","review_status","FolderViewOutlined","signatures","S","seller_sign","SA","seller_agent_sign","B","buyer_sign","BA","buyer_agent_sign","date_uploaded","EZSignatureTracker","onSubmit","valueType","fieldProps","item","_item$doc_folder_pref","doc_folder_preference","_record$doc_folder","_record$doc_folder$do","_record$doc_folder2","border","doc_folder","ellipsis","_record$account","_record$account2","fullname","sender_email","EZDateFormat","format","Space","EditFilled","startEditable","Divider","FileSearchOutlined","file_id","Dropdown","overlay","Menu","DownloadOutlined","AuditOutlined","danger","_deleteDocument","DeleteOutlined","FileOutlined","LinkOutlined","placement","preventDefault","EllipsisOutlined","fixed","rowKeys","newRowIDs","rowID","elm","_saveDocNote","note","addNewNote","_record$doc_notes4","_EZTableRef$current4","unshift","deleteConfirmationModal","confirm","update","deleteFile","destroy","deleteDocument","ExpandedRowComponent","_ref8","_record$doc_notes5","_record$task_todolist4","editMode","setEditMode","tasksEditMode","setTasksEditMode","isSubmittingForm","setIsSubmittingForm","selectedTaskList","setSelectedTaskList","paddingLeft","List","itemLayout","dataSource","renderItem","_record$account3","_record$account4","Meta","avatar","Avatar","date_posted","whiteSpace","expandable","notes","italic","InfoCircleFilled","EditOutlined","SaveOutlined","linkDocsToTasks","task","_EZTableRef$current5","tasks","bordered","compl","duedate","EZSelectTask","_onChangeSelectedTaskIDs","selectedTaskIDs","notFoundContent","d","_ref5","_file$response","_file$response2","_file$response3","addNewTransactionDoc","getPresignedURL","getPresignedURLContractDocUpload","_applyFilter","currentWhereFilterParams","getTransactionFolders","_resp$data$","toggle","EZUpload","defaultValue","_handleLoadTemplates","loadTemplates","Spin","_item$doc_folder_pref2","UploadProgress","dragger","InboxOutlined","TRANSACTION_DETAIL","Tabs","defaultActiveKey","addIcon","SettingOutlined","docFolderID","replace","tabBarExtraContent","TabPane","tab","_item$doc_folder_pref3","minWidth","_docFolders$find","_doBulkAction_moveDocs","newFolderID","newFolderTitle","noOfKeys","moveSelectedDocs","setImmediate","items","_item$doc_folder_pref4","DeliveredProcedureOutlined","maxWidth","maxTagCount","_doBulkAction_linkTasks","selectedTasks","Popconfirm","arrowPointAtCenter","onConfirm","_deleteDocuments","deleteDocuments","DeleteFilled","EZTable","ref","pagination","TRANSACTION_LIST","pageSizeOptions","columns","rowKey","fetchData","EZTableQueryParams","getTransactionDocs","some","el","scroll","x","rowSelection","newSelectedRowKeys","alwaysShowAlert","columnWidth","selections","Table","SELECTION_NONE","tableAlertRender","toolBarComponents","expandedRowRender","rowExpandable","expandIcon","_ref7","expanded","onExpand","DownOutlined","RightOutlined","expandedRowKeys","actionRender","__","defaultDom","save","cancel","onSave","saveText","SaveFilled","CloseOutlined","onChangeCallback","_onChangeCallback","EZInputNumber","numberType","min","step","formatter","max","addonAfter","InputNumber","HOTJAR_EVENT_TYPE","hotjarEvent","event","hotjarIdentify","_localStorage$getItem","hotjarActiveDetail","JSON","parse","hotjarUserId","initialized","timeout","clearTimeout","accountCreatedDate","accountCreatedDateDuration","startDate","endDate","isReturnString","_startDate","_endDate","years","months","days","intervalToDuration","start","end","calculateDuration","userDetail","user_type_id","account_type","account_created_date","account_created_date_duration","identify","getAllTeamMembers","SUBSCRIPTION_TYPES","PAID_SUBSCRIPTION_TYPES","MONTHLY_PAID_SUBSCRIPTION_TYPES","ANNUALLY_PAID_SUBSCRIPTION_TYPES","is_paid_plan","is_monthly","is_active","is_annually","getSubscriptionList","getMonthlyPaidSubscriptionList","getAnnuallyPaidSubscriptionList","getAccountDocs","getAccountDocFolders","addNewAccountDocFolder","addNewAccountDoc","docPayload","deleteAccountDocument","updateAccountDocument","moveSelectedAccountDocs","document_ids","accountfolder_id","deleteAccountDocuments","getPresignedURLAccountDocUpload","filePayload","doc_type","mixpanel","init","setPeopleProfile","people","set","$name","$email","PARENT_ACCOUNT_ID","IS_PARENT_ACCOUNT","USER_TYPE_ID","ACCOUNT_TYPE","accountID","toString","alias","set_once","ACCOUNT_ID","set_group","NO_OF_DAYS_REMINDER","Array","from","keys","EditTaskModalContent","taskListMenu","mode","subUsers","contractAddress","taskListMenuInModal","setTaskListMenuInModal","taskID","_setFieldValues","dueDateMoment","moment","utc","resetFields","setFieldsValue","isValid","prio","_data$task_todo_remin","task_todo_reminders","arrBeforeDueDateValues","arrAfterDueDateValues","reminder","day_after_before","day_number","setFieldValue","defaultActiveFirstOption","fieldNames","user","showSearch","optionFilterProp","EZDatePicker","initialValue","Badge","count","orientation","BellFilled","allowClear","reverse","lineHeight","AddTasklistModalContent","tasklistImport","setTasklistImport","taskTabs","setTaskTabs","getTaskTabsDetail","respData","defaultTasklist","_defaultTasklist$defa","defaulttasks","defaultTask","_defaultTask$defaultt","defaulttask_preference","tasklist","_tasklist$defaulttask","defaulttasktab_id","MenuUnfoldOutlined","TASK_EMBEDDED_TYPE","RowContext","createContext","DragHandle","setActivatorNodeRef","listeners","HolderOutlined","cursor","RowTable","attributes","setNodeRef","transform","transition","isDragging","useSortable","CSS","Translate","zIndex","contextValue","useMemo","Provider","AppPageTasks","componentRef","nowMoment","setTaskListMenu","handlePrint","useReactToPrint","documentTitle","taskTypeFilter","setTaskTypeFilter","transactionStatusFilter","setTransactionStatusFilter","taskMenuFilter","setTaskMenuFilter","toggleMyTasks","setToggleMyTasks","toggleAllRows","setToggleAllRows","tableRecordIDs","setTableRecordIDs","isUpdatingTask","setIsUpdatingTask","disableDrag","setDisableDrag","teamMembers","setTeamMembers","transactionTasks","setTransactionTasks","_fetchData","_toggleAllRows","tAllRows","_record$docs","docs","_expandIcon","_fetchTaskListMenu","_saveTaskData","dataIdx","findIndex","assignee_account","assignee","member","copyTask","task_list","_newData$note","_newData$docs","list_id","_saveNewTaskData","_renderPriorityBadge","_deleteTask","_onSaveTask","newDate","newDateMoment","_showAddNewTaskModal","_taskListMenu$","_taskListMenu$2","_showEditTaskDetailModal","uuid","d_created","d_completed","d_edited","ow","tags","tags_ids","defaulttask_id","_record$task_list4","_record$task_list4$co","_record$task_list4$co2","_record$task_list5","editTaskDetailModal","contract","address","validateFields","formValues","_showAddNewTasklistModal","newTasklistModal","tasklistName","taskListRecord","_record$note","_record$docs2","setNote","docsEditMode","setDocsEditMode","setDocList","selectedDocList","setSelectedDocList","_saveSelectedDocs","selectedDocs","_linkTaskToDocs","tasks_toggle","EZSelectDocument","_onChangeSelectedDocIDs","selectedDocIDs","dom","classList","add","renderFormItem","schema","entity","onPressEnter","element","newTaskTitle","cancelEditable","suffix","EnterOutlined","_record$task_list6","_record$note2","_record$note3","_record$note4","_record$docs3","_record$docs4","_record$docs5","CloudServerOutlined","TaskEmailModalContent","taskRecord","okType","_openTaskEmailModal","MailOutlined","currentYear","getFullYear","hour","minute","second","millisecond","isDue","isBefore","clone","startOf","isWithin2Weeks","isBetween","subtract","textType","diff","dueDateFormat","year","customText","humanize","noTimezone","memberDetail","hideInTable","FieldTimeOutlined","_doActionTaskMenu","menuKey","tmp","splice","_record$task_list7","_record$task_list7$co","_record$task_list8","_record$task_list8$co","_record$task_list9","_record$task_list9$co","_record$task_list","_record$task_list2","_record$task_list2$co","_record$task_list3","openTransactionDetailTab","TAB_CATEGORY","TASK","_openNewTab","underline","city","taskMenuListKey","ACTIVE_STATUS_IDS","endOf","_HomeCtx$userInfo","userInfo","_ref9","MAIN_MENU","Segmented","EZSelectStatus","showAllActiveStatusesOpt","onEdit","onEditTaskTabs","activeKey","taskListItem","deletionConfirmationModal","_showDeleteTasklistConfirmationModal","CaretDownOutlined","InfoCircleOutlined","fontSize","DndContext","modifiers","restrictToVerticalAxis","onDragEnd","over","prevState","activeIndex","overIndex","seen","Set","currentObject","payloadDuplicate","bulkUpdateTaskTransaction","tempTask","cloneDeep","arrayMove","SortableContext","strategy","verticalListSortingStrategy","components","body","row","showExpandColumn","checkedChildren","EyeInvisibleOutlined","unCheckedChildren","EyeOutlined","checked","PrinterOutlined","deletePopconfirmMessage","deleteText","onDelete","generateDocuSignAuthURL","getDocusignAccountInformation","processDocusignLogout","getTransactionContacts","ModalEditAdditionalContact","contact","contactRoles","isModalVisible","setIsModalVisible","reloadSubTabData","isEditMode","contact_id","submittingData","setSubmittingData","_resetModalStates","submit","onCancel","confirmLoading","bodyStyle","overflowY","_contactRoles$find","role_id","role","updateTransactionContact","sub_tab","addNewTransactionContact","setTriggerRefetchDataList","prev","EZSelectContactRole","onAddNewRole","_onAddNewRole","EZAutocompleteParty","onSelect","_onSelectName","opt","omitBy","pick","isNil","EZAutocompleteCity","EZSelectUSState","colLabelSpan","colValueSpan","rowFormViewGutter","GeneralInformationSection","_transactionData$cont26","_transactionData$cont27","_transactionData$cont28","_transactionData$cont29","_transactionData$cont30","_transactionData$cont31","_transactionData$cont32","_transactionData$cont33","_transactionData$cont34","_transactionData$cont35","_transactionData$cont36","_transactionData$cont37","_transactionData$cont38","_transactionData$cont39","_transactionData$cont40","_transactionData$cont41","_transactionData$cont42","_transactionData$cont43","_transactionData$cont44","_transactionData$cont45","_transactionData$cont46","_transactionData$cont47","_transactionData$cont48","_transactionData$cont49","_transactionData$cont50","setIsEditMode","contingency_dates","contract_date_additionals","date_additional_id","date_name","val_date","_transactionData$cont16","_transactionData$cont17","_transactionData$cont18","_transactionData$cont19","_transactionData$cont20","_transactionData$cont21","_transactionData$cont22","_transactionData$cont23","_transactionData$cont24","_transactionData$cont25","_transactionData$cont2","_transactionData$cont3","_transactionData$cont4","_transactionData$cont5","_transactionData$cont6","_transactionData$cont7","_transactionData$cont8","_transactionData$cont9","_transactionData$cont10","_transactionData$cont11","_transactionData$cont12","_transactionData$cont13","_transactionData$cont14","_transactionData$cont15","marketedprice","contract_price","rentalprice","credits","application_date","contract_date","lease_signed_date","lease_start_date","lease_end_date","move_in_date","year_built","lease_term","listprice","salesprice","cccredit","deposits","effective_date","close_date","listing_date","listing_live_date","expiration_date","inspection_contingency_date","appraisal_contingency_date","financing_contingency_date","isDeleted","isArchived","is_archived","_formValues$contingen","formValuesFormatted","updateTransactionDetail","EZCurrencyFormat","thousandSeparator","prefix","displayType","dateAdditional","Fragment","textTransform","fields","remove","restField","hidden","MinusCircleOutlined","originData","telephone","telephone2","fax","company","zip","commission","OptGroup","EditableCell","editing","inputType","customInputNode","onKeyDownFunc","restProps","inputNode","onKeyDown","ModalEditTransactionParty","modalTitle","listName","listPrimaryID","listFullnameColumnName","dataList","hasCommission","submittingDataKeys","setSubmittingDataKeys","editableKeys","setEditableKeys","recordList","setRecordList","isEditing","eKey","isSubmitting","_onKeyDown","_save","_form$getFieldsValue","getFieldsValue","updateTransactionParty","keyRecordObjIndex","r","tablePrimaryIDName","errInfo","CommissionCustomInput","commissionType","setCommissionType","commission_amount","commission_rate","_onChangeComission","commissionFieldType","controls","precision","commissionColumns","EZNumberFormat","mergedColumns","text","copyable","hideFromTable","_cancel","commission_type","_edit","deleteTransactionParty","_delete","stopPropagation","c","col","_column","onCell","_resetDataList","dtList","_record$listPrimaryID","onValuesChange","_onValuesChange","changedValues","_Object$keys","cell","rowClassName","footer","_addNewRow","getTime","partiesSectionDefaultStyle","PartyComponent","recordColumnName","listLabel","seeAllLabel","setModalTitle","openPartyModal","useMarketedPrice","_openPartyModal","isEdit","EZCopyable","CommissionInfo","commission_base","ifEmptyText","PartiesSection","setListName","setListFullnameColumnName","setListPrimaryID","section2RowGutter","CustomFieldComponent","categoryObject","fieldObject","fieldName","additional_info_fields_category_id","additional_info_field_id","momentObj","hours","newname","optObj","CustomFieldCategory","_categoryObject$categ","_categoryObject$contr","setIsSubmitting","_saveFieldsChange","categoryFieldValuesObj","_categoryFieldValuesO","updateCustomFieldsByCategory","CustomFieldsSection","section1RowGutter","defaultQueryParams","EZSelectContact","marginBottomHeaderTitle","GreenSheetEditModalContent","additionalContacts","onSelectTitlecoContact","onSelectLendercoContact","onClear","additionalContact","_additionalContact$co","contact_role","contactname","_additionalContact$co2","Radio","Group","Panel","Collapse","_subTabs","tabContent","setIsLoadingSubTabData","setTransactionData","displayLoadingIndicator","getTransactionDetail","_transactionDataTemp$","transactionDataTemp","refreshCounter","setRefreshCounter","activeTabKey","setActiveTabKey","EMAIL_TAB","EMAIL_LIST","hideAdd","Partial_EmailLogs","editLogDetail","emailLog","editLogDetailModal","Partial_EmailForm","onSendEmail","_onSendEmail","cancelButtonProps","autoFocusButton","selectedContact","setSelectedContact","setContactRoles","isModalEditContactVisible","setIsModalEditContactVisible","_reloadContactRoles","_deleteSelectedContact","deleteTransactionContact","_record$contact_role","email2","contacts_toggle","_editSelectedContact","AppPageNotes","NOTE_EMBEDDED_TYPE","_greensheet$titleco_c","_greensheet$titleco_c2","_greensheet$titleco_c3","_greensheet$titleco_c4","_greensheet$lenderco_","_greensheet$lenderco_2","_greensheet$lenderco_3","_greensheet$lenderco_4","isLoadingTransactionDetail","setIsLoadingTransactionDetail","isSavingGreensheetSetting","setIsSavingGreensheetSetting","greensheet","setGreensheet","isRental","setIsRental","isEditModalOpen","setIsEditModalOpen","contactOptions","setContactOptions","all","getGreensheet","_reloadTransactionDetail","triggerRefetchDataList","hasTriggerRefetchData","newTriggerRefetchDataList","show_additional_info","updateGreensheet","contactID","_formValue","titleco_contact_id","titleco_company","titleco_address","titleco_fax","titleco_email","titleco_mobile","lenderco_contact_id","lenderco_company","lenderco_address","lenderco_fax","lenderco_email","lenderco_mobile","shape","contract_status","mis","escrow","contract_property_type","type_name","TransactionSalesType","sale_types_id","flag_id","FlagTwoTone","twoToneColor","contract_flag","flag_color","StopOutlined","flag","contract_tenants","rowSpan","tenant_name","direction","join","contract_landlords","landlord_name","contract_referral_sources","referral_source_name","contract_leasing_agents","leasing_agent_name","contract_buyers","buyer_name","contract_sellers","seller_name","contract_buyer_agents","agent_name","contract_seller_agents","broker_name","titleco_contact","titleco_closing_officer","titleco_office_num","lenderco_contact","lenderco_cash_deal","lenderco_loan_officer","lenderco_office_num","EZOverlaySpinner","EZList","paginationConfig","getTransactionNotes","EZQueryParams","_record$posted_accoun","_record$posted_accoun2","SnippetsOutlined","posted_account","DefaultTransactionQuickStat","taskStatInfo","incomplete","complete","documentStatInfo","noteStatInfo","ChangeSubTabLayoutElm","subTabLayout","setSubTabLayout","generateTaskBadge","transactionQuickStat","hasIncompleteRecords","generateDocBadge","generateNoteBadge","ViewDetailTransaction","_transactionData$acco","_transactionData$assi","addTab","tabKey","setManualReloadCount","subTabs","permission","t","notes_toggle","getTabsByPermission","isLoadingSubTabData","setTransactionQuickStat","isModalEditTransactionInfoVisible","setIsModalEditTransactionInfoVisible","showLoadingProgress","detailType","_reloadTransactionStat","getTransactionQuickStats","_resp$data3","_resp$data4","_resp$data5","_resp$data6","_resp$data7","_resp$data8","_resp$data9","_resp$data10","_resp$data11","incomplete_task_count","complete_task_count","incomplete_doc_count","complete_doc_count","email_msg_count","contract_note_count","_getTransactionEmailAddress","moreActions","CopyOutlined","FolderOpenOutlined","ContainerOutlined","UndoOutlined","ModalEditTransactionInfo","reloadTransactionDetail","placeItems","Ribbon","Descriptions","column","extra","ReloadOutlined","backupConfirmationModal","requestTransactionBackup","duplicateConfirmationModal","duplicateTransaction","setActiveTabByButton","tabIcon","TransactionTabIcon","closeable","tooltip","tabCategory","TRANSACTION","isMainMenu","recordId","subTabKey","archiveConfirmationModal","archiveTransaction","_HomeCtx$closeTab","closeTab","call","unArchiveTransactionModal","unArchiveTransaction","_HomeCtx$closeTab2","undeleteConfirmationModal","unDeleteTransaction","_HomeCtx$closeTab3","deleteTransaction","_HomeCtx$closeTab4","assigned_accounts","_account$accountrole","paddingRight","CLICK_TRANSACTION_TASKS","scrollY","scrollTo","subTab","currentTab","right","isActive","CaretRightOutlined","rotate","BackTop","getEmailSignatures","addNewEmailSignature","signature_name","editEmailSignature","email_signature_id","deleteEmailSignature","getLoggedAccountData","getMyPermission","updateMyAccountData","changePassword","getTransactionEmailNotes","updateContactNote","note_id","deleteContactNote","deleteContactEmailNote","m_id","DefaultMeStrOptions","DefaultMeOptions","v","DefaultTransactionStrOptions_Listing","DefaultTransactionStrOptions_Rental","DefaultTransactionOptions","DefaultAdditionalContactStrOptions_Roles","hasTeamMemberAPIBeenCalled","EZSelectEmailRecipient","showTransactionOptions","showMe","opts","selectOpts","setSelectOpts","groupLabel","results","Search","forwardRef","_pagination$position","_pagination$position2","disableNativeSearch","setData","setLoading","useAjax","setPagination","assign","keyword","setKeyword","sort","setSort","_callFetchData","_queryParams$orderPar","_params$pagination","_params$pagination2","arrOrderParams","sortOrder","sortField","order","where","whereFilter","WebPaginationSetting","_response$pagination","_response$pagination2","newTotal","newTotalFiltered","totalFiltered","_reload","_triggerUpdateKeywordDelayed","debounce","newKeyword","useImperativeHandle","idValue","deleteByKey","replaceRecords","_refetch","ProTable","actionRef","showSorterTooltip","onDataSourceChange","_handleTableChange","newPagination","filters","density","toolBarRender","_e$target","defaultSaleTypes","SALE_TYPES","hasSettingAPIBeenCalled","saletype_name","_defaultSaleTypes$fin","_SALE_TYPES$find","iSales","sale_type_id","EZSelectSaleType","setOptions","getSaleTypeSetting","preferenceObj","saleType","s","sale_type_name","checkEmailCredential","emailCredential","now","emailIntegrationErrCode","emailIntegrationIsSet","relay_type_id","SENDMAIL_ONBEHALF","GMAIL","google_access_token","google_rt_expires_in","EMAIL_INTEGRATION_ERR_CODE","GOOGLE_REFRESTOKEN_EXPIRED","RELAY_TYPE_IS_UNSET","MS_365","ms_access_token","ms_rt_expires_in","MS365_REFRESHTOKEN_EXPIRED","CUSTOM_SMTP","smtp_outgoing_server","smtp_outgoing_username","isEmailIntegrationSet","getLogs","getNotificationInfo","sendEmail","EmailLogModalContent","_emailLog$relayed_by_","_emailLog$msg_to","_emailLog$msg_cc","_emailLog$msg_bcc","_emailLog$docs","_activeEmailLog$contr","_activeEmailLog$task_","_activeEmailLog$updat","_activeEmailLog$accou","activeEmailLog","setActiveEmailLog","checkingActiveDraft","setCheckingActiveDraft","messageId","message_id","getEmailLogDetail","hasOwnProperty","_emailLog$msg_body","msg_body","replaceAll","relayed_at","relayed_by_account","msg_sender","msg_subject","msg_to","msg","startsWith","msg_cc","msg_bcc","EmailEditorFormItem","readOnly","hideToolbar","hideToolbarInsertCode","task_todolist","updated_by_account","updated_at","created_at","contractTaskID","UserInfo","setContactroles","contract_task_id","$and","$or","is_draft","_record$msg_to","_record$relayed_by_ac","_record$relayed_by_ac2","_record$updated_by_ac","_record$updated_by_ac2","_showLogDetailModal","deleteEmailDraft","_deleteMessageLog","verticalAlign","roles","enUS","getEmailLogs","_showNewEmailForm","SendOutlined","EmailIntegrationIndicator","setEmailCredential","isEmailCredentialSet","setIsEmailCredentialSet","setEmailIntegrationErrCode","getMyEmailCredential","emailCredentialTemp","checkResult","google_email","ms_email","_activeEmailLog$email","_activeEmailLog$email2","loadingLogDetail","setLoadingLogDetail","isFailedSendEmail","setIsFailedSendEmail","_sendEmail","isNotPreview","_payload","_payload2","updateEmailDraft","createEmailDraft","sendEmailByEmailLogID","_payload3","emailLogResponse","_emailLogResponse$doc","_emailLogResponse$doc2","setFields","validating","Partial_EmailTemplateFormItems","onSelectTemplate","emailTemplate","email_template","showAttachmentField","template_note","_saveAsDraft","noteRecord","modal","contextHolder","useModal","noteType","setNoteType","_saveNote","actions","_deleteNote","_deleteEmailNote","msg_date","wrapClassName","_showEmailBody","UserContextProvider","openProspectDetailTab","openMainTab","isOnboadingLoading","_taskRecord$task_list","COMPOSE_TAB","_fetchActiveLinkedDraftByTaskID","skipTemplate","getEmailLogDetailByTransactionTaskID","message_log_id","CacheEnum","saveObjectToLocalStorage","getObjectFromLocalStorage","_localStorage$getItem2","capitalize","slice","replaceSpecialChar","trimmer","replaceAllData","getDataByKey","_generatePaginationLabel","filteredFrom","_changePagination","Quill","import","EZRichTextEditor","forwardedRef","showTemplateDropdown","reactQuillRef","getEditorInstance","_reactQuillRef$curren","getEditor","defaultToolbar","container","list","indent","handlers","chooseTemplateDropdown","_reactQuillRef$curren2","quill","cursorPosition","getSelection","insertText","setSelection","modules","toolbar","_document","_document$querySelect","prototype","querySelectorAll","textContent","dataset","querySelector","innerHTML","ReactQuill","theme","EditTransactionFormContent","EZSelectPropertyType","EZSelectFlag","setSubUsers","SubmittingData","SetSubmittingData","_setFormFieldsValue","formPayload","type_id","assign_to_account_ids","assign_to_accounts","u","su","getAlertSetting","getPropertyStatusSetting","getPropertyTypeSetting","getContractCustomFields","updateAlertSetting","section","sub_section","updateTransactionSetting","property_status","property_types","sale_types","updateDefaultTaskTabData","bulkUpdateDefaultTaskPositions","arrTaskIDsOrder","bulkUpdateCustomFieldPositions","arrCustomFieldIDsOrder","updateDefaultTaskData","addNewDefaultTaskTab","addNewDefaultTaskData","deleteDefaultTask","deleteDefaultTaskTab","duplicateTaskTemplate","addNewContractCustomSection","updateContractCustomSection","deleteContractCustomSection","addNewContractCustomField","updateContractCustomField","deleteContractCustomField","updateDropdownOption","getDocumentFolders","addNewDocumentFolder","addNewDocumentTemplate","updateDocumentFolder","updateTemplateData","docs_template_id","deleteDocumentFolder","deleteDocumentTemplate","getSubUsers","addNewSubUser","updateSubUser","deleteSubUser","resendInvitation","getSubUserPermission","getMaxNumberOfSubUsers","updateSubUserPermission","addNewOffice","updateOffice","office_id","deleteOffice","getOnboardingList","updateOnboardingCompleted","AddNewProspectModal","onSuccess","addNewProspect","prospect","prospect_id","EditProspectFormContent","PHONE_CATEGORY_OPTS","setIsBuyer","groups","setGroups","flags","setFlags","followupCodes","setFollowupCodes","getProspectMetaOptions","resolveValues","_flag$prospects_defau","_flag$prospects_defau2","prospects_default_flag","ModalEditProspectInfo","prospectData","setProspectData","reloadProspectDetail","registrationDateteMoment","registration_date","prospects_last_visit_date_idMoment","prospects_last_visit_date_id","group_id","followup_id","updateProspectDetail","validateEmailTemplateRecipients","recipientTagValue","test","formMode","excludedTemplateIDs","Mentions","onKeyPress","isRequired","showEmailSignatureDropdown","FreshworksWidget","Header","Content","Footer","Layout","register","CodeTemplateMarker","QuickSearch","isModalOpen","setIsModalOpen","SearchOutlined","destroyOnClose","EZSelectTransaction","autoFocus","_onSelect","selectedLabel","QuickActionAddButtons","isModalAddTransactionOpen","setIsModalAddTransactionOpen","isModalAddProspectOpen","setIsModalAddProspectOpen","_quickButtonMenuAction","ProspectTabIcon","NewTransactionModal","_queryParameters$get","_queryParameters$get2","_queryParameters$get3","queryParameters","tabsUrl","idUrl","subTabsUrl","_generateNewTabIndex","defaultTabs","MAIN_TAB_INSTANCES","UserData","setUserData","setUserPermission","setIsOnboadingLoading","_activeTabByButton","_setActiveTabByButton","firstRender","setFirstRender","hasAccessToAdminArea","_appTabs","_setAppTabs","defaultTab","tabCloseable","fetchOnboardingList","learner","MSInstance","_logout","clearLocalStoragePayload","_openMainMenuTabByKey","menuTab","CLICK_TASKS_MENU","_handleChangeMenuTab","selectedMenu","activeTab","_addTab","shiftFocus","hasPermission","newPanes","triggered_from","origin","_openTransactionDetailTab","contractData","tabTitle","activeTransactionRecordTab","targetKey","newActiveKey","lastIndex","pane","fetchTransactionDetailViaUrl","useCallback","selectedTab","_appTabs$find","splitActiveTabKey","getAddrressFromId","pathname","delete","_data$account_id","custom_fields","cf_account_id363837","google_last_issued","updateEmailCredential","google_refresh_token","requestNew3rdPartyEmailAccessToken","captureException","ms_last_issued","ms_refresh_token","_checkEmailCredential","_openProspectDetailTab","prospectID","prospectName","activeProspectDetailTab","PROSPECT","ProspectDetail","mainTab","EZOnboardingButton","defaultSelectedKeys","WEB_APP_MAIN_MENU","HomeNotification","QuestionCircleOutlined","MY_PROFILE","ADMIN_SETTING","overflowWrap","wordBreak","inlineSize","getAccountRole","LogoutOutlined","_onEdit","animated","UpOutlined","AppstoreOutlined","appTabs","isCurrentTabActive","showFeedback","allowedAccess","YES","VIEW_ONLY","FULL_ACCESS","isAllowed","SUMMARY","CALENDAR","REPORT","ADDRESS_BOOK","DOC_LIBRARY","DOC_REVIEW","assigntasks_toggle","EMAIL","emails_toggle","accountRoleID","LoginSocialGoogle","_loginWithGoogle","useGoogleLogin","tokenResponse","scope","exchangeGoogleOauthCodeForLogin","flow","redirect_uri","getAllTransactions","list_type","getTransactionParties","partyType","party_type","detail_type","getQuickStatByContractIDs","contract_ids","addNewTransaction","ADD_NEW_TRANSACTION","LOAD_TEMPLATES","party_id","category_id","tolt","tolt_referral","steps","CredentialForm","EZInputMasked","mask","SubscriptionForm","selectedSubscription","promoCode","selectedUserTypeId","selectedArraySubscription","_selectedArraySubscri","chargify_handler","sub","plan_name_with_price","CreditCardOutlined","m","VerifyMessage","isSubmittingData","setIsSubmittingData","verifyCode","verificationCode","verifyConfirmationCode","signup","resendVerificationEmail","currentStep","setCurrentStep","isValidatingStep","setIsValidatingStep","setFormValues","_processForm","updatedFormValues","newStep","checkAccountEmail","available","registerNewAccount","Steps","Step","_prevStep","_nextStep","doc_list","read_mode","bulk","getDocNotes","generateDocuSignEnvelope","emailSubject","emailBlurb","recipients","setCell","isModified","setIsModified","wrap","popoverText","classNameCustom","AddNewFolderContent","whitespace","RegExp","FolderAddOutlined","DocumentLibraryTab","hasFullAccessPermission","_fetchDocFolders","_record$accountfolder","accountfolder","document_id","_onSuccess","_docFolders$find2","SubTab_EmailTemplates","_fetchTemplateFolders","folders","myFolders","foldersOwnedByOthers","folder","setTemplateFolders","setShowGenerateFolderTemplates","templateFolders","templateFolderFilter","setTemplateFolderFilter","showGenerateFolderTemplates","TeamOutlined","_record$email_templat","_record$email_templat2","email_template_folder","template_desc","_showEditTemplateDetailModal","_deleteTemplate","editTemplateDetailModal","EditEmailTemplateModalContent","formParams","emailTemplateRecord","_showAddNewOrEditFolderModal","newFolderModal","folderRecord","BulbOutlined","_confirmGenerateDefaultFolders","generateDefaultFoldersConfirmationModal","_onEditFolderTabs","folderItem","_folderItem$account","UsergroupDeleteOutlined","confirmationModal","_showShareOrUnshareConfirmationModal","_showDeleteFolderConfirmationModal","overlayStyle","_templateFolders$find","_doBulkAction_moveTemplates","isSharedByOther","setIsSharedByOther","emailTemplateTemp","emailTemplateDetail","setTabKey","_defaultTasklist$defa2","_defaultTasklist$defa3","defaulttasktab_preference","CheckOutlined","defaultChecked","marginLeft","Embed","node","super","setAttribute","colour","marker","codeTitleInnerSpan","createElement","codeValueSpan","appendChild","getAttribute","blotName","tagName","exchangeMSOauthCodeForLogin","addNewProspectTask","updateProspectTask","EditProspectTaskModalContent","DatePicker","updateProspectContact","ModalEditAdditionalProspectContact","updateProspectDocument","_prospectDetail$quest3","_prospectDetail$quest4","_prospectDetail$quest5","_prospectDetail$quest6","formLookingFor","formHouseholdProfile","prospectDetail","setProspectDetail","lookingFor","householdProfile","_onFinish","_prospectDetail$quest","accordion_id","questions","questionList","q","_values","question","question_id","updateProspectQuestionValues","questionListWithAnswer","getProspectDetail","_prospectDetail$quest2","questions_1","questions_2","_question$prospects_q","prospects_questions_value","prospects_questions_options","_question$prospects_q2","_question$prospects_q3","_question$prospects_q4","option_id","_question$prospects_q5","_question$prospects_q6","_question$prospects_q7","reloadProspectStat","_fetchtaskListMenu","getProspectTaskLists","deleteProspectTask","additionalColumns","_record$prospects_tas","prospects_task_list","taskMenuListID","taskListID","getProspectTasks","alertnumdays","prospects_defaulttask_id","_record$uploadedby_ac","_record$uploadedby_ac2","uploadedby_account","deleteProspectDocument","getPresignedURLProspectDocUpload","getProspectDocs","updateProspectNote","deleteProspectNote","getProspectNotes","deleteProspectContact","_record$contact_compa","contact_company","getProspectContacts","_prospectData$prospec","_prospectData$prospec2","_prospectData$prospec3","_prospectData$prospec4","_prospectData$prospec5","isBuyer","isLoadingProspectDetail","setIsLoadingProspectDetail","prospectQuickStat","setProspectQuickStat","isModalEditProspectInfoVisible","setIsModalEditProspectInfoVisible","_reloadProspectDetail","_reloadProspectStat","getProspectQuickStats","prospect_note_count","archiveProspect","_doActionDetailMenu","prospects_phones","phone","country","prospects_followupcode","prospects_group","group_name","EZOnboardingListContent","onboardingList","onSelectOnboading","onClose","_key","_completedContent$lef","_completedContent$lef2","_completedContent$lef3","_completedContent$rig","_completedContent$lef4","_completedContent$rig2","_completedContent$rig3","stepList","countStepCompleted","onboarding_step_completed","countSteps","stepProgress","allStepComplated","every","completedContent","leftButton","rightButton","generateOnboardingCompletedContent","prevStepList","prevStepCompleted","borderColor","Progress","percent","showInfo","stepCompleted","CheckCircleTwoTone","CustomImage","Image","MarkdownRenderer","ReactMarkdown","img","rehypePlugins","rehypeRaw","EZOnboardingDetailModal","isOpen","defaultOnboardingDetail","is_admin_area","is_team_only","isPopoverOpen","setPopoverOpen","selectedOnboarding","setSelectedOnboarding","isAlwaysOpenPopover","differenceInWeeks","handlePopoverToogle","_onboardingList","isEmpty","bottom","AppActivities","_record$contract","AppMyInbox","notificationInfo","docReview","DocReviewTabIcon","NotificationPopOver","setNotificationInfo","_fetchNotificationInfo","intervalId","setInterval","clearInterval","BellOutlined","DocusignIntegrationIndicator","docusignCredential","setDocusignCredential","_fetchCredentials","docusign_email","viewerURL","setViewerURL","_generateDocuSignViewerURL","formValuesParam","recipient","InterfacePort","notificationMessage","getAuth","port","signUpUser","Authorization","username","google","facebook","microsoft","promo_code","organization_size","getSummaryData","summaryType","date_start","date_end","browser_ts","RangePicker","rowGutter","rowGutterChild","defaultTransactionSummaryData","transactionStatsByStatus","comissionStats","listingPrices","closingTransactions","expiringTransactions","defaultDueTasksSummaryData","dueTasksStat","SummaryTab","_filterRangeDate$","_filterRangeDate$2","_summaryData$listingP","_summaryData$comissio","_summaryData$closingT","_summaryData$expiring","_summaryDueTasksData$","activeDate","loadingTransactionStats","setLoadingTransactionStats","loadingDuetasksStats","setLoadingDuetasksStats","filterRangeDate","setFilterRangeDate","summaryData","setSummaryData","summaryDueTasksData","setSummaryDueTasksData","_reloadSummaryData","unix","_data$transactionStat","_data$comissionStats","_data$listingPrices","_data$closingTransact","_data$expiringTransac","_summaryResponseData","_data$dueTasksStat","summaryBuyerCategory","_summaryData$transact","tempData","summaryListingsCategory","_summaryData$transact2","summaryRentalCategory","_summaryData$transact3","newRange","_newRange$","_newRange$2","_changeDateRangeFilter","summaryBasedCategory","listingPriceItem","comissionItem","closingTransactionItem","expiringTransactionItem","dueTaskStatItem","TaskListTab","LastScrollYPosition","transactionDateTypes","_initialQueryFormValue","order_by","order_direction","transaction_date_type","transaction_date_range","price_type","price_type_minimum","price_type_maximum","flag_types","buyers","sellers","buyer_agents","seller_agents","TransactionList","searchKeywordElement","isShiftKeyPressed","setIsShiftKeyPressed","toggleAdvanceFilter","setToggleAdvanceFilter","transactionByPriceMin","setTransactionByPriceMin","_onClick","_record$contract_stat","_record$contract_stat2","_record$contract_flag","total_task_count","total_doc_count","total_note_count","_record$contract_date","_record$contract_date2","_record$contract_date3","_record$contract_date4","_record$contract_date5","_record$contract_date6","_record$contract_date7","_record$contract_date8","_record$contract_date9","_record$contract_date10","_record$contract_pric","_record$contract_pric2","_record$contract_pric3","_record$contract_pric4","_record$contract_pric5","_record$contract_pric6","_record$contract_pric7","_record$contract_tena","_record$contract_land","party","EZPopupable","emptyLabel","_record$contract_refe","_record$contract_leas","_record$contract_pric10","showCommission","_record$contract_pric11","_record$contract_pric8","_record$contract_pric9","_setTransactionDateFilterParam","_transaction_date_ran","_transaction_date_ran2","_setTransactionPriceFilterParam","toNumber","_removeExistingParams","_updateTableQuery","elmName","_queryParams$orderPar2","useAdvanceFilterOptions","_triggerUpdateTableQueryDelayed","_searchKeywordElement","autoFocusEnabled","focus","showArchivedFilterOpt","showDeletedFilterOpt","compact","listHeight","_value$","_value$2","borderLeft","borderRight","pointerEvents","EZSelectParty","placeholderOnFocus","defaultPlaceholder","optionLabelProp","tabIndex","onKeyUp","altKey","metaKey","_checkShiftKeyIsPressed","respQuickStatRecords","quickStatRecords","completeTaskCount","totalTaskCount","completeDocCount","totalDocCount","totalNoteCount","ProspectTab","listRef","_viewProspectDetail","_HomeCtx$openProspect","generateDefaultQuestions","_listRef$current2","fieldValue","_resetFilter","records","getProspectQuickStatsByIDs","respQuickStats","_listRef$current","stat","correspondingRecord","quickStat","priceRange","getAllProspects","_record$prospects_pho","_record$quickStat","_record$quickStat2","_record$quickStat3","_record$quickStat4","_record$quickStat4$do","_record$quickStat5","_record$quickStat5$do","_record$quickStat6","_record$quickStat6$no","_record$quickStat7","_record$quickStat7$no","PicLeftOutlined","PhoneOutlined","SolutionOutlined","ModalEditAddressBook","_roles$find","AddressbookTab","setRoles","_record$role","DirectoryTree","Tree","REVIEW_STATUS","review_label","tag_color","BROKER_FLAG","TRANSACTION_FLAGS","createRevewStatusTag","_REVIEW_STATUS2","applyTagColor","_REVIEW_STATUS","DocNotesDrawer","_selectedDoc$doc_note","_selectedDoc$doc_note2","selectedDoc","notesCount","setNotesCount","isDrawerOpen","setIsDrawerOpen","Drawer","_onDrawerClose","_addNewNote","trimmedNote","DocPreview","selectedDocToPreview","SendEmailForm","emailPayload","onFormFinish","_emailPayload$recipie","_onSelectRecipient","recipientEmails","MemoizedDocPreview","DocumentReviewTab","_selectedDoc$account","isFetchingContracts","setIsFetchingContracts","isFetchingDirNodes","setIsFetchingDirNodes","isFetchingSelectedFile","setIsFetchingSelectedFile","currentContract","setCurrentContract","contractsToReview","setContractsToReview","docTreeNodes","setDocTreeNodes","setDocs","setSelectedDoc","setSelectedDocToPreview","_updateDirTreeNode","_parentNode$children","docNode","child","_onReviewStatusChange","newReviewStatus","reviewStatusNote","_changeReviewStatus","treeNodes","doc_1","isLeaf","FileDoneOutlined","contractsToReviewResp","selectedContract","_changeCurrentContract","new_flag_id","_currentContract$cont","_currentContract$cont2","_confirmContractStatusChange","_showSendEmailForm","_currentContract$assi","sender","subject","emailModalInstance","_values$recipients","multiple","autoExpandParent","defaultExpandedKeys","defaultCheckedKeys","_docOnSelect","treeData","ChangePasswordComponent","isSavingPassword","setIsSavingPassword","hint","setHint","hintResp","LockOutlined","showModal","handleCancel","current_password","new_password","SafetyOutlined","MyProfileTab","_subscriptionList$fin","isSavingProfile","setIsSavingProfile","isFetchingAccountData","setIsFetchingAccountData","userData","subscriptionList","respUserData","plan_name","date_modified","toggleDropdownElementByCustomFieldID","fieldID","show","dropdownElementDiv","CustomFieldSetting","isFetchingSections","setIsFetchingSections","sections","setSections","formItemProps","_record$contract_addi","_deleteSection","_saveSectionData","newRecordData","modifySectionData","sectionID","categoryID","categoryIndex","deleteSection","_saveNewSection","addNewSection","DropdownFieldComponent","contract_additional_info_options_temp","obj","dropdown_options","evt","_evt$target$value","newOption","DataTypeFieldComponent","tempFieldType","NewFieldForm","sectionFields","setSectionFields","setVisible","_ref10","CodeOutlined","_ref11","editableKeysField","setEditableKeysField","_saveFieldData","_ref12","updatedFieldResult","modifyFieldData","fieldIndex","_deleteSelectedField","deleteField","expandedTableColumns","_moveDown","tempTaskRecord","_moveUp","fullScreen","setting","_newData$contract_add","_newData$contract_add2","_newData$contract_add3","keyItem","originRow","newLineConfig","tableLayout","AlertSetting","alertBeforeDates","setAlertBeforeDates","expired_date","contingency_date","isAlertEditMode","setIsAlertEditMode","alertSetting","close_days","expiration_days","contingency_days","alert_before_close_date","alert_before_expired_date","alert_before_contingency_date","past_close","past_expiration","past_contingency","newtransactions","newdocuments","newquedocuments","activestatus","AUTO_DUEDATE_NAMES_BASIC","TaskSetting","isFetchingTaskTabs","setIsFetchingTaskTabs","taskTabsBuffer","setTaskTabsBuffer","emailTemplateFolders","setEmailTemplateFolders","dateAlertGroupOptions","setDateAlertGroupOptions","dateAlertOptionsFlatten","setDateAlertOptionsFlatten","_record$defaulttaskta","_saveTaskTabData","_record$defaulttasks","_deleteSelectedTaskTab","addNewTaskTab","taskTabData","TaskTab","modifyTaskTabData","taskTabID","taskTabIndex","taskListIndex","deleteTaskList","editableKeysTask","setEditableKeysTask","tabTasks","setTabTasks","taskIndex","_saveNewTask","defaulttask_id_dummy","position_order","taskData","modifyTaskData","_tabTasks$taskIndex","_taskIndex$defaulttas","defaulttasksalert","num_days","before_after","date","defaulttasks_preference_id","taskColumns","_tabTasks$index$posit2","_tabTasks$position_or2","tempPositionOrder","_tabTasks$index$posit","_tabTasks$position_or","_entity$defaulttask_p","_config$entity$defaul","_record$defaulttasksa","_record$defaulttasksa2","_record$defaulttasksa3","_record$defaulttasksa4","colSpan","_config$entity$defaul2","_record$defaulttasksa5","_record$defaulttasksa6","_record$defaulttasksa7","_config$entity$defaul3","filterOption","_record$defaulttasksa8","_record$defaulttasksa9","_record$defaulttasksa10","dateName","_record$defaulttasksa11","_record$defaulttasksa12","_record$defaulttasksa13","_folder$account","_folder$email_templat","email_templates","y","_deleteSelectedTask","CheckSquareOutlined","customSections","customSectionsGroupOpts","customSection","customSectionOpts","ii","fieldCategoryID","generateCustomFieldDateValue","gOpts","flat","expandRowByClick","Folder","folderDoc","setfolderDoc","docs_templates","deleteTemplate","templateDocIndex","docs_template_iddummy","docs_template_name","_saveTemplateData","template","_deleteSelectedTemplate","DOC_IDS_FIXED","DocFolderSetting","isFetchingDocFolders","setIsFetchingDocFolders","_record$doc_folder_pr","_toggleDoc","_record$doc_folder_pr2","_config$entity$doc_fo","_record$doc_folder_pr3","files_information","_config$entity$doc_fo2","_deleteFolder","onboardingCustomDocsFolder","modifyFolderData","folderId","folderIndex","new_folder_name","TransactionStatusSetting","statusCategory","sIdx","TransactionPropTypeSetting","PROPERTY_TYPES","pType","TransactionSaleTypeSetting","TransactionSetting","_HomeCtx$userPermissi","hasAccessToDetailAdmin","destroyInactiveTabPane","getAllOffices","UserRolesInformation","AccountPermission","subUser","isPermissionSettingActive","setIsPermissionSettingActive","mainToggleValue","setMainToggleValue","_fetchPermissionSetting","onFieldsChange","changedField","changedRoleField","_changedRoleField$nam","field_name","toggle_name","toggle_value","_evt$target","SubUserSetting","accountRoles","showAddUserForm","setShowAddUserForm","isPermissionModalOpen","setIsPermissionModalOpen","maxNumberOfSubUsers","setMaxNumberOfSubUsers","offices","setOffices","_record$offices","_record$offices$","office","_config$entity$office","_config$entity$office2","_record$agent_commiss","_record$agent_commiss2","agent_commission_rate","rate","_config$entity$agent_","renderText","UnlockOutlined","resendInviteConfirmationModal","_fetchMaxNumberOfSubUsers","max_no_of_subusers","_data$","_offices$","commission_split","_offices$2","UserAddOutlined","_handleCancelPermissionModal","OfficeSetting","isFetchingOffices","setIsFetchingOffices","date_added","isparent","_deleteOffice","_fetchOffices","newOffice","_saveNewName","AccountRolePermission","setAccountRoles","isFetchingPermission","setIsFetchingPermission","_record$accountrole_p","_record$accountrole_p2","_record$accountrole_p3","_record$accountrole_p4","accountrole_permissions","_record$accountrole_p5","_record$accountrole_p6","_record$accountrole_p7","_record$accountrole_p8","_record$accountrole_p9","_record$accountrole_p10","_record$accountrole_p11","_record$accountrole_p12","_record$accountrole_p13","_record$accountrole_p14","_record$accountrole_p15","_record$accountrole_p16","_record$accountrole_p17","_record$accountrole_p18","_record$accountrole_p19","_record$accountrole_p20","_record$accountrole_p21","_record$accountrole_p22","_record$accountrole_p23","_record$accountrole_p24","_record$accountrole_p25","_record$accountrole_p26","_record$accountrole_p27","_record$accountrole_p28","_record$accountrole_p29","_record$accountrole_p30","_record$accountrole_p31","_record$accountrole_p32","_record$accountrole_p33","_record$accountrole_p34","_record$accountrole_p35","_record$accountrole_p36","_record$accountrole_p37","_record$accountrole_p38","_record$accountrole_p39","_record$accountrole_p40","aRole","updateAccountRolePermissionProps","updatePermissionByAccountRoleID","TeamMemberSetting","ProspectGroupSetting","isFetchingData","setIsFetchingData","_deleteData","_updateData","updateProspectGroup","ProspectFollowupCodeSetting","updateProspectFollowupCode","ProspectFlagSetting","_record$prospects_fla","prospects_flag","_record$prospects_fla2","_config$entity$prospe","updateProspectFlag","new_active","ProspectTaskSetting","_fetchTaskTabsDetail","prospects_defaulttasktab_id","_TaskTab$defaulttasks3","_TaskTab$defaulttasks","_TaskTab$defaulttasks2","updateProspectDefaultTaskData","updateProspectDefaultTaskTabData","deleteProspectDefaultTask","_saveNewTaskTab","addNewProspectDefaultTaskTab","addNewProspectDefaultTaskData","_taskTitleHandler","taskTitle","trimmedTaskTitle","numDays","_TaskTab$defaulttasks4","ProspectQuestionSetting","groupedQuestions","setGroupedQuestions","_fetchDefaultQuestions","section_name","_record$questions","_dropdownValueHandler","_redrawSections","_dropdownValueHandler2","deleteDropdownOption","addNewDropdownOption","ProspectSetting","DocusignSetting","credential","setCredential","handleMessage","addEventListener","removeEventListener","docusign_name","IntegrationSetting","AdminSettingTab","UsergroupAddOutlined","AppstoreAddOutlined","SubTab_EmailLogs","SubTab_EmailIntegration","relayTypeID","setRelayTypeID","isCheckingSMTPSetting","setIsCheckingSMTPSetting","isMS265ButtonClicked","setIsMS265ButtonClicked","smtpVerificationMsg","setSmtpVerificationMsg","loginWithGoogle","swapGoogleCodeWithTokenForMailAccess","_fetchMyCredentials","smtp_incoming_ssl","_saveChanges","buttonStyle","GoogleOutlined","googleLogout","WindowsOutlined","getMSGraphAuthURLMailAccess","generateLogoutCallbackURL","encodeURIComponent","autoComplete","verifyCustomSMTPSetting","messageContent","_testSMTPConnection","closeText","EditEmailSignatureModalContent","emailSignature","parser","DOMParser","parseFromString","documentElement","SubTab_EmailSignatures","signature_body","sanitizeText","_setActiveSignature","_showEditSignatureDetailModal","_deleteSignature","handleFormSubmit","setIsSaving","isSetActive","updateButtonProps","newEmailSignatureRecord","updatedEmailSignatureRecord","isDisabled","btnText","emailSignatureRecord","tempDiv","imgElements","getElementsByTagName","outerHTML","sanitizedText","innerText","EmailTab","SummaryTabIcon","isChildMenu","TaskTabIcon","CalendarTabIcon","_SelectedEvent$extend2","_SelectedEvent$start","SelectedEvent","setSelectedEvent","Events","setEvents","CalendarDuration","setCalendarDuration","TransactionFilter","setTransactionFilter","ColumnTypeFilter","setColumnTypeFilter","IsLoadingCalendarEvents","setIsLoadingCalendarEvents","_SelectedEvent$extend","String","extendedProps","ez_table","_reloadCalendarEvents","start_date","end_date","events","ez_table_column_name","respArray","_triggerUpdateCalendarEventsDelayed","FullCalendar","customButtons","refreshButton","click","dayMaxEventRows","views","dayGrdayGridMonthid","plugins","dayGridPlugin","timeGridPlugin","interactionPlugin","headerToolbar","center","initialView","selectable","selectMirror","dayMaxEvents","weekends","eventContent","eventClick","clickInfo","_event$extendedProps","titleSplit","eventTitle","datesSet","arg","startStr","endStr","DocumentTabIcon","AddressbookTabIcon","MyProfileTabIcon","AdminSettingTabIcon","EmailTabIcon","MORE","emailLogID","isPreview","skip_template","status_category_id","_TRANSACTION_STATUSES","status_category","optGroup","navigator","clipboard","writeText","CopyTwoTone","Copyable","autoAdjustOverflow","MaskedInput","DOCUMENT_TYPE","Dragger","Upload","defaultProps","showUploadList","_customRequest","onError","onProgress","File","original_name","mime_type","presignedURLResp","_presignedURLResp$dat","onUploadProgress","loaded","round","uploadToAWSS3","put","abort","customRequest","setActiveWeblink","WEBLINK","FileSyncOutlined","UploadOutlined","fetchOptions","debounceTimeout","fetching","setFetching","onFocus","setOnFocus","fetchRef","debounceFetcher","fetchId","_response$data","_response$data2","_response$data3","_response$data4","_response$data5","_response$data6","_response$data7","_response$data8","_fetchParties","newOptions","onSearch","onBlur","defaultTransactionStatuses","DEFAULT_TRANSACTION_STATUSES","statusOptions","setStatusOptions","propStatusPreference","pref","defaultPropTypes","propTypePreference","_fetchTransaction","US_STATES","state_code","state_name","newRole","setNewRole","inputRef","onNewRoleChange","addItem","newRoleVal","_inputRef$current","dropdownRender","menu","NumberFormat","decimalScale","showCommissionRate","getHours","getMinutes","getSeconds","getMilliseconds","fromNow","citySearchOptions","setCitySearchOptions","_onSearchCity","getUSCityList","iData","AutoComplete","searchOptions","setSearchOptions","_onSearch","_removeFileUpload","_getPartyChilds","parent","gen_template","EMAIL_TEMPLATE_CODES","emailTemplateCodes","signatureListData","setSignatureListData","templateListTreeData","setTemplateListTreeData","emailCodesTreeData","setEmailCodesTreeData","selectedSignature","setSelectedSignature","activeSignature","editorLastIndex","setEditorLastIndex","loadSelectedSignature","_reactQuillRef$curren3","_option$data","_option$data2","quillContent","root","startIdxSign","signature","getLength","existing_signature","substring","dangerouslyPasteHTML","setText","_fetchEmailTemplates","templateListData","meta","TreeSelect","dropdownStyle","maxHeight","treeDefaultExpandAll","_node$children","selectedNode","_selectedNode$meta","_selectedNode$meta2","_selectedNode$meta3","_selectedNode$meta4","delta","convert","start_idx_sign","setContents","loadSelectedTemplate","treeLine","showLeafIcon","_node$children2","insertChosenValue","originalVal","_reactQuillRef$curren4","_quill$getSelection","strValue","insertEmbed","previousSelection","showTime","onboardingCode","onboarding_code","option_type","active_only","prospect_ids"],"mappings":"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","file":"static/js/main.b3a23042.chunk.js","sourcesContent":["export const PASSWORD_REGEX =\n /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[#?!@$%^&*-])[A-Za-z\\d#?!@$%^&*-]{8,}$/;\n\nexport const ACCOUNT_ROLES = [\n {\n accountrole_id: 1,\n accountrole: 'Owner',\n rank: 1,\n },\n {\n accountrole_id: 5,\n accountrole: 'Manager',\n rank: 1,\n },\n {\n accountrole_id: 2,\n accountrole: 'Broker',\n rank: 2,\n },\n {\n accountrole_id: 3,\n accountrole: 'Coordinator',\n rank: 3,\n },\n {\n accountrole_id: 4,\n accountrole: 'Agent',\n rank: 4,\n },\n {\n accountrole_id: 6,\n accountrole: '3rd Party',\n rank: 5,\n },\n];\n\nexport const ACCOUNT_ROLE_ID = {\n OWNER: 1,\n BROKER: 2,\n COORDINATOR: 3,\n AGENT: 4,\n MANAGER: 5,\n THIRD_PARTY: 6,\n};\n\nexport const ACCOUNT_ROLE_HAS_ACCESS_TO_ADMIN_AREA = [\n ACCOUNT_ROLE_ID.OWNER,\n ACCOUNT_ROLE_ID.MANAGER,\n ACCOUNT_ROLE_ID.AGENT,\n ACCOUNT_ROLE_ID.BROKER,\n ACCOUNT_ROLE_ID.COORDINATOR,\n ACCOUNT_ROLE_ID.THIRD_PARTY,\n];\n\nexport const ACCOUNT_ROLE_HAS_ACCESS_TO_DETAIL_ADMIN_AREA = [\n ACCOUNT_ROLE_ID.OWNER,\n ACCOUNT_ROLE_ID.MANAGER,\n];\n\nexport enum PERMISSION_TYPE {\n NONE = 0,\n VIEW_ONLY = 1,\n FULL_ACCESS = 2,\n NO = 0,\n YES = 1,\n}\n\nexport type AccountCompactDataType = {\n account_id: number;\n email: string;\n fullname?: string;\n role_id?: number;\n accountrole_id: number;\n\n accountrole: AccountRoleType;\n};\n\nexport type AccountDataType = {\n account_id: number;\n email: string;\n login: string;\n account_type: 'free' | 'paid' | 'unpaid';\n user_type_id: number;\n status: number;\n date_posted: Date;\n date_changed?: Date;\n date_modified?: Date;\n code?: string;\n fullname?: string;\n company: string;\n faxphone: string;\n cellphone: string;\n workphone: string;\n address: string;\n city: string;\n state: string;\n zip: string;\n notes: string;\n hint?: string;\n role_id?: number;\n parent_account_id: number;\n accountrole_id: number;\n dd?: number;\n referred_by?: number;\n fromfb?: number;\n timezone: string;\n company_id: number;\n docusign_email?: string;\n docusign_accountid?: string;\n google_calendar_id?: string;\n google_email?: string;\n docusign_baseurl?: string;\n promocode: string;\n\n max_no_of_subusers?: number;\n};\n\nexport type AccountRoleType = {\n accountrole_id: number;\n accountrole: string;\n rank: number;\n\n accountrole_permissions?: AccountRolePermissionType[];\n};\n\nexport type AgentCommissionRateType = {\n agent_commission_rate_id: number;\n account_id?: number;\n rate?: number;\n};\n\nexport type OfficeType = {\n office_id: number;\n parent_account_id: number;\n office: string;\n date_added: Date;\n isparent: number;\n};\n\nexport type SubUserDataType = AccountDataType & {\n accountrole: AccountRoleType;\n\n agent_commission_rate?: AgentCommissionRateType;\n\n offices: OfficeType[];\n};\n\nexport type AccountRolePermissionType = {\n accountroles_permission_id: number;\n account_id: number;\n toggle: number;\n contacts_toggle: number;\n documents_toggle: number;\n tasks_toggle: number;\n notes_toggle: number;\n accountrole_id: number;\n parent_account_id: number;\n assigntasks_toggle: number;\n emails_toggle: number;\n};\n\nexport type AccountPermissionType = {\n accountrole_id: number;\n\n account_id: number;\n parent_account_id: number;\n\n toggle: number;\n contacts_toggle: number;\n documents_toggle: number;\n tasks_toggle: number;\n notes_toggle: number;\n assigntasks_toggle: number;\n emails_toggle: number;\n\n active?: number;\n};\n","import qs from 'qs';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { DataTableQueryType } from 'types/base';\nimport { Mixpanel } from 'utils/mixPanelUtil';\nimport { ContactRoleType } from 'types/transaction';\n\nexport const getAllAddressBooks = (objParam?: {} | string) => {\n const params: string = typeof objParam === 'string' ? objParam : qs.stringify(objParam);\n\n return APIRequest({\n method: 'get',\n url: apiUrl + 'addressbooks?' + params,\n });\n};\n\nexport const addNewAddressbookContact = (payload: any) => {\n Mixpanel.track('app.add_addressbook', {});\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `addressbooks`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateAddressbookContact = (addressbook_id: number, payload: any) => {\n Mixpanel.track('app.edit_addressbook', {});\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `addressbook/${addressbook_id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteAddressbookContact = (addressbook_id: number) => {\n Mixpanel.track('app.delete_addressbook', {});\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `addressbook/${addressbook_id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getAddressbookRoles = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `addressbooks/roles?` + qs.stringify({ pageSize: 250 }),\n });\n};\n\nexport const getContactRoles = (params?: Partial<DataTableQueryType>) => {\n const finalParams: string = qs.stringify({ pageSize: 250, ...params } as DataTableQueryType);\n\n return APIRequest({\n method: 'get',\n url: apiUrl + `contact-roles` + (finalParams ? `?${finalParams}` : ''),\n });\n};\n\nexport const addNewContactRole = (payload: Partial<ContactRoleType>) => {\n Mixpanel.track('app.add_contract_role', { ...payload });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `contact-roles`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n","import { Configuration, PopupRequest } from '@azure/msal-browser';\n\nexport const NODE_ENV = process.env.REACT_APP_ENV ?? '';\n\nexport const facebookID = process.env.REACT_APP_Facebook_ID ?? '';\nexport const googleID = process.env.REACT_APP_Google_ID ?? '';\nexport const microsoftID = process.env.REACT_APP_Microsoft_ID ?? '';\nexport const REDIRECT_URI = process.env.REACT_APP_REDIRECT_URI ?? '';\nexport const serverUrl = process.env.REACT_APP_Server_URL ?? '';\nexport const TinyMceUrl = process.env.REACT_APP_TINYMCE ?? '';\nexport const googleApiKey = process.env.REACT_APP_Google_apiKey ?? '';\nexport const microsoftTenantID = process.env.REACT_APP_TENANT_ID ?? '';\nexport const microsoftClientSecret = process.env.REACT_APP_CLIENT_SECRET ?? '';\n\nexport const GOOGLE_CLIENTID = process.env.REACT_APP_Google_ClientID ?? '';\nexport const GOOGLE_CLIENTSECRET = process.env.REACT_APP_Google_ClientSecret ?? '';\n\nexport const SENTRY_DSN =\n process.env.REACT_APP_SENTRY_DSN ||\n 'https://2e3a30c0ae0f41a6b667b6d70dcbf0b8@o4505152428376064.ingest.sentry.io/4505232098787328';\nexport const SENTRY_ENV = process.env.REACT_APP_SENTRY_ENV || 'local-development';\n\nObject.entries({\n facebookID: facebookID,\n googleID: googleID,\n microsoftID: microsoftID,\n REDIRECT_URI: REDIRECT_URI,\n serverUrl: serverUrl,\n TinyMceUrl: TinyMceUrl,\n googleApiKey: googleApiKey,\n microsoftTenantID: microsoftTenantID,\n microsoftClientSecret: microsoftClientSecret,\n}).forEach(([key, val]) => {\n if (val.trim().length < 3) throw new Error(`Environment vaiable ${key} not defined.`);\n});\nexport const apiUrl = serverUrl + 'api/';\n// export const enableMock: boolean = process.env.REACT_APP_MockEnabled ? process.env.REACT_APP_MockEnabled === \"true\" : false;\nexport const enableMock: boolean = false;\n\nexport const checkingUpgrade = serverUrl === 'https://beta.ezcoordinator.com/';\n\nexport enum Ez_Email_Type {\n Client = 'Client',\n Listing = 'Listing',\n Transaction = 'Transaction',\n}\n\nexport const msalConfig: Configuration = {\n auth: {\n clientId: microsoftID,\n authority: `https://login.microsoftonline.com/common/`, // This is a URL (e.g. https://login.microsoftonline.com/{your tenant ID})\n // redirectUri: REDIRECT_URI,\n // redirectUri: 'https://localhost:8080/api/email-credential/process-msgraph-auth-code',\n // redirectUri: serverUrl + 'api/login-credential/ms-callback',\n // clientSecret: microsoftClientSecret,\n\n // clientType: 'Single-page-application',\n },\n cache: {\n cacheLocation: 'sessionStorage', // This configures where your cache will be stored\n storeAuthStateInCookie: false, // Set this to \"true\" if you are having issues on IE11 or Edge\n },\n system: {\n allowRedirectInIframe: false, // Ensures popups work properly\n },\n};\n\n// Add scopes here for ID token to be used at Microsoft identity platform endpoints.\nexport const MSloginRequest: PopupRequest = {\n redirectUri: REDIRECT_URI + 'microsoft/oauth/callback',\n // redirectUri: serverUrl + 'api/login-credential/ms-callback',\n // clientSecret: microsoftClientSecret,\n // clientId: microsoftID,\n // scopes: ['profile', 'User.Read', 'openid', 'offline_access'],\n\n scopes: ['profile', 'User.Read', 'openid', 'offline_access'],\n};\n\nexport const isDemoENV = () => {\n return process.env.REACT_APP_IS_DEMO && process.env.REACT_APP_IS_DEMO === 'true' ? true : false;\n};\n\nexport const isProductionENV = () => {\n return NODE_ENV === 'production';\n};\n","export default __webpack_public_path__ + \"static/media/Logo.cb6a7c97.svg\";","import { memo } from 'react';\nimport loginLogo from '../../assets/Logo.svg';\n\nexport const LogoImg = memo(function LogoImg(props: any) {\n return (\n <div className=\"login-logo\">\n <img src={loginLogo} alt=\"Logo\" />\n </div>\n );\n});\n","import React, { memo, useCallback, useEffect, useState } from 'react';\nimport { InterfacePort } from '../../utils/ez_api/loginUtil';\nimport { objectType, IResolveParams } from './';\n\ninterface Props {\n appId: string;\n scope?: string;\n state?: boolean;\n xfbml?: boolean;\n cookie?: boolean;\n version?: string;\n language?: string;\n auth_type?: string;\n className?: string;\n isDisabled?: boolean;\n onReject: (reject: string | objectType) => void;\n onResolve: ({ provider, data }: IResolveParams) => void;\n redirect_uri?: string;\n fieldsProfile?: string;\n response_type?: string;\n return_scopes?: boolean;\n children?: React.ReactNode;\n}\n\nconst SDK_URL: string = 'https://connect.facebook.net/en_US/sdk.js';\nconst SCRIPT_ID: string = 'facebook-jssdk';\nconst _window = window as any;\n\nconst LoginFacebook = memo(\n ({\n appId,\n scope = 'email,public_profile',\n state = true,\n xfbml = true,\n cookie = true,\n version = 'v11.0',\n language = 'en_EN',\n auth_type = '',\n className,\n onReject,\n onResolve,\n redirect_uri,\n fieldsProfile = 'name, email, birthday',\n response_type = 'code',\n return_scopes = true,\n children,\n }: Props) => {\n const [isSdkLoaded, setIsSdkLoaded] = useState(false);\n const [isProcessing, setIsProcessing] = useState(false);\n\n useEffect(() => {\n !isSdkLoaded && load();\n console.log(isProcessing);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isSdkLoaded]);\n\n const insertSDKScript = useCallback((document: HTMLDocument, cb: () => void) => {\n const fbScriptTag = document.createElement('script');\n fbScriptTag.id = SCRIPT_ID;\n fbScriptTag.src = SDK_URL;\n const scriptNode = document.getElementsByTagName('script')![0];\n scriptNode &&\n scriptNode.parentNode &&\n scriptNode.parentNode.insertBefore(fbScriptTag, scriptNode);\n cb();\n }, []);\n\n const checkIsExistsSDKScript = useCallback(() => {\n return !!document.getElementById(SCRIPT_ID);\n }, []);\n\n const initFbSDK = useCallback((config: objectType, document: HTMLDocument) => {\n const _window = window as any;\n _window.fbAsyncInit = function () {\n _window.FB && _window.FB.init({ ...config });\n setIsSdkLoaded(true);\n let fbRoot = document.getElementById('fb-root');\n if (!fbRoot) {\n fbRoot = document.createElement('button');\n fbRoot.id = 'fb-root';\n document.body.appendChild(fbRoot);\n }\n };\n }, []);\n\n const getMe = useCallback(\n (authResponse: objectType) => {\n _window.FB.api('/me', { locale: language, fields: fieldsProfile }, (me: any) => {\n console.log('facebook response', me);\n onResolve({\n provider: InterfacePort.facebook,\n data: { access_token: authResponse?.accessToken || '', ...me },\n });\n });\n },\n [fieldsProfile, language, onResolve]\n );\n\n const handleResponse = useCallback(\n (response: objectType) => {\n if (response.authResponse) {\n getMe(response.authResponse);\n } else {\n onReject(response);\n }\n setIsProcessing(false);\n },\n [getMe, onReject]\n );\n\n const load = useCallback(() => {\n if (checkIsExistsSDKScript()) {\n setIsSdkLoaded(true);\n } else {\n insertSDKScript(document, () => {\n initFbSDK(\n {\n appId,\n xfbml,\n version,\n state,\n cookie,\n redirect_uri,\n response_type,\n },\n document\n );\n });\n }\n }, [\n state,\n appId,\n xfbml,\n cookie,\n version,\n initFbSDK,\n redirect_uri,\n response_type,\n insertSDKScript,\n checkIsExistsSDKScript,\n ]);\n\n const loginFB = useCallback(() => {\n _window.FB.getLoginStatus(function (response: any) {\n console.log('got response', response);\n if (response.status === 'connected') {\n handleResponse(response);\n } else if (response.status === 'unknown')\n _window.FB.login(handleResponse, {\n scope,\n return_scopes,\n auth_type,\n });\n });\n }, [\n // load,\n scope,\n // onReject,\n auth_type,\n // isSdkLoaded,\n // isProcessing,\n return_scopes,\n handleResponse,\n ]);\n\n return (\n <div className={className} onClick={loginFB}>\n {children}\n </div>\n );\n }\n);\n\nexport default LoginFacebook;\n","/**\n *\n * LoginSocialMicrosoft\n *\n */\nimport React, { memo } from 'react';\nimport { getMSOauthLoginURL, InterfacePort } from '../../utils/ez_api/loginUtil';\nimport { IResolveParams, objectType } from './';\n\nimport { showMessage } from 'utils/notificationUtil';\n\ninterface Props {\n className?: string;\n children?: React.ReactNode;\n onReject: (reject: string | objectType) => void;\n onResolve: ({ provider, data }: IResolveParams) => void;\n}\n\nexport const LoginSocialMicrosoft = memo((props: Props) => {\n const { className, children, onReject, onResolve } = props;\n\n const handleLogin = () => {\n // Get the login URL from the server\n getMSOauthLoginURL()\n .then(resp => {\n const url = resp.data?.url;\n window.open(url, '_self');\n })\n .catch(() => {\n showMessage('error', 'Failed to get login URL');\n });\n };\n\n return (\n <div className={className} onClick={handleLogin}>\n {children}\n </div>\n );\n});\n\nexport default LoginSocialMicrosoft;\n","// Core React libraries import\nimport { memo, useState } from 'react';\nimport { Link } from 'react-router-dom';\n\n// Core ANTD libraries import\nimport { Button, Form, Input, Checkbox, Row, Col, Typography } from 'antd';\n\n// EZ web-app utils import\nimport { loginUser, storeLoginPayload } from '../../utils/ez_api/loginUtil';\nimport { showNotification } from '../../utils/notificationUtil';\n\nimport { Mixpanel } from 'utils/mixPanelUtil';\nimport { isDemoENV } from 'utils/envUtil';\n\nconst { Text } = Typography;\n\nconst LoginEmail = memo(function (props: any) {\n const [form] = Form.useForm();\n\n const [isLoggingIn, setIsLoggingIn] = useState(false);\n\n const { setError, userLoggedIn } = props;\n\n const _onFinish = (values: any) => {\n const { email, password, remember } = values;\n\n setIsLoggingIn(true);\n loginUser(email, password, remember)\n .then(res => {\n showNotification('success', 'Successful login, congrats!');\n setError(false);\n storeLoginPayload(res.data.jwt, res.data.loginPayload);\n userLoggedIn();\n\n Mixpanel.setLoggedUserData(res.data.loginPayload);\n })\n .catch(err => {\n Mixpanel.track('error.login', {\n posted_date: new Date(),\n email,\n });\n if (err.response && err.response.status === 400) {\n if (err.response.data?.message === 'unverified_account') {\n setError(true, 'Error', `Account hasn't been verified yet.`);\n } else if (err.response.data?.message === 'unmigrated_v1_user') {\n setError(\n true,\n 'Error',\n `Account hasn't been migrated to version 2.0. Please contact our support for help.`\n );\n } else if (err.response.data?.message === 'subscription_is_unpaid') {\n setError(\n true,\n 'Error',\n `We couldn't find any active subscription on your account. Please contact our customer support to help you set up your subscription.`\n );\n } else setError(true, 'Error', 'Wrong email and password combination.');\n }\n })\n .finally(() => {\n setIsLoggingIn(false);\n });\n };\n\n return (\n <div className=\"login-details\">\n <Form\n form={form}\n name=\"normal_login\"\n // className=\"login-form\"\n requiredMark={false}\n initialValues={{ remember: true }}\n layout=\"vertical\"\n onFinish={_onFinish}\n >\n <Form.Item\n label=\"Email\"\n name=\"email\"\n rules={[{ required: true, type: 'email', message: 'Please input your email!' }]}\n >\n <Input type={'email'} placeholder=\"Enter your email\" />\n </Form.Item>\n <Row style={{ paddingBottom: '.5em' }}>\n <Col span={12}>\n <Text strong>Password</Text>\n </Col>\n <Col span={12}>\n <Link\n to=\"/forgot-password\"\n style={{ float: 'right', fontWeight: 'bold' }}\n className=\"login-form-forgot\"\n >\n <div className=\"login-link\">Forgot Password?</div>\n </Link>\n </Col>\n </Row>\n <Form.Item\n name=\"password\"\n rules={[{ required: true, message: 'Please input your password!' }]}\n >\n <Input.Password placeholder=\"Enter your password\" />\n </Form.Item>\n <Form.Item>\n <Row>\n <Col span={12}>\n <Form.Item name=\"remember\" valuePropName=\"checked\" noStyle>\n <Checkbox>Remember me</Checkbox>\n </Form.Item>\n </Col>\n <Col span={12}>\n <div className=\"login-form-forgot text-right\">\n <div className=\"login-link\">\n {isDemoENV() && (\n <a\n href=\"https://ezcoordinator.freshdesk.com/support/tickets/new\"\n target={'_blank'}\n rel=\"noreferrer\"\n >\n Forgot Password for Demo?\n </a>\n )}\n </div>\n </div>\n </Col>\n </Row>\n\n {/* <Link\n to=\"/forgot-password\"\n style={{ float: 'right' }}\n className=\"login-form-forgot\"\n >\n <div className=\"login-link\">Forgot Password?</div>\n </Link> */}\n </Form.Item>\n <Form.Item>\n <Button\n type=\"primary\"\n htmlType=\"submit\"\n block\n size=\"large\"\n loading={isLoggingIn}\n >\n {isLoggingIn ? 'Logging in...' : 'Login'}\n </Button>\n </Form.Item>\n </Form>\n </div>\n );\n});\n\nexport default LoginEmail;\n","import { Input } from 'antd';\nimport { memo } from 'react';\n\ninterface InputPlaceholderProps {\n name: string;\n placeholder: string;\n onChange: any;\n isPassword?: boolean;\n hideLabel?: boolean;\n maxLength?: number;\n}\n\nexport const InputPlaceholder = memo(function InputPlaceholder(props: InputPlaceholderProps) {\n const { name, onChange, isPassword, hideLabel, maxLength, placeholder } = props;\n return (\n <div className=\"input-placeholder\">\n {!hideLabel ? <label className=\"input-label\">{name}</label> : ''}\n {isPassword ? (\n <Input.Password\n className=\"input-box\"\n placeholder={placeholder}\n onChange={onChange}\n maxLength={maxLength}\n />\n ) : (\n <Input\n className=\"input-box\"\n placeholder={placeholder}\n onChange={onChange}\n maxLength={maxLength}\n />\n )}\n </div>\n );\n});\n","import { memo, useState } from 'react';\n\nimport { Alert, Button } from 'antd';\nimport { CaretRightOutlined } from '@ant-design/icons';\nimport { GoogleOAuthProvider } from '@react-oauth/google';\nimport { LoginFacebook, LoginGoogle, LoginMicrosoft } from '../../components/social';\nimport { facebookID, GOOGLE_CLIENTID, microsoftID, REDIRECT_URI } from '../../utils/envUtil';\nimport { googleID } from '../../utils/envUtil';\nimport { LoginEmail } from '../../components/social';\nimport { LoginProps } from '../Login';\n\nimport '../../styles/login.scss';\n\nimport google from '../../assets/google.png';\nimport microsoft from '../../assets/microsoft.png';\nimport facebook from '../../assets/facebook.png';\n\nexport const LoginUser = memo(function Login(props: LoginProps) {\n const { handleReject, handleResolve, userLoggedIn } = props;\n\n const [isError, setIsError] = useState(false);\n const [errorTitle, setErrorTitle] = useState('');\n const [errorDescription, setErrorDescription] = useState('');\n\n const _setError = (_isError: boolean, _errorTitle?: string, _errorDescription?: string) => {\n setIsError(_isError);\n setErrorTitle(_errorTitle || '');\n setErrorDescription(_errorDescription || '');\n };\n\n return (\n <div>\n <div className=\"login-form\">\n <div className=\"login-title\"> Log in to your account </div>\n {isError && (\n <Alert\n message={errorTitle || 'Error'}\n description={errorDescription || '-'}\n type=\"error\"\n showIcon\n closable\n className=\"mb-5\"\n />\n )}\n <LoginEmail userLoggedIn={userLoggedIn} setError={_setError} />\n <div className=\"login-with-seperator\">\n <span className=\"seperator\"></span>\n <span className=\"login-with\">OR</span>\n <span className=\"seperator\"></span>\n </div>\n <div className=\"login-integration\">\n <GoogleOAuthProvider clientId={GOOGLE_CLIENTID}>\n <LoginGoogle onResolve={handleResolve} onReject={handleReject}>\n <img className=\"login-icon\" src={google} alt=\"signin\" />\n <span className=\"login-int-text\">Login with Google</span>\n </LoginGoogle>\n </GoogleOAuthProvider>\n <div className=\"mt-1\"></div>\n <LoginMicrosoft\n className=\"login-int-button\"\n onResolve={handleResolve}\n onReject={handleReject}\n >\n <img className=\"login-icon\" src={microsoft} alt=\"signin\" />\n <span className=\"login-int-text\">Login with Microsoft</span>\n </LoginMicrosoft>\n {/* <LoginFacebook\n className=\"login-int-button\"\n appId={facebookID}\n redirect_uri={REDIRECT_URI}\n onResolve={handleResolve}\n onReject={handleReject}\n >\n <img className=\"login-icon\" src={facebook} alt=\"signin\" />\n <span className=\"login-int-text\">Login with Facebook</span>\n </LoginFacebook> */}\n </div>\n </div>\n </div>\n );\n});\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIeSURBVHgBvVXLbtNAFD3jhjgRC4zYgMTC/AAQFjzEI5MdoCLZP4CSPSKskFglZYVg035B+wf2DjYoDmzYEVixi1UkGnVTB4HSkCbDndpy3HGSWq3aI13bc+feM2fuPAycEFiWIMFhYJdMooCAeQiOTLxPNkEdApyaXMnqkH8NI3jsC/zMxOI+LHqtkxlYDJ9shX3GxqHE4gEapKaJ7PCxhJJaHqYorUZKldHg0bMdtcqUxWPSESrzyhHmNgsmEXfJRGz30BK3YaZiOWSsM6svTdw6UxVuXognLCbFMaBNv1gd56kyz/LADXLvoYZjgIVqafU1fSf2Uk0ZH1bU4Esvv3cXsgn4g9HYDlZLQS70FAzpnQaI9pxUE4tlmsWz+jnaHoGGE0KkeJcG0WNnH3oZ+JcKFkhvK6bMYvB32I/8UdInvSWP7/akiFe/b+HXpHjlg+2miJK4+OKryfJLibqLztbbayX5NS3FmLU/Di/jef8uJHlu1kFR1eZzTrItBFtLzCSE5VjGHiBHj+8HmnpnDNiq8oeOZe70bq5vdpd5gtYX2qTSe1PyDxBLLDuWvHwcpOHRTRfuFI2OdHTbbW/dwU//UaQWtd67qxspxQnyJr0ayAg2uIBvP56ubL4uNw/4ZwU/dqwqdTTYYfuW9iuVqvbedt3UgPMyZB1pZTlZnZrXlW6PrP0HWPVsd+bfJNOvidPCGtGiylM1j+xU8B/yW8GA8/WT6AAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADRSURBVHgB7ZSxDcIwEEXvgotEpLCYwCMwQtxRUBjRsB0lkSiSko6M4A0IE2AJihROjB2JgBRdSREpv7nv09Ovvg9gasKPcUpwYLAmSQsay9pszyqjkBcDXe1KEzwbtiF0EV3J4M6JTaG4dySTWpB+VMFH8CfNwRMOxt+HOwhBgnldh6kKRTK+wGbc4+ODYxwDqTzpR8EvJIKyMYMftqdntoiQLH/LlsKtEoTI3SgGulaitFWwcyvm4LG+PY6txoZJktzj3V9iDl1MM5Dq/ptMUm88rjaGpZbT8gAAAABJRU5ErkJggg==\"","// Core React libraries import\nimport React, { useEffect } from 'react';\nimport { useHistory } from 'react-router';\nimport { Link } from 'react-router-dom';\n\n// Core ANTD libraries import\nimport { Row, Col } from 'antd';\n\n// EZ web-app utils import\nimport { loginInterface, portToString } from '../utils/ez_api/loginUtil';\nimport { isDemoENV } from 'utils/envUtil';\n// EZ web-app components import\nimport { IResolveParams } from '../components/social';\nimport { LogoImg } from '../components/social/LogoImg';\nimport { DemoBanner } from 'components/general/demoBanner';\n// EZ web-app pages import\nimport { LoginUser } from './subpages/LoginUser';\n// EZ web-app styles import\nimport '../styles/login.scss';\nimport { showNotification } from 'utils/notificationUtil';\n\nexport interface LoginProps {\n handleResolve: any;\n handleReject: any;\n userLoggedIn: any;\n showNotification?: any;\n}\n\nexport const Login = React.memo(function Login(props: any) {\n // const [isLoading, setIsLoading] = React.useState(false);\n // const [isRegisterOpen, setRegisterOpen] = React.useState(false);\n const history = useHistory();\n // const [notificationSuccess, setNotificationSuccess] = useState<string | null>(null);\n\n useEffect(() => {\n // const isNotification = getNotification();\n // setNotificationSuccess(isNotification);\n // setTimeout(() => setNotificationSuccess(null), 3000);\n if (localStorage.getItem('jwt')) {\n history.push('/home');\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleLoginResolve = (res: IResolveParams) => {\n // setIsLoading(true);\n localStorage.setItem('loginType', portToString(res.provider));\n localStorage.setItem('loginToken', res?.data?.access_token);\n loginInterface(res.provider, res?.data?.access_token).then(res => {\n localStorage.setItem('jwt', res.data.jwt);\n history.push('/home');\n });\n };\n\n const handleReject = (err: any) => {\n console.log('🚀 ~ file: Login.tsx:56 ~ handleReject ~ err', err);\n };\n\n // const handleSignUp = () => {\n // history.push('/verify-user');\n // };\n\n const handleLogin = () => {\n history.push('/home');\n };\n\n // if (isLoading) return <Spin />;\n\n return (\n <Row justify=\"center\">\n <Col\n xs={{ offset: 0, span: 16 }}\n sm={{ offset: 0, span: 16 }}\n md={{ offset: 0, span: 12 }}\n lg={{ offset: 0, span: 12 }}\n xl={{ offset: 0, span: 8 }}\n >\n <div className=\"login-wrapper\">\n <div className=\"login-page\">\n <LogoImg />\n <div className=\"login-register-wrapper\">\n <LoginUser\n handleResolve={handleLoginResolve}\n handleReject={handleReject}\n userLoggedIn={handleLogin}\n />\n <div className=\"new-registration mt-4 pt-4\">\n {!isDemoENV() && (\n <span>\n Not registered yet?{' '}\n <Link to=\"/register\">\n <span className=\"\">Register</span>\n </Link>\n </span>\n )}\n </div>\n </div>\n </div>\n </div>\n </Col>\n <Col>{isDemoENV() && <DemoBanner />}</Col>\n </Row>\n );\n});\n","var graph = require('@microsoft/microsoft-graph-client')\n\nfunction getAuthenticatedClient(accessToken) {\n const client = graph.Client.init({\n authProvider: (done) => {\n done(null, accessToken.accessToken)\n }\n })\n return client\n}\n\nexport async function getUserDetails(accessToken) {\n const client = getAuthenticatedClient(accessToken);\n const user = client.api('/me').get()\n return user;\n}\n\nexport async function getMessages(accessToken, emailFilterState) {\n const source = emailFilterState === 'INBOX' ? 'Inbox': 'SentItems'\n const client = getAuthenticatedClient(accessToken);\n const messages = await client.api(`/me/mailFolders/${source}/messages`).get();\n return messages\n}\n\nexport async function sendMSGraphEmail(accessToken, formData) {\n const client = getAuthenticatedClient(accessToken);\n const data = {\n message: {\n toRecipients: [{\n emailAddress: {\n address: formData.to,\n }\n }],\n subject: formData.subject,\n body: {\n contentType: 'HTML',\n content: formData.message\n },\n },\n saveToSentItems: 'false'\n };\n \n await client.api('/me/sendMail')\n .post(data)\n}","import { AccountInfo, IPublicClientApplication } from '@azure/msal-browser';\nimport { MSloginRequest } from '../envUtil';\nimport { getMessages, getUserDetails, sendMSGraphEmail } from '../ez_api/graphService';\n\nlet instance: IPublicClientApplication, accounts: AccountInfo[];\n\nexport const setMSAccountDetails = (\n instanceRef: IPublicClientApplication,\n accountsRef: AccountInfo[]\n) => {\n instance = instanceRef;\n accounts = accountsRef;\n};\n\nexport const RequestAccessToken = async () => {\n const accessToken = localStorage.getItem('loginToken');\n if (accessToken) {\n return { accessToken };\n }\n const request = {\n ...MSloginRequest,\n account: accounts?.[0],\n };\n\n let response;\n try {\n // Silently acquires an access token which is then attached to a request for Microsoft Graph data\n response = await instance.acquireTokenSilent(request);\n } catch (e) {\n response = await instance.acquireTokenPopup(request);\n }\n return response;\n};\n\nexport const getMyProfile = async () => {\n const access = await RequestAccessToken();\n return getUserDetails(access);\n};\n\nexport const handleMSLogin = async () => {\n return (\n instance\n .loginRedirect(MSloginRequest)\n // .loginPopup(MSloginRequest)\n .then(res => {\n console.log('🚀 ~ handleMSLogin ~ res:', res);\n return {\n // access_token: res?.accessToken,\n // access_token: res?.accessToken,\n };\n })\n .catch(e => {\n console.error(e);\n })\n );\n};\n\nexport const handleMSLogout = () => {\n return instance.logoutPopup().then(res => {\n console.log('logged out', res);\n });\n};\n","import { useMsal } from '@azure/msal-react';\nimport React, { useEffect } from 'react';\n\nimport './App.scss';\nimport './styles/components.scss';\nimport { Login } from './pages/Login';\nimport { setMSAccountDetails } from './utils/3rd_party_api/microsoftUtils';\nimport { Alert } from 'antd';\n\nexport const App = () => {\n const { instance, accounts } = useMsal();\n\n useEffect(() => {\n setMSAccountDetails(instance, accounts);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"App\">\n <Login />\n </div>\n );\n};\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import { Col, Row } from 'antd';\nimport '../../../styles/login.scss';\nimport { LogoImg } from '../LogoImg';\nimport { memo } from 'react';\n\ninterface Props {\n width?: string;\n children?: React.ReactNode;\n}\n\nexport const SocialBoxWrapper = memo((props: Props) => {\n const { width = '30em', children } = props;\n\n return (\n <Row justify=\"center\">\n <Col style={{ width }}>\n <div className=\"login-wrapper\">\n <Col className=\"login-page\">\n <LogoImg />\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n padding: '2em',\n borderRadius: '.5em',\n gap: '.5em',\n }}\n >\n {children}\n </div>\n </Col>\n </div>\n </Col>\n </Row>\n );\n});\n","import { Button, Typography, Form, Input } from 'antd';\nimport { memo, useState } from 'react';\nimport { forgotPassword } from '../../utils/ez_api/loginUtil';\nimport '../../styles/login.scss';\nimport { Link } from 'react-router-dom';\nimport { showNotification } from 'utils/notificationUtil';\nimport { SocialBoxWrapper } from './Fragments/SocialBoxWrapper';\n\nconst { Text, Title } = Typography;\n\nexport const ForgotPassword = memo(function ForgotPassword(props: any) {\n const [emailToResend, setEmailToResend] = useState('');\n const [errorMessage, setErrorMessage] = useState('');\n const [form] = Form.useForm();\n\n const sendForgotEmail = (values: any) => {\n const { email } = values;\n\n forgotPassword(email)\n .then(res => {\n setEmailToResend(email);\n showNotification(\n 'success',\n 'New reset password link has been sent to your email successfully!',\n 'Successfully'\n );\n })\n .catch(err => {\n const message = err?.response?.data?.message;\n setErrorMessage(message);\n });\n };\n\n const resendEmail = () => {\n forgotPassword(emailToResend).then(res => {\n showNotification(\n 'success',\n 'New reset password link has been sent to your email successfully!',\n 'Successfully Resent'\n );\n });\n };\n\n if (emailToResend) {\n return (\n <SocialBoxWrapper>\n <Title level={3} style={{ textAlign: 'center' }}>\n Thanks, check your email for the link to reset your password\n </Title>\n <Text type=\"secondary\" style={{ textAlign: 'center' }}>\n Didn't get the email? Check your spam folder or\n </Text>\n <Button type=\"link\" onClick={resendEmail}>\n Resend email\n </Button>\n </SocialBoxWrapper>\n );\n }\n\n return (\n <SocialBoxWrapper>\n <Title level={3}>Forgot Password</Title>\n <Text type=\"secondary\" style={{ textAlign: 'center', marginBottom: '1em' }}>\n Enter the email address associated with your account\n <br /> and we'll send you a link to reset your password\n </Text>\n <Form\n form={form}\n name=\"forgot_password\"\n requiredMark={false}\n layout=\"vertical\"\n style={{ width: '100%' }}\n onFinish={sendForgotEmail}\n >\n <Form.Item\n label=\"Email\"\n name=\"email\"\n rules={[\n {\n required: true,\n type: 'email',\n message: 'Please input your email!',\n },\n ]}\n validateStatus={errorMessage && 'error'}\n help={errorMessage}\n >\n <Input type={'email'} placeholder=\"Enter your email\" />\n </Form.Item>\n <Button\n htmlType=\"submit\"\n type=\"primary\"\n style={{ width: '100%', marginTop: '1em' }}\n >\n Request Password Reset\n </Button>\n </Form>\n\n <span style={{ paddingTop: '1em' }}>\n Already have an account?{' '}\n <Link to=\"/login\">\n <span className=\"\">Sign In</span>\n </Link>\n </span>\n </SocialBoxWrapper>\n );\n});\n","import { Button, Col, Form, Input, Row, Typography } from 'antd';\nimport React, { memo } from 'react';\nimport { resetPassword, verifyResetPasswordCode } from '../../utils/ez_api/loginUtil';\nimport '../../styles/login.scss';\nimport { useHistory, useLocation, Link } from 'react-router-dom';\nimport { SocialBoxWrapper } from './Fragments/SocialBoxWrapper';\nimport { PASSWORD_REGEX } from 'types/account';\nimport { showNotification } from 'utils/notificationUtil';\n\nconst { Text, Title } = Typography;\nexport const ResetPassword = memo(function ForgotPassword(props: any) {\n const [form] = Form.useForm();\n\n const history = useHistory();\n\n const { search } = useLocation();\n const query = new URLSearchParams(search);\n const resetPasswordCode = query.get('code') || '';\n\n const updatePassword = (values: any) => {\n const { newPassword } = values;\n resetPassword(resetPasswordCode, newPassword)\n .then(res => {\n showNotification(\n 'success',\n 'Password reset successful. \\nYou can now use your new password to login to your account!'\n );\n history.push('/');\n })\n .catch(err => {\n const message = err?.response?.data?.message;\n showNotification('error', message);\n });\n };\n\n const checkVerifyResetPasswordCode = () => {\n verifyResetPasswordCode(resetPasswordCode)\n .then(res => {})\n .catch(err => {\n history.push('/forgot-password');\n const message = err?.response?.data?.message;\n showNotification('error', message);\n });\n };\n\n // check Verify Reset Password Code when component on mount\n React.useEffect(() => {\n checkVerifyResetPasswordCode();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <SocialBoxWrapper>\n <Title level={3}>Reset Password</Title>\n <Text type=\"secondary\" style={{ textAlign: 'center', marginBottom: '1em' }}>\n Create a new password to access your account!\n </Text>\n <Form\n form={form}\n name=\"forgot_password\"\n requiredMark={false}\n layout=\"vertical\"\n style={{ width: '100%' }}\n onFinish={updatePassword}\n >\n <Form.Item\n label=\"New Password\"\n name=\"newPassword\"\n rules={[\n {\n required: true,\n message: 'Please input your new password!',\n },\n {\n pattern: PASSWORD_REGEX,\n message: 'Weak password is detected.',\n },\n ]}\n >\n <Input.Password type={'email'} placeholder=\"Enter a new password\" />\n </Form.Item>\n <Form.Item\n label=\"Confirm New Password\"\n name=\"newConfirmPassword\"\n dependencies={['newPassword']}\n rules={[\n {\n required: true,\n message: 'Please input your confirm new password!',\n },\n ({ getFieldValue }) => ({\n validator(_, value) {\n if (!value || getFieldValue('newPassword') === value) {\n return Promise.resolve();\n }\n return Promise.reject(\n new Error('The two passwords that you entered do not match!')\n );\n },\n }),\n ]}\n >\n <Input.Password type={'email'} placeholder=\"Confirm your new password\" />\n </Form.Item>\n\n <Row style={{ color: 'grey', paddingTop: '1em' }}>\n <Col span={24}>\n <span>Password must:</span>\n </Col>\n <Col span={12}>\n <span>- have at least one letter</span>\n <br />\n <span>- have at least one capital letter</span>\n <br />\n <span>- have at least one number</span>\n <br />\n </Col>\n <Col span={12}>\n <span>- have at least one special symbol that is #?!@$%^&*-</span>\n <br />\n <span>- be at least 8 characters</span>\n <br />\n </Col>\n </Row>\n <Form.Item shouldUpdate>\n {() => (\n <Button\n type=\"primary\"\n htmlType=\"submit\"\n disabled={\n !form.isFieldsTouched(true) ||\n !!form.getFieldsError().filter(({ errors }) => errors.length).length\n }\n style={{ width: '100%', marginTop: '1em' }}\n >\n Reset Password\n </Button>\n )}\n </Form.Item>\n </Form>\n\n <span style={{ paddingTop: '1em' }}>\n Already have an account?{' '}\n <Link to=\"/login\">\n <span className=\"\">Sign In</span>\n </Link>\n </span>\n </SocialBoxWrapper>\n );\n});\n","import { CloseCircleOutlined } from '@ant-design/icons';\n\ninterface ErrorMessageProps {\n isError: boolean;\n errorMessage: string;\n}\n\nexport const ErrorMessage = (props: ErrorMessageProps) => {\n const { isError, errorMessage } = props;\n return (\n <div className=\"popup-error\">\n {isError ? (\n <div className=\"error-div\">\n <span className=\"error-icon\">\n <CloseCircleOutlined />\n </span>\n <span className=\"error-msg\">{errorMessage}</span>\n </div>\n ) : (\n ''\n )}\n </div>\n );\n};\n","import { Alert, Button } from 'antd';\nimport { memo, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { resendVerifyEmail, setNotification, verifyEmail } from '../../utils/ez_api/loginUtil';\nimport '../../styles/login.scss';\nimport { LogoImg } from './LogoImg';\nimport { InputPlaceholder } from '../input/inputPlaceholder';\nimport { ErrorMessage } from './ErrorMessage';\n\nexport const VerifyEmail = memo(function VerifyEmail(props: any) {\n const [otp, setOtp] = useState<string | null>(null);\n const [isError, setErrorState] = useState(false);\n const [resendSuccess, setResendSuccess] = useState(false);\n const history = useHistory();\n\n const updateOTP = (e: any) => {\n setOtp(e.target.value);\n };\n const sendVerificationEmail = () => {\n if (otp && otp?.length >= 4) {\n verifyEmail(parseInt(otp))\n .then(res => {\n console.log(res);\n setNotification(\n 'Account verification is successful. \\nYou can now login to your account!'\n );\n history.push('/home');\n })\n .catch(err => {\n console.log('reset', err);\n setErrorState(true);\n });\n }\n };\n const resendEmail = (e: any) => {\n resendVerifyEmail().then(res => {\n console.log(res);\n setResendSuccess(true);\n setTimeout(() => setResendSuccess(false), 3000);\n });\n };\n\n const goToLogin = () => {\n history.goBack();\n };\n\n return (\n <div className=\"popup-page\">\n <div className=\"success-toaster\">\n {resendSuccess ? (\n <Alert\n message=\"New 4-digit verification code has been sent to your email successfully!\"\n type=\"success\"\n showIcon\n />\n ) : (\n ''\n )}\n </div>\n <div className=\"popup-box\">\n <div className=\"back-button\" onClick={goToLogin}>\n <div className=\"back-icon\">{'<'}</div>\n Back\n </div>\n <div className=\"popup-wrapper\">\n <LogoImg />\n <div className=\"popup-title\">Email Verification</div>\n <div className=\"popup-subtitle\">\n We’ve emailed you a 4 digit code. Please check your email and enter the code\n here to complete the verification.\n </div>\n <div className=\"input-section verify-otp-input\">\n <InputPlaceholder\n onChange={updateOTP}\n name=\"OTP\"\n placeholder=\"Enter 4-digit code\"\n hideLabel={true}\n maxLength={4}\n />\n <Button\n onClick={sendVerificationEmail}\n className=\"login-buttom\"\n type=\"primary\"\n ghost\n >\n <span>Verify</span>\n </Button>\n </div>\n <ErrorMessage\n isError={isError}\n errorMessage=\"You’ve entered a wrong OTP. Please try again.\"\n />\n <div className=\"popup-footer\">\n Didn’t receive the code?{' '}\n <span className=\"login-link\" onClick={resendEmail}>\n Resend\n </span>\n </div>\n </div>\n </div>\n </div>\n );\n});\n","// Core React libraries import\nimport React, { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router';\nimport { Link } from 'react-router-dom';\n\n// Core ANTD libraries import\nimport { Alert, Row, Col } from 'antd';\n\n// EZ web-app utils import\nimport { getNotification, loginInterface, portToString } from '../utils/ez_api/loginUtil';\n// EZ web-app components import\nimport { IResolveParams } from '../components/social';\nimport { LogoImg } from '../components/social/LogoImg';\n// EZ web-app pages import\nimport { RegisterUser } from './subpages/RegisterUser';\nimport { RegisterByEmail } from './auth/registerByEmail';\n// EZ web-app styles import\nimport '../styles/login.scss';\nimport { loadSubscriptionListFromServer } from 'utils/paymentUtil';\n\nexport interface LoginProps {\n handleResolve: any;\n handleReject: any;\n userLoggedIn: any;\n showNotification?: any;\n}\n\nexport const Register = React.memo(function Login(props: any) {\n // const [isLoading, setIsLoading] = React.useState(false);\n const history = useHistory();\n const [notificationSuccess, setNotificationSuccess] = useState<string | null>(null);\n\n useEffect(() => {\n const isNotification = getNotification();\n setNotificationSuccess(isNotification);\n setTimeout(() => setNotificationSuccess(null), 3000);\n if (localStorage.getItem('jwt')) history.push('/home');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n loadSubscriptionListFromServer();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row justify=\"center\">\n <Col\n xs={{ offset: 0, span: 16 }}\n sm={{ offset: 0, span: 16 }}\n md={{ offset: 0, span: 12 }}\n lg={{ offset: 0, span: 12 }}\n xl={{ offset: 0, span: 10 }}\n >\n <div className=\"login-wrapper\">\n <div className=\"success-toaster\">\n {notificationSuccess ? (\n <Alert message={notificationSuccess} type=\"success\" showIcon />\n ) : (\n ''\n )}\n </div>\n <div className=\"login-page\">\n <LogoImg />\n <div className=\"login-register-wrapper pt-5\">\n {/* <RegisterUser\n handleResolve={handleLoginResolve}\n handleReject={handleReject}\n userLoggedIn={handleSignUp}\n showNotification={showNotification}\n /> */}\n <div className=\"mr-4 ml-4\">\n <div className=\"login-title\"> Register new account </div>\n <RegisterByEmail />\n </div>\n <div className=\"new-registration mt-4\">\n <span>\n Already have an account? \n {/* <span className=\"login-link\" onClick={showLogin}>\n Login\n </span> */}\n <Link to=\"/login\">\n <span className=\"\">Login</span>\n </Link>\n </span>\n </div>\n </div>\n </div>\n </div>\n </Col>\n </Row>\n );\n});\n","// Core React libraries import\nimport React, { useEffect, useState } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\n\n// Core ANTD and 3rdparty libraries import\nimport { Alert } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app types import\n// EZ web-app components import\n// EZ web-app styles and assets import\n\nexport const DocusignRedirect: React.FC<{}> = () => {\n const urlParams: any = useParams();\n\n return (\n <div className=\"p-5\">\n <Alert\n message=\"The processed document(s) has been sent. You can close this pop-up while waiting for the recipient(s)' signature. \"\n type=\"success\"\n showIcon\n />\n </div>\n );\n};\n","import React, { useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { exchangeDocuSignCode } from 'utils/ez_api/docusignAPI';\n\nexport const DocusignCallback: React.FC = () => {\n const history = useHistory();\n\n useEffect(() => {\n const query = new URLSearchParams(window.location.search);\n const code = query.get('code');\n const state = query.get('state');\n\n if (code && state) {\n exchangeDocuSignCode(code, state).then(res => {\n // Send a message to the window that opened this page\n if (window.opener) {\n window.opener.postMessage('exchange-code-completed', '*');\n }\n\n // Close the window after the process is complete\n window.close();\n });\n } else {\n history.push('/docusign-redirect');\n }\n }, []);\n\n return (\n <>\n <style>{keyframes}</style>\n <div style={styles.app}>\n <div style={styles.loaderContainer}>\n <div style={styles.loader}>\n <span>Exchange in Progress</span>\n <div>\n <span style={{ ...styles.dot, ...styles.dot1 }} />\n <span style={{ ...styles.dot, ...styles.dot2 }} />\n <span style={{ ...styles.dot, ...styles.dot3 }} />\n <span style={{ ...styles.dot, ...styles.dot4 }} />\n </div>\n </div>\n </div>\n </div>\n </>\n );\n};\n\nconst keyframes = `\n @keyframes tint {\n 50% {\n background-color: transparent;\n transform: scale(0.8);\n }\n }\n`;\n\nconst styles: Record<string, React.CSSProperties> = {\n app: {\n backgroundSize: 'cover',\n width: '100vw',\n height: '100vh',\n overflow: 'hidden',\n },\n loaderContainer: {\n margin: '3rem',\n height: '300px',\n },\n loader: {\n position: 'absolute',\n top: 0,\n left: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n width: '100vw',\n height: '100vh',\n color: '#4f5156', // sdk-dark\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n textAlign: 'center',\n padding: '2rem 0',\n },\n dot: {\n width: '40px',\n height: '8px',\n backgroundColor: 'transparent',\n display: 'inline-block',\n marginRight: '2px',\n animation: 'tint 1600ms infinite',\n },\n dot1: {\n animationDelay: '0ms',\n backgroundColor: '#f58d50', // sdk-orange\n },\n dot2: {\n animationDelay: '200ms',\n backgroundColor: '#bcd64a', // sdk-green\n },\n dot3: {\n animationDelay: '400ms',\n backgroundColor: '#2a728e', // sdk-teal\n },\n dot4: {\n animationDelay: '600ms',\n backgroundColor: '#fbcc33', // sdk-yellow\n },\n};\n","// CSS and styles import\nimport 'antd/dist/antd.css';\nimport '@ant-design/pro-components/dist/components.css';\nimport './index.scss';\n\n// Core React libraries import\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter as Router, Switch, Route } from 'react-router-dom';\nimport * as Sentry from '@sentry/react';\nimport { hotjar } from 'react-hotjar';\n\n// ANTD libs and 3rd parties import\nimport { PublicClientApplication } from '@azure/msal-browser';\nimport { MsalProvider } from '@azure/msal-react';\nimport { ConfigProvider } from 'antd';\nimport enUSIntl from 'antd/lib/locale/en_US';\nimport { GoogleOAuthProvider } from '@react-oauth/google';\n\n// EZ app level import\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport { ForgotPassword } from './components/social/ForgotPassword';\nimport { ResetPassword } from './components/social/ResetPassword';\nimport { VerifyEmail } from './components/social/VerifyEmail';\nimport { Login } from './pages/Login';\nimport { Register } from './pages/Register';\nimport { DocusignRedirect } from './pages/DocusignRedirect';\nimport { Home } from './pages/Home';\nimport { GOOGLE_CLIENTID, SENTRY_DSN, SENTRY_ENV, msalConfig } from './utils/envUtil';\nimport { DocusignCallback } from 'pages/tabs/admin/subTabs/integration/docusignCallback';\nimport { MicrosoftLoginCallback } from 'pages/auth/microsoftCallback';\n\nconst msalInstance = new PublicClientApplication(msalConfig);\n\nif (window.location.hash !== '') {\n console.log('hash found' + window.location.hash);\n} else\n Sentry.init({\n dsn: SENTRY_DSN,\n environment: SENTRY_ENV,\n integrations: [new Sentry.BrowserTracing(), new Sentry.Replay()],\n // Performance Monitoring\n tracesSampleRate: 1.0, // Capture 100% of the transactions, reduce in production!\n // Session Replay\n replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n });\n\nconst AppContent = () => {\n const HOTJAR_ID = Number(process.env.REACT_APP_HOTJAR_ID);\n const HOTJAR_SV = 6;\n const shouldInitializeHotjar = Boolean(HOTJAR_ID);\n\n // Initialize Hotjar\n React.useEffect(() => {\n if (!shouldInitializeHotjar) {\n return;\n }\n\n hotjar.initialize(HOTJAR_ID, HOTJAR_SV);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <React.StrictMode>\n <ConfigProvider locale={enUSIntl}>\n <MsalProvider instance={msalInstance}>\n <Router basename=\"/\">\n <Switch>\n <Route exact path=\"/\" component={App} />\n <Route path=\"/forgot-password\" component={ForgotPassword} />\n <Route path=\"/reset-password\" component={ResetPassword} />\n <Route path=\"/verify-email\" component={VerifyEmail} />\n <Route path=\"/home\" component={Home} />\n <Route path=\"/transaction-portal/:contract_id\" component={Home} />\n <Route path=\"/login\" component={Login} />\n <Route path=\"/register\" component={Register} />\n <Route path=\"/success/:sessionId\" component={Home} />\n <Route\n path=\"/docusign-redirect/:docID?/:envelopeID?\"\n component={DocusignRedirect}\n />\n <Route path=\"/docusign/oauth/callback\" component={DocusignCallback} />\n <Route\n path=\"/microsoft/oauth/callback\"\n component={MicrosoftLoginCallback}\n />\n </Switch>\n </Router>\n </MsalProvider>\n </ConfigProvider>\n </React.StrictMode>\n );\n};\n\nReactDOM.render(<AppContent />, document.getElementById('root'));\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n","import axios, { AxiosRequestConfig } from 'axios';\nimport fileDownload from 'js-file-download';\n\nimport { apiUrl } from './envUtil';\n\nimport { showNotification } from 'utils/notificationUtil';\n\nexport type AxiosRequestConfigExtended = AxiosRequestConfig & {\n useDefaultErrorNotif?: boolean;\n};\n\nexport const AxiosInstance = axios.create({\n baseURL: apiUrl,\n params: {}, // do not remove this, its added to add params later in the config\n});\n\n// Add a request interceptor\nAxiosInstance.interceptors.request.use(\n function (config) {\n const token = localStorage.getItem('jwt');\n if (token) {\n config.headers.common['Authorization'] = 'Bearer ' + token;\n config.headers.common['Access-Control-Allow-Origin'] = '*';\n } else {\n config.headers.common['Content-Type'] = 'application/x-www-form-urlencoded';\n }\n return config;\n },\n function (error) {\n console.log('Request Error =>', error);\n return Promise.reject(error);\n }\n);\n\nAxiosInstance.interceptors.response.use(\n response => {\n console.debug('Request Successful!', response);\n return response.data;\n },\n error => {\n if (error.response) {\n // eslint-disable-next-line no-console\n console.log('Response Error =>', error.response);\n if (401 === error.response.status) {\n localStorage.removeItem('jwt');\n window.location.reload();\n }\n } else {\n // eslint-disable-next-line no-console\n console.log('Error =>', error);\n }\n return Promise.reject(error);\n }\n);\n\nexport const APIRequest = (RequestParams: AxiosRequestConfigExtended, auth = false) => {\n if (RequestParams.useDefaultErrorNotif) {\n return AxiosInstance(RequestParams).catch(err => {\n if (err?.status < 400 && err?.status > 499)\n showNotification('error', `Unidentified error happened. Please try again later.`);\n return Promise.reject(err);\n });\n } else return AxiosInstance(RequestParams);\n};\n\nexport async function getData(endPoint: string) {\n return await AxiosInstance.get(endPoint);\n}\n\nexport async function postData(endPoint: string, data: any) {\n return await AxiosInstance.post(endPoint, data);\n}\n\nexport async function deleteData(endPoint: string) {\n return await AxiosInstance.delete(endPoint);\n}\n\nexport async function postDataWithFile(\n endPoint: string,\n data: any,\n config: AxiosRequestConfigExtended\n) {\n return await AxiosInstance.post(endPoint, data, config);\n}\n\nexport async function patchData(endPoint: string, data: any) {\n return await AxiosInstance.patch(endPoint, data);\n}\n\nexport const downloadFileRequest = (url: string, fileName: string, useAuth: boolean = false) => {\n const headers: any = {};\n\n if (useAuth) {\n headers['Authorization'] = 'Bearer ' + localStorage.getItem('jwt');\n }\n\n axios\n .request({\n url,\n method: 'GET',\n responseType: 'blob', //important\n headers: { ...headers },\n })\n .then(({ data }) => {\n fileDownload(data, fileName);\n });\n};\n","import { SubscriptionTypeItem } from 'types/payment';\n\nexport const ALLOWED_CONTENT_TYPES = [\n 'text/htm',\n 'text/html',\n\n 'text/plain',\n // 'text/csv',\n\n 'image/bmp',\n 'image/jpg',\n 'image/jpeg',\n 'image/png',\n 'image/tiff',\n\n 'application/pdf',\n\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n];\n\nexport const ALLOWED_EXTENSIONS = [];\n\nexport const ALLOWED_DOCUSIGN_TYPES = [\n 'doc',\n 'docm',\n 'docx',\n 'dot',\n 'dotm',\n 'dotx',\n 'htm',\n 'html',\n 'msg',\n 'pdf',\n 'rtf',\n 'txt',\n 'wpd',\n 'xps',\n 'bmp',\n 'gif',\n 'jpg',\n 'jpeg',\n 'png',\n 'tif',\n 'tiff',\n 'pot',\n 'potx',\n 'pps',\n 'ppt',\n 'pptm',\n 'pptx',\n 'csv',\n 'xls',\n 'xlsm',\n 'xlsx',\n];\n\nexport const SIMPLE_EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nexport const STATUS_CATEGORY = ['Status - Listings', 'Status - Buyer', 'Status - Rental'];\n\nexport const COMMA_TEMPLATE = '[COMMA]';\n","// APIs to be used for entire page or data store\n\nimport { AccountDataType } from 'types/account';\n\nlet userData: any = null;\n\nexport const setUserData = (val: any) => {\n userData = val;\n};\n\nexport const getUserData = () => {\n return userData;\n};\n\nexport const summarizeText = (text: string, maxLength = 10) => {\n return text.substring(0, maxLength) + (text.length > maxLength ? '...' : '');\n};\n\nexport const getInitialFromFullname = (fullName: string) => {\n if (!fullName) return '';\n const allNames = fullName.trim().split(' ');\n const initials = allNames.reduce((acc, curr, index) => {\n if (index === 0 || index === allNames.length - 1) {\n acc = `${acc}${curr.charAt(0).toUpperCase()}`;\n }\n return acc;\n }, '');\n return initials;\n};\n\nexport function formatBytes(bytes: number, decimals: number = 2) {\n if (!+bytes) return '0 Bytes';\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n}\n\nexport const getFileExtension = (filename?: string | undefined) => {\n return filename?.split('.').pop();\n};\n\nexport const getParentAccountID = (account: AccountDataType) => {\n return account.parent_account_id || account.account_id;\n};\n\nexport const SELECT_OPTGROUP_FILTEROPT = (\n inputValue: string,\n option: {\n label: string;\n options:\n | {\n label: string;\n value: number;\n }[]\n | undefined;\n }\n) => {\n if (option.options?.length) {\n return false;\n } else if (option.label) {\n return option.label.toLowerCase().indexOf(inputValue.toLowerCase()) >= 0 ? true : false;\n }\n};\n","import qs from 'qs';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\nimport { DataTableQueryType } from 'types/base';\n\nexport const getTransactionTasks = (contract_id: number, params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `transaction/${contract_id}/tasks` + (params ? `?${params}` : ''),\n });\n};\n\nexport const getTransactionTaskLists = (contract_id: number, params?: DataTableQueryType) => {\n return APIRequest({\n method: 'get',\n url:\n apiUrl +\n `transaction/${contract_id}/tasklists` +\n (params ? `?${qs.stringify(params)}` : ''),\n });\n};\n\nexport const getAllTasks = (params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `tasks` + (params ? `?${params}` : ''),\n });\n};\n\nexport const addNewTask = (\n contract_id: number,\n payload: any,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n) => {\n Mixpanel.track('app.add_transaction_task', {\n contract_id,\n ...payload,\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `transaction/${contract_id}/task?formType=${formType}`,\n data: {\n ...payload,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateTask = (\n contract_id: number,\n id: number,\n payload: any,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n) => {\n Mixpanel.track('app.edit_transaction_task', {\n contract_id,\n task_id: id,\n action: 'edit',\n ...payload,\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `transaction/${contract_id}/task/${id}?formType=${formType}`,\n data: {\n ...payload,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteTask = (contract_id: number, id: number) => {\n Mixpanel.track('app.delete_transaction_task', {\n contract_id,\n task_id: id,\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `transaction/${contract_id}/task/${id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getTaskDetail = (contract_id: number, id: number) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `transaction/${contract_id}/task/${id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const linkTasksToDocs = (contract_id: number, taskIDs: number[], docIDs: number[]) => {\n Mixpanel.track('app.edit_transaction_task', {\n contract_id,\n action: 'link-to-docs',\n task_ids: taskIDs,\n doc_ids: docIDs,\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `transaction/${contract_id}/tasks/link-to-docs`,\n data: {\n doc_ids: docIDs,\n task_ids: taskIDs,\n },\n });\n};\n\nexport const addNewTasklist = (contract_id: number, payload: any) => {\n Mixpanel.track('app.add_transaction_tasklist', {\n contract_id,\n ...payload,\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `transaction/${contract_id}/tasklist`,\n data: {\n ...payload,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateTasklist = (contract_id: number, id: number, payload: any) => {\n Mixpanel.track('app.edit_transaction_tasklist', {\n contract_id,\n tasklist_id: id,\n action: 'edit',\n ...payload,\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `transaction/${contract_id}/tasklist/${id}`,\n data: {\n ...payload,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteTasklist = (contract_id: number, id: number) => {\n Mixpanel.track('app.delete_transaction_tasklist', {\n contract_id,\n tasklist_id: id,\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `transaction/${contract_id}/tasklist/${id}`,\n useDefaultErrorNotif: true,\n });\n};\n","import qs from 'qs';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nimport { EmailTemplateFolderType, EmailTemplateType } from 'types/emailTemplate';\nimport { DataTableQueryType } from 'types/base';\n\nexport const getEmailTemplates = (params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `email-templates` + (params ? `?${params}` : ''),\n });\n};\n\nexport const getEmailTemplateDetail = (email_template_id: number) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `email-template/${email_template_id}`,\n });\n};\n\nexport const getEmailTemplateFolders = (queryParams?: DataTableQueryType) => {\n const params: string = qs.stringify({ ...queryParams });\n return APIRequest({\n method: 'get',\n url: apiUrl + `email-template/folders` + (params ? `?${params}` : ''),\n });\n};\n\nexport const generateEmailTemplates = () => {\n Mixpanel.track('app.generate_email_templates', {});\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `email-template/generate-templates`,\n });\n};\n\nexport const getFoldersWithEmailTemplates = (\n queryParams?: DataTableQueryType,\n withMessageBody: boolean = false\n) => {\n const params: string = qs.stringify({ ...queryParams, withMessageBody });\n return APIRequest({\n method: 'get',\n url: apiUrl + `email-template/folders-with-templates` + (params ? `?${params}` : ''),\n });\n};\n\nexport const addNewEmailTemplateFolder = (folder_name: string) => {\n Mixpanel.track('app.add_email_template_folder', { folder_name });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `email-template/folders`,\n data: { folder_name },\n });\n};\n\nexport const editEmailTemplateFolder = (record: Partial<EmailTemplateFolderType>) => {\n Mixpanel.track('app.edit_email_template_folder', { folder_name: record.folder_name });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `email-template/folder/${record.folder_id}`,\n data: { folder_name: record.folder_name },\n });\n};\n\nexport const addNewEmailTemplate = (record: Partial<EmailTemplateType>) => {\n Mixpanel.track('app.add_email_template', { template_name: record?.template_name });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `email-templates`,\n data: record,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const editEmailTemplate = (record: Partial<EmailTemplateType>) => {\n Mixpanel.track('app.edit_email_template', {\n email_template_id: record.email_template_id,\n action: 'edit',\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `email-template/${record.email_template_id}`,\n data: record,\n });\n};\n\nexport const deleteEmailTemplate = (email_template_id: number) => {\n Mixpanel.track('app.delete_email_template', {\n email_template_id: email_template_id,\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `email-template/${email_template_id}`,\n });\n};\n\nexport const deleteEmailTemplateFolder = (record: Partial<EmailTemplateFolderType>) => {\n Mixpanel.track('app.delete_email_template_folder', {\n folder_id: record.folder_id,\n folder_name: record.folder_name,\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `email-template/folder/${record.folder_id}`,\n });\n};\n\nexport const toggleSharingTemplateFolder = (record: Partial<EmailTemplateFolderType>) => {\n Mixpanel.track('app.toggle_sharing_email_template_folder', {\n folder_id: record.folder_id,\n folder_name: record.folder_name,\n is_shared: !record.is_shared,\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `email-template/folder/${record.folder_id}`,\n data: { is_shared: !record.is_shared },\n });\n};\n\n// bulk actions\nexport const moveSelectedEmailTemplates = (\n email_template_ids: number[],\n template_folder_id: number\n) => {\n Mixpanel.track('app.edit_email_template', {\n email_template_ids,\n action: 'move-templates',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `email-template/bulk-move-templates`,\n data: {\n email_template_ids: email_template_ids,\n template_folder_id: template_folder_id,\n },\n useDefaultErrorNotif: true,\n });\n};\n","import React from 'react';\n\nimport { message, notification } from 'antd';\nimport { ArgsProps } from 'antd/lib/message';\n\ntype NotificationType = 'success' | 'info' | 'warning' | 'error';\ntype MessageType = 'success' | 'info' | 'warning' | 'error';\n\n/** Show a more obvious, bold drawer message */\nexport const showNotification = (\n notificationType: NotificationType,\n description: string,\n title?: string\n) => {\n notification[notificationType]({\n message: title || 'Notification',\n description,\n });\n};\n\n/** Show a simple, one-line quick message */\nexport const showMessage = (\n messageType: MessageType,\n content: string | React.ReactNode,\n config: Omit<ArgsProps, 'content'> & {\n content?: any;\n } = { content: '' }\n) => {\n config.content = content;\n // config.style = {\n // marginTop: '40px',\n // };\n\n switch (messageType) {\n case 'success':\n message.success(config);\n break;\n case 'warning':\n message.warning(config);\n break;\n case 'error':\n message.error(config);\n break;\n\n default:\n message.info(config);\n break;\n }\n};\n","import { STATUS_LIST_RENTAL, TransactionDetailType, TRANSACTION_STATUSES } from 'types/transaction';\n\nexport const getTransactionStatusCategory = (status_id: number) => {\n for (let index = 0; index < TRANSACTION_STATUSES.length; index++) {\n const categoryObj = TRANSACTION_STATUSES[index];\n\n const opt = categoryObj.status_list.find(sItem => sItem.status_id === status_id);\n if (opt) return categoryObj.status_category_label;\n }\n\n return '';\n};\n\nexport const isRentalProperty = (status_id: number) => {\n if (!status_id) return false;\n return STATUS_LIST_RENTAL.find(status => status.status_id === status_id) ? true : false;\n};\n\nexport const isProspectABuyer = (inquirytype_id: number) => {\n return inquirytype_id === 1;\n};\n\nexport const transformContractCustomFields = (transactionData: TransactionDetailType) => {\n if (transactionData.contract_additional_info_categories?.length) {\n transactionData.contract_additional_info_categories.forEach(category => {\n category.contract_additional_info_preferences?.forEach(field => {\n if (field.contract_additional_info_field.class === 'dropdown') {\n const optValue = field.contract_additional_info_value?.field_value;\n if (optValue) {\n const optObject = field.contract_additional_info_options.find(\n optValObj =>\n optValObj.additional_info_fields_option_id === parseInt(optValue)\n );\n if (optObject) {\n field.field_value = optObject.option_value;\n field.field_option_id = optObject.additional_info_fields_option_id;\n }\n }\n } else {\n field.field_value = field.contract_additional_info_value?.field_value;\n }\n });\n });\n }\n return transactionData;\n};\n","// Core React libraries import\nimport React, { useContext, useEffect, useRef, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Row,\n Col,\n Space,\n Menu,\n Button,\n Tabs,\n Typography,\n Dropdown,\n Tag,\n Tooltip,\n Popover,\n Divider,\n Select,\n Alert,\n Popconfirm,\n List,\n Avatar,\n UploadFile,\n Modal,\n Skeleton,\n Pagination,\n Input,\n Table,\n Upload,\n Spin,\n} from 'antd';\nimport { ProColumns } from '@ant-design/pro-components';\nimport { RenderExpandIcon } from 'rc-table/lib/interface';\nimport {\n DeleteOutlined,\n DownOutlined,\n InboxOutlined,\n DeliveredProcedureOutlined,\n CarryOutOutlined,\n DeleteFilled,\n CheckCircleOutlined,\n CheckCircleFilled,\n RightOutlined,\n MessageOutlined,\n FolderViewOutlined,\n CloseOutlined,\n EllipsisOutlined,\n SaveFilled,\n DownloadOutlined,\n FileSearchOutlined,\n PlusOutlined,\n InfoCircleFilled,\n EditOutlined,\n SaveOutlined,\n AuditOutlined,\n SettingOutlined,\n FileOutlined,\n LinkOutlined,\n EditFilled,\n} from '@ant-design/icons';\nimport DocViewer, { DocViewerRenderers } from 'react-doc-viewer';\nimport fileDownload from 'js-file-download';\nimport qs from 'qs';\n\n// EZ web-app utils import\nimport { downloadFileRequest } from 'utils/apiUtil';\n// EZ web-app APIs import\nimport {\n addNewNote,\n addNewTransactionDoc,\n deleteDocument,\n deleteDocuments,\n deleteFile,\n downloadLegacyDocument,\n executeSignature,\n getPresignedURLContractDocUpload,\n getPresignedURLDoc,\n getPresignedURLDocsRead,\n getTransactionDocs,\n getTransactionFolders,\n linkDocsToTasks,\n moveSelectedDocs,\n updateDocument,\n} from 'utils/ez_api/documentAPIs';\n// EZ web-app types import\nimport {\n DocFolderType,\n DocNotesType,\n TransactionDocItemType,\n TransactionTaskItemType,\n} from 'types/transaction';\nimport { DocViewerType } from 'types/document';\n// EZ web-app components import\nimport {\n DocFilenameColumn,\n EZDateFormat,\n EZSelectTask,\n EZTable,\n EZUpload,\n UploadProgress,\n} from 'components';\nimport {\n forwardRefEZTableProps,\n IOnChangeCallbackProps,\n ITableQueryParams,\n} from 'components/table/EZProTable';\nimport { formatBytes, getFileExtension, getInitialFromFullname } from 'utils/commonUtil';\nimport { EZUploadProps } from 'components/upload/upload';\nimport { ALLOWED_CONTENT_TYPES, ALLOWED_DOCUSIGN_TYPES } from 'static/consts';\nimport { showMessage, showNotification } from 'utils/notificationUtil';\nimport { getTransactionTasks } from 'utils/ez_api/taskAPIs';\nimport { EsignatureModalContent } from './modals/esignatureModal';\nimport { HomeContext } from 'context/EZContext';\nimport { isDemoENV } from 'utils/envUtil';\nimport { updateOnboardingStep } from 'utils/onboardingUtil';\nimport { AxiosRequestConfig } from 'axios';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { EZSignatureTracker } from 'components/select/signatureTracker';\nimport { loadTemplates } from 'utils/ez_api/transactionAPIs';\n\n// EZ web-app styles and assets import\n\nconst { Text, Paragraph } = Typography;\nconst { Option } = Select;\n\nconst defaultTableParam: ITableQueryParams = {\n searchKeyword: '',\n orderParams: [],\n // orderParams: [['$doc_folder.rank$', 'desc']],\n whereParams: {},\n whereFilterParams: {},\n};\n\nconst defaultTableParamMainTaskMenu: ITableQueryParams = {\n searchKeyword: '',\n orderParams: [],\n // orderParams: [['$doc_folder.rank$', 'desc']],\n whereParams: {},\n whereFilterParams: {},\n};\n\nexport enum DOC_EMBEDDED_TYPE {\n TRANSACTION_DETAIL = 'transaction_detail',\n MAIN_MENU = 'main_menu',\n TRANSACTION_LIST = 'transaction_list',\n}\n\nexport type DocType = 'contract_document' | 'doc_library' | 'prospect_document';\n\nexport interface AxiosResponse<T = any> {\n data: T;\n pagination?: any;\n status: number;\n statusText: string;\n headers: any;\n config: AxiosRequestConfig;\n request?: any;\n}\n\ntype UploadWithTemplate = {\n doc_id?: number;\n template_id?: number;\n template_type?: string | null;\n doc_title?: string | null;\n};\n\nconst DocViewerWrapper: React.FC<{\n docType: DocType;\n fileListIDs: {\n file_id: number;\n contract_id?: number;\n prospect_id?: number;\n }[];\n}> = ({ docType, fileListIDs }) => {\n const [isLoading, setIsLoading] = useState(true);\n const [documents, setDocuments] = useState<DocViewerType[]>([]);\n const [activeDocIndex, setActiveDocIndex] = useState(0);\n const [activeDoc, setActiveDoc] = useState<DocViewerType>();\n\n const _fetchPresignURLs = () => {\n setIsLoading(true);\n getPresignedURLDocsRead(docType, fileListIDs)\n .then(({ data }) => {\n const docList = (data as DocViewerType[]).map(doc => {\n doc.uri = doc.presignedURL;\n doc.fileType = doc.content_type;\n\n return doc;\n });\n\n setDocuments(docList);\n\n if (docList.length) {\n setActiveDocIndex(0);\n setActiveDoc(docList[activeDocIndex]);\n }\n })\n .finally(() => {\n setIsLoading(false);\n });\n };\n\n useEffect(() => {\n if (activeDocIndex >= 0 && documents[activeDocIndex]) {\n setActiveDoc(documents[activeDocIndex]);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeDocIndex]);\n\n useEffect(() => {\n // get presign urls from AWS S3\n _fetchPresignURLs();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div>\n <Row className=\"mb-4\">\n <Col span={16}>\n Previewing: {activeDoc?.filename}\n {activeDoc?.key && activeDoc?.size\n ? ` (${formatBytes(activeDoc?.size || 0)})`\n : ''}\n </Col>\n <Col span={8} style={{ textAlign: 'right' }}>\n {documents.length > 1 ? (\n <Pagination\n simple\n defaultCurrent={activeDocIndex + 1}\n total={documents.length}\n onChange={page => {\n setActiveDocIndex(page - 1);\n }}\n />\n ) : (\n ''\n )}\n </Col>\n </Row>\n {!isLoading && activeDoc && ALLOWED_CONTENT_TYPES.includes(activeDoc.content_type) ? (\n <DocViewer\n config={{\n header: {\n disableHeader: true,\n },\n }}\n documents={activeDoc ? [activeDoc] : []}\n pluginRenderers={DocViewerRenderers}\n style={{ minHeight: '520px' }}\n />\n ) : (\n ''\n )}\n {!isLoading &&\n (!activeDoc || !ALLOWED_CONTENT_TYPES.includes(activeDoc.content_type)) ? (\n <Alert\n description=\"Preview is unavailable for the selected document(s).\"\n showIcon\n type=\"info\"\n />\n ) : (\n ''\n )}\n {isLoading && <Skeleton active />}\n </div>\n );\n};\n\nexport const previewDoc = (\n docType: 'contract_document' | 'doc_library' | 'prospect_document',\n fileListIDs: {\n file_id: number;\n contract_id?: number;\n prospect_id?: number;\n accountfolder_id?: number;\n }[]\n) => {\n Modal.success({\n title: <b>Document Viewer</b>,\n width: '95%',\n icon: <></>,\n okText: 'Close',\n style: {\n top: '30px',\n },\n closable: true,\n maskClosable: true,\n content: (\n <div>\n <DocViewerWrapper docType={docType} fileListIDs={fileListIDs} />\n </div>\n ),\n onOk() {},\n });\n};\n\nconst EditNoteComponent: React.FC<{\n record: TransactionDocItemType;\n saveNote: (document: TransactionDocItemType, note: string) => Promise<any>;\n}> = ({ record, saveNote }) => {\n const [isVisible, setIsVisible] = useState(false);\n const [noteContent, setNoteContent] = useState('');\n\n const _saveNote = () => {\n if (noteContent.trim().length > 0) {\n saveNote(record, noteContent.trim()).then(() => {\n setIsVisible(false);\n setNoteContent('');\n });\n }\n };\n\n useEffect(() => {\n setNoteContent('');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Popover\n visible={isVisible}\n content={\n <div className=\"add-new-note-popover\">\n <Row gutter={[0, 10]}>\n <Col span={24}>\n <Input.TextArea\n rows={3}\n value={noteContent}\n onChange={e => setNoteContent(e?.currentTarget?.value)}\n ></Input.TextArea>\n </Col>\n <Col span={24} style={{ textAlign: 'right' }}>\n <Button\n type=\"default\"\n className=\"mr-2\"\n onClick={() => setIsVisible(false)}\n >\n Close\n </Button>\n <Button type=\"primary\" onClick={() => _saveNote()}>\n Save\n </Button>\n </Col>\n </Row>\n </div>\n }\n overlayClassName=\"\"\n title={\n <>\n <span>Add New Note for Document: </span>\n <br />\n <span>{record.filename}</span>\n </>\n }\n trigger={'click'}\n showArrow={false}\n >\n <Button\n className=\"\"\n size=\"small\"\n type=\"link\"\n icon={<PlusOutlined />}\n onClick={() => setIsVisible(true)}\n >\n Add Note\n </Button>\n </Popover>\n );\n};\n\nexport const AppPageDocuments: React.FC<{\n pageType: DOC_EMBEDDED_TYPE;\n contractID?: number;\n isTransactionDeleted?: boolean;\n manualReloadCount: number;\n reloadTransactionStat?: (contract_id: number) => void;\n}> = ({\n contractID = -1,\n manualReloadCount,\n pageType,\n isTransactionDeleted,\n reloadTransactionStat,\n}) => {\n const HomeCtx = useContext(HomeContext);\n\n const UserPermission = HomeCtx.userPermission;\n\n const EZTableRef = useRef<forwardRefEZTableProps>();\n\n const isMainMenuTaskTab = !contractID || contractID <= 0;\n\n const [docFolders, setDocFolders] = useState<DocFolderType[]>([]);\n const [docIDsEdit, setDocIDsEdit] = useState<\n {\n docID: number;\n }[]\n >([]);\n\n const [fileUploadList, setFileUploadList] = useState<UploadFile[]>([]);\n const [taskList, setTaskList] = useState<TransactionTaskItemType[]>([]);\n const [selectedTaskListBulk, setSelectedTaskListBulk] = useState<TransactionTaskItemType[]>([]);\n\n const getDefaultTableParam = (isMainMenuTaskTab: boolean): ITableQueryParams => {\n return isMainMenuTaskTab ? defaultTableParamMainTaskMenu : defaultTableParam;\n };\n const [queryParams, setQueryParams] = useState<ITableQueryParams>(\n getDefaultTableParam(isMainMenuTaskTab)\n );\n const [docCompletionTypeFilter, setDocCompletionTypeFilter] = useState<string>(\n isMainMenuTaskTab ? 'unchecked_docs' : 'all_docs'\n );\n const [filterType, setFilterType] = useState<string>('today');\n const [isLoadedTemplate, setIsLoadedTemplate] = useState<boolean>(false);\n const [isLoadingLoad, setIsLoadingLoad] = useState<boolean>(false);\n\n const [docUploadFolderID, setDocUploadFolderID] = useState<number>();\n const [docFolderFilter, setDocFolderFilter] = useState<number>();\n const [executeLoading, setExecuteLoading] = useState<boolean>(false);\n\n const [activeWeblink, setIsWeblink] = useState<number | null>(null);\n const [weblinkTemp, setWeblinkTemp] = useState<string>('');\n\n const [bulkLinkTasksVisible, setBulkLinkTasksVisible] = useState(false);\n\n const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);\n const [expandedRecordIDs, setExpandedRecordIDs] = useState<React.Key[]>([]);\n\n // const [isUpdatingDoc, setIsUpdatingDoc] = useState<boolean>(false);\n\n async function _fetchData(EZTableQueryParams: string): Promise<any> {\n return await getTransactionDocs(contractID, EZTableQueryParams).then(\n (result: AxiosResponse) => {\n if (!isLoadedTemplate)\n setIsLoadedTemplate(\n result.data.some((el: TransactionDocItemType) => el.date_uploaded === null)\n );\n return result;\n }\n );\n }\n\n const _handleFileUploadChange = ({ file, fileList }: UploadChangeParam) => {\n // TODO: Find the alternative solution as the setState for array will trigger re-rendering the table, which is bad for user experience due to unresponsive scroll\n setFileUploadList([...fileList]);\n\n if (file.status === 'done') {\n if (contractID) {\n addNewTransactionDoc(contractID, {\n folder_id: docUploadFolderID,\n filename: file.name,\n u_filename: file.response?.newFilename,\n bucket: file.response?.Bucket,\n key: file.response?.Key,\n size: file.size,\n content_type: file.type,\n }).then(() => {\n setQueryParams({\n ...queryParams,\n resetPagination: false,\n });\n // update onboarding step to completed\n updateOnboardingStep('add_documents_or_files', HomeCtx.refetchOnboardingList);\n });\n setFileUploadList(fileList.filter(f => f.uid !== file.uid));\n\n reloadTransactionStat?.(contractID);\n }\n }\n };\n\n const _handleFileUploadOnTemplate = ({ file, fileList }: UploadChangeParam, doc_id: number) => {\n // TODO: Find the alternative solution as the setState for array will trigger re-rendering the table, which is bad for user experience due to unresponsive scroll\n setFileUploadList([...fileList]);\n const payload = {\n filename: file.name,\n u_filename: file.response?.newFilename,\n bucket: file.response?.Bucket,\n key: file.response?.Key,\n size: file.size,\n content_type: file.type,\n };\n\n if (file.status === 'done') {\n if (contractID) {\n updateDocument(contractID, doc_id, payload, 'FULL').then(() => {\n setQueryParams({\n ...queryParams,\n resetPagination: false,\n });\n // update onboarding step to completed\n updateOnboardingStep('add_documents_or_files', HomeCtx.refetchOnboardingList);\n });\n setFileUploadList(fileList.filter(f => f.uid !== file.uid));\n\n reloadTransactionStat?.(contractID);\n }\n }\n };\n\n const _hanldeUploadWeblink = (\n fileLink: string,\n doc_id: number,\n callbackIsWeblink: React.Dispatch<React.SetStateAction<number | null>>,\n callbackTemp: React.Dispatch<React.SetStateAction<string>>\n ) => {\n if (contractID) {\n updateDocument(\n contractID,\n doc_id,\n {\n filename: fileLink,\n key: fileLink,\n content_type: 'text/html',\n },\n 'FULL'\n )\n .then(() => {\n setQueryParams({\n ...queryParams,\n resetPagination: false,\n });\n showNotification(\n 'success',\n `Document: \"${fileLink}\" has been successfully updated.`\n );\n // update onboarding step to completed\n updateOnboardingStep('add_documents_or_files', HomeCtx.refetchOnboardingList);\n })\n .finally(() => {\n callbackIsWeblink(null);\n callbackTemp('');\n });\n reloadTransactionStat?.(contractID);\n }\n };\n\n const _handleLoadTemplates = () => {\n if (contractID) {\n setIsLoadingLoad(true);\n loadTemplates(contractID)\n .then(() => {\n showNotification('success', 'Templates has been loaded !');\n\n setQueryParams({\n ...queryParams,\n resetPagination: false,\n });\n // update onboarding step to completed\n updateOnboardingStep(\n 'load_templates_on_transaction',\n HomeCtx.refetchOnboardingList\n );\n })\n .finally(() => {\n setIsLoadingLoad(false);\n reloadTransactionStat?.(contractID);\n });\n }\n };\n\n async function _fetchPresignURL(payload: any): Promise<any> {\n return getPresignedURLContractDocUpload(contractID, payload);\n }\n\n const _onChangeCallback: IOnChangeCallbackProps = () => {};\n\n const _reloadSubTabData = (resetPagination?: boolean, silentLoading?: boolean) => {\n setQueryParams({\n ...queryParams,\n resetPagination,\n silentLoading: silentLoading || undefined,\n });\n };\n\n const _fetchDocFolders = () => {\n getTransactionFolders(contractID).then(resp => {\n if (resp.data) {\n setDocFolders(\n resp.data.filter((item: DocFolderType) => {\n if (item.doc_folder_preference)\n return item.doc_folder_preference.toggle === 1;\n else return item;\n })\n );\n setDocUploadFolderID(resp.data?.[0]?.folder_id);\n }\n });\n };\n\n const _fetchTasks = () => {\n getTransactionTasks(\n contractID,\n qs.stringify({\n pageSize: 500,\n })\n ).then(result => {\n setTaskList(result?.data || []);\n });\n };\n\n const _downloadDocument = (doc: TransactionDocItemType) => {\n showMessage('success', 'Download has been initiated. Please wait...');\n\n // if bucket and doc property has value, the doc will be downloaded from AWS S3\n if (doc.bucket && doc.key) {\n getPresignedURLDoc('contract_document', doc.doc_id, 'download').then(resp => {\n downloadFileRequest(resp.data?.presignedURL, doc.filename || 'untitled');\n });\n } else {\n downloadLegacyDocument('contract_document', doc.doc_id).then((resp: any) => {\n fileDownload(resp, doc.filename || 'untitled');\n });\n }\n };\n\n const _changeFileType = async (\n record: TransactionDocItemType,\n formType: 'FULL' | 'PARTIAL' | 'SINGLE' = 'PARTIAL'\n ) => {\n setExecuteLoading(true);\n const newContentType = record.template_type === 'Weblink' ? 'file' : 'Weblink';\n return updateDocument(\n contractID,\n record.doc_id,\n {\n template_type: newContentType,\n },\n formType\n )\n .then(() => {\n if (contractID) {\n reloadTransactionStat?.(contractID);\n }\n if (record.doc_id)\n EZTableRef.current?.modifyData(\n { ...record, template_type: newContentType },\n record.doc_id\n );\n\n showNotification(\n 'success',\n `Document: \"${record.doc_title}\" has been changed to ${newContentType}.`\n );\n\n return {\n ...record,\n content_type: newContentType,\n };\n })\n .catch(err => {\n throw err;\n })\n .finally(() => {\n setExecuteLoading(false);\n });\n };\n\n const _showEsignatureModal = (doc: TransactionDocItemType) => {\n const docuSignModal = Modal.info({\n title: (\n <>\n E-signature for document/file: <b>{doc.filename}</b>\n </>\n ),\n content: <EsignatureModalContent contractID={contractID} doc={doc} />,\n okButtonProps: {\n style: {\n display: 'none',\n },\n },\n className: 'modal-wrapper-docusign',\n onOk: () => {\n return true;\n },\n width: '1100px',\n closable: true,\n maskClosable: true,\n cancelText: 'Close',\n });\n };\n\n const _initiateDocuSign = (doc: TransactionDocItemType) => {\n if (!ALLOWED_DOCUSIGN_TYPES.includes(getFileExtension(doc.filename) || '')) {\n showMessage(\n 'error',\n <span>\n Invalid file. Please see all the supporting file types{' '}\n <a\n href=\"https://support.docusign.com/s/document-item?language=en_US&rsc_301&bundleId=gbo1643332197980&topicId=xln1578456261162.html&_LANG=enus\"\n target={'_blank'}\n >\n here\n </a>\n .\n </span>\n );\n\n return;\n }\n\n _showEsignatureModal(doc);\n };\n\n const _saveDocumentRecord = async (\n newData: TransactionDocItemType,\n oldData: TransactionDocItemType,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n ) => {\n // setDocIDsEdit([...docIDsEdit, { docID: newData.doc_id }]);\n if (newData.filename === '' || newData.filename === null) {\n newData.filename = oldData.filename;\n }\n\n if (newData.doc_id) EZTableRef.current?.modifyData(newData, newData.doc_id);\n\n return updateDocument(\n oldData.contract_id,\n newData.doc_id,\n {\n ...newData,\n },\n formType\n )\n .then(() => {\n if (contractID) {\n reloadTransactionStat?.(contractID);\n }\n\n if (newData.status === 1 && oldData.status === 0) {\n showNotification(\n 'success',\n `Document: \"${newData.filename}\" has been marked as checked.`\n );\n } else if (newData.status === 0 && oldData.status === 1) {\n showNotification(\n 'success',\n `Document: \"${newData.filename}\" has been marked as unchecked.`\n );\n } else {\n showNotification(\n 'success',\n `Document: \"${newData.filename}\" has been successfully updated.`\n );\n }\n\n if (oldData.folder_id !== newData.folder_id) {\n _reloadSubTabData(false, true);\n }\n\n return newData;\n })\n .catch(err => {\n throw err;\n });\n };\n\n const _executeSignatures = async (\n newData: TransactionDocItemType,\n oldData: TransactionDocItemType,\n callback: React.Dispatch<React.SetStateAction<boolean>>,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n ) => {\n setExecuteLoading(true);\n // setDocIDsEdit([...docIDsEdit, { docID: newData.doc_id }]);\n if (newData.filename === '' || newData.filename === null) {\n newData.filename = oldData.filename;\n }\n\n if (newData.doc_id)\n EZTableRef.current?.modifyData(\n { ...newData, last_execute: new Date() },\n newData.doc_id\n );\n return executeSignature(\n oldData.contract_id,\n newData.doc_id,\n {\n ...newData,\n },\n formType\n )\n .then(() => {\n if (contractID) {\n reloadTransactionStat?.(contractID);\n }\n\n showNotification(\n 'success',\n `Document: \"${newData.filename}\" has been successfully updated.`\n );\n\n if (oldData.folder_id !== newData.folder_id) {\n _reloadSubTabData(false, true);\n }\n\n return newData;\n })\n .catch(err => {\n throw err;\n })\n .finally(() => {\n setExecuteLoading(false);\n callback(false);\n });\n };\n\n const _applyFilter = (\n filterType: string,\n docCompletionTypeFilter: string,\n docFolderFilter?: number\n ) => {\n const currentWhereFilterParams: any = {};\n // const currentWhereFilterParams = { ...queryParams.whereFilterParams };\n\n switch (docCompletionTypeFilter) {\n case 'checked_docs':\n currentWhereFilterParams['status'] = 1;\n break;\n case 'all_docs':\n currentWhereFilterParams['status'] = undefined;\n break;\n case 'unchecked_docs':\n currentWhereFilterParams['status'] = 0;\n break;\n\n default:\n break;\n }\n\n if (docFolderFilter === -1) {\n if (currentWhereFilterParams['$doc_folder.folder_id$']) {\n delete currentWhereFilterParams['$doc_folder.folder_id$'];\n }\n } else if (docFolderFilter) {\n currentWhereFilterParams['$doc_folder.folder_id$'] = docFolderFilter;\n }\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: { ...currentWhereFilterParams },\n resetPagination: true,\n });\n };\n\n const _columns: ProColumns<TransactionDocItemType>[] = [\n {\n title: 'Check',\n dataIndex: 'docs_id',\n width: isMainMenuTaskTab ? '40px' : '28px',\n sorter: false,\n // fixed: 'left',\n editable: false,\n align: 'center',\n render: (_, record) =>\n isTransactionDeleted ? (\n <></>\n ) : (\n <>\n <Button\n className=\"mr-1\"\n size=\"small\"\n type=\"default\"\n // disabled={record.content_type === null}\n onClick={e => {\n if (UserPermission && UserPermission?.documents_toggle !== 2)\n return;\n _saveDocumentRecord(\n { ...record, status: record.status === 1 ? 0 : 1 },\n record\n );\n }}\n >\n {record.status === 1 ? (\n <CheckCircleFilled style={{ color: 'green' }} />\n ) : (\n <CheckCircleOutlined />\n )}\n </Button>\n </>\n ),\n },\n {\n title: 'Title',\n dataIndex: 'doc_title',\n width: isMainMenuTaskTab ? '170px' : '140px',\n //disable for a while looking solution\n sorter: true,\n // fixed: 'left',\n // ellipsis: true,\n render: (_, record) => {\n const name = record.doc_title || '[Empty]';\n return (\n <>\n <Text title={name}>{name}</Text>\n </>\n );\n },\n },\n {\n title: 'File Name',\n dataIndex: 'filename',\n width: isMainMenuTaskTab ? '170px' : '110px',\n sorter: true,\n editable: false,\n // ellipsis: true,\n render: (_, record, idx) => (\n <DocFilenameColumn\n record={record}\n index={idx}\n isTransactionDeleted={isTransactionDeleted}\n contractID={contractID}\n uploadProps={uploadProps}\n _handleFileUploadOnTemplate={_handleFileUploadOnTemplate}\n _downloadDocument={_downloadDocument}\n _initiateDocuSign={_initiateDocuSign}\n _deleteFile={_deleteFile}\n _hanldeUploadWeblink={_hanldeUploadWeblink}\n />\n ),\n },\n {\n title: 'Quick Info',\n dataIndex: 'status',\n width: isMainMenuTaskTab ? '60px' : '80px',\n sorter: false,\n editable: false,\n render: (_, record) => (\n <>\n <Tooltip title={`${record.doc_notes?.length || 0} note(s)`}>\n <Tag\n className={`tag-rounded ${\n record.doc_notes?.length ? '' : 'color-secondary'\n }`}\n onClick={() => _expandSelectedRows([record.doc_id])}\n >\n <MessageOutlined /> {record.doc_notes?.length || 0}\n </Tag>\n </Tooltip>\n <Tooltip title={`${record.task_todolists?.length || 0} linked task(s)`}>\n <Tag\n className={`tag-rounded ${\n record.task_todolists?.length ? '' : 'color-secondary'\n }`}\n onClick={() => _expandSelectedRows([record.doc_id])}\n >\n <CarryOutOutlined /> {record.task_todolists?.length || 0}\n </Tag>\n </Tooltip>\n <Tooltip\n title={\n record.review_status === 2\n ? 'This document/file has been approved'\n : \"This document/file hasn't yet been approved \"\n }\n >\n <Tag\n className={`mr-0 tag-rounded ${\n record.review_status === 2 ? '' : 'color-secondary'\n }`}\n >\n <FolderViewOutlined />\n </Tag>\n </Tooltip>\n </>\n ),\n },\n {\n title: 'Signature Tracking',\n dataIndex: ['seller_sign', 'seller_agent_sign', 'buyer_sign'],\n width: '140px',\n editable: false,\n // ellipsis: true,\n render: (_, record) => {\n let signatures = {\n S: record.seller_sign,\n SA: record.seller_agent_sign,\n B: record.buyer_sign,\n BA: record.buyer_agent_sign,\n };\n return record.date_uploaded ? (\n <EZSignatureTracker\n isTransactionDeleted={isTransactionDeleted}\n onSubmit={_executeSignatures}\n data={signatures}\n isLoading={executeLoading}\n record={record}\n />\n ) : (\n <> - </>\n );\n },\n },\n {\n title: 'Folder',\n dataIndex: 'folder_id',\n width: isMainMenuTaskTab ? '100px' : '100px',\n sorter: true,\n // hideInTable: docFolderFilter && docFolderFilter > 0 ? true : false,\n valueType: 'select',\n fieldProps: {\n options: docFolders.map((item, idx) => ({\n label: item.doc_folder_preference?.folder_name || item.folder_name,\n key: item.folder_id,\n value: item.folder_id,\n })),\n },\n render: (_, record) => (\n <>\n <Tag\n style={{\n color: '#1890FF',\n backgroundColor: '#E6F7FF',\n border: '1px solid #91D5FF',\n }}\n >\n {record.doc_folder?.doc_folder_preference?.folder_name ||\n record.doc_folder?.folder_name}\n </Tag>\n </>\n ),\n },\n {\n title: 'Description',\n dataIndex: 'description',\n width: isMainMenuTaskTab ? '230px' : '200px',\n sorter: true,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text\n type={record.status === 1 ? 'secondary' : undefined}\n title={record.description}\n >\n {record.description || '-'}\n </Text>\n </>\n ),\n },\n {\n title: 'Uploaded By',\n dataIndex: 'account.fullname',\n width: isMainMenuTaskTab ? '90px' : '70px',\n editable: false,\n sorter: false,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text\n type={record.status === 1 ? 'secondary' : undefined}\n title={record.account?.fullname}\n >\n {record.account?.fullname || record.sender_email || '-'}\n </Text>\n </>\n ),\n },\n\n {\n title: 'Uploaded On',\n dataIndex: 'date_uploaded',\n width: isMainMenuTaskTab ? '90px' : '80px',\n editable: false,\n sorter: true,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text type={record.status === 1 ? 'secondary' : undefined}>\n <EZDateFormat value={record.date_uploaded} format=\"MMM Do, YYYY hh:mma\" />\n </Text>\n </>\n ),\n },\n {\n title: 'Signature Last Executed On',\n dataIndex: 'last_execute',\n width: isMainMenuTaskTab ? '90px' : '80px',\n editable: false,\n sorter: true,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text type={record.status === 1 ? 'secondary' : undefined}>\n <EZDateFormat value={record.last_execute} format=\"MMM Do, YYYY hh:mma\" />\n </Text>\n </>\n ),\n },\n {\n title: 'Action',\n dataIndex: 'action',\n width: isMainMenuTaskTab ? '85px' : '65px',\n valueType: 'option',\n // hideInTable: UserPermission && UserPermission?.documents_toggle === 2 ? false : true,\n render: (_, record, index, action) =>\n UserPermission && UserPermission?.documents_toggle === 2 ? (\n <Space size=\"small\" className=\"pl-1\">\n {record.date_uploaded && (\n <>\n {!isTransactionDeleted && (\n <Button\n className=\"p-0 mr-0\"\n type=\"link\"\n icon={<EditFilled />}\n title=\"Quick-edit this document\"\n onClick={() => {\n action?.startEditable(record.doc_id);\n }}\n ></Button>\n )}\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 mr-0\"\n size=\"small\"\n type=\"link\"\n icon={<FileSearchOutlined />}\n title=\"Preview\"\n onClick={() => {\n previewDoc('contract_document', [\n {\n file_id: record.doc_id,\n contract_id: contractID,\n },\n ]);\n }}\n ></Button>\n </>\n )}\n <Dropdown\n trigger={['click']}\n overlay={\n record.date_uploaded ? (\n <Menu>\n <Menu.Item\n key=\"0\"\n onClick={() => _downloadDocument(record)}\n >\n <DownloadOutlined className=\"mr-3\" />\n <span className=\"\">Download</span>\n </Menu.Item>\n {/* disable docusign for weblink type */}\n {record.template_type !== 'Weblink' &&\n !isTransactionDeleted && (\n <Menu.Item\n key=\"1\"\n onClick={() => _initiateDocuSign(record)}\n >\n <AuditOutlined className=\"mr-3\" />\n <span className=\"\">Send to DocuSign</span>\n </Menu.Item>\n )}\n <Menu.Divider />\n {!isTransactionDeleted && (\n <Menu.Item\n key=\"2\"\n danger\n onClick={() => _deleteDocument(record)}\n >\n <DeleteOutlined className=\"mr-3\" />\n Delete Document\n </Menu.Item>\n )}\n </Menu>\n ) : (\n // template document menu\n <Menu>\n {record.template_type &&\n record.template_type === 'Weblink' &&\n !isTransactionDeleted ? (\n <Menu.Item\n key=\"0\"\n onClick={() => _changeFileType(record, 'SINGLE')}\n >\n <FileOutlined className=\"mr-3\" />\n <span className=\"\">Change to File</span>\n </Menu.Item>\n ) : (\n !isTransactionDeleted && (\n <Menu.Item\n key=\"0\"\n onClick={() =>\n _changeFileType(record, 'SINGLE')\n }\n >\n <LinkOutlined className=\"mr-3\" />\n <span className=\"\">Change to Weblink</span>\n </Menu.Item>\n )\n )}\n <Menu.Divider />\n {!isTransactionDeleted && (\n <Menu.Item\n key=\"2\"\n danger\n onClick={() => _deleteDocument(record)}\n >\n <DeleteOutlined className=\"mr-3\" />\n Delete Document\n </Menu.Item>\n )}\n </Menu>\n )\n }\n placement=\"bottomRight\"\n >\n <span onClick={e => e.preventDefault()}>\n <Button size=\"small\" type=\"link\" icon={<EllipsisOutlined />} />\n </span>\n </Dropdown>\n </Space>\n ) : (\n record.date_uploaded && (\n <Space size=\"small\" className=\"pl-1\">\n {' '}\n <Button\n className=\"p-0 mr-1\"\n size=\"small\"\n type=\"link\"\n icon={<FileSearchOutlined />}\n title=\"Preview\"\n onClick={() => {\n previewDoc('contract_document', [\n {\n file_id: record.doc_id,\n contract_id: contractID,\n },\n ]);\n }}\n ></Button>\n </Space>\n )\n ),\n fixed: 'right',\n },\n ];\n\n const _expandSelectedRows = (rowKeys: number[]) => {\n const newRowIDs: number[] = [];\n for (let index = 0; index < rowKeys.length; index++) {\n const rowID = rowKeys[index];\n\n if (!expandedRecordIDs.find(elm => elm === rowID)) newRowIDs.push(rowID);\n }\n\n if (newRowIDs.length) setExpandedRecordIDs([...expandedRecordIDs, ...newRowIDs]);\n };\n\n const _expandIcon: RenderExpandIcon<TransactionDocItemType> = ({\n expanded,\n onExpand,\n record,\n }) => {\n return expanded ? (\n <DownOutlined\n id={`ez-tr-icon-expandable-c_${contractID}-doc_${record.doc_id}`}\n onClick={(e: any) => onExpand(record, e)}\n />\n ) : (\n <RightOutlined\n id={`ez-tr-icon-expandable-c_${contractID}-doc_${record.doc_id}`}\n onClick={(e: any) => onExpand(record, e)}\n />\n );\n };\n\n const _saveDocNote = async (record: TransactionDocItemType, note: string) => {\n return addNewNote(contractID, record.doc_id, note).then(resp => {\n const note = resp.data as DocNotesType;\n\n record.doc_notes?.unshift(note);\n\n if (record.doc_id) EZTableRef.current?.modifyData(record, record.doc_id);\n\n return resp.data;\n });\n };\n\n const _deleteFile = (record: TransactionDocItemType) => {\n if (isDemoENV()) {\n showMessage('info', 'Delete file function is not available on Demo server.');\n\n return;\n }\n\n const deleteConfirmationModal = Modal.confirm({\n title: `Delete confirmation`,\n content: (\n <>\n Are you sure to delete file: <b>{record.filename}</b> on{' '}\n <b>{record.doc_title}</b>?\n </>\n ),\n onOk: () => {\n deleteConfirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Deleting...',\n });\n deleteFile(record.contract_id, record.doc_id).then(() => {\n deleteConfirmationModal.destroy();\n if (reloadTransactionStat && contractID) {\n reloadTransactionStat(contractID);\n }\n\n showNotification(\n 'success',\n `File: \"${record.filename}\" has been successfully deleted.`\n );\n _reloadSubTabData(false, true);\n });\n return true;\n },\n closable: true,\n maskClosable: true,\n });\n };\n const _deleteDocument = (record: TransactionDocItemType) => {\n if (isDemoENV()) {\n showMessage('info', 'Delete document function is not available on Demo server.');\n\n return;\n }\n\n const deleteConfirmationModal = Modal.confirm({\n title: `Delete confirmation`,\n content: (\n <>\n Are you sure to delete document/file: <b>{record.filename}</b>?\n </>\n ),\n onOk: () => {\n deleteConfirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Deleting...',\n });\n deleteDocument(record.contract_id, record.doc_id).then(() => {\n deleteConfirmationModal.destroy();\n if (reloadTransactionStat && contractID) {\n reloadTransactionStat(contractID);\n }\n\n showNotification(\n 'success',\n `Document: \"${\n record.doc_title || record.filename\n }\" has been successfully deleted.`\n );\n _reloadSubTabData(false, true);\n });\n return true;\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const _deleteDocuments = (docIDs: number[]) => {\n if (isDemoENV()) {\n showMessage('info', 'Delete documents function is not available on Demo server.');\n\n return;\n }\n deleteDocuments(contractID, docIDs).then(() => {\n showNotification(\n 'success',\n `${docIDs.length} selected docs have been successfully deleted.`\n );\n setImmediate(() => {\n if (reloadTransactionStat && contractID) {\n reloadTransactionStat(contractID);\n }\n\n _reloadSubTabData(false, true);\n\n setSelectedRowKeys([]);\n });\n });\n };\n\n const _doBulkAction_moveDocs = (\n selectedRowKeys: React.Key[],\n newFolderID: number,\n newFolderTitle?: string\n ) => {\n const noOfKeys = selectedRowKeys.length;\n\n moveSelectedDocs(contractID, selectedRowKeys as number[], newFolderID).then(resp => {\n showNotification(\n 'success',\n `${noOfKeys} selected doc(s) have been moved to ${newFolderTitle}.`\n );\n setImmediate(() => {\n _reloadSubTabData(false, true);\n\n setSelectedRowKeys([]);\n });\n });\n };\n\n const _doBulkAction_linkTasks = (\n selectedRowKeys: React.Key[],\n selectedTasks: TransactionTaskItemType[]\n ) => {\n const noOfKeys = selectedRowKeys.length;\n\n linkDocsToTasks(\n contractID,\n selectedRowKeys as number[],\n selectedTasks.map(task => task.id)\n ).then(result => {\n showNotification('success', `Linked tasks for the selected docs have been updated.`);\n setImmediate(() => {\n _reloadSubTabData(false, true);\n\n setSelectedRowKeys([]);\n setSelectedTaskListBulk([]);\n setBulkLinkTasksVisible(false);\n });\n });\n };\n\n const ExpandedRowComponent: React.FC<{ record: TransactionDocItemType }> = ({ record }) => {\n const [editMode, setEditMode] = useState<boolean>(false);\n const [tasksEditMode, setTasksEditMode] = useState<boolean>(false);\n const [isSubmittingForm, setIsSubmittingForm] = useState<boolean>(false);\n\n const [selectedTaskList, setSelectedTaskList] = useState<TransactionTaskItemType[]>([]);\n\n const _saveSelectedTasks = () => {\n linkDocsToTasks(\n record.contract_id,\n [record.doc_id],\n selectedTaskList.map(task => task.id)\n )\n .then(result => {\n const tasks = result.data as TransactionTaskItemType[];\n\n record.task_todolists = tasks;\n\n if (record.doc_id) EZTableRef.current?.modifyData(record, record.doc_id);\n })\n .finally(() => {\n setTasksEditMode(false);\n });\n };\n\n const _onChangeSelectedTaskIDs = (selectedTaskIDs: any[], selectedTaskList: any[]) => {\n setSelectedTaskList(selectedTaskList);\n };\n\n useEffect(() => {\n if (tasksEditMode) {\n // _fetchTasks(); // temporarily disable this as it triggers rerendering the whole table.\n setSelectedTaskList(record.task_todolists || []);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tasksEditMode]);\n\n return (\n <div className=\"doc-note-wrapper p-2\">\n <div style={{ paddingLeft: '65px' }}>\n <Row>\n <Col span={12} className=\"pr-5\">\n <Row>\n <Col span={24} className=\"\">\n <Row className=\"\">\n <Col span={12} className=\"\">\n <Text strong>Document Notes</Text>\n </Col>\n <Col span={12} style={{ textAlign: 'right' }}>\n {UserPermission?.documents_toggle === 2 &&\n !isTransactionDeleted && (\n <EditNoteComponent\n record={record}\n saveNote={_saveDocNote}\n />\n )}\n </Col>\n </Row>\n </Col>\n <Divider className=\"mt-2 mb-3\" />\n <Col span={24}>\n {record.doc_notes?.length ? (\n <List\n itemLayout=\"horizontal\"\n dataSource={record.doc_notes}\n renderItem={record => (\n <List.Item>\n <List.Item.Meta\n avatar={\n <Avatar size={42}>\n {record.account &&\n record.account.fullname\n ? getInitialFromFullname(\n record.account.fullname\n )\n : 'N/A'}\n </Avatar>\n }\n title={\n <span>\n <Text strong className=\"mr-1\">\n {record.account?.fullname}\n </Text>\n <Text className=\"mr-1\">\n {record.account?.email\n ? `(${record.account.email})`\n : ``}\n </Text>\n <Text\n type=\"secondary\"\n className=\"mr-2\"\n >\n On{' '}\n <EZDateFormat\n value={record.date_posted}\n format=\"MM/DD/YYYY - hh:mma\"\n />\n </Text>\n </span>\n }\n description={\n <Paragraph\n style={{ whiteSpace: 'pre-wrap' }}\n ellipsis={{\n rows: 2,\n expandable: true,\n }}\n title={`${record.notes}`}\n >\n {record.notes}\n </Paragraph>\n }\n />\n </List.Item>\n )}\n />\n ) : (\n <Text italic type=\"secondary\">\n No note added. \n <Tooltip\n title={`Click the \"Add Note\" button to add new note.`}\n >\n <InfoCircleFilled />\n </Tooltip>\n </Text>\n )}\n </Col>\n </Row>\n </Col>\n <Col span={12} className=\"pl-5\">\n <Row className=\"\">\n <Col span={24} className=\"\">\n <Row className=\"\">\n <Col span={12} className=\"\">\n <Text strong>Linked Tasks</Text>\n </Col>\n <Col span={12} style={{ textAlign: 'right' }}>\n {!tasksEditMode &&\n UserPermission?.documents_toggle === 2 &&\n !isTransactionDeleted && (\n <>\n <Button\n className=\"\"\n size=\"small\"\n type=\"link\"\n icon={<EditOutlined />}\n onClick={() => setTasksEditMode(true)}\n >\n Edit\n </Button>\n </>\n )}\n\n {tasksEditMode && (\n <Space>\n <Button\n className=\"mr-2\"\n type=\"default\"\n size=\"small\"\n onClick={() => setTasksEditMode(false)}\n disabled={isSubmittingForm}\n >\n Cancel\n </Button>\n <Button\n className=\"\"\n size=\"small\"\n icon={<SaveOutlined />}\n type=\"primary\"\n loading={isSubmittingForm}\n disabled={isSubmittingForm}\n onClick={() => _saveSelectedTasks()}\n >\n {isSubmittingForm ? 'Saving' : 'Save'}\n </Button>\n </Space>\n )}\n </Col>\n </Row>\n </Col>\n <Divider className=\"mt-2 mb-3\" />\n <Col span={24}>\n {!tasksEditMode && (\n <>\n {record.task_todolists?.length ? (\n <List\n size=\"small\"\n itemLayout=\"horizontal\"\n bordered={false}\n dataSource={record.task_todolists}\n renderItem={item => (\n <List.Item className=\"p-0\">\n <Space align=\"center\">\n <Text\n type={\n item.compl === 1\n ? 'secondary'\n : undefined\n }\n className={`task-completion-toggle ${\n item.compl === 1\n ? 'task-completed'\n : 'task-not-completed'\n }`}\n >\n {item.compl === 1 ? (\n <CheckCircleFilled />\n ) : (\n <CheckCircleOutlined />\n )}\n </Text>\n <Text\n type={\n item.compl === 1\n ? 'secondary'\n : undefined\n }\n >\n <span className=\"\">\n {item.title}{' '}\n </span>\n <span className=\"\">\n (Due on{' '}\n <EZDateFormat\n value={item.duedate}\n format=\"MM/DD/YYYY\"\n />\n )\n </span>\n </Text>\n </Space>\n </List.Item>\n )}\n />\n ) : (\n <Text italic type=\"secondary\">\n No linked tasks. \n <Tooltip\n title={`Click the edit button to link the tasks.`}\n >\n <InfoCircleFilled />\n </Tooltip>\n </Text>\n )}\n </>\n )}\n {tasksEditMode && (\n <>\n <EZSelectTask\n options={taskList as any[]}\n onChange={(values: any, options: any) =>\n _onChangeSelectedTaskIDs(values, options)\n }\n notFoundContent={\n <span>\n No added tasks on <b>\"Tasks\"</b> tab.\n </span>\n }\n value={selectedTaskList.map(d => d.id)}\n />\n </>\n )}\n </Col>\n </Row>\n </Col>\n </Row>\n </div>\n </div>\n );\n };\n\n const uploadProps: EZUploadProps = {\n fileList: fileUploadList,\n onChange: _handleFileUploadChange,\n getPresignedURL: _fetchPresignURL,\n };\n\n useEffect(() => {\n _applyFilter(filterType, docCompletionTypeFilter, docFolderFilter);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterType, docCompletionTypeFilter, docFolderFilter]);\n\n useEffect(() => {\n if (!isMainMenuTaskTab) {\n _reloadSubTabData();\n _fetchDocFolders();\n _fetchTasks();\n } else {\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [manualReloadCount]);\n\n useEffect(() => {\n _fetchTasks();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"ez-component-documents\">\n <Row className=\"row-wrapper\">\n {UserPermission &&\n UserPermission?.documents_toggle === 2 &&\n !isTransactionDeleted && (\n <>\n <Col span={24}>\n <Space className=\"alignright mb-4\">\n <EZUpload {...uploadProps}>\n <Button\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ textAlign: 'left' }}\n defaultValue={1}\n >\n Add Document\n </Button>\n </EZUpload>\n {!isLoadedTemplate && (\n <Button\n style={{ textAlign: 'left' }}\n className=\"\"\n disabled={isLoadingLoad}\n onClick={_handleLoadTemplates}\n >\n {isLoadingLoad ? <Spin /> : `Load Template`}\n </Button>\n )}\n <Select\n style={{ textAlign: 'left', width: 300 }}\n className=\"\"\n defaultValue={1}\n disabled={\n fileUploadList.filter(\n file => file.status === 'uploading'\n ).length > 0\n }\n onChange={(val: number) => {\n setDocUploadFolderID(val);\n }}\n >\n {docFolders.map(item => (\n <Option\n value={item.folder_id}\n key={`docfolder-select-${item.folder_id}`}\n >\n <span>\n <Text>Upload To: </Text>\n <Text strong>\n {item.doc_folder_preference?.folder_name ||\n item.folder_name}\n </Text>\n </span>\n </Option>\n ))}\n </Select>\n </Space>\n </Col>\n <Col span={24} className=\"mb-3\">\n <div>\n <UploadProgress\n fileUploadList={fileUploadList}\n setFileUploadList={setFileUploadList}\n />\n </div>\n <EZUpload dragger {...uploadProps}>\n <p className=\"ant-upload-drag-icon\">\n <InboxOutlined />\n </p>\n <p className=\"ant-upload-text\">\n Click or drag file to this area to upload\n </p>\n <p className=\"ant-upload-hint\">\n Support for a single or bulk upload.\n </p>\n </EZUpload>\n </Col>\n </>\n )}\n\n <Col span={24}>\n {pageType === DOC_EMBEDDED_TYPE.TRANSACTION_DETAIL && (\n <Tabs\n type=\"editable-card\"\n defaultActiveKey=\"-1\"\n addIcon={\n <Tooltip title={`Edit the Document Folders on Admin Area menu.`}>\n <SettingOutlined />\n </Tooltip>\n }\n onChange={val => {\n const docFolderID = parseInt(val.replace('tab-docfolder-', ''));\n setDocFolderFilter(docFolderID);\n setSelectedRowKeys([]);\n }}\n tabBarExtraContent={\n <div>\n <Select\n style={{ textAlign: 'left', width: 300 }}\n value={docCompletionTypeFilter}\n onChange={val => setDocCompletionTypeFilter(val)}\n className=\"mb-2 ml-3\"\n >\n <Option value=\"unchecked_docs\">\n <span>\n <Text>Show: </Text>\n <Text strong>Marked as unchecked</Text>\n </span>\n </Option>\n <Option value=\"checked_docs\">\n <span>\n <Text>Show: </Text>\n <Text strong>Marked as checked</Text>\n </span>\n </Option>\n <Option value=\"all_docs\">\n <span>\n <Text>Show: </Text>\n <Text strong>All Documents and Files</Text>\n </span>\n </Option>\n </Select>\n </div>\n }\n >\n <Tabs.TabPane\n tab=\"All Documents and Files\"\n key=\"-1\"\n closable={false}\n ></Tabs.TabPane>\n {docFolders.map(item => (\n <Tabs.TabPane\n tab={`${\n item.doc_folder_preference?.folder_name || item.folder_name\n }`}\n key={`tab-docfolder-${item.folder_id}`}\n closable={false}\n ></Tabs.TabPane>\n ))}\n </Tabs>\n )}\n </Col>\n <Col span={24}>\n <Row\n className={`table-selected-indicator ${\n selectedRowKeys?.length ? 'has-row-selected' : 'no-row-selected'\n }`}\n >\n <Col span={24}>\n <Alert\n style={{ minWidth: '500px' }}\n message={\n selectedRowKeys && selectedRowKeys.length ? (\n <Space>\n <Tooltip title=\"Move the selected doc(s)\">\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu\n onClick={e =>\n _doBulkAction_moveDocs(\n selectedRowKeys,\n parseInt(e.key),\n docFolders.find(\n d =>\n d.folder_id ===\n parseInt(e.key)\n )?.folder_name\n )\n }\n items={docFolders.map((item, idx) => ({\n label:\n item.doc_folder_preference\n ?.folder_name ||\n item.folder_name,\n key: item.folder_id,\n disabled:\n item.folder_id ===\n docFolderFilter,\n }))}\n />\n }\n placement=\"bottomLeft\"\n >\n <Button icon={<DeliveredProcedureOutlined />}>\n Move To\n </Button>\n </Dropdown>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Tooltip title=\"Link to task(s)\">\n <Popover\n trigger={['click']}\n placement=\"bottomRight\"\n showArrow={false}\n visible={bulkLinkTasksVisible}\n content={\n <>\n <Row\n style={{ minWidth: '650px' }}\n align=\"middle\"\n >\n <Col span={18}>\n <EZSelectTask\n style={{\n maxWidth: '500px',\n width: '100%',\n }}\n maxTagCount=\"responsive\"\n options={taskList as any[]}\n notFoundContent={\n <span>\n No added tasks on{' '}\n <b>\"Tasks\"</b> tab.\n </span>\n }\n onChange={(\n _: any,\n options: any\n ) =>\n setSelectedTaskListBulk(\n options\n )\n }\n value={selectedTaskListBulk.map(\n d => d.id\n )}\n />\n </Col>\n <Col\n span={6}\n // className=\"mt-2\"\n style={{ textAlign: 'right' }}\n >\n <Button\n type=\"primary\"\n className=\"ml-2\"\n onClick={() =>\n _doBulkAction_linkTasks(\n selectedRowKeys,\n selectedTaskListBulk\n )\n }\n disabled={\n !selectedTaskListBulk.length\n }\n >\n Save\n </Button>\n <Button\n type=\"default\"\n className=\"ml-2\"\n onClick={() =>\n setBulkLinkTasksVisible(\n false\n )\n }\n >\n Close\n </Button>\n </Col>\n </Row>\n </>\n }\n >\n <Button\n icon={<CarryOutOutlined />}\n onClick={() =>\n setBulkLinkTasksVisible(true)\n }\n ></Button>\n </Popover>\n </Tooltip>\n {/* <Tooltip title=\"Mail the selected doc(s)\">\n <Button icon={<MailOutlined />}></Button>\n </Tooltip>\n <Tooltip title=\"Merge the selected doc(s)\">\n <Button icon={<MergeCellsOutlined />}></Button>\n </Tooltip> */}\n <Divider type=\"vertical\" />\n <Tooltip title=\"Remove the selected doc(s)\">\n <Popconfirm\n arrowPointAtCenter\n title=\"Are you sure to delete the selected document(s)?\"\n okText=\"Yes\"\n cancelText=\"No\"\n placement=\"bottomLeft\"\n onConfirm={() =>\n _deleteDocuments(\n selectedRowKeys as number[]\n )\n }\n >\n <Button danger icon={<DeleteFilled />}></Button>\n </Popconfirm>\n </Tooltip>\n </Space>\n ) : (\n ''\n )\n }\n />\n </Col>\n </Row>\n <EZTable\n // dataSource={docFolders}\n ref={EZTableRef}\n className=\"eztable-hide-delete-editable\"\n pagination={{\n pageSize: pageType === DOC_EMBEDDED_TYPE.TRANSACTION_LIST ? 10 : 50,\n pageSizeOptions:\n pageType === DOC_EMBEDDED_TYPE.TRANSACTION_LIST\n ? [10]\n : [20, 50, 100],\n position: ['bottomLeft', 'topLeft'],\n }}\n queryParams={queryParams}\n columns={_columns}\n size=\"small\"\n rowKey=\"doc_id\"\n fetchData={_fetchData}\n scroll={{ x: 'max-content' }}\n style={{ whiteSpace: 'nowrap' }}\n rowSelection={\n UserPermission &&\n UserPermission?.documents_toggle === 2 &&\n !isTransactionDeleted\n ? {\n selectedRowKeys: selectedRowKeys,\n onChange: (newSelectedRowKeys: React.Key[]) => {\n setSelectedRowKeys(newSelectedRowKeys);\n },\n alwaysShowAlert: true,\n columnWidth: '20px',\n selections: [Table.SELECTION_NONE],\n fixed: true,\n }\n : false\n }\n tableAlertRender={false}\n toolBarComponents={\n (pageType !== DOC_EMBEDDED_TYPE.TRANSACTION_LIST &&\n [\n // <EZUpload {...uploadProps} key=\"ez-upload-1\">\n // <Button\n // key={`toolBarComponents-2-task-list`}\n // className=\"ez-action-btn\"\n // >\n // <PlusOutlined />\n // Upload New Document\n // </Button>\n // </EZUpload>,\n ]) ||\n []\n }\n expandable={{\n columnWidth: '16px',\n expandedRowRender: (record: TransactionDocItemType) => (\n <ExpandedRowComponent record={record} />\n ),\n rowExpandable: (record: TransactionDocItemType) => {\n return true;\n },\n expandIcon: _expandIcon,\n expandedRowKeys: expandedRecordIDs,\n onExpand: (expanded, record: TransactionDocItemType) => {\n if (expanded) {\n setExpandedRecordIDs([...expandedRecordIDs, record.doc_id]);\n } else {\n setExpandedRecordIDs([\n ...expandedRecordIDs.filter(id => id !== record.doc_id),\n ]);\n }\n },\n }}\n editable={{\n actionRender: (_, __, defaultDom) => [\n defaultDom.save,\n defaultDom.cancel,\n ],\n type: 'multiple',\n onSave: async (_, data: TransactionDocItemType, oldData) => {\n return _saveDocumentRecord(\n {\n ...data,\n },\n oldData\n );\n },\n saveText: (\n <>\n <Button\n className=\"p-0 pl-1\"\n type=\"link\"\n icon={<SaveFilled />}\n title=\"Edit this doc\"\n >\n Save\n </Button>\n </>\n ),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n onChangeCallback={_onChangeCallback}\n />\n </Col>\n </Row>\n </div>\n );\n};\n","import React from 'react';\n\nimport { InputNumber, InputNumberProps } from 'antd';\n\ntype EZInputNumberProps = InputNumberProps & {\n numberType?: 'currency' | 'percentage';\n};\n\nconst EZInputNumber: React.FC<EZInputNumberProps> = ({ numberType, ...props }) => {\n const config: InputNumberProps = { min: 0, step: numberType === 'percentage' ? 1 : 50000 };\n // let max = ;\n\n if (numberType)\n switch (numberType) {\n case 'currency':\n config.formatter = (value: any) =>\n `$ ${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n break;\n\n case 'percentage':\n config.min = 0;\n config.max = 100;\n // config.formatter = (value: any) =>\n // `${value} %`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n config.addonAfter = '%';\n break;\n\n default:\n break;\n }\n\n return (\n <>\n <InputNumber {...config} {...props} />\n </>\n );\n};\n\nexport default EZInputNumber;\n","import { hotjar } from 'react-hotjar';\nimport { calculateDuration } from 'utils/data_manipulate/date/calculateDuration';\n\nexport enum HOTJAR_EVENT_TYPE {\n ADD_NEW_TRANSACTION = 'add_new_transaction',\n LOAD_TEMPLATES = 'load_templates_on_transaction',\n CLICK_TRANSACTION_TASKS = 'click_transaction_tasks',\n CLICK_TASKS_MENU = 'click_tasks_menu',\n}\n\nexport const hotjarEvent = (event: HOTJAR_EVENT_TYPE) => {\n hotjar.event(event);\n};\n\nexport const hotjarIdentify = () => {\n const [hotjarActiveDetail] = JSON.parse(localStorage.getItem('hjActiveViewportIds') ?? '[{}]');\n const hotjarUserId = hotjarActiveDetail?.id || '';\n\n const hotjarInitialized = hotjar.initialized();\n if (!hotjarInitialized || !hotjarUserId) {\n const timeout = setTimeout(hotjarIdentify, 3000);\n return () => {\n clearTimeout(timeout);\n };\n }\n const accountCreatedDate = localStorage.getItem('date_posted') || '';\n const accountCreatedDateDuration = calculateDuration(accountCreatedDate, new Date(), true);\n\n const userDetail = {\n user_type_id: localStorage.getItem('user_type_id'),\n account_id: localStorage.getItem('account_id'),\n account_type: localStorage.getItem('account_type'),\n status: localStorage.getItem('status'),\n email: localStorage.getItem('email'),\n parent_account_id: localStorage.getItem('parent_account_id'),\n account_created_date: accountCreatedDate,\n account_created_date_duration: accountCreatedDateDuration,\n };\n\n hotjar.identify(hotjarUserId, { ...userDetail });\n};\n","import { intervalToDuration } from 'date-fns';\n\nexport const calculateDuration = (\n startDate: Date | string,\n endDate: Date | string,\n isReturnString: boolean = false\n) => {\n try {\n const _startDate = typeof startDate === 'string' ? new Date(startDate) : startDate;\n const _endDate = typeof endDate === 'string' ? new Date(endDate) : endDate;\n // get difference years, months and days from start to end\n const { years, months, days } = intervalToDuration({\n start: _startDate,\n end: _endDate,\n });\n\n if (isReturnString) {\n return `${years} years, ${months} months, ${days} days`;\n }\n\n return { years, months, days };\n } catch (error) {\n return { years: 0, months: 0, days: 0 };\n }\n};\n","import qs from 'qs';\n\nimport { DataTableQueryType } from 'types/base';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\n\nexport const getAllTeamMembers = (queryParams?: DataTableQueryType) => {\n const params: string = qs.stringify(queryParams);\n\n return APIRequest({\n method: 'get',\n url: apiUrl + 'members?' + params,\n });\n};\n","import { SubscriptionTypeItem } from 'types/payment';\nimport { getAllSubscriptionTypes } from './ez_api/paymentAPIs';\n\nlet SUBSCRIPTION_TYPES: SubscriptionTypeItem[] = [];\n\nlet PAID_SUBSCRIPTION_TYPES: SubscriptionTypeItem[] = [];\n\nlet MONTHLY_PAID_SUBSCRIPTION_TYPES: SubscriptionTypeItem[] = [];\n\nlet ANNUALLY_PAID_SUBSCRIPTION_TYPES: SubscriptionTypeItem[] = [];\n\nexport const loadSubscriptionListFromServer = async () => {\n if (!SUBSCRIPTION_TYPES.length) {\n const { data } = await getAllSubscriptionTypes();\n const subs = data as SubscriptionTypeItem[];\n\n SUBSCRIPTION_TYPES = subs;\n\n PAID_SUBSCRIPTION_TYPES = SUBSCRIPTION_TYPES.filter(item => item.is_paid_plan);\n\n MONTHLY_PAID_SUBSCRIPTION_TYPES = SUBSCRIPTION_TYPES.filter(\n item => item.is_monthly && item.is_paid_plan && item.is_active\n );\n\n ANNUALLY_PAID_SUBSCRIPTION_TYPES = SUBSCRIPTION_TYPES.filter(\n item => item.is_annually && item.is_paid_plan && item.is_active\n );\n }\n};\n\nexport const getSubscriptionList = () => {\n return SUBSCRIPTION_TYPES;\n};\n\nexport const getMonthlyPaidSubscriptionList = () => {\n return MONTHLY_PAID_SUBSCRIPTION_TYPES;\n};\n\nexport const getAnnuallyPaidSubscriptionList = () => {\n return ANNUALLY_PAID_SUBSCRIPTION_TYPES;\n};\n","import qs from 'qs';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\n\nexport const getAllSubscriptionTypes = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'subscriptions',\n });\n};\n","import { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { DocType } from 'components/appPage/documents';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nexport const getAccountDocs = (params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `doc-library/documents` + (params ? `?${params}` : ''),\n });\n};\n\nexport const getAccountDocFolders = (params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `doc-library/folders` + (params ? `?${params}` : ''),\n });\n};\n\nexport const addNewAccountDocFolder = (folder_name: string) => {\n Mixpanel.track('app.add_doc_library_folder', { folder_name });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `doc-library/folders`,\n data: { folder_name },\n });\n};\n\nexport const addNewAccountDoc = (docPayload: {\n accountfolder_id?: number;\n path?: string;\n\n filename?: string;\n u_filename?: string;\n bucket?: string;\n key?: string;\n content_type?: string;\n size?: number;\n}) => {\n Mixpanel.track('app.add_doc_library', { ...docPayload });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `doc-library/documents`,\n data: docPayload,\n });\n};\n\nexport const deleteAccountDocument = (doc_id: number) => {\n Mixpanel.track('app.delete_doc_library', { doc_id });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `doc-library/document/${doc_id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateAccountDocument = (\n id: number,\n payload: any,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n) => {\n Mixpanel.track('app.edit_doc_library', {\n doc_id: id,\n action: 'edit',\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `doc-library/document/${id}?formType=${formType}`,\n data: {\n ...payload,\n },\n useDefaultErrorNotif: true,\n });\n};\n\n// bulk actions\nexport const moveSelectedAccountDocs = (doc_ids: number[], folder_id: number) => {\n Mixpanel.track('app.edit_doc_library', {\n doc_ids,\n action: 'move-docs',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `doc-library/documents/bulk-move-docs`,\n data: {\n document_ids: doc_ids,\n accountfolder_id: folder_id,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteAccountDocuments = (doc_ids: number[]) => {\n Mixpanel.track('app.delete_doc_library', {\n doc_ids,\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `doc-library/documents`,\n data: {\n document_ids: doc_ids,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getPresignedURLAccountDocUpload = (filePayload: {\n original_name: string;\n mime_type: string;\n size: number;\n}) => {\n return APIRequest({\n method: 'post',\n url: apiUrl + `doc-library/file-upload/presign-url`,\n data: {\n ...filePayload,\n doc_type: 'doc_library',\n },\n });\n};\n","import mixpanel from 'mixpanel-browser';\n\nimport { AccountDataType } from 'types/account';\nimport { getParentAccountID } from './commonUtil';\n\nimport { isDemoENV, isProductionENV } from './envUtil';\n\nmixpanel.init(process.env.REACT_APP_MIXPANEL_TOKEN || 'INVALID_TOKEN');\n\n// let env_check = isDemoENV() || isProductionENV();\nlet env_check = true;\n\nconst setPeopleProfile = (account: AccountDataType) => {\n const parent_account_id = getParentAccountID(account);\n\n mixpanel.people.set({\n $name: account.fullname,\n $email: account.email,\n\n PARENT_ACCOUNT_ID: parent_account_id,\n IS_PARENT_ACCOUNT: account.account_id === parent_account_id,\n\n USER_TYPE_ID: account.user_type_id,\n ACCOUNT_TYPE: account.account_type,\n ACCOUNT_ROLE_ID: account.accountrole_id,\n });\n};\n\nlet actions = {\n identify: (accountID: number) => {\n if (env_check) mixpanel.identify(accountID.toString());\n },\n alias: (accountID: number) => {\n if (env_check) mixpanel.alias(accountID.toString());\n },\n track: (name: string, props: any) => {\n if (env_check) mixpanel.track(name, props);\n },\n people: {\n set: (account: AccountDataType) => {\n if (env_check) {\n setPeopleProfile(account);\n }\n },\n },\n\n setLoggedUserData: (account: AccountDataType) => {\n if (env_check) {\n mixpanel.identify(account.account_id.toString());\n // mixpanel.people.set({ ...account, parent_account_id: getParentAccountID(account) });\n\n mixpanel.people.set_once({\n ACCOUNT_ID: account.account_id,\n });\n\n setPeopleProfile(account);\n\n mixpanel.set_group('PARENT_ACCOUNT_ID', getParentAccountID(account));\n }\n },\n};\n\nexport let Mixpanel = actions;\n","// Core React libraries import\nimport React, { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Row,\n Input,\n Form,\n FormInstance,\n Col,\n Select,\n Badge,\n Checkbox,\n Divider,\n Typography,\n} from 'antd';\nimport moment from 'moment';\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\nimport { TransactionTaskItemType, TransactionTaskListType } from 'types/transaction';\nimport { EZDatePicker } from 'components';\nimport { BellFilled } from '@ant-design/icons';\nimport { getTaskDetail, getTransactionTaskLists } from 'utils/ez_api/taskAPIs';\nimport { AccountCompactDataType } from 'types/account';\nimport { getAllTeamMembers } from 'utils/ez_api/memberAPIs';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nconst NO_OF_DAYS_REMINDER: number[] = Array.from(Array(7).keys());\n\nexport const EditTaskModalContent: React.FC<{\n contractAddress?: string;\n contractID: number;\n task: Partial<TransactionTaskItemType>;\n form: FormInstance<any>;\n taskListMenu?: TransactionTaskListType[];\n subUsers: AccountCompactDataType[];\n mode: 'EDIT' | 'ADD';\n}> = ({ task, form, contractID, taskListMenu, mode, subUsers, contractAddress }) => {\n const [taskListMenuInModal, setTaskListMenuInModal] = useState<TransactionTaskListType[]>(\n taskListMenu || []\n );\n\n const _getDetail = (taskID: number) => {\n getTaskDetail(contractID, taskID).then(resp => {\n const data = resp.data as TransactionTaskItemType;\n\n if (data.task_todo_reminders?.length) {\n const arrBeforeDueDateValues: string[] = [],\n arrAfterDueDateValues: string[] = [];\n for (let index = 0; index < data.task_todo_reminders.length; index++) {\n const reminder = data.task_todo_reminders[index];\n\n if (reminder.day_after_before === '1') {\n arrBeforeDueDateValues.push(reminder.day_number);\n } else if (reminder.day_after_before === '2') {\n arrAfterDueDateValues.push(reminder.day_number);\n } else if (reminder.day_after_before === '3') {\n form.setFieldValue('on_duedate', true);\n }\n }\n\n form.setFieldValue('before_duedate', arrBeforeDueDateValues);\n form.setFieldValue('after_duedate', arrAfterDueDateValues);\n }\n });\n };\n\n const _setFieldValues = () => {\n const dueDateMoment = task.duedate ? moment.utc(task.duedate) : '';\n\n form.resetFields();\n\n form.setFieldsValue({\n ...task,\n duedate: dueDateMoment && dueDateMoment.isValid() ? dueDateMoment : null,\n prio: task.prio,\n });\n };\n\n const _fetchTaskListMenu = () => {\n getTransactionTaskLists(contractID, { pageSize: 50 }).then(resp => {\n if (resp.data) {\n setTaskListMenuInModal(resp.data);\n }\n });\n };\n\n useEffect(() => {\n _setFieldValues();\n\n if (!taskListMenu || taskListMenu?.length === 0) {\n _fetchTaskListMenu();\n }\n\n if (task.id) {\n _getDetail(task.id);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Form layout=\"vertical\" form={form} requiredMark={false}>\n <Row gutter={[16, 0]}>\n {contractAddress ? (\n <Col span={24}>\n <Form.Item label=\"Transaction Address\">{contractAddress || '-'}</Form.Item>\n </Col>\n ) : (\n <></>\n )}\n <Col span={24}>\n <Form.Item\n label=\"List\"\n name=\"list_id\"\n required\n rules={[{ required: true, message: \"List can't be empty\" }]}\n >\n <Select\n placeholder=\"Select the tasklist\"\n options={taskListMenuInModal}\n defaultActiveFirstOption\n fieldNames={{\n label: 'name',\n value: 'id',\n }}\n />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n label=\"Task Title\"\n name=\"title\"\n rules={[{ required: true, message: \"Title can't be empty\" }]}\n >\n <Input placeholder=\"Enter the title\" />\n </Form.Item>\n </Col>\n <Col span={10}>\n <Form.Item label=\"Assign To\" name=\"assignee\">\n <Select\n style={{ width: '100%' }}\n options={subUsers?.map(user => ({\n label: user.fullname,\n value: user.account_id,\n }))}\n showArrow\n showSearch\n placeholder=\"Choose team member\"\n optionFilterProp=\"label\"\n />\n </Form.Item>\n </Col>\n <Col span={7}>\n <Form.Item label=\"Due Date\" name=\"duedate\">\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Col span={7}>\n <Form.Item label=\"Priority\" name=\"prio\" initialValue={0}>\n <Select\n placeholder=\"Select the priority\"\n options={[\n {\n label: (\n <Badge\n count={'-1'}\n style={{ backgroundColor: '#2db7f5' }}\n />\n ),\n value: -1,\n },\n {\n label: (\n <Badge count={'±0'} style={{ backgroundColor: 'grey' }} />\n ),\n value: 0,\n },\n {\n label: (\n <Badge count={'+1'} style={{ backgroundColor: 'gold' }} />\n ),\n value: 1,\n },\n {\n label: (\n <Badge count={'+2'} style={{ backgroundColor: '#f50' }} />\n ),\n value: 2,\n },\n ]}\n />\n </Form.Item>\n </Col>\n </Row>\n <Row gutter={[16, 0]}>\n <Col span={24}>\n <Form.Item label=\"Notes\" name=\"note\">\n <Input.TextArea placeholder=\"Enter the notes\" rows={4} />\n </Form.Item>\n </Col>\n </Row>\n <Divider orientation=\"left\">\n <b>\n <BellFilled /> Reminder for due date\n </b>\n </Divider>\n <Row gutter={[16, 0]}>\n <Col span={10}>\n <Form.Item label=\"No. of Days Before Due Date\" name=\"before_duedate\">\n <Select\n placeholder=\"Select no. of days\"\n mode=\"multiple\"\n allowClear\n options={[...NO_OF_DAYS_REMINDER].reverse().map(val => ({\n label: val + 1,\n key: val + 1,\n value: (val + 1).toString(),\n }))}\n />\n </Form.Item>\n </Col>\n <Col span={4} style={{ textAlign: 'center' }}>\n <Form.Item\n label=\"On Due Date\"\n name=\"on_duedate\"\n valuePropName=\"checked\"\n style={{ textAlign: 'center', width: '100%' }}\n >\n <Checkbox style={{ lineHeight: '32px' }}></Checkbox>\n </Form.Item>\n </Col>\n <Col span={10}>\n <Form.Item label=\"No. of Days After Due Date\" name=\"after_duedate\">\n <Select\n placeholder=\"Select no. of days\"\n mode=\"multiple\"\n allowClear\n options={NO_OF_DAYS_REMINDER.map(val => ({\n label: val + 1,\n key: val + 1,\n value: (val + 1).toString(),\n }))}\n />\n </Form.Item>\n </Col>\n {\n // TODO: implement sending the reminders to external parties, i.e.: sellers, buyers, and agents\n }\n {/* <Col span={24}>\n <Form.Item label=\"Send Reminder To\" name=\"send_reminder_to\">\n <Select\n placeholder=\"Select the party(es)\"\n mode=\"multiple\"\n allowClear\n options={optGroups}\n />\n </Form.Item>\n </Col> */}\n </Row>\n </Form>\n );\n};\n","// Core React libraries import\nimport React, { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Input, Form, FormInstance, Col, Select } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport { getTaskTabsDetail } from 'utils/ez_api/AdminAPIs';\n// EZ web-app types import\nimport { DefaultTaskTabType } from 'types/admin';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nexport const AddTasklistModalContent: React.FC<{\n form: FormInstance<any>;\n mode: 'EDIT' | 'ADD';\n}> = ({ form, mode }) => {\n const [tasklistImport, setTasklistImport] = useState<boolean>(false);\n const [taskTabs, setTaskTabs] = useState<DefaultTaskTabType[]>([]);\n\n const _loadTasklistTemplateOptions = () => {\n getTaskTabsDetail()\n .then(({ data }) => {\n let respData = data as DefaultTaskTabType[];\n\n respData.forEach(defaultTasklist => {\n defaultTasklist.defaulttasks = defaultTasklist.defaulttasks?.filter(\n defaultTask =>\n !defaultTask.defaulttask_preference ||\n defaultTask.defaulttask_preference?.toggle\n ? true\n : false\n );\n });\n\n setTaskTabs(respData || []);\n })\n .finally(() => {});\n };\n\n const _setFieldValues = () => {\n // form.resetFields();\n };\n\n useEffect(() => {\n _setFieldValues();\n\n _loadTasklistTemplateOptions();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Form layout=\"vertical\" form={form} requiredMark={false}>\n <Row gutter={[16, 0]}>\n {!tasklistImport && (\n <>\n <Col span={24}>\n <Form.Item\n label=\"Tasklist Name\"\n name=\"tasklist_name\"\n rules={[{ required: true, message: \"Name can't be empty\" }]}\n >\n <Input placeholder=\"Enter the tasklist name\" />\n </Form.Item>\n </Col>\n {mode !== 'EDIT' && (\n <Col span={24}>\n <Form.Item label=\"Tasklist Name\" name=\"tasklist_name\" noStyle>\n OR{' '}\n <a onClick={() => setTasklistImport(true)}>\n <u>Choose from existing template</u>\n </a>\n </Form.Item>\n </Col>\n )}\n </>\n )}\n {tasklistImport && (\n <>\n <Col span={24}>\n <Form.Item\n label=\"Choose Tasklist Template Name\"\n name=\"defaulttasktab_id\"\n rules={[{ required: true, message: \"Tasklist can't be empty\" }]}\n >\n <Select\n showSearch\n optionFilterProp=\"label\"\n style={{ width: '100%' }}\n placeholder=\"Select or search a tasklist\"\n options={\n taskTabs?.map(tasklist => ({\n label: `${tasklist.name} - ${tasklist.defaulttasks?.length} task(s)`,\n value: tasklist.defaulttasktab_id,\n })) || []\n }\n // onChange={value => _changeCurrentContract(value as number)}\n ></Select>\n </Form.Item>\n </Col>\n {mode !== 'EDIT' && (\n <Col span={24}>\n <Form.Item label=\"Tasklist Name\" name=\"tasklist_name\" noStyle>\n <a onClick={() => setTasklistImport(false)}>\n <u>Back</u>\n </a>\n </Form.Item>\n </Col>\n )}\n </>\n )}\n </Row>\n </Form>\n );\n};\n","// Core React libraries import\nimport React, { useEffect, useState, useContext, useRef, useMemo } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Row,\n Col,\n Space,\n Menu,\n Button,\n Tabs,\n Input,\n Form,\n Typography,\n Dropdown,\n Badge,\n Tag,\n Tooltip,\n Segmented,\n Select,\n Divider,\n Modal,\n Popover,\n Switch,\n message,\n} from 'antd';\nimport { RenderExpandIcon } from 'rc-table/lib/interface';\nimport {\n DeleteOutlined,\n PlusOutlined,\n SaveOutlined,\n DownOutlined,\n MenuUnfoldOutlined,\n CheckCircleFilled,\n CheckCircleOutlined,\n RightOutlined,\n FieldTimeOutlined,\n MessageOutlined,\n CloudServerOutlined,\n CloseOutlined,\n SaveFilled,\n EditOutlined,\n FileSearchOutlined,\n InfoCircleFilled,\n EllipsisOutlined,\n PrinterOutlined,\n CaretDownOutlined,\n MailOutlined,\n EyeOutlined,\n EyeInvisibleOutlined,\n InfoCircleOutlined,\n EnterOutlined,\n HolderOutlined,\n} from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\nimport moment from 'moment';\nimport qs from 'qs';\nimport { useReactToPrint } from 'react-to-print';\nimport type { SyntheticListenerMap } from '@dnd-kit/core/dist/hooks/utilities';\n\n// EZ web-app utils import\nimport { showMessage, showNotification } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport {\n getTransactionTasks,\n getTransactionTaskLists,\n updateTask,\n getAllTasks,\n linkTasksToDocs,\n deleteTask,\n addNewTask,\n addNewTasklist,\n updateTasklist,\n deleteTasklist,\n} from 'utils/ez_api/taskAPIs';\nimport {\n addNewTransactionDoc,\n getPresignedURLContractDocUpload,\n getTransactionDocs,\n} from 'utils/ez_api/documentAPIs';\nimport { getAllTeamMembers } from 'utils/ez_api/memberAPIs';\n// EZ web-app types import\nimport {\n ACTIVE_STATUS_IDS,\n TransactionDocItemType,\n TransactionTaskItemType,\n TransactionTaskListType,\n} from 'types/transaction';\nimport { AccountCompactDataType } from 'types/account';\n// EZ web-app components import\nimport { HomeContext } from 'context/EZContext';\nimport { TAB_CATEGORY } from 'types/webAppTab';\nimport { EZTable, EZDateFormat, EZSelectDocument, EZSelectStatus } from 'components';\nimport {\n forwardRefEZTableProps,\n IOnChangeCallbackProps,\n ITableQueryParams,\n} from 'components/table/EZProTable';\nimport { previewDoc } from './documents';\nimport { EditTaskModalContent } from './modals/taskEditDetail';\nimport { AddTasklistModalContent } from './modals/tasklistAddContent';\nimport { TaskEmailModalContent } from './modals/taskEmailModal';\nimport {\n SortableContext,\n arrayMove,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { DndContext, DragEndEvent } from '@dnd-kit/core';\nimport { restrictToVerticalAxis } from '@dnd-kit/modifiers';\nimport { bulkUpdateTaskTransaction } from 'utils/ez_api/transactionAPIs';\nimport { cloneDeep } from 'lodash';\n\n// EZ web-app styles and assets import\n\nconst { Text, Paragraph } = Typography;\nconst { Option } = Select;\n\nconst defaultTableParam: ITableQueryParams = {\n searchKeyword: '',\n orderParams: [\n ['ow', 'asc'],\n ['d_created', 'desc'],\n ['prio', 'desc'],\n ],\n whereParams: {},\n whereFilterParams: {},\n silentLoading: false,\n};\n\nconst defaultTableParamMainTaskMenu: ITableQueryParams = {\n searchKeyword: '',\n orderParams: [\n ['duedate', 'desc'],\n ['prio', 'desc'],\n ],\n whereParams: {},\n whereFilterParams: {},\n silentLoading: false,\n};\n\nconst menu = (\n <Menu items={[{ key: '12', label: `Edit Task Detail`, icon: <MenuUnfoldOutlined /> }]} />\n);\n\nexport enum TASK_EMBEDDED_TYPE {\n TRANSACTION_DETAIL = 'transaction_detail',\n MAIN_MENU = 'main_menu',\n TRANSACTION_LIST = 'transaction_list',\n}\n\ntype BULK_ACTIONS = 'MOVE_TO_TASKLIST' | 'SET_DUE_DATE' | 'DELETE';\n\ninterface RowContextProps {\n setActivatorNodeRef?: (element: HTMLElement | null) => void;\n listeners?: SyntheticListenerMap;\n}\n\nconst RowContext = React.createContext<RowContextProps>({});\ninterface RowProps extends React.HTMLAttributes<HTMLTableRowElement> {\n 'data-row-key': string;\n}\n\nconst DragHandle: React.FC = () => {\n const { setActivatorNodeRef, listeners } = useContext(RowContext);\n return (\n <Button\n type=\"text\"\n size=\"small\"\n icon={<HolderOutlined />}\n style={{ cursor: 'move' }}\n ref={setActivatorNodeRef}\n {...listeners}\n />\n );\n};\n\nconst RowTable: React.FC<RowProps> = props => {\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: props['data-row-key'] });\n\n const style: React.CSSProperties = {\n ...props.style,\n transform: CSS.Translate.toString(transform),\n transition,\n ...(isDragging ? { position: 'relative', zIndex: 1 } : {}),\n };\n\n const contextValue = useMemo<RowContextProps>(\n () => ({ setActivatorNodeRef, listeners }),\n [setActivatorNodeRef, listeners]\n );\n\n return (\n <RowContext.Provider value={contextValue}>\n <tr {...props} ref={setNodeRef} style={style} {...attributes} />\n </RowContext.Provider>\n );\n};\n\nexport const AppPageTasks: React.FC<{\n pageType: TASK_EMBEDDED_TYPE;\n contractID?: number;\n isTransactionDeleted?: boolean;\n contractAddress?: string;\n manualReloadCount: number;\n reloadTransactionStat?: (contract_id: number) => void;\n}> = ({\n contractID = 0,\n contractAddress,\n manualReloadCount,\n isTransactionDeleted,\n pageType,\n reloadTransactionStat,\n}) => {\n const HomeCtx = useContext(HomeContext);\n const UserPermission = HomeCtx.userPermission;\n\n const EZTableRef = useRef<forwardRefEZTableProps>();\n const componentRef = useRef<HTMLDivElement>(null);\n\n const [form] = Form.useForm();\n\n const nowMoment = moment();\n\n defaultTableParam.whereFilterParams = {};\n defaultTableParam.whereFilterParams['compl'] = 0;\n\n defaultTableParamMainTaskMenu.whereFilterParams['compl'] = 0;\n defaultTableParamMainTaskMenu.whereFilterParams['duedate'] = nowMoment.format('YYYY-MM-DD');\n\n const isMainMenuTaskTab = !contractID || contractID <= 0;\n const [taskListMenu, setTaskListMenu] = useState<TransactionTaskListType[]>([]);\n const handlePrint = useReactToPrint({\n content: () => componentRef.current,\n documentTitle: `Tasklist - ${contractAddress}`,\n });\n\n const getDefaultTableParam = (isMainMenuTaskTab: boolean): ITableQueryParams => {\n return isMainMenuTaskTab ? defaultTableParamMainTaskMenu : defaultTableParam;\n };\n const [queryParams, setQueryParams] = useState<ITableQueryParams>(\n getDefaultTableParam(isMainMenuTaskTab)\n );\n\n const [taskTypeFilter, setTaskTypeFilter] = useState<string>('incomplete_tasks');\n const [filterType, setFilterType] = useState<string>('today');\n const [transactionStatusFilter, setTransactionStatusFilter] = useState<string>();\n const [taskMenuFilter, setTaskMenuFilter] = useState<string>();\n const [toggleMyTasks, setToggleMyTasks] = useState<boolean>(false);\n\n const [toggleAllRows, setToggleAllRows] = useState<boolean>(\n pageType === TASK_EMBEDDED_TYPE.TRANSACTION_DETAIL ? true : false\n );\n const [tableRecordIDs, setTableRecordIDs] = useState<React.Key[]>([]);\n const [expandedRecordIDs, setExpandedRecordIDs] = useState<React.Key[]>([]);\n\n const [isUpdatingTask, setIsUpdatingTask] = useState<boolean>(false);\n const [disableDrag, setDisableDrag] = useState<boolean>(false);\n\n const [teamMembers, setTeamMembers] = useState<AccountCompactDataType[]>([]);\n const [transactionTasks, setTransactionTasks] = useState<TransactionTaskItemType[]>([]);\n\n async function _fetchData(EZTableQueryParams: string): Promise<any> {\n if (!isMainMenuTaskTab) {\n const tableParams = new URLSearchParams(EZTableQueryParams);\n\n if (tableParams.get('order[0][0]') !== 'ow') {\n setDisableDrag(true);\n } else {\n setDisableDrag(false);\n }\n return getTransactionTasks(contractID, EZTableQueryParams).then(result => {\n setTransactionTasks(result.data);\n return result;\n });\n } else {\n return getAllTasks(EZTableQueryParams).then(result => result);\n }\n }\n\n const onDragEnd = ({ active, over }: DragEndEvent) => {\n if (active.id !== over?.id) {\n setTransactionTasks(prevState => {\n const activeIndex = prevState.findIndex(record => record.id === active?.id);\n const overIndex = prevState.findIndex(record => record.id === over?.id);\n let payload: { uuid: string; ow: number }[] = [];\n if (activeIndex > overIndex) {\n //move up\n let seen = new Set();\n // check if in tab there is any duplicated position order\n // will regroup the position order if found any\n const isPositionOrderDuplicate = prevState.some(function (currentObject) {\n return seen.size === seen.add(currentObject.ow).size;\n });\n if (isPositionOrderDuplicate) {\n //some duplicate\n const payloadDuplicate = prevState.map(\n (task: TransactionTaskItemType, idx: number) => {\n prevState[idx].ow = idx;\n return {\n uuid: task.uuid,\n ow: idx,\n };\n }\n );\n bulkUpdateTaskTransaction(contractID, payloadDuplicate)\n .then(() => {\n const tempTask = cloneDeep(prevState);\n for (let index = overIndex; index <= activeIndex; index++) {\n if (index === activeIndex) {\n payload.push({\n uuid: tempTask[index].uuid,\n ow: tempTask[overIndex].ow,\n });\n prevState[index].ow = tempTask[overIndex].ow;\n } else {\n payload.push({\n uuid: tempTask[index].uuid,\n ow: tempTask[index + 1].ow,\n });\n prevState[index].ow = tempTask[index + 1].ow;\n }\n }\n bulkUpdateTaskTransaction(contractID, payload).then(() => {\n return arrayMove(prevState, activeIndex, overIndex);\n });\n })\n .catch(err => {\n message.error(err);\n return arrayMove(prevState, activeIndex, overIndex);\n });\n } else {\n //not duplicate\n const tempTask = cloneDeep(prevState);\n for (let index = overIndex; index <= activeIndex; index++) {\n if (index === activeIndex) {\n payload.push({\n uuid: tempTask[index].uuid,\n ow: tempTask[overIndex].ow,\n });\n prevState[index].ow = tempTask[overIndex].ow;\n } else {\n payload.push({\n uuid: tempTask[index].uuid,\n ow: tempTask[index + 1].ow,\n });\n prevState[index].ow = tempTask[index + 1].ow;\n }\n }\n bulkUpdateTaskTransaction(contractID, payload).then(() => {\n return arrayMove(prevState, activeIndex, overIndex);\n });\n }\n } else {\n //move down\n let seen = new Set();\n // check if in tab there is any duplicated position order\n // will regroup the position order if found any\n const isPositionOrderDuplicate = prevState.some(function (currentObject) {\n return seen.size === seen.add(currentObject.ow).size;\n });\n if (isPositionOrderDuplicate) {\n //some duplicate\n const payloadDuplicate = prevState.map(\n (task: TransactionTaskItemType, idx: number) => {\n prevState[idx].ow = idx;\n return {\n uuid: task.uuid,\n ow: idx,\n };\n }\n );\n bulkUpdateTaskTransaction(contractID, payloadDuplicate)\n .then(() => {\n const tempTask = cloneDeep(prevState);\n for (let index = activeIndex; index <= overIndex; index++) {\n if (index === activeIndex) {\n payload.push({\n uuid: tempTask[index].uuid,\n ow: tempTask[overIndex].ow,\n });\n prevState[index].ow = tempTask[overIndex].ow;\n } else {\n payload.push({\n uuid: tempTask[index].uuid,\n ow: tempTask[index - 1].ow,\n });\n prevState[index].ow = tempTask[index - 1].ow;\n }\n }\n bulkUpdateTaskTransaction(contractID, payload).then(() => {\n return arrayMove(prevState, activeIndex, overIndex);\n });\n })\n .catch(err => {\n message.error(err);\n return arrayMove(prevState, activeIndex, overIndex);\n });\n } else {\n //not duplicate\n const tempTask = cloneDeep(prevState);\n for (let index = activeIndex; index <= overIndex; index++) {\n if (index === activeIndex) {\n payload.push({\n uuid: tempTask[index].uuid,\n ow: tempTask[overIndex].ow,\n });\n prevState[index].ow = tempTask[overIndex].ow;\n } else {\n payload.push({\n uuid: tempTask[index].uuid,\n ow: tempTask[index - 1].ow,\n });\n prevState[index].ow = tempTask[index - 1].ow;\n }\n }\n bulkUpdateTaskTransaction(contractID, payload).then(() => {\n return arrayMove(prevState, activeIndex, overIndex);\n });\n }\n }\n return arrayMove(prevState, activeIndex, overIndex);\n });\n }\n };\n // expand or collapse the rows\n const _toggleAllRows = async (tAllRows: boolean) => {\n setToggleAllRows(tAllRows);\n\n if (!tAllRows) {\n setExpandedRecordIDs([]);\n } else {\n setExpandedRecordIDs([...tableRecordIDs]);\n }\n };\n\n const _expandSelectedRows = (rowKeys: number[]) => {\n const newRowIDs: number[] = [];\n for (let index = 0; index < rowKeys.length; index++) {\n const rowID = rowKeys[index];\n\n if (!expandedRecordIDs.find(elm => elm === rowID)) newRowIDs.push(rowID);\n }\n\n if (newRowIDs.length) setExpandedRecordIDs([...expandedRecordIDs, ...newRowIDs]);\n };\n\n const _onChangeCallback: IOnChangeCallbackProps = (data: TransactionTaskItemType[]) => {\n if (data?.length) {\n if (toggleAllRows) {\n setExpandedRecordIDs(\n data\n .filter(\n record =>\n record.compl !== 1 &&\n ((record.note && record.note.trim() !== '') || record.docs?.length)\n )\n .map(record => record.id)\n );\n }\n setTableRecordIDs(data.map(record => record.id));\n } else {\n setTableRecordIDs([]);\n setExpandedRecordIDs([]);\n }\n };\n\n const _expandIcon: RenderExpandIcon<TransactionTaskItemType> = ({\n expanded,\n onExpand,\n record,\n }) => {\n return expanded ? (\n <DownOutlined\n className=\"no-print\"\n id={`ez-tr-icon-expandable-c_${contractID}-task_${record.id}`}\n onClick={(e: any) => onExpand(record, e)}\n />\n ) : (\n <RightOutlined\n className=\"no-print\"\n id={`ez-tr-icon-expandable-c_${contractID}-task_${record.id}`}\n onClick={(e: any) => onExpand(record, e)}\n />\n );\n };\n\n const _reloadSubTabData = (resetPagination?: boolean, silentLoading?: boolean) => {\n setQueryParams({\n ...queryParams,\n resetPagination,\n silentLoading: silentLoading || undefined,\n });\n };\n\n const _fetchTaskListMenu = () => {\n getTransactionTaskLists(contractID, { pageSize: 50 }).then(resp => {\n if (resp.data) {\n setTaskListMenu(resp.data);\n }\n });\n };\n\n const _saveTaskData = async (\n newData: TransactionTaskItemType,\n oldData: TransactionTaskItemType,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n ) => {\n setIsUpdatingTask(true);\n\n if (newData.id) {\n let dataIdx = transactionTasks?.findIndex(item => item.id === newData.id);\n\n newData.assignee_account = newData.assignee\n ? teamMembers.find(member => member.account_id === newData.assignee)\n : undefined;\n if (dataIdx !== -1) {\n let copyTask = [...transactionTasks];\n copyTask[dataIdx] = newData;\n setTransactionTasks(copyTask);\n }\n\n EZTableRef.current?.modifyData(newData, newData.id);\n }\n\n return updateTask(\n oldData.task_list.contract_id,\n newData.id,\n {\n ...newData,\n },\n formType\n )\n .then(() => {\n // EZTableRef.current?.reload();\n if (contractID) {\n reloadTransactionStat?.(contractID);\n }\n\n if (newData.compl === 1 && oldData.compl === 0) {\n showNotification(\n 'success',\n `Task: \"${newData.title}\" has been marked as complete.`\n );\n } else if (newData.compl === 0 && oldData.compl === 1) {\n showNotification(\n 'success',\n `Task: \"${newData.title}\" has been marked as incomplete.`\n );\n } else {\n showNotification(\n 'success',\n `Task: \"${newData.title}\" has been successfully updated.`\n );\n }\n\n if (oldData.list_id !== newData.list_id) {\n _reloadSubTabData(false, true);\n }\n\n if (\n newData.id &&\n newData.compl !== 1 &&\n (newData.note?.length || newData.docs?.length)\n ) {\n setExpandedRecordIDs([...expandedRecordIDs, newData.id]);\n }\n\n setIsUpdatingTask(false);\n\n return newData;\n })\n .catch(err => {\n setIsUpdatingTask(false);\n throw err;\n });\n };\n\n const _saveNewTaskData = async (\n payload: TransactionTaskItemType,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n ) => {\n setIsUpdatingTask(true);\n\n return addNewTask(contractID, payload, formType)\n .then(() => {\n if (contractID) {\n reloadTransactionStat?.(contractID);\n }\n\n showNotification(\n 'success',\n `New task: \"${payload.title}\" has been successfully added.`\n );\n\n _reloadSubTabData(false, true);\n\n setIsUpdatingTask(false);\n\n return payload;\n })\n .catch(err => {\n setIsUpdatingTask(false);\n throw err;\n });\n };\n\n const _renderPriorityBadge = (record: TransactionTaskItemType) => {\n switch (record.prio) {\n case -1:\n return <Badge count={'-1'} style={{ backgroundColor: '#2db7f5' }} />;\n case 1:\n return <Badge count={'+1'} style={{ backgroundColor: 'gold' }} />;\n case 2:\n return <Badge count={'+2'} style={{ backgroundColor: '#f50' }} />;\n\n default:\n return <Text type=\"secondary\">±0</Text>;\n }\n };\n\n const _openNewTab = (record: TransactionTaskItemType) => {\n if (HomeCtx.openTransactionDetailTab) {\n HomeCtx.openTransactionDetailTab(\n record.task_list?.contract_id,\n record.task_list?.contract?.address,\n { ...record.task_list?.contract },\n TAB_CATEGORY.TASK\n );\n }\n };\n\n const _applyFilter = (\n filterType: string,\n taskTypeFilter: string,\n taskMenuListKey?: string,\n transactionStatusFilter?: string,\n toggleMyTasks?: boolean\n ) => {\n const currentWhereFilterParams: any = {};\n // const currentWhereFilterParams = { ...queryParams.whereFilterParams };\n const nowMoment = moment();\n\n switch (taskTypeFilter) {\n case 'completed_tasks':\n currentWhereFilterParams['compl'] = 1;\n break;\n case 'all_tasks':\n currentWhereFilterParams['compl'] = undefined;\n break;\n case 'incomplete_tasks':\n currentWhereFilterParams['compl'] = 0;\n break;\n\n default:\n break;\n }\n\n if (transactionStatusFilter && transactionStatusFilter === 'all_active_statuses') {\n currentWhereFilterParams['$task_list.contract.status_id$'] = ACTIVE_STATUS_IDS;\n } else {\n currentWhereFilterParams['$task_list.contract.status_id$'] = transactionStatusFilter;\n }\n\n if (isMainMenuTaskTab) {\n switch (filterType) {\n case 'overdue':\n currentWhereFilterParams['<duedate'] = nowMoment.format('YYYY-MM-DD');\n currentWhereFilterParams['compl'] = 0;\n break;\n case 'today':\n currentWhereFilterParams['duedate'] = nowMoment.format('YYYY-MM-DD');\n break;\n case 'this_week':\n currentWhereFilterParams[`>::<duedate`] = [\n nowMoment.startOf('week').format('YYYY-MM-DD'),\n nowMoment.endOf('week').format('YYYY-MM-DD'),\n ];\n break;\n case 'next_14_days':\n currentWhereFilterParams[`>::<duedate`] = [\n nowMoment.format('YYYY-MM-DD'),\n nowMoment.add(14, 'days').endOf('day').format('YYYY-MM-DD'),\n ];\n break;\n case 'this_month':\n currentWhereFilterParams[`>::<duedate`] = [\n nowMoment.startOf('month').format('YYYY-MM-DD'),\n nowMoment.endOf('month').format('YYYY-MM-DD'),\n ];\n break;\n case 'all_tasks':\n break;\n\n default:\n break;\n }\n } else {\n if (taskMenuListKey === '-1') {\n if (currentWhereFilterParams['$task_list.id$']) {\n delete currentWhereFilterParams['$task_list.id$'];\n }\n } else if (taskMenuListKey) {\n currentWhereFilterParams['$task_list.id$'] = parseInt(\n taskMenuListKey.replace('tab-tasklist-', '')\n );\n }\n }\n\n if (toggleMyTasks !== undefined) {\n if (toggleMyTasks) {\n currentWhereFilterParams['assignee'] = HomeCtx.userInfo?.account_id;\n } else {\n delete currentWhereFilterParams['assignee'];\n }\n }\n setQueryParams({\n ...queryParams,\n whereFilterParams: { ...currentWhereFilterParams },\n resetPagination: true,\n });\n };\n\n async function _fetchPresignURL(payload: any): Promise<any> {\n return getPresignedURLContractDocUpload(contractID, payload);\n }\n\n const _linkTaskToDocs = async (\n selectedDocs: TransactionDocItemType[],\n task: TransactionTaskItemType\n ) => {\n task.docs = selectedDocs;\n\n EZTableRef.current?.modifyData(task, task.id);\n\n return linkTasksToDocs(\n contractID,\n [task.id],\n selectedDocs.map(doc => doc.doc_id)\n )\n .then(result => {\n showNotification(\n 'success',\n `Linked document(s) on task: \"${task.title}\" have been successfully updated.`\n );\n\n return result;\n })\n .catch(err => {\n throw err;\n });\n };\n\n const _deleteTask = async (record: TransactionTaskItemType) => {\n return deleteTask(record.task_list.contract_id, record.id)\n .then(() => {\n if (reloadTransactionStat && contractID) {\n reloadTransactionStat(contractID);\n }\n\n showNotification(\n 'success',\n `Task: \"${record.title}\" has been successfully deleted.`\n );\n _reloadSubTabData(false, true);\n setIsUpdatingTask(false);\n\n return record;\n })\n .catch(err => {\n setIsUpdatingTask(false);\n throw err;\n });\n };\n\n const _onSaveTask = async ({\n data,\n oldData,\n }: {\n data: TransactionTaskItemType;\n oldData: TransactionTaskItemType;\n }) => {\n let newDate = null;\n\n if (data.duedate) {\n let newDateMoment = moment(data.duedate, 'MMM Do, YYYY', true);\n\n if (newDateMoment.isValid()) {\n newDate = newDateMoment.format('YYYY-MM-DD');\n } else {\n newDateMoment = moment(data.duedate, 'YYYY-MM-DD', true);\n if (newDateMoment.isValid()) {\n newDate = newDateMoment.format('YYYY-MM-DD');\n }\n }\n }\n\n return await _saveTaskData(\n {\n ...data,\n assignee_account: data.assignee\n ? teamMembers.find(member => member.account_id === data.assignee)\n : undefined,\n duedate: newDate,\n },\n oldData\n );\n };\n\n const _showAddNewTaskModal = () => {\n _showEditTaskDetailModal(\n {\n id: 0,\n uuid: 'uuid-dummy',\n list_id:\n taskMenuFilter && taskMenuFilter !== '-1'\n ? parseInt(taskMenuFilter.replace('tab-tasklist-', ''))\n : taskListMenu?.[0]?.id,\n d_created: 0,\n d_completed: 0,\n d_edited: 0,\n compl: 0,\n title: '',\n note: '',\n prio: 0,\n ow: 0,\n tags: '',\n tags_ids: '',\n defaulttask_id: 0,\n task_list: {\n name: taskListMenu?.[0]?.name,\n contract_id: contractID,\n },\n },\n 'ADD'\n );\n };\n\n const _showEditTaskDetailModal = (\n record: TransactionTaskItemType,\n mode: 'EDIT' | 'ADD' = 'EDIT'\n ) => {\n const editTaskDetailModal = Modal.confirm({\n title: (\n <Typography.Title level={4}>\n {mode === 'ADD' ? 'Add New Task' : 'Edit Task Detail'}\n </Typography.Title>\n ),\n content: (\n <EditTaskModalContent\n contractAddress={record.task_list?.contract?.address?.trim()}\n contractID={isMainMenuTaskTab ? record.task_list?.contract_id : contractID}\n task={record}\n form={form}\n taskListMenu={taskListMenu}\n mode={mode}\n subUsers={teamMembers}\n />\n ),\n okText: 'Save',\n icon: <></>,\n style: { top: '40px' },\n width: '750px',\n onOk: async () => {\n editTaskDetailModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Saving...',\n });\n return form\n .validateFields()\n .then(async values => {\n const formValues = {\n ...values,\n duedate: values.duedate\n ? moment(values.duedate).format('YYYY-MM-DD')\n : null,\n };\n\n if (mode === 'ADD')\n return _saveNewTaskData(formValues)\n .then(() => {\n editTaskDetailModal.destroy();\n return record;\n })\n .catch(err => {\n throw err;\n });\n return _saveTaskData({ ...record, ...formValues }, record, 'FULL')\n .then(() => {\n editTaskDetailModal.destroy();\n return record;\n })\n .catch(err => {\n throw err;\n });\n })\n .catch(err => {\n console.log('🚀 ~ file: tasks.tsx ~ line 487 ~ onOk: ~ err', err);\n editTaskDetailModal.update({\n okButtonProps: {\n disabled: false,\n },\n okText: 'Save',\n });\n\n throw err;\n });\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const _showAddNewTasklistModal = (\n record?: TransactionTaskListType,\n mode: 'EDIT' | 'ADD' = 'EDIT'\n ) => {\n form.setFieldValue('tasklist_name', record && record.name ? record.name : '');\n form.setFieldValue('defaulttasktab_id', undefined);\n\n const newTasklistModal = Modal.confirm({\n title: (\n <Typography.Title level={4}>\n {mode === 'ADD' ? 'Add New Tasklist' : 'Edit Tasklist Name'}\n </Typography.Title>\n ),\n content: (\n <>\n <AddTasklistModalContent form={form} mode={mode} />\n </>\n ),\n okText: mode === 'EDIT' ? 'Save' : 'Add',\n icon: <></>,\n style: { top: '40px' },\n width: '450px',\n onOk: async () => {\n newTasklistModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Saving...',\n });\n return form\n .validateFields()\n .then(async values => {\n const tasklistName = form.getFieldValue('tasklist_name');\n const defaulttasktab_id = form.getFieldValue('defaulttasktab_id');\n\n if (mode === 'ADD') {\n return addNewTasklist(contractID, {\n name: tasklistName,\n defaulttasktab_id: defaulttasktab_id,\n })\n .then(resp => {\n const taskListRecord = resp.data as TransactionTaskListType;\n newTasklistModal.destroy();\n\n _fetchTaskListMenu();\n setTaskMenuFilter(`tab-tasklist-${taskListRecord.id}`);\n return record;\n })\n .catch(err => {\n throw err;\n });\n } else\n return updateTasklist(contractID, record?.id || -1, {\n name: tasklistName,\n })\n .then(() => {\n newTasklistModal.destroy();\n\n _fetchTaskListMenu();\n return record;\n })\n .catch(err => {\n throw err;\n });\n })\n .catch(err => {\n console.log('🚀 ~ file: tasks.tsx:662 ~ onOk: ~ err', err);\n newTasklistModal.update({\n okButtonProps: {\n disabled: false,\n },\n okText: mode === 'EDIT' ? 'Save' : 'Add',\n });\n\n throw err;\n });\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const _showDeleteTasklistConfirmationModal = (record: TransactionTaskListType) => {\n if (taskListMenu.length <= 1) {\n showMessage('error', `You can't delete the last tasklist.`);\n return;\n }\n\n form.setFieldValue('tasklist_name', record && record.name ? record.name : '');\n\n const deletionConfirmationModal = Modal.confirm({\n title: <Typography.Title level={4}>Deletion Confirmation</Typography.Title>,\n content: (\n <Row>\n <Col span={24}>\n You are about to delete a tasklist and all its linked dependencies (Task,\n Reminder, Task's note, and Task Calendar) and you will not be able to\n restore them once done.\n </Col>\n <Col span={24}>\n <Divider />\n </Col>\n <Col span={24}>\n Are you sure to delete the tasklist: <b>{record.name}</b>?\n </Col>\n </Row>\n ),\n okText: 'Delete',\n style: { top: '40px' },\n width: '550px',\n onOk: async () => {\n deletionConfirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Deleting...',\n });\n\n return deleteTasklist(contractID, record.id)\n .then(() => {\n deletionConfirmationModal.destroy();\n showNotification(\n 'success',\n `The tasklist: ${record.name} has been deleted successfully.`\n );\n\n _fetchTaskListMenu();\n setTaskMenuFilter('-1');\n return record;\n })\n .catch(err => {\n throw err;\n });\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const _doActionTaskMenu = (menuKey: string, record: TransactionTaskItemType) => {\n switch (menuKey) {\n case 'edit_task_detail':\n form.resetFields();\n\n _showEditTaskDetailModal(record);\n\n break;\n\n case 'delete_task':\n const deleteConfirmationModal = Modal.confirm({\n title: `Delete confirmation`,\n content: (\n <>\n Are you sure to delete task: <b>{record.title}</b>?\n </>\n ),\n onOk: () => {\n deleteConfirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Deleting...',\n });\n _deleteTask(record).finally(() => {\n deleteConfirmationModal.destroy();\n });\n return true;\n },\n closable: true,\n maskClosable: true,\n });\n break;\n default:\n break;\n }\n };\n\n const _openTaskEmailModal = (record: TransactionTaskItemType) => {\n const taskEmailModal = Modal.info({\n title: <h3>{`Email Activity for Task: ${record.title}`}</h3>,\n icon: <></>,\n width: '80%',\n style: {\n top: '48px',\n },\n content: <TaskEmailModalContent taskRecord={record} />,\n closable: true,\n maskClosable: true,\n okText: 'Close',\n okType: 'default',\n okButtonProps: {\n style: {\n display: 'none',\n },\n },\n });\n };\n\n const _doBulkAction = (action: BULK_ACTIONS, recordKeys: React.Key[], data?: any) => {\n switch (action) {\n case 'MOVE_TO_TASKLIST':\n break;\n case 'SET_DUE_DATE':\n break;\n case 'DELETE':\n break;\n\n default:\n break;\n }\n };\n\n const ExpandedRowComponent: React.FC<{ record: TransactionTaskItemType }> = ({ record }) => {\n const [note, setNote] = useState<string>(record.note?.trim() || '');\n\n const [editMode, setEditMode] = useState<boolean>(false);\n const [docsEditMode, setDocsEditMode] = useState<boolean>(false);\n const [isSubmittingForm, setIsSubmittingForm] = useState<boolean>(false);\n\n const [docList, setDocList] = useState<TransactionDocItemType[]>([]);\n const [selectedDocList, setSelectedDocList] = useState<TransactionDocItemType[]>([]);\n\n const _saveNote = () => {\n setIsSubmittingForm(true);\n _saveTaskData({ ...record, note: note }, record).finally(() => {\n setIsSubmittingForm(false);\n });\n };\n\n const _saveSelectedDocs = () => {\n _linkTaskToDocs(selectedDocList, record)\n .then(result => {})\n .finally(() => {\n setDocsEditMode(false);\n });\n };\n\n const _fetchDocList = () => {\n getTransactionDocs(\n contractID,\n qs.stringify({\n pageSize: 500,\n })\n ).then(result => {\n setDocList(result?.data || []);\n });\n };\n\n const _onChangeSelectedDocIDs = (selectedDocIDs: any[], selectedDocList: any[]) => {\n setSelectedDocList(selectedDocList);\n };\n\n useEffect(() => {\n if (docsEditMode) {\n _fetchDocList();\n setSelectedDocList(record.docs || []);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [docsEditMode]);\n return (\n <div className=\"doc-note-wrapper p-2\">\n <div style={{ paddingLeft: '65px' }}>\n <Row>\n <Col span={12} className=\"pr-5\">\n <Row>\n <Col span={24} className=\"\">\n <Row className=\"\">\n <Col span={12} className=\"\">\n <Text strong>Notes</Text>\n </Col>\n <Col span={12} style={{ textAlign: 'right' }}>\n {!editMode && UserPermission?.tasks_toggle === 2 && (\n <Button\n className=\"no-print\"\n size=\"small\"\n type=\"link\"\n disabled={isTransactionDeleted}\n icon={<EditOutlined />}\n onClick={() => setEditMode(true)}\n >\n Edit\n </Button>\n )}\n\n {editMode && (\n <Space>\n <Button\n className=\"mr-2\"\n type=\"default\"\n size=\"small\"\n onClick={() => setEditMode(false)}\n disabled={isSubmittingForm}\n >\n Cancel\n </Button>\n <Button\n className=\"\"\n size=\"small\"\n icon={<SaveOutlined />}\n type=\"primary\"\n loading={isSubmittingForm}\n onClick={() => _saveNote()}\n >\n {isSubmittingForm ? 'Saving' : 'Save'}\n </Button>\n </Space>\n )}\n </Col>\n </Row>\n </Col>\n <Divider className=\"mt-2 mb-3\" />\n <Col span={24}>\n {!editMode && (\n <Paragraph\n style={{ whiteSpace: 'pre-wrap' }}\n ellipsis={{\n rows: 5,\n expandable: true,\n }}\n >\n {note ? (\n note\n ) : (\n <Text italic type=\"secondary\">\n No note added\n </Text>\n )}\n </Paragraph>\n )}\n {editMode && (\n <div>\n <Input.TextArea\n style={{ width: '100%' }}\n rows={4}\n placeholder=\"Write down the note here...\"\n className=\"mb-2\"\n value={note}\n onChange={e => setNote(e.currentTarget.value)}\n />\n </div>\n )}\n </Col>\n </Row>\n </Col>\n <Col span={12} className=\"pl-5\">\n <Row className=\"\">\n <Col span={24} className=\"\">\n <Row className=\"\">\n <Col span={12} className=\"\">\n <Text strong>Linked Document and Files</Text>\n </Col>\n <Col span={12} style={{ textAlign: 'right' }}>\n {!docsEditMode &&\n UserPermission?.tasks_toggle === 2 && (\n <>\n <Button\n className=\"no-print\"\n size=\"small\"\n type=\"link\"\n disabled={isTransactionDeleted}\n icon={<EditOutlined />}\n onClick={() => setDocsEditMode(true)}\n >\n Edit\n </Button>\n </>\n )}\n\n {docsEditMode && (\n <Space>\n <Button\n className=\"mr-2\"\n type=\"default\"\n size=\"small\"\n onClick={() => setDocsEditMode(false)}\n disabled={isSubmittingForm}\n >\n Cancel\n </Button>\n <Button\n className=\"\"\n size=\"small\"\n icon={<SaveOutlined />}\n type=\"primary\"\n loading={isSubmittingForm}\n disabled={isSubmittingForm}\n onClick={() => _saveSelectedDocs()}\n >\n {isSubmittingForm ? 'Saving' : 'Save'}\n </Button>\n </Space>\n )}\n </Col>\n </Row>\n </Col>\n <Divider className=\"mt-2 mb-3\" />\n <Col span={24}>\n {!docsEditMode && (\n <>\n {record.docs?.length ? (\n <>\n {record.docs.map(item => (\n <div\n key={`task_docs_${item.doc_id}`}\n className=\"mb-2\"\n >\n <span>\n <span>\n <Button\n className=\" mr-2\"\n size=\"small\"\n onClick={() => {\n previewDoc(\n 'contract_document',\n [\n {\n file_id:\n item.doc_id,\n contract_id:\n contractID,\n },\n ]\n );\n }}\n title=\"Preview the document\"\n icon={\n <FileSearchOutlined />\n }\n ></Button>\n <u>{item.filename}</u>\n </span>\n {/* (Uploaded by \n {item.account?.fullname} on \n <EZDateFormat\n value={item.date_uploaded}\n format=\"MM/DD/YYYY\"\n />\n ) */}\n </span>\n </div>\n ))}\n </>\n ) : (\n <Text italic type=\"secondary\">\n No linked documents.{' '}\n <Tooltip\n title={`Please visit the \"Document\n and Files\" tab to upload and then link the docs\n to this task.`}\n >\n <InfoCircleFilled />\n </Tooltip>\n </Text>\n )}\n </>\n )}\n {docsEditMode && (\n <>\n <EZSelectDocument\n options={docList as any[]}\n onChange={(values: any, options: any) =>\n _onChangeSelectedDocIDs(values, options)\n }\n notFoundContent={\n <span>\n No documents/files uploaded on{' '}\n <b>\"Documents and Files\"</b> tab.\n </span>\n }\n value={selectedDocList.map(d => d.doc_id)}\n />\n </>\n )}\n </Col>\n </Row>\n </Col>\n </Row>\n </div>\n </div>\n );\n };\n\n const _columns: ProColumns<TransactionTaskItemType>[] = [\n {\n title: '',\n dataIndex: 'compl',\n width: isMainMenuTaskTab ? '20px' : '20px',\n align: 'center',\n sorter: true,\n editable: false,\n render: (dom, record) => (\n <Text\n disabled={isTransactionDeleted}\n type={record.compl === 1 ? 'secondary' : undefined}\n className={`cursor-pointer task-completion-toggle ${\n record.compl === 1 ? 'task-completed' : 'task-not-completed'\n }`}\n onClick={e => {\n const currentTarget = e?.currentTarget;\n\n if (\n (UserPermission && UserPermission?.tasks_toggle !== 2) ||\n isTransactionDeleted\n ) {\n return;\n }\n\n if (currentTarget) {\n currentTarget.classList.add('loading');\n }\n _saveTaskData({ ...record, compl: record.compl === 1 ? 0 : 1 }, record);\n }}\n title={`${\n record.compl === 1 ? 'Mark task as incomplete' : 'Mark task as complete'\n }`}\n >\n {record.compl === 1 ? <CheckCircleFilled /> : <CheckCircleOutlined />}\n </Text>\n ),\n },\n {\n title: 'Task Title',\n dataIndex: 'title',\n width: isMainMenuTaskTab ? '180px' : '200px',\n sorter: true,\n renderFormItem(schema: any, { record: newData }, form, action) {\n const oldData = schema?.entity;\n return (\n <Input\n onPressEnter={element => {\n const newTaskTitle = element.currentTarget.value;\n if (!newTaskTitle || !newData?.id) {\n return;\n }\n newData.title = newTaskTitle;\n\n _onSaveTask({ data: newData, oldData });\n\n EZTableRef.current?.modifyData(newData, newData.id);\n action?.cancelEditable(newData.id);\n }}\n suffix={\n <Tooltip title='Press \"Enter\" to Save'>\n <EnterOutlined style={{ color: 'rgba(0,0,0,.45)' }} />\n </Tooltip>\n }\n />\n );\n },\n // ellipsis: true,\n render: (_, record) => (\n <>\n <Text type={record.compl === 1 ? 'secondary' : undefined} title={record.title}>\n {record.title || '-'}\n </Text>\n {!taskMenuFilter || taskMenuFilter === '-1' ? (\n <Tag\n className={`ml-1 mr-1 ${record.compl === 1 ? 'color-secondary' : ''}`}\n >\n {record.task_list?.name}\n </Tag>\n ) : (\n ''\n )}\n </>\n ),\n },\n {\n title: 'Quick Info',\n dataIndex: 'status',\n width: isMainMenuTaskTab ? '60px' : '60px',\n sorter: false,\n editable: false,\n className: 'no-print',\n render: (_, record) => (\n <>\n <Tooltip title={`${record.note?.length ? 1 : 0} note`} placement=\"left\">\n <Tag\n className={`tag-rounded ${\n record.note?.length ? '' : 'color-secondary'\n }`}\n onClick={() => _expandSelectedRows([record.id])}\n >\n <MessageOutlined /> {record.note?.length ? 1 : 0}\n </Tag>\n </Tooltip>\n <Tooltip\n title={`${record.docs?.length || 0} linked document(s)`}\n placement=\"top\"\n >\n <Tag\n className={`tag-rounded ${\n record.docs?.length ? '' : 'color-secondary'\n }`}\n onClick={() => _expandSelectedRows([record.id])}\n >\n <CloudServerOutlined /> {record.docs?.length || 0}\n </Tag>\n </Tooltip>\n <Tooltip\n title={`${\n record.email_template_id\n ? '1 email template is linked. '\n : 'Click to open email activity.'\n }`}\n // title={`1 email template linked, and ${\n // record.emails?.length || 0\n // } email(s) sent`}\n placement=\"right\"\n >\n <Tag\n className={`tag-rounded mr-0 cursor-pointer ${\n record.email_template_id ? '' : 'color-secondary'\n }`}\n onClick={() => _openTaskEmailModal(record)}\n color=\"default\"\n >\n <MailOutlined />\n {/* {record.emails_sent_count || 0} */}\n </Tag>\n </Tooltip>\n </>\n ),\n },\n {\n title: 'Due Date',\n dataIndex: 'duedate',\n valueType: 'date',\n width: isMainMenuTaskTab ? '60px' : '70px',\n render: (_, record, idx, action) => {\n const currentYear = new Date().getFullYear();\n const nowMoment = moment();\n\n const dueDateMoment = record.duedate\n ? moment(record.duedate)\n .hour(nowMoment.hour())\n .minute(nowMoment.minute())\n .second(nowMoment.second())\n .millisecond(nowMoment.millisecond())\n : null;\n\n const isDue =\n record.compl !== 1 &&\n dueDateMoment &&\n dueDateMoment.isBefore(nowMoment.clone().startOf('day'));\n const isWithin2Weeks = dueDateMoment?.isValid()\n ? dueDateMoment.isBetween(moment().subtract(7, 'days'), moment().add(7, 'days'))\n : false;\n\n const textType = isDue\n ? 'danger'\n : dueDateMoment && dueDateMoment.diff(nowMoment, 'day') === 0\n ? 'success'\n : dueDateMoment && dueDateMoment.diff(nowMoment, 'day') === 1\n ? undefined\n : record.compl === 1\n ? 'secondary'\n : undefined;\n\n const dueDateFormat =\n dueDateMoment && dueDateMoment.year() === currentYear\n ? 'MMM Do'\n : 'MMM Do, YYYY';\n\n const customText =\n isWithin2Weeks && dueDateMoment\n ? dueDateMoment.diff(nowMoment, 'day') === 0\n ? 'Today'\n : dueDateMoment.diff(nowMoment, 'day') === 1\n ? 'Tomorrow'\n : dueDateMoment.diff(nowMoment, 'day') === -1\n ? 'Yesterday'\n : ''\n : '';\n\n return (\n <Text\n type={textType}\n strong={\n ['Yesterday', 'Today', 'Tomorrow'].includes(customText) ? true : false\n }\n >\n {isWithin2Weeks ? (\n <Tooltip title={`${dueDateMoment?.format('MMM Do, YYYY')}`}>\n <span>\n {customText ? (\n customText\n ) : (\n <EZDateFormat value={record.duedate} humanize />\n )}\n </span>\n </Tooltip>\n ) : (\n <EZDateFormat\n noTimezone\n value={record.duedate}\n format={dueDateFormat}\n />\n )}\n </Text>\n );\n },\n fieldProps: {\n format: 'MMM Do, YYYY',\n },\n sorter: true,\n },\n {\n title: 'Assignee',\n className: 'task-assignee-column',\n dataIndex: 'assignee',\n width: '70px',\n valueType: 'select',\n sorter: false,\n ellipsis: true,\n fieldProps: {\n options: teamMembers?.map(user => ({\n label: user.fullname,\n value: user.account_id,\n })),\n showSearch: true,\n },\n render: (_, record) => {\n const memberDetail = teamMembers.find(\n ({ account_id }) => account_id === record.assignee\n );\n return <div>{memberDetail?.fullname || '-'}</div>;\n },\n },\n {\n title: 'Priority',\n dataIndex: 'prio',\n width: isMainMenuTaskTab ? '45px' : '45px',\n valueType: 'select',\n sorter: true,\n fieldProps: {\n options: [\n {\n label: <Badge count={'-1'} style={{ backgroundColor: '#2db7f5' }} />,\n value: -1,\n },\n {\n label: <Badge count={'±0'} style={{ backgroundColor: 'grey' }} />,\n value: 0,\n },\n {\n label: <Badge count={'+1'} style={{ backgroundColor: 'gold' }} />,\n value: 1,\n },\n {\n label: <Badge count={'+2'} style={{ backgroundColor: '#f50' }} />,\n value: 2,\n },\n ],\n },\n render: (_, record, idx, action) => <div>{_renderPriorityBadge(record)}</div>,\n },\n {\n title: 'Last Edited On',\n dataIndex: 'd_edited',\n width: isMainMenuTaskTab ? '100px' : '70px',\n sorter: true,\n editable: false,\n className: 'no-print',\n render: (_, record) => (\n <>\n <Text type={record.compl === 1 ? 'secondary' : undefined}>\n <EZDateFormat value={record.d_edited} format={'MMM DD, YYYY hh:mma'} />\n </Text>\n </>\n ),\n },\n {\n title: 'Action',\n dataIndex: 'action',\n width: isMainMenuTaskTab ? '75px' : '60px',\n valueType: 'option',\n className: 'no-print',\n hideInTable: UserPermission && UserPermission?.tasks_toggle === 2 ? false : true,\n render: (_, record, index, action) =>\n isTransactionDeleted ? (\n <></>\n ) : (\n <>\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<FieldTimeOutlined />}\n title=\"Edit this task\"\n onClick={() => {\n action?.startEditable(record.id);\n }}\n >\n Quick Edit\n </Button>\n\n <Divider type=\"vertical\" />\n\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu\n items={[\n {\n icon: <MenuUnfoldOutlined className=\"mr-3\" />,\n label: 'Edit Task Detail',\n key: 'edit_task_detail',\n },\n { type: 'divider' },\n {\n icon: <DeleteOutlined className=\"mr-3\" />,\n label: 'Delete Task',\n key: 'delete_task',\n danger: true,\n },\n ]}\n onClick={({ key }) => _doActionTaskMenu(key, record)}\n />\n }\n placement=\"bottomRight\"\n >\n <span onClick={e => e.preventDefault()}>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EllipsisOutlined />}\n title=\"More action\"\n ></Button>\n </span>\n </Dropdown>\n </>\n ),\n fixed: 'right',\n },\n ];\n\n if (isMainMenuTaskTab) {\n let tmp = _columns[2];\n _columns[2] = _columns[3];\n _columns[3] = tmp;\n _columns.splice(3, 0, {\n title: 'Address',\n dataIndex: '$task_list.contract.address$',\n editable: false,\n width: '160px',\n sorter: true,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text\n onClick={() => _openNewTab(record)}\n underline\n className=\"cursor-pointer\"\n type={record.compl === 1 ? 'secondary' : undefined}\n >\n {record.task_list?.contract?.address || '-'}, \n {record.task_list?.contract?.city || '-'}, \n {record.task_list?.contract?.state || '-'}\n </Text>\n </>\n ),\n });\n } else if (disableDrag === false) {\n _columns.push(\n {\n title: 'Completed On',\n dataIndex: 'd_completed',\n width: isMainMenuTaskTab ? '120px' : '70px',\n sorter: true,\n editable: false,\n className: 'no-print',\n render: (_, record) => (\n <>\n <Text type={record.compl === 1 ? 'secondary' : undefined}>\n <EZDateFormat\n value={record.compl === 1 ? record.d_completed : null}\n format={'MMM DD, YYYY hh:mma'}\n />\n </Text>\n </>\n ),\n },\n {\n key: 'sort',\n fixed: 'left',\n align: 'center',\n width: 18,\n render: () => <DragHandle />,\n }\n );\n } else {\n _columns.push({\n title: 'Completed On',\n dataIndex: 'd_completed',\n width: isMainMenuTaskTab ? '120px' : '70px',\n sorter: true,\n editable: false,\n className: 'no-print',\n render: (_, record) => (\n <>\n <Text type={record.compl === 1 ? 'secondary' : undefined}>\n <EZDateFormat\n value={record.compl === 1 ? record.d_completed : null}\n format={'MMM DD, YYYY hh:mma'}\n />\n </Text>\n </>\n ),\n });\n }\n\n const onEditTaskTabs = (action: 'add' | 'remove') => {\n if (action === 'add') {\n _showAddNewTasklistModal(undefined, 'ADD');\n } else {\n }\n };\n\n const _fetchSubUsers = () => {\n getAllTeamMembers().then(({ data }) => {\n setTeamMembers((data as AccountCompactDataType[]) || []);\n });\n };\n\n useEffect(() => {\n _applyFilter(\n filterType,\n taskTypeFilter,\n taskMenuFilter,\n transactionStatusFilter,\n toggleMyTasks\n );\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterType, taskTypeFilter, taskMenuFilter, transactionStatusFilter, toggleMyTasks]);\n\n useEffect(() => {\n if (pageType === TASK_EMBEDDED_TYPE.TRANSACTION_DETAIL) {\n _reloadSubTabData();\n _fetchTaskListMenu();\n }\n\n _fetchSubUsers();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [manualReloadCount]);\n\n return (\n <div className=\"ez-component-tasks\">\n {pageType === TASK_EMBEDDED_TYPE.MAIN_MENU && (\n <div className=\"mb-5 ez-sub-content-wrapper\">\n <Row>\n <Col span={12} style={{ textAlign: 'left' }}>\n <Segmented\n options={[\n { label: 'Overdue', value: 'overdue' },\n { label: 'Today', value: 'today' },\n { label: 'This Week', value: 'this_week' },\n { label: 'Next 14 Days', value: 'next_14_days' },\n { label: 'This Month', value: 'this_month' },\n { label: 'All Tasks', value: 'all_tasks' },\n ]}\n value={filterType}\n onChange={val => setFilterType(val as string)}\n />\n </Col>\n <Col span={12} style={{ textAlign: 'right' }}>\n <EZSelectStatus\n style={{ textAlign: 'left', width: 180 }}\n showAllActiveStatusesOpt\n maxTagCount={'responsive'}\n // mode=\"multiple\"\n allowClear={false}\n optionFilterProp=\"label\"\n className=\"mr-3\"\n placeholder={\n <span>\n <Text>Transaction Status: </Text>\n <Text strong>All Statuses</Text>\n </span>\n }\n defaultValue={{\n label: 'All Active Statuses',\n value: 'all_active_statuses',\n }}\n onChange={val => setTransactionStatusFilter(val.toString())}\n />\n <Select\n style={{ textAlign: 'left', width: 300 }}\n value={taskTypeFilter}\n onChange={val => setTaskTypeFilter(val)}\n >\n <Option value=\"incomplete_tasks\">\n <span>\n <Text>Show: </Text>\n <Text strong>Incomplete Tasks</Text>\n </span>\n </Option>\n <Option value=\"completed_tasks\">\n <span>\n <Text>Show: </Text>\n <Text strong>Completed Tasks</Text>\n </span>\n </Option>\n <Option value=\"all_tasks\">\n <span>\n <Text>Show: </Text>\n <Text strong>All Tasks</Text>\n </span>\n </Option>\n </Select>\n </Col>\n </Row>\n </div>\n )}\n <Row gutter={[0, 0]} className=\"row-wrapper\">\n <>\n {/* <UploadProgress\n fileUploadList={fileUploadList}\n setFileUploadList={setFileUploadList}\n /> */}\n </>\n <Col span={24}>\n {pageType === TASK_EMBEDDED_TYPE.TRANSACTION_DETAIL && (\n <Tabs\n type={isTransactionDeleted ? 'card' : 'editable-card'}\n defaultActiveKey=\"-1\"\n addIcon={\n <Tooltip title=\"Add new task list\">\n <PlusOutlined />\n </Tooltip>\n }\n onChange={val => {\n setTaskMenuFilter(val);\n }}\n // onEdit={onEditTaskTabs}\n onEdit={(e: any, action) => onEditTaskTabs(action)}\n activeKey={taskMenuFilter}\n tabBarExtraContent={\n <div>\n <Select\n style={{ textAlign: 'left', width: 300 }}\n value={taskTypeFilter}\n onChange={val => setTaskTypeFilter(val)}\n className=\"mb-2 ml-3\"\n >\n <Option value=\"incomplete_tasks\">\n <span>\n <Text>Show: </Text>\n <Text strong>Incomplete Tasks</Text>\n </span>\n </Option>\n <Option value=\"completed_tasks\">\n <span>\n <Text>Show: </Text>\n <Text strong>Completed Tasks</Text>\n </span>\n </Option>\n <Option value=\"all_tasks\">\n <span>\n <Text>Show: </Text>\n <Text strong>All Tasks</Text>\n </span>\n </Option>\n </Select>\n </div>\n }\n >\n <Tabs.TabPane tab=\"All tasks\" key=\"-1\" closable={false}></Tabs.TabPane>\n {taskListMenu.map(taskListItem => (\n <Tabs.TabPane\n tab={\n <span>\n {taskListItem.name}\n {taskMenuFilter === `tab-tasklist-${taskListItem.id}` &&\n !isTransactionDeleted && (\n <Dropdown\n overlay={\n <Menu\n items={[\n {\n label: 'Rename',\n key: 'rename_tasklist',\n onClick: () =>\n _showAddNewTasklistModal(\n taskListItem,\n 'EDIT'\n ),\n },\n { type: 'divider' },\n {\n label: 'Delete Tasklist',\n key: 'delete_tasklist',\n danger: true,\n onClick: () =>\n _showDeleteTasklistConfirmationModal(\n taskListItem\n ),\n },\n ]}\n />\n }\n trigger={['click']}\n >\n {/* <a onClick={e => e.preventDefault()}> */}\n <Space>\n <CaretDownOutlined className=\"ml-4 mr-0\" />\n </Space>\n {/* </a> */}\n </Dropdown>\n )}\n </span>\n }\n key={`tab-tasklist-${taskListItem.id}`}\n closable={false}\n ></Tabs.TabPane>\n ))}\n </Tabs>\n )}\n </Col>\n <Col span={24} ref={componentRef}>\n {/* {selectedRowKeys?.length ? (\n <Row className=\"table-selected-indicator\" style={{ top: '0px' }}>\n <Col span={24}>\n <Alert\n className={`${\n selectedRowKeys?.length\n ? 'has-row-selected'\n : 'no-row-selected'\n }`}\n message={\n selectedRowKeys && selectedRowKeys.length ? (\n <Space>\n <Tooltip title=\"Move the selected task(s)\">\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu\n onClick={({ key }) =>\n _doBulkAction(\n 'MOVE_TO_TASKLIST',\n selectedRowKeys,\n { selectedTaskListID: key }\n )\n }\n items={taskListMenu.map(item => ({\n label: item.name,\n key: item.id,\n }))}\n />\n }\n placement=\"bottomLeft\"\n >\n <Button\n icon={<DeliveredProcedureOutlined />}\n >\n Move To\n </Button>\n </Dropdown>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Tooltip title=\"Set Due Date\">\n <Button\n icon={<CalendarFilled />}\n onClick={() =>\n _doBulkAction(\n 'SET_DUE_DATE',\n selectedRowKeys\n )\n }\n >\n Set Due Date\n </Button>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Tooltip title=\"Remove the selected task(s)\">\n <Popconfirm\n arrowPointAtCenter\n title=\"Are you sure to delete the selected task(s)?\"\n okText=\"Yes\"\n cancelText=\"No\"\n placement=\"bottomLeft\"\n >\n <Button\n danger\n icon={<DeleteFilled />}\n ></Button>\n </Popconfirm>\n </Tooltip>\n </Space>\n ) : (\n ''\n )\n }\n />\n </Col>\n </Row>\n ) : (\n ''\n )} */}\n <div className=\"only-print text-center mb-0 mt-0\">\n <b>Tasklist of {contractAddress}</b>\n </div>\n\n <div className=\"pr-3 pl-3 text-help mb-3\" style={{ textAlign: 'left' }}>\n <InfoCircleOutlined /> Tip: Scroll horizontally over the below table to see\n other information. Click{' '}\n <Popover\n content={\n <Row gutter={[0, 12]} style={{ width: '500px' }}>\n <Col>\n <b>Tip #1</b> - Mark a task as completed by hitting the{' '}\n <CheckCircleOutlined style={{ fontSize: '16px' }} /> icon.\n </Col>\n <Col>\n <b>Tip #2</b> - Click the <RightOutlined /> icon to show the\n task's notes and/or edit the linked documents.\n </Col>\n {isMainMenuTaskTab && (\n <Col>\n <b>Tip #3</b> - Click the task's <u>Address</u> to\n immediately open the corresponding transaction/contract\n detail in a new EZ tab.\n </Col>\n )}\n </Row>\n }\n title={\n <>\n {isMainMenuTaskTab ? (\n <>\n More tips on the <b>Tasks</b> page.\n </>\n ) : (\n <>\n More tips on the <b>Tasks</b> tab.\n </>\n )}\n </>\n }\n trigger=\"click\"\n // placement=\"right\"\n >\n <a>here</a>\n </Popover>{' '}\n to see more tips.\n </div>\n <DndContext modifiers={[restrictToVerticalAxis]} onDragEnd={onDragEnd}>\n <SortableContext\n items={transactionTasks.map(i => i.id)}\n strategy={verticalListSortingStrategy}\n >\n {isMainMenuTaskTab ? (\n <EZTable\n className=\"eztable-hide-delete-editable\"\n ref={EZTableRef}\n pagination={{\n pageSize:\n pageType === TASK_EMBEDDED_TYPE.TRANSACTION_LIST\n ? 10\n : 100,\n pageSizeOptions:\n pageType === TASK_EMBEDDED_TYPE.TRANSACTION_LIST\n ? [10]\n : [20, 50, 100],\n position:\n pageType === TASK_EMBEDDED_TYPE.TRANSACTION_LIST\n ? ['bottomLeft']\n : ['bottomLeft', 'topLeft'],\n }}\n components={{ body: { row: RowTable } }}\n queryParams={queryParams}\n // rowSelection={{\n // selectedRowKeys: selectedRowKeys,\n // onChange: (newSelectedRowKeys: React.Key[]) => {\n // setSelectedRowKeys(newSelectedRowKeys);\n // },\n // alwaysShowAlert: true,\n // columnWidth: '16px',\n // }}\n // tableAlertRender={false}\n expandable={{\n columnWidth: '16px',\n expandedRowRender: (record: TransactionTaskItemType) => {\n return <ExpandedRowComponent record={record} />;\n },\n expandIcon: _expandIcon,\n showExpandColumn: true,\n expandedRowKeys: expandedRecordIDs,\n onExpand: (expanded, record: TransactionTaskItemType) => {\n if (expanded) {\n setExpandedRecordIDs([\n ...expandedRecordIDs,\n record.id,\n ]);\n } else {\n setExpandedRecordIDs([\n ...expandedRecordIDs.filter(\n id => id !== record.id\n ),\n ]);\n }\n },\n }}\n columns={_columns}\n size=\"small\"\n rowKey=\"id\"\n fetchData={_fetchData}\n scroll={{ x: isMainMenuTaskTab ? 2200 : 2000 }}\n toolBarComponents={[\n <Switch\n className=\"ml-2 switch-table-component\"\n checkedChildren={\n <>\n <EyeInvisibleOutlined className=\"mr-2\" />\n My tasks\n </>\n }\n unCheckedChildren={\n <>\n <EyeOutlined className=\"mr-2\" />\n My tasks\n </>\n }\n size=\"default\"\n style={{ width: '110px' }}\n checked={toggleMyTasks}\n onChange={val => setToggleMyTasks(val)}\n />,\n <Button\n className=\"ml-2 ez-action-btn\"\n icon={<PrinterOutlined />}\n onClick={handlePrint}\n />,\n <Button\n key={`toolBarComponents-1-task-list`}\n className=\"ml-2 ez-action-btn\"\n icon={\n toggleAllRows ? <RightOutlined /> : <DownOutlined />\n }\n onClick={() => _toggleAllRows(!toggleAllRows)}\n >\n {toggleAllRows ? 'Collapse' : 'Expand'} all rows\n </Button>,\n pageType === TASK_EMBEDDED_TYPE.TRANSACTION_DETAIL &&\n !isTransactionDeleted && [\n UserPermission &&\n UserPermission?.tasks_toggle === 2 ? (\n <Button\n key={`toolBarComponents-2-task-list`}\n className=\"ml-2 mr-2 ez-action-btn\"\n onClick={() => _showAddNewTaskModal()}\n >\n <PlusOutlined />\n Add New Task\n </Button>\n ) : (\n <></>\n ),\n ],\n ]}\n editable={{\n actionRender: (row, config, defaultDom) => [\n defaultDom.save,\n defaultDom.cancel,\n // defaultDom.delete,\n ],\n type: 'multiple',\n onSave: async (_, data: TransactionTaskItemType, oldData) =>\n _onSaveTask({ data, oldData }),\n saveText: (\n <>\n <Button\n className=\"p-0 pl-1\"\n type=\"link\"\n icon={<SaveFilled />}\n title=\"Edit this task\"\n >\n Save\n </Button>\n </>\n ),\n deletePopconfirmMessage:\n 'Are you sure to delete this task?',\n deleteText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0\"\n type=\"text\"\n title=\"Delete\"\n danger\n icon={<DeleteOutlined />}\n ></Button>\n </>\n ),\n onDelete: (key, record) => _deleteTask(record),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey mr-2\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n onChangeCallback={_onChangeCallback}\n />\n ) : (\n <EZTable\n className=\"eztable-hide-delete-editable\"\n ref={EZTableRef}\n dataSource={transactionTasks}\n pagination={{\n pageSize:\n pageType === TASK_EMBEDDED_TYPE.TRANSACTION_LIST\n ? 10\n : 100,\n pageSizeOptions:\n pageType === TASK_EMBEDDED_TYPE.TRANSACTION_LIST\n ? [10]\n : [20, 50, 100],\n position:\n pageType === TASK_EMBEDDED_TYPE.TRANSACTION_LIST\n ? ['bottomLeft']\n : ['bottomLeft', 'topLeft'],\n }}\n components={{ body: { row: RowTable } }}\n queryParams={queryParams}\n // rowSelection={{\n // selectedRowKeys: selectedRowKeys,\n // onChange: (newSelectedRowKeys: React.Key[]) => {\n // setSelectedRowKeys(newSelectedRowKeys);\n // },\n // alwaysShowAlert: true,\n // columnWidth: '16px',\n // }}\n // tableAlertRender={false}\n expandable={{\n columnWidth: '16px',\n expandedRowRender: (record: TransactionTaskItemType) => {\n return <ExpandedRowComponent record={record} />;\n },\n expandIcon: _expandIcon,\n showExpandColumn: true,\n expandedRowKeys: expandedRecordIDs,\n onExpand: (expanded, record: TransactionTaskItemType) => {\n if (expanded) {\n setExpandedRecordIDs([\n ...expandedRecordIDs,\n record.id,\n ]);\n } else {\n setExpandedRecordIDs([\n ...expandedRecordIDs.filter(\n id => id !== record.id\n ),\n ]);\n }\n },\n }}\n columns={_columns}\n size=\"small\"\n rowKey=\"id\"\n fetchData={_fetchData}\n scroll={{ x: isMainMenuTaskTab ? 2200 : 2000 }}\n toolBarComponents={[\n <Switch\n className=\"ml-2 switch-table-component\"\n checkedChildren={\n <>\n <EyeInvisibleOutlined className=\"mr-2\" />\n My tasks\n </>\n }\n unCheckedChildren={\n <>\n <EyeOutlined className=\"mr-2\" />\n My tasks\n </>\n }\n size=\"default\"\n style={{ width: '110px' }}\n checked={toggleMyTasks}\n onChange={val => setToggleMyTasks(val)}\n />,\n <Button\n className=\"ml-2 ez-action-btn\"\n icon={<PrinterOutlined />}\n onClick={handlePrint}\n />,\n <Button\n key={`toolBarComponents-1-task-list`}\n className=\"ml-2 ez-action-btn\"\n icon={\n toggleAllRows ? <RightOutlined /> : <DownOutlined />\n }\n onClick={() => _toggleAllRows(!toggleAllRows)}\n >\n {toggleAllRows ? 'Collapse' : 'Expand'} all rows\n </Button>,\n pageType === TASK_EMBEDDED_TYPE.TRANSACTION_DETAIL &&\n !isTransactionDeleted && [\n UserPermission &&\n UserPermission?.tasks_toggle === 2 ? (\n <Button\n key={`toolBarComponents-2-task-list`}\n className=\"ml-2 mr-2 ez-action-btn\"\n onClick={() => _showAddNewTaskModal()}\n >\n <PlusOutlined />\n Add New Task\n </Button>\n ) : (\n <></>\n ),\n ],\n ]}\n editable={{\n actionRender: (row, config, defaultDom) => [\n defaultDom.save,\n defaultDom.cancel,\n // defaultDom.delete,\n ],\n type: 'multiple',\n onSave: async (_, data: TransactionTaskItemType, oldData) =>\n _onSaveTask({ data, oldData }),\n saveText: (\n <>\n <Button\n className=\"p-0 pl-1\"\n type=\"link\"\n icon={<SaveFilled />}\n title=\"Edit this task\"\n >\n Save\n </Button>\n </>\n ),\n deletePopconfirmMessage:\n 'Are you sure to delete this task?',\n deleteText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0\"\n type=\"text\"\n title=\"Delete\"\n danger\n icon={<DeleteOutlined />}\n ></Button>\n </>\n ),\n onDelete: (key, record) => _deleteTask(record),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey mr-2\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n onChangeCallback={_onChangeCallback}\n />\n )}\n </SortableContext>\n </DndContext>\n </Col>\n </Row>\n </div>\n );\n};\n","import { Mixpanel } from 'utils/mixPanelUtil';\nimport { APIRequest } from '../apiUtil';\nimport { apiUrl } from '../envUtil';\n\nexport const generateDocuSignAuthURL = () => {\n Mixpanel.track('app.generate_docusign_auth_url', null);\n\n return APIRequest({\n method: 'get',\n url: apiUrl + `admin/docusign/auth-url`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const exchangeDocuSignCode = (code: string, state: string) => {\n Mixpanel.track('app.exchange_docusign_code', null);\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/docusign/exchange-code`,\n data: { code, state },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getDocusignAccountInformation = () => {\n Mixpanel.track('app.get_docusign_account', null);\n\n return APIRequest({\n method: 'get',\n url: apiUrl + `admin/docusign/account`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const processDocusignLogout = () => {\n Mixpanel.track('app.process_docusign_logout', null);\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/docusign/logout`,\n useDefaultErrorNotif: true,\n });\n};\n","import qs from 'qs';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nexport const getTransactionContacts = (contract_id: number, params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `transaction/${contract_id}/contacts` + (params ? `?${params}` : ''),\n });\n};\n\nexport const getContactRoles = (contract_id: number, queryParams?: any) => {\n const params: string = qs.stringify(queryParams);\n\n return APIRequest({\n method: 'get',\n url: apiUrl + `transaction/${contract_id}/contact-roles` + (params ? `?${params}` : ''),\n });\n};\n\nexport const addNewTransactionContact = (contract_id: number, payload: any) => {\n Mixpanel.track('app.edit_transaction', {\n contract_id,\n sub_tab: 'additional_contacts',\n action: 'add',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `transaction/${contract_id}/contacts`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateTransactionContact = (contract_id: number, contact_id: number, payload: any) => {\n Mixpanel.track('app.edit_transaction', {\n contract_id,\n sub_tab: 'additional_contacts',\n action: 'edit',\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `transaction/${contract_id}/contact/${contact_id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteTransactionContact = (contract_id: number, contact_id: number) => {\n Mixpanel.track('app.edit_transaction', {\n contract_id,\n sub_tab: 'additional_contacts',\n action: 'delete',\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `transaction/${contract_id}/contact/${contact_id}`,\n useDefaultErrorNotif: true,\n });\n};\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Modal, Form, Input, Typography } from 'antd';\nimport { isNil, omitBy, pick } from 'lodash';\n\n// EZ web-app utils import\n// EZ web-app types import\nimport { ContactRoleType, TransactionContactItemType } from 'types/transaction';\n// EZ web-app components import\nimport {\n EZAutocompleteCity,\n EZSelectUSState,\n EZSelectContactRole,\n EZAutocompleteParty,\n} from 'components';\nimport {\n addNewTransactionContact,\n updateTransactionContact,\n} from 'utils/ez_api/transactionContactAPIs';\nimport { showNotification } from 'utils/notificationUtil';\nimport { updateOnboardingStep } from 'utils/onboardingUtil';\nimport { HomeContext } from 'context/EZContext';\n\n// EZ web-app styles and assets import\n\nconst { Text } = Typography;\n\nexport const ModalEditAdditionalContact: React.FC<{\n contractID: number;\n contact?: TransactionContactItemType;\n contactRoles?: ContactRoleType[];\n isModalVisible?: boolean;\n setIsModalVisible?: React.Dispatch<React.SetStateAction<boolean>>;\n reloadSubTabData: () => void;\n}> = ({\n contractID,\n contact,\n contactRoles = [],\n isModalVisible = false,\n setIsModalVisible = () => {},\n reloadSubTabData,\n}) => {\n const isEditMode: boolean = contact && contact.contact_id ? true : false;\n\n const [form] = Form.useForm();\n\n const [submittingData, setSubmittingData] = useState(false);\n const HomeCtx = useContext(HomeContext);\n\n const _onSubmitForm = (formValues?: any) => {\n setSubmittingData(true);\n if (formValues.role_id) {\n formValues.role =\n contactRoles.find(role => role.role_id.toString() === formValues.role_id.toString())\n ?.role || '';\n }\n\n const reqPromise = isEditMode\n ? updateTransactionContact(contractID, contact?.contact_id || 0, formValues)\n : addNewTransactionContact(contractID, formValues);\n\n reqPromise\n .then(resp => {\n showNotification(\n 'success',\n isEditMode\n ? 'Selected contact data has been updated.'\n : 'New additional contact has been added.'\n );\n if (!isEditMode) {\n // update onboarding step to completed\n updateOnboardingStep('add_additional_contacts', HomeCtx.refetchOnboardingList);\n }\n reloadSubTabData();\n setIsModalVisible(false);\n\n // set trigger to refetch data by key\n HomeCtx.setTriggerRefetchDataList(prev => [...prev, 'additional_contact']);\n })\n .finally(() => {\n setSubmittingData(false);\n });\n };\n\n const _setFormFieldsValue = () => {\n if (isEditMode) {\n form.setFieldsValue(contact);\n } else {\n form.resetFields();\n }\n };\n\n const _resetModalStates = () => {\n setSubmittingData(false);\n };\n\n const _onAddNewRole = () => {\n reloadSubTabData();\n };\n\n const _onSelectName = (value: any, opt: any) => {\n form.setFieldsValue({\n ...omitBy(\n pick(opt, [\n 'email',\n 'email2',\n 'telephone',\n 'telephone2',\n 'fax',\n 'address',\n 'city',\n 'state',\n 'zip',\n 'company',\n 'role_id',\n ]),\n isNil\n ),\n });\n };\n\n useEffect(() => {\n if (isModalVisible) {\n _resetModalStates();\n _setFormFieldsValue();\n } else {\n _resetModalStates();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isModalVisible]);\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <Modal\n title={`${isEditMode ? 'Edit Contact' : 'Add New Contact'}`}\n visible={isModalVisible}\n onOk={() => form.submit()}\n onCancel={() => setIsModalVisible(false)}\n okText=\"Save Changes\"\n confirmLoading={submittingData}\n width={700}\n style={{ top: 40 }}\n bodyStyle={{ overflowY: 'auto', height: '600px' }}\n >\n <Form layout=\"vertical\" form={form} onFinish={_onSubmitForm} requiredMark={false}>\n <Row gutter={20}>\n <Col span={12}>\n <Form.Item label=\"Role\" name=\"role_id\">\n <EZSelectContactRole\n options={contactRoles.map(role => ({\n label: role.role,\n value: role.role_id,\n }))}\n onAddNewRole={_onAddNewRole}\n />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item\n label=\"Name\"\n name=\"contactname\"\n rules={[{ required: true, message: \"Name can't be empty\" }]}\n >\n <EZAutocompleteParty\n placeholder=\"Enter or search a name\"\n style={{ width: '100%' }}\n onSelect={(value: any, option: any) => {\n _onSelectName(value, option);\n }}\n />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Main Email\" name=\"email\" rules={[{ type: 'email' }]}>\n <Input placeholder=\"Enter the main email\" type=\"email\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Email 2\" name=\"email2\" rules={[{ type: 'email' }]}>\n <Input placeholder=\"Enter the secondary email\" type=\"email\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Main Phone\" name=\"telephone\">\n <Input placeholder=\"Enter the main phone number\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Phone 2\" name=\"telephone2\">\n <Input placeholder=\"Enter the secondary phone\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Company\" name=\"company\">\n <Input placeholder=\"Enter the company name\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Fax\" name=\"fax\">\n <Input placeholder=\"Enter the fax\" />\n </Form.Item>\n </Col>\n </Row>\n <Row gutter={20}>\n <Col span={24}>\n <Form.Item label=\"Address\" name=\"address\">\n <Input placeholder=\"Enter the address\" />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"City\" name=\"city\">\n <EZAutocompleteCity />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"State\" name=\"state\">\n <EZSelectUSState />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item label=\"ZIP\" name=\"zip\">\n <Input placeholder=\"Enter the ZIP\" />\n </Form.Item>\n </Col>\n </Row>\n {/* <Divider orientation=\"left\">\n <b>Contact's Notes</b>\n </Divider> */}\n <Row gutter={20}>\n <Col span={24}>\n <Form.Item label=\"Notes\" name=\"notes\">\n <Input.TextArea placeholder=\"Enter the notes\" rows={2} />\n </Form.Item>\n </Col>\n </Row>\n </Form>\n </Modal>\n </>\n );\n};\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Space, Button, Popconfirm, Modal } from 'antd';\nimport { EditOutlined, DeleteOutlined, PlusOutlined } from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport {\n deleteTransactionContact,\n getContactRoles,\n getTransactionContacts,\n} from 'utils/ez_api/transactionContactAPIs';\n// EZ web-app types import\nimport {\n ContactRoleType,\n TransactionContactItemType,\n TransactionDetailTabProps,\n} from 'types/transaction';\n// EZ web-app components import\nimport { EZCopyable, EZTable, EZDateFormat } from 'components';\nimport { ITableQueryParams } from 'components/table/EZProTable';\nimport { ModalEditAdditionalContact } from '../modals/Modal_showEditAdditionalContact';\nimport { showNotification } from 'utils/notificationUtil';\nimport { HomeContext } from 'context/EZContext';\n\n// EZ web-app styles and assets import\n\nconst defaultTableParam = {\n searchKeyword: '',\n orderParams: [],\n whereParams: {},\n whereFilterParams: {},\n};\n\nexport const SubTab_Contacts: React.FC<TransactionDetailTabProps> = ({\n contractID,\n isTransactionDeleted,\n manualReloadCount,\n}) => {\n const HomeCtx = useContext(HomeContext);\n\n const UserPermission = HomeCtx.userPermission;\n\n const [queryParams, setQueryParams] = useState<ITableQueryParams>(defaultTableParam);\n const [selectedContact, setSelectedContact] = useState<TransactionContactItemType>();\n const [contactRoles, setContactRoles] = useState<ContactRoleType[]>([]);\n\n const [isModalEditContactVisible, setIsModalEditContactVisible] = useState(false);\n\n async function _fetchData(EZTableQueryParams: string): Promise<any> {\n return getTransactionContacts(contractID, EZTableQueryParams).then(result => result);\n }\n\n const _reloadContactRoles = () => {\n getContactRoles(contractID, { pageSize: 250 }).then(response => {\n setContactRoles(response.data || []);\n });\n };\n\n const _reloadSubTabData = () => {\n setQueryParams({ ...defaultTableParam });\n\n _reloadContactRoles();\n };\n\n const _showAddContactModal = () => {\n setIsModalEditContactVisible(true);\n };\n\n const _editSelectedContact = (contact: TransactionContactItemType) => {\n setIsModalEditContactVisible(true);\n setSelectedContact(contact);\n };\n const _deleteSelectedContact = (contact: TransactionContactItemType) => {\n deleteTransactionContact(contractID, contact.contact_id || 0).then(() => {\n showNotification('success', 'You have successfully deleted the selected contact.');\n _reloadSubTabData();\n\n // set trigger to refetch data by key\n HomeCtx.setTriggerRefetchDataList(prev => [...prev, 'additional_contact']);\n });\n };\n\n const _columns: ProColumns<TransactionContactItemType>[] = [\n {\n title: 'Name',\n dataIndex: 'contactname',\n width: '200px',\n fixed: 'left',\n sorter: true,\n render: (_, record) => (\n <div>\n {record.contactname ? (\n <>\n {record.contactname} <EZCopyable text={record.contactname} />\n </>\n ) : (\n '-'\n )}\n </div>\n ),\n },\n {\n title: 'Role',\n dataIndex: 'role_id',\n width: '200px',\n render: (_, record) => <div>{record.contact_role?.role || record.role || '-'}</div>,\n },\n {\n title: 'Email #1',\n dataIndex: 'email',\n width: '250px',\n render: (_, record) => (\n <div>\n {record.email ? (\n <>\n {record.email} <EZCopyable text={record.email} />\n </>\n ) : (\n '-'\n )}\n </div>\n ),\n sorter: true,\n },\n {\n title: 'Telephone #1',\n dataIndex: 'telephone',\n width: '200px',\n render: (_, record) => (\n <div>\n {record.telephone ? (\n <>\n {record.telephone} <EZCopyable text={record.telephone} />\n </>\n ) : (\n '-'\n )}{' '}\n </div>\n ),\n sorter: true,\n },\n {\n title: 'Company',\n dataIndex: 'company',\n width: '200px',\n render: (_, record) => <div>{record.company || '-'}</div>,\n sorter: true,\n },\n {\n title: 'Fax',\n dataIndex: 'fax',\n width: '200px',\n render: (_, record) => <div>{record.telephone || '-'}</div>,\n sorter: true,\n },\n {\n title: 'Address',\n dataIndex: 'address',\n width: '300px',\n render: (_, record) => (\n <div>\n <div>{record.address || <i>Address isn't set</i>}</div>\n <div>\n {record.city || <i>City isn't set</i>},{' '}\n {record.state || <i>State isn't set</i>},{' '}\n {record.zip || <i>ZIP isn't set</i>}\n </div>\n </div>\n ),\n },\n {\n title: 'Email #2',\n dataIndex: 'email2',\n width: '200px',\n render: (_, record) => <div>{record.email2 || '-'}</div>,\n sorter: true,\n },\n {\n title: 'Telephone #2',\n dataIndex: 'telephone2',\n width: '200px',\n render: (_, record) => <div>{record.telephone2 || '-'}</div>,\n sorter: true,\n },\n {\n title: 'Date Added',\n dataIndex: 'date_posted',\n width: '150px',\n render: (_, record) => (\n <div>\n <EZDateFormat value={record.date_posted} format=\"MMM Do, YYYY hh:mma\" />\n </div>\n ),\n sorter: true,\n },\n {\n title: 'Notes',\n dataIndex: 'notes',\n width: '300px',\n render: (_, record) => <div>{record.notes || '-'}</div>,\n sorter: false,\n },\n {\n title: 'Action',\n dataIndex: 'action',\n width: '160px',\n hideInTable: UserPermission?.contacts_toggle !== 2,\n render: (_, record) =>\n isTransactionDeleted ? (\n <></>\n ) : (\n <Space size=\"small\" className=\"pl-1\">\n <Button\n className=\"p-0 mr-2\"\n type=\"link\"\n icon={<EditOutlined />}\n title=\"Edit this contact\"\n onClick={() => _editSelectedContact(record)}\n >\n Edit\n </Button>\n <Popconfirm\n placement=\"bottomRight\"\n title={`Delete ${record.contactname || 'this contact'}?`}\n okText=\"Yes\"\n cancelText=\"Cancel\"\n onConfirm={() => _deleteSelectedContact(record)}\n >\n <Button\n className=\"p-0\"\n type=\"link\"\n style={{ color: 'red' }}\n icon={<DeleteOutlined />}\n >\n Delete\n </Button>\n </Popconfirm>\n </Space>\n ),\n fixed: 'right',\n },\n ];\n\n useEffect(() => {\n _reloadSubTabData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [manualReloadCount]);\n\n useEffect(() => {\n if (!isModalEditContactVisible) {\n setSelectedContact(undefined);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isModalEditContactVisible]);\n\n return (\n <div className=\"ez_detail_contacts\">\n <Row gutter={[0, 0]}>\n <Col>\n <ModalEditAdditionalContact\n contractID={contractID}\n contact={selectedContact}\n contactRoles={contactRoles}\n isModalVisible={isModalEditContactVisible}\n setIsModalVisible={setIsModalEditContactVisible}\n reloadSubTabData={_reloadSubTabData}\n />\n </Col>\n </Row>\n <Row gutter={[0, 0]}>\n <Col span={24}>\n <EZTable\n pagination={{\n pageSize: 20,\n }}\n queryParams={queryParams}\n columns={_columns}\n rowKey=\"contact_id\"\n fetchData={_fetchData}\n scroll={{ x: 1600 }}\n toolBarComponents={\n UserPermission?.contacts_toggle === 2 && !isTransactionDeleted\n ? [\n <Button\n className=\"ez-action-btn ml-2\"\n onClick={() => _showAddContactModal()}\n >\n <PlusOutlined />\n Add New Contact\n </Button>,\n ]\n : []\n }\n />\n </Col>\n </Row>\n </div>\n );\n};\n","// Core React libraries import\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Button, Divider, Space, Form, Input, Popconfirm } from 'antd';\nimport { Gutter } from 'antd/lib/grid/row';\nimport { EditOutlined, MinusCircleOutlined, PlusOutlined, SaveOutlined } from '@ant-design/icons';\nimport moment from 'moment';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport { updateTransactionDetail } from 'utils/ez_api/transactionAPIs';\n// EZ web-app types import\nimport { TransactionDetailType } from 'types/transaction';\n// EZ web-app components import\nimport { EZCurrencyFormat, EZDateFormat, EZDatePicker, EZInputNumber } from 'components';\nimport { showNotification } from 'utils/notificationUtil';\nimport { HomeContext } from 'context/EZContext';\n\n// EZ web-app styles and assets import\n\nconst colLabelSpan = 14;\nconst colValueSpan = 10;\nconst rowFormViewGutter: [Gutter, Gutter] = [12, 6];\n\nexport const GeneralInformationSection: React.FC<{\n contractID: number;\n reloadSubTabData: () => void;\n transactionData: TransactionDetailType | undefined;\n isRentalProperty: boolean;\n}> = ({ contractID, reloadSubTabData, transactionData, isRentalProperty }) => {\n const HomeCtx = useContext(HomeContext);\n\n const UserPermission = HomeCtx.userPermission;\n\n const [form] = Form.useForm();\n\n const [isEditMode, setIsEditMode] = useState(false);\n const [isSubmittingForm, setIsSubmittingForm] = useState(false);\n\n const _onSubmitForm = async (formValues?: any) => {\n if (isSubmittingForm) return;\n\n const formValuesFormatted = {\n ...formValues,\n\n // dates\n contract_date: formValues.contract_date\n ? moment(formValues.contract_date).format('YYYY-MM-DD')\n : null,\n effective_date: formValues.effective_date\n ? moment(formValues.effective_date).format('YYYY-MM-DD')\n : null,\n close_date: formValues.close_date\n ? moment(formValues.close_date).format('YYYY-MM-DD')\n : null,\n listing_date: formValues.listing_date\n ? moment(formValues.listing_date).format('YYYY-MM-DD')\n : null,\n listing_live_date: formValues.listing_live_date\n ? moment(formValues.listing_live_date).format('YYYY-MM-DD')\n : null,\n expiration_date: formValues.expiration_date\n ? moment(formValues.expiration_date).format('YYYY-MM-DD')\n : null,\n inspection_contingency_date: formValues.inspection_contingency_date\n ? moment(formValues.inspection_contingency_date).format('YYYY-MM-DD')\n : null,\n appraisal_contingency_date: formValues.appraisal_contingency_date\n ? moment(formValues.appraisal_contingency_date).format('YYYY-MM-DD')\n : null,\n financing_contingency_date: formValues.financing_contingency_date\n ? moment(formValues.financing_contingency_date).format('YYYY-MM-DD')\n : null,\n\n application_date: formValues.application_date\n ? moment(formValues.application_date).format('YYYY-MM-DD')\n : null,\n lease_signed_date: formValues.lease_signed_date\n ? moment(formValues.lease_signed_date).format('YYYY-MM-DD')\n : null,\n lease_start_date: formValues.lease_start_date\n ? moment(formValues.lease_start_date).format('YYYY-MM-DD')\n : null,\n lease_end_date: formValues.lease_end_date\n ? moment(formValues.lease_end_date).format('YYYY-MM-DD')\n : null,\n move_in_date: formValues.move_in_date\n ? moment(formValues.move_in_date).format('YYYY-MM-DD')\n : null,\n\n contingency_dates:\n formValues.contingency_dates && formValues.contingency_dates.length\n ? formValues.contingency_dates?.map((elm: any) => ({\n ...elm,\n val_date: elm.val_date ? moment(elm.val_date).format('YYYY-MM-DD') : null,\n }))\n : [],\n };\n\n setIsSubmittingForm(true);\n updateTransactionDetail(contractID, formValuesFormatted, 'general_information')\n .then(async resp => {\n if (reloadSubTabData) {\n reloadSubTabData();\n }\n\n showNotification(\n 'success',\n 'New data changes on general information have been saved successfully'\n );\n setIsEditMode(false);\n })\n .finally(() => {\n setIsSubmittingForm(false);\n });\n };\n\n useEffect(() => {\n if (isEditMode) {\n const contingency_dates = transactionData?.contract_date_additionals?.map(elm => {\n const obj = {\n date_additional_id: elm.date_additional_id ? elm.date_additional_id : '',\n date_name: elm.date_name ? elm.date_name : '',\n val_date: elm.val_date ? moment.utc(elm.val_date) : null,\n };\n\n return obj;\n });\n\n if (!isRentalProperty) {\n form.setFieldsValue({\n // prices\n listprice: transactionData?.contract_price?.listprice || null,\n salesprice: transactionData?.contract_price?.salesprice || null,\n cccredit: transactionData?.contract_price?.cccredit || null,\n deposits: transactionData?.contract_price?.deposits || null,\n\n // dates\n contract_date: transactionData?.contract_date?.contract_date\n ? moment.utc(transactionData.contract_date.contract_date)\n : null,\n effective_date: transactionData?.contract_date?.effective_date\n ? moment.utc(transactionData.contract_date.effective_date)\n : null,\n close_date: transactionData?.contract_date?.close_date\n ? moment.utc(transactionData.contract_date.close_date)\n : null,\n listing_date: transactionData?.contract_date?.listing_date\n ? moment.utc(transactionData.contract_date.listing_date)\n : null,\n listing_live_date: transactionData?.contract_date?.listing_live_date\n ? moment.utc(transactionData.contract_date.listing_live_date)\n : null,\n expiration_date: transactionData?.contract_date?.expiration_date\n ? moment.utc(transactionData.contract_date.expiration_date)\n : null,\n inspection_contingency_date: transactionData?.contract_date\n ?.inspection_contingency_date\n ? moment.utc(transactionData.contract_date.inspection_contingency_date)\n : null,\n appraisal_contingency_date: transactionData?.contract_date\n ?.appraisal_contingency_date\n ? moment.utc(transactionData.contract_date.appraisal_contingency_date)\n : null,\n financing_contingency_date: transactionData?.contract_date\n ?.financing_contingency_date\n ? moment.utc(transactionData.contract_date.financing_contingency_date)\n : null,\n year_built: transactionData?.contract_date?.year_built || null,\n\n contingency_dates: contingency_dates,\n });\n } else {\n form.setFieldsValue({\n // prices\n marketedprice: transactionData?.contract_price?.marketedprice || null,\n rentalprice: transactionData?.contract_price?.rentalprice || null,\n credits: transactionData?.contract_price?.credits || null,\n\n // dates\n application_date: transactionData?.contract_date?.application_date\n ? moment.utc(transactionData.contract_date.application_date)\n : null,\n lease_signed_date: transactionData?.contract_date?.lease_signed_date\n ? moment.utc(transactionData.contract_date.lease_signed_date)\n : null,\n lease_start_date: transactionData?.contract_date?.lease_start_date\n ? moment.utc(transactionData.contract_date.lease_start_date)\n : null,\n lease_end_date: transactionData?.contract_date?.lease_end_date\n ? moment.utc(transactionData.contract_date.lease_end_date)\n : null,\n move_in_date: transactionData?.contract_date?.move_in_date\n ? moment.utc(transactionData.contract_date.move_in_date)\n : null,\n year_built: transactionData?.contract_date?.year_built || null,\n\n // lease term\n lease_term: transactionData?.contract_date?.lease_term || '',\n\n contingency_dates: contingency_dates,\n });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isEditMode]);\n\n const isDeleted = useMemo(() => {\n return transactionData?.active === false || transactionData?.active === 0;\n }, [transactionData]);\n const isArchived = useMemo(() => {\n return transactionData?.is_archived === true;\n }, [transactionData]);\n\n return (\n <Form form={form} onFinish={_onSubmitForm}>\n <Row gutter={rowFormViewGutter} className=\"row-wrapper\">\n <Col span={24} className=\"\">\n <Row className=\"\">\n <Col span={12} className=\"text-title-secondary\">\n General Information\n </Col>\n <Col span={12} style={{ textAlign: 'right' }}>\n {!isEditMode && UserPermission && UserPermission.toggle === 2 && (\n <Button\n className=\"ez-action-btn\"\n size=\"small\"\n disabled={isDeleted || isArchived}\n icon={<EditOutlined />}\n onClick={() => setIsEditMode(true)}\n >\n Edit\n </Button>\n )}\n\n {isEditMode && (\n <Space>\n <Button\n className=\"mr-2\"\n type=\"default\"\n size=\"small\"\n onClick={() => setIsEditMode(false)}\n disabled={isSubmittingForm}\n >\n Cancel\n </Button>\n <Button\n className=\"\"\n size=\"small\"\n icon={<SaveOutlined />}\n type=\"primary\"\n loading={isSubmittingForm}\n onClick={() => form.submit()}\n >\n {isSubmittingForm ? 'Saving' : 'Save'}\n </Button>\n </Space>\n )}\n </Col>\n </Row>\n </Col>\n <Divider />\n\n {!isEditMode && !isRentalProperty && (\n <>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Year Built\n </Col>\n <Col span={colValueSpan}>\n {transactionData?.contract_date?.year_built || '-'}\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n List Price\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={transactionData?.contract_price?.listprice}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Sales Price\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={transactionData?.contract_price?.salesprice}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Closing Cost Credit\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={transactionData?.contract_price?.cccredit}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Deposit\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={transactionData?.contract_price?.deposits}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Contract Date\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n noTimezone\n value={transactionData?.contract_date?.contract_date}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Contract Effective Date\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n noTimezone\n value={transactionData?.contract_date?.effective_date}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Close Date\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n noTimezone\n value={transactionData?.contract_date?.close_date}\n />\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Listing Date\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n noTimezone\n value={transactionData?.contract_date?.listing_date}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Listing Live Date\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={transactionData?.contract_date?.listing_live_date}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Listing Expiration Date\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n noTimezone\n value={transactionData?.contract_date?.expiration_date}\n />\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Inspection Contingency Date\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n noTimezone\n value={transactionData?.contract_date?.inspection_contingency_date}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Appraisal Contingency Date\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n noTimezone\n value={transactionData?.contract_date?.appraisal_contingency_date}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Financing Contingency Date\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n noTimezone\n value={transactionData?.contract_date?.financing_contingency_date}\n />\n </Col>\n </>\n )}\n {!isEditMode && isRentalProperty && (\n <>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Year Built\n </Col>\n <Col span={colValueSpan}>\n {transactionData?.contract_date?.year_built || '-'}\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Marketed Price\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={transactionData?.contract_price?.marketedprice}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Rental Price\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={transactionData?.contract_price?.rentalprice}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Credits\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={transactionData?.contract_price?.credits}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Application Date\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n noTimezone\n value={transactionData?.contract_date?.application_date}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease Signed Date\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n noTimezone\n value={transactionData?.contract_date?.lease_signed_date}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease Start\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n noTimezone\n value={transactionData?.contract_date?.lease_start_date}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease End\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n noTimezone\n value={transactionData?.contract_date?.lease_end_date}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Move In Date\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n noTimezone\n value={transactionData?.contract_date?.move_in_date}\n />\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease Term(s)\n </Col>\n <Col span={colValueSpan}>\n {transactionData?.contract_date?.lease_term || '-'}\n </Col>\n </>\n )}\n\n {!isEditMode &&\n (transactionData?.contract_date_additionals?.length ? (\n <>\n <Divider />\n {transactionData.contract_date_additionals.map(\n (dateAdditional, index) => (\n <React.Fragment key={`contract_date_additionals_${index}`}>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n <span\n style={{\n textTransform: 'capitalize',\n }}\n >\n {dateAdditional.date_name}\n </span>\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat value={dateAdditional?.val_date} />\n </Col>\n </React.Fragment>\n )\n )}\n </>\n ) : (\n ''\n ))}\n\n {isEditMode && !isRentalProperty && (\n <>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Year Built\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"year_built\" noStyle>\n <EZInputNumber\n min={0}\n style={{ width: '100%' }}\n placeholder=\"Enter the year\"\n step={1}\n max={2100}\n />\n </Form.Item>\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n List Price\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"listprice\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder=\"Enter the price\"\n step={10000}\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Sales Price\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"salesprice\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder=\"Enter the price\"\n step={10000}\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Closing Cost Credit\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"cccredit\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder=\"Enter the price\"\n step={10000}\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Deposit\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"deposits\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder=\"Enter the price\"\n step={10000}\n />\n </Form.Item>\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Contract Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"contract_date\" noStyle>\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Contract Effective Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"effective_date\" noStyle>\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Close Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"close_date\" noStyle>\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Listing Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"listing_date\" noStyle>\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Listing Live Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"listing_live_date\" noStyle>\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Listing Expiration Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"expiration_date\" noStyle>\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Inspection Contingency Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"inspection_contingency_date\" noStyle>\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Appraisal Contingency Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"appraisal_contingency_date\" noStyle>\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Financing Contingency Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"financing_contingency_date\" noStyle>\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n </>\n )}\n\n {isEditMode && isRentalProperty && (\n <>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Year Built\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"year_built\" noStyle>\n <EZInputNumber\n min={0}\n style={{ width: '100%' }}\n placeholder=\"Enter the year\"\n step={1}\n max={2100}\n />\n </Form.Item>\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Marketed Price\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"marketedprice\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder=\"Enter the price\"\n step={10000}\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Rental Price\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"rentalprice\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder=\"Enter the price\"\n step={10000}\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Credits\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"credits\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder=\"Enter the price\"\n step={10000}\n />\n </Form.Item>\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Application Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"application_date\" noStyle>\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease Signed Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"lease_signed_date\" noStyle>\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease Start\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"lease_start_date\" noStyle>\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease End\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"lease_end_date\" noStyle>\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Move In Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"move_in_date\" noStyle>\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease Term(s)\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"lease_term\" noStyle>\n <Input placeholder=\"Enter the lease term(s)\" />\n </Form.Item>\n </Col>\n </>\n )}\n\n {isEditMode && (\n <>\n <Divider />\n <Form.List name=\"contingency_dates\">\n {(fields, { add, remove }) => (\n <>\n {fields.map(({ key, name, ...restField }, index) => (\n <React.Fragment key={`contingency_dates_${index}`}>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n <Form.Item\n {...restField}\n name={[name, 'date_additional_id']}\n noStyle\n hidden\n >\n <Input hidden />\n </Form.Item>\n <Form.Item\n {...restField}\n name={[name, 'date_name']}\n noStyle\n >\n <Input placeholder=\"Enter the field name\" />\n </Form.Item>\n </Col>\n <Col span={colValueSpan}>\n <Form.Item\n {...restField}\n name={[name, 'val_date']}\n noStyle\n >\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n\n <Popconfirm\n placement=\"bottomRight\"\n title={`Delete this date?`}\n okText=\"Yes\"\n cancelText=\"Cancel\"\n onConfirm={() => remove(name)}\n overlayClassName=\"custom-contingency-remover-popup\"\n // showArrow={false}\n >\n <MinusCircleOutlined className=\"custom-contingency-remover\" />\n </Popconfirm>\n </Col>\n </React.Fragment>\n ))}\n <Col span={24}>\n {' '}\n <Form.Item>\n <Button\n type=\"dashed\"\n onClick={() => add()}\n block\n icon={<PlusOutlined />}\n >\n Add new contingency date\n </Button>\n </Form.Item>\n </Col>\n </>\n )}\n </Form.List>\n </>\n )}\n </Row>\n </Form>\n );\n};\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Row,\n Col,\n Modal,\n Form,\n Input,\n Select,\n Typography,\n InputNumber,\n Popconfirm,\n Table,\n Button,\n Divider,\n} from 'antd';\nimport {\n DeleteOutlined,\n PlusOutlined,\n EditOutlined,\n CloseOutlined,\n SaveFilled,\n} from '@ant-design/icons';\nimport { get, isNil, omitBy, pick } from 'lodash';\n\n// EZ web-app utils import\nimport { updateTransactionParty, deleteTransactionParty } from 'utils/ez_api/transactionAPIs';\n// EZ web-app types import\nimport { ITransactionListDataType, PARTY_TYPES, STATUS_LIST_RENTAL } from 'types/transaction';\n// EZ web-app components import\nimport { showNotification } from 'utils/notificationUtil';\nimport {\n EZInputNumber,\n EZCurrencyFormat,\n EZSelectUSState,\n EZAutocompleteCity,\n EZNumberFormat,\n EZAutocompleteParty,\n} from 'components';\nimport { FixedType } from 'rc-table/lib/interface';\nimport { ColumnType } from 'antd/lib/table';\nimport { HomeContext } from 'context/EZContext';\n\n// EZ web-app styles and assets import\n\ninterface ItemType {\n key: string;\n name?: string;\n telephone?: string;\n telephone2?: string;\n fax?: string;\n email?: string;\n company?: string;\n address?: string;\n city?: string;\n state?: string;\n zip?: string;\n commission?: number;\n commission_rate?: number;\n commission_amount?: number;\n}\n\nconst originData: ItemType[] = [];\nfor (let i = 0; i < 5; i++) {\n originData.push({\n key: i.toString(),\n name: `Edrward Edrwardasd Edrward ${i}`,\n email: `Edrward${i}@gmmail.co`,\n telephone: '+61 (555) 555-1234',\n telephone2: '-',\n fax: '-',\n company: '-',\n address: `London Park no. ${i}`,\n city: `City no. ${i}`,\n state: `state no. ${i}`,\n zip: `zip no. ${i}`,\n commission: 100,\n });\n}\n\ntype InputType = 'number' | 'text' | 'custom';\n\ninterface EditableCellProps extends React.HTMLAttributes<HTMLElement> {\n editing: boolean;\n dataIndex: string;\n title: any;\n inputType: InputType;\n customInputNode?: (record: ItemType) => React.ReactNode;\n onKeyDownFunc?: (e: React.KeyboardEvent<HTMLInputElement>, record: ItemType) => void;\n record: ItemType;\n index: number;\n children: React.ReactNode;\n}\n\nconst { Text } = Typography;\nconst { Option, OptGroup } = Select;\n\nconst colLabelSpan = 4;\nconst colValueSpan = 20;\n\nconst EditableCell: React.FC<EditableCellProps> = ({\n editing,\n dataIndex,\n title,\n inputType,\n customInputNode,\n record,\n index,\n children,\n onKeyDownFunc,\n ...restProps\n}) => {\n const inputNode =\n inputType === 'number' ? (\n <InputNumber\n onKeyDown={e => {\n if (onKeyDownFunc) {\n onKeyDownFunc(e, record);\n }\n }}\n />\n ) : (\n <Input\n onKeyDown={e => {\n if (onKeyDownFunc) {\n onKeyDownFunc(e, record);\n }\n }}\n allowClear\n />\n );\n // const inputNode = inputType === 'number' ? <InputNumber /> : <Input allowClear />;\n\n return (\n <td {...restProps}>\n {editing ? (\n inputType === 'custom' ? (\n customInputNode ? (\n customInputNode(record)\n ) : (\n <Form.Item name={[record.key, dataIndex]} style={{ margin: 0 }}>\n {inputNode}\n </Form.Item>\n )\n ) : (\n <Form.Item name={[record.key, dataIndex]} style={{ margin: 0 }}>\n {inputNode}\n </Form.Item>\n )\n ) : (\n children\n )}\n </td>\n );\n};\n\nexport const ModalEditTransactionParty: React.FC<{\n transactionData: ITransactionListDataType | undefined;\n isModalVisible: boolean;\n isEditMode: boolean;\n setIsModalVisible?: React.Dispatch<React.SetStateAction<boolean>>;\n modalTitle?: string;\n listName: string;\n listPrimaryID: string;\n isDeleted: boolean;\n isArchived: boolean;\n listFullnameColumnName: string;\n reloadSubTabData: () => void;\n}> = ({\n transactionData,\n isModalVisible = false,\n isEditMode,\n setIsModalVisible = () => {},\n modalTitle,\n isDeleted,\n isArchived,\n listName,\n listPrimaryID,\n listFullnameColumnName,\n reloadSubTabData,\n}) => {\n const HomeCtx = useContext(HomeContext);\n\n const UserPermission = HomeCtx.userPermission;\n\n const dataList: any[] = get(transactionData, listName) || [];\n\n const hasCommission = [\n 'contract_buyer_agents',\n 'contract_seller_agents',\n 'contract_referral_sources',\n 'contract_leasing_agents',\n ].includes(listName);\n\n const [form] = Form.useForm();\n\n const [submittingDataKeys, setSubmittingDataKeys] = useState<string[]>([]);\n const [editableKeys, setEditableKeys] = useState<string[]>([]);\n\n const [recordList, setRecordList] = useState<ItemType[]>([]);\n\n const isRentalProperty = STATUS_LIST_RENTAL.find(\n item => item.status_id === transactionData?.status_id\n )\n ? true\n : false;\n\n const _onSubmitForm = (formValues?: any) => {};\n\n const _onOk = () => {\n setIsModalVisible(false);\n };\n\n const _addNewRow = () => {\n const key = 'UNSAVED-' + new Date().getTime();\n setRecordList([\n ...recordList,\n {\n key: key,\n name: ``,\n email: ``,\n telephone: '',\n telephone2: '',\n fax: '',\n company: '',\n },\n ]);\n setEditableKeys([...editableKeys, key]);\n };\n\n const isEditing = (record: ItemType) =>\n editableKeys.find(eKey => eKey === record.key) ? true : false;\n const isSubmitting = (record: ItemType) =>\n submittingDataKeys.find(eKey => eKey === record.key) ? true : false;\n\n const _edit = (record: Partial<ItemType> & { key: React.Key }) => {\n form.setFieldsValue({\n [record.key]: {\n ...record,\n commission_type:\n record.commission_amount && !record.commission_rate\n ? 'use_amount'\n : 'use_percentage',\n },\n });\n setEditableKeys([...editableKeys, record.key]);\n };\n\n const _onKeyDown = (e: React.KeyboardEvent<HTMLInputElement>, record: ItemType) => {\n if (e.key === 'Enter') {\n _save(record.key);\n }\n };\n\n const _save = async (key: string) => {\n try {\n const payload = form.getFieldsValue()?.[key] || null;\n const isEditMode = !key.includes('UNSAVED');\n\n if (!isEditMode && !payload.name && !payload.email && !payload.telephone) {\n return;\n }\n\n setSubmittingDataKeys([...submittingDataKeys, key]);\n\n updateTransactionParty(\n transactionData?.contract_id,\n key,\n listName as PARTY_TYPES,\n payload\n )\n .then(resp => {\n const keyRecordObjIndex = recordList.findIndex(r => r.key === key);\n\n if (keyRecordObjIndex >= 0) {\n recordList[keyRecordObjIndex] = {\n ...recordList[keyRecordObjIndex],\n ...payload,\n };\n\n if (!isEditMode && resp?.data?.tablePrimaryIDName) {\n recordList[keyRecordObjIndex].key = resp.data[\n resp.data.tablePrimaryIDName\n ] as string;\n }\n }\n\n setEditableKeys(editableKeys.filter(k => k !== key));\n setRecordList([...recordList]);\n\n reloadSubTabData();\n\n if (!isEditMode)\n showNotification('success', 'New record has been added successfully.');\n else showNotification('success', 'New change(s) has been saved successfully.');\n })\n .finally(() => {\n setSubmittingDataKeys(submittingDataKeys.filter(k => k !== key));\n });\n } catch (errInfo) {\n console.log('Validate Failed:', errInfo);\n }\n };\n\n const _delete = (record: ItemType) => {\n setSubmittingDataKeys([...submittingDataKeys, record.key]);\n\n deleteTransactionParty(transactionData?.contract_id, record.key, listName as PARTY_TYPES)\n .then(() => {\n setRecordList([...recordList.filter(r => r.key !== record.key)]);\n\n reloadSubTabData();\n\n showNotification('success', `A record has been deleted successfully.`);\n })\n .finally(() => {\n setSubmittingDataKeys(submittingDataKeys.filter(key => key !== record.key));\n });\n };\n\n const _onSelectName = (value: any, opt: any, record: ItemType) => {\n form.setFieldsValue({\n [record.key]: {\n ...omitBy(\n pick(opt, [\n 'email',\n 'telephone',\n 'telephone2',\n 'fax',\n 'address',\n 'city',\n 'state',\n 'zip',\n 'company',\n ]),\n isNil\n ),\n },\n });\n };\n\n const CommissionCustomInput: React.FC<{ record: ItemType }> = ({ record }) => {\n const [commissionType, setCommissionType] = useState(\n record.commission_amount && !record.commission_rate ? 'use_amount' : 'use_percentage'\n );\n\n const _onChangeComission = (\n commissionFieldType: 'commission_rate' | 'commission_amount',\n value: number\n ) => {\n let commission_amount: number | null = null;\n let commission_rate: number | null = null;\n\n const salesprice = transactionData?.contract_price?.salesprice || 0;\n const rentalprice = transactionData?.contract_price?.rentalprice || 0;\n\n if (commissionFieldType === 'commission_rate') {\n switch (listName) {\n case 'contract_buyer_agents':\n commission_amount = value ? salesprice * 0.01 * value : null;\n break;\n case 'contract_seller_agents':\n commission_amount = value ? salesprice * 0.01 * value : null;\n break;\n case 'contract_referral_sources':\n commission_amount = value ? rentalprice * 0.01 * value : null;\n break;\n case 'contract_leasing_agents':\n commission_amount = value ? rentalprice * 0.01 * value : null;\n break;\n\n default:\n break;\n }\n } else {\n switch (listName) {\n case 'contract_buyer_agents':\n commission_rate =\n value && salesprice > 0 ? (value / salesprice) * 100 : null;\n break;\n case 'contract_seller_agents':\n commission_rate =\n value && salesprice > 0 ? (value / salesprice) * 100 : null;\n break;\n case 'contract_referral_sources':\n commission_rate =\n value && rentalprice > 0 ? (value / rentalprice) * 100 : null;\n break;\n case 'contract_leasing_agents':\n commission_rate =\n value && rentalprice > 0 ? (value / rentalprice) * 100 : null;\n break;\n\n default:\n break;\n }\n }\n\n if (\n commission_amount !== null &&\n commission_amount !== 0 &&\n typeof commission_amount == 'number'\n ) {\n commission_amount = Number(commission_amount.toFixed(2));\n }\n\n if (commissionFieldType === 'commission_rate') {\n form.setFieldsValue({ [record.key]: { commission_amount: commission_amount } });\n } else {\n form.setFieldsValue({\n [record.key]: { commission_rate: commission_rate },\n });\n }\n };\n\n return (\n <>\n <Form.Item name={[record.key, 'commission_type']} noStyle>\n <Select\n style={{ width: '60px' }}\n placeholder=\"\"\n onChange={value => setCommissionType(value)}\n className=\"mr-2\"\n >\n <Option value=\"use_percentage\">%</Option>\n <Option value=\"use_amount\">$</Option>\n </Select>\n </Form.Item>\n <Form.Item name={[record.key, 'commission_rate']} noStyle>\n <EZInputNumber\n numberType=\"percentage\"\n style={{ width: '110px', textAlign: 'center' }}\n className=\"mr-2\"\n placeholder=\"...\"\n controls={false}\n precision={2}\n disabled={!commissionType || commissionType === 'use_amount'}\n onChange={(value: number | string) =>\n _onChangeComission('commission_rate', value as number)\n }\n />\n </Form.Item>\n <Form.Item name={[record.key, 'commission_amount']} noStyle>\n <EZInputNumber\n numberType=\"currency\"\n className=\"site-input-right\"\n style={{ width: '110px', textAlign: 'center' }}\n placeholder=\"$ Commission\"\n step={5000}\n disabled={!commissionType || commissionType === 'use_percentage'}\n precision={3}\n onChange={(value: number | string) =>\n _onChangeComission('commission_amount', value as number)\n }\n />\n </Form.Item>\n </>\n );\n };\n\n let commissionColumns: any[] = [];\n\n if (hasCommission) {\n commissionColumns.push({\n title: 'Commission',\n dataIndex: 'comission_rate',\n inputType: 'custom' as InputType,\n customInputNode: (record: ItemType) => {\n return <CommissionCustomInput record={record} />;\n },\n fixed: false as FixedType,\n editable: true,\n width: '330px',\n render: (_: any, record: ItemType) => {\n return (\n <span>\n {record.commission_amount ? (\n <>\n <EZCurrencyFormat\n value={record.commission_amount}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n {record.commission_rate ? (\n <span className=\"ml-2\">\n (\n <EZNumberFormat\n value={record.commission_rate}\n suffix={'%'}\n displayType={'text'}\n />\n )\n </span>\n ) : (\n ''\n )}\n </>\n ) : (\n '-'\n )}\n </span>\n );\n },\n });\n }\n\n const columns = [\n {\n title: '#',\n dataIndex: 'key',\n width: '50px',\n fixed: 'left' as FixedType,\n editable: false,\n render: (_: any, record: ItemType, index: number) => {\n return <span>{index + 1}</span>;\n },\n },\n {\n title: 'Name',\n dataIndex: 'name',\n width: '200px',\n // fixed: 'left' as FixedType,\n inputType: 'custom' as InputType,\n customInputNode: (record: ItemType) => {\n return (\n <Form.Item name={[record.key, 'name']} noStyle>\n <EZAutocompleteParty\n style={{ width: '100%' }}\n onSelect={(value: any, option: any) => {\n _onSelectName(value, option, record);\n }}\n />\n </Form.Item>\n );\n },\n render: (text: any) => {\n return <span>{text ? <Text copyable>{text}</Text> : '-'}</span>;\n },\n },\n {\n title: 'Email',\n dataIndex: 'email',\n width: '280px',\n inputType: 'text',\n render: (text: any) => {\n return <span>{text ? <Text copyable>{text}</Text> : '-'}</span>;\n },\n },\n {\n title: 'Phone',\n dataIndex: 'telephone',\n // valueType: 'text',\n width: '180px',\n render: (text: any) => {\n return <span>{text ? <Text copyable>{text}</Text> : '-'}</span>;\n },\n },\n ...commissionColumns,\n {\n title: 'Company',\n dataIndex: 'company',\n // valueType: 'text',\n width: '250px',\n render: (text: any) => {\n return <span>{text ? <Text copyable>{text}</Text> : '-'}</span>;\n },\n },\n {\n title: 'Address',\n dataIndex: 'address',\n // valueType: 'text',\n width: '250px',\n render: (text: any) => {\n return <span>{text ? <Text copyable>{text}</Text> : '-'}</span>;\n },\n },\n {\n title: 'City',\n dataIndex: 'city',\n // valueType: 'text',\n width: '170px',\n inputType: 'custom' as InputType,\n customInputNode: (record: ItemType) => {\n return (\n <Form.Item name={[record.key, 'city']} noStyle>\n <EZAutocompleteCity style={{ width: '100%' }} />\n </Form.Item>\n );\n },\n render: (text: any) => {\n return <span>{text ? <Text copyable>{text}</Text> : '-'}</span>;\n },\n },\n {\n title: 'State',\n dataIndex: 'state',\n // valueType: 'text',\n width: '150px',\n inputType: 'custom' as InputType,\n customInputNode: (record: ItemType) => {\n return (\n <Form.Item name={[record.key, 'state']} noStyle>\n <EZSelectUSState\n fieldNames={{\n label: 'state_name',\n value: 'state_code',\n }}\n />\n </Form.Item>\n );\n },\n render: (text: any) => {\n return <span>{text ? <Text copyable>{text}</Text> : '-'}</span>;\n },\n },\n {\n title: 'Zip',\n dataIndex: 'zip',\n // valueType: 'text',\n width: '125px',\n render: (text: any) => {\n return <span>{text ? <Text copyable>{text}</Text> : '-'}</span>;\n },\n },\n {\n title: 'Fax',\n dataIndex: 'fax',\n // valueType: 'text',\n width: '150px',\n render: (text: any) => {\n return <span>{text ? <Text copyable>{text}</Text> : '-'}</span>;\n },\n },\n {\n title: 'Phone #2',\n dataIndex: 'telephone2',\n // valueType: 'text',\n width: '180px',\n render: (text: any) => {\n return <span>{text ? <Text copyable>{text}</Text> : '-'}</span>;\n },\n },\n {\n title: 'Action',\n dataIndex: 'operation',\n width: '140px',\n editable: false,\n fixed: 'right' as FixedType,\n hideFromTable: UserPermission && UserPermission?.toggle === 2 ? false : true,\n render: (_: any, record: ItemType) => {\n const editable = isEditing(record);\n return editable ? (\n <span>\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<SaveFilled />}\n title=\"Save this record\"\n onClick={() => _save(record.key.toString())}\n loading={isSubmitting(record)}\n >\n Save\n </Button>\n\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n onClick={() => _cancel(record)}\n ></Button>\n </span>\n ) : (\n <>\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n disabled={isArchived || isDeleted}\n icon={<EditOutlined />}\n title=\"Edit this record\"\n onClick={() => _edit(record)}\n >\n Edit\n </Button>\n <Divider type=\"vertical\" />\n <Popconfirm\n title=\"Are you sure to delete?\"\n placement=\"bottomRight\"\n disabled={isArchived || isDeleted}\n arrowPointAtCenter\n onConfirm={() => _delete(record)}\n >\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n disabled={isArchived || isDeleted}\n style={{ color: isArchived || isDeleted ? 'gray' : 'red' }}\n icon={<DeleteOutlined />}\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n }}\n ></Button>\n </Popconfirm>\n </>\n );\n },\n },\n ];\n\n const mergedColumns = columns\n .filter(c => c.hideFromTable !== true)\n .map(col => {\n const _column: ColumnType<ItemType> = pick(col, [\n 'title',\n 'dataIndex',\n 'fixed',\n 'render',\n 'width',\n ]);\n\n if (col.editable !== false) {\n _column.onCell = (record: ItemType) => ({\n record,\n inputType: col.inputType,\n dataIndex: col.dataIndex,\n customInputNode: col.customInputNode,\n onKeyDownFunc: _onKeyDown,\n title: col.title,\n editing: isEditing(record),\n });\n }\n\n return _column;\n });\n\n const _cancel = (record?: ItemType) => {\n if (record) {\n if (\n record.key.toString().includes('UNSAVED') &&\n !record.name &&\n !record.email &&\n !record.telephone\n ) {\n setRecordList(recordList.filter(r => r.key !== record.key));\n }\n setEditableKeys(editableKeys.filter(key => key !== record.key));\n } else setEditableKeys([]);\n };\n\n const _onValuesChange = (changedValues: any, values: any) => {\n const recordKey = Object.keys(changedValues)?.[0];\n };\n\n const _resetDataList = () => {\n const dtList = dataList.map(record => {\n record.key = record[listPrimaryID]?.toString();\n record.name = record[listFullnameColumnName];\n return record;\n });\n\n setRecordList(dtList);\n\n if (isEditMode) {\n setEditableKeys(dtList.map(r => r.key));\n\n for (let index = 0; index < dtList.length; index++) {\n const record = dtList[index];\n form.setFieldsValue({\n [record.key]: {\n ...record,\n commission_type:\n record.commission_amount && !record.commission_rate\n ? 'use_amount'\n : 'use_percentage',\n },\n });\n }\n }\n };\n\n useEffect(() => {\n if (isModalVisible) {\n _resetDataList();\n } else {\n setRecordList([]);\n setEditableKeys([]);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isModalVisible]);\n\n return (\n <>\n <Modal\n title={\n (modalTitle || `Show involved parties information`) +\n ` for ${transactionData?.address}`\n }\n visible={isModalVisible}\n onOk={() => _onOk()}\n onCancel={() => setIsModalVisible(false)}\n okText={`Save Changes`}\n cancelText=\"Close\"\n width={'1100px'}\n style={{ top: 40 }}\n bodyStyle={{ overflowY: 'auto', height: '600px' }}\n okButtonProps={{ style: true ? { display: 'none' } : {} }}\n >\n <Form\n layout=\"vertical\"\n form={form}\n onFinish={_onSubmitForm}\n onValuesChange={_onValuesChange}\n requiredMark={false}\n >\n <Row gutter={20}>\n {hasCommission && (\n <>\n <Col span={24}>\n {!isRentalProperty ? (\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n List Price\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={\n transactionData?.contract_price?.listprice\n }\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Sales Price\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={\n transactionData?.contract_price?.salesprice\n }\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n </Row>\n ) : (\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Marketed Price\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={\n transactionData?.contract_price\n ?.marketedprice\n }\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Rental Price\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={\n transactionData?.contract_price?.rentalprice\n }\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n </Row>\n )}\n </Col>\n <Divider />\n </>\n )}\n <Col span={24}>\n <Table\n components={{\n body: {\n cell: EditableCell,\n },\n }}\n dataSource={recordList}\n columns={mergedColumns}\n rowClassName=\"editable-row\"\n // pagination={{\n // onChange: () => _cancel(),\n // pageSize: 100,\n // }}\n pagination={false}\n // size=\"small\"\n scroll={{ x: '100%' }}\n footer={() =>\n UserPermission && UserPermission?.toggle === 2 ? (\n <Button\n type=\"dashed\"\n style={{ width: '100%' }}\n disabled={isArchived || isDeleted}\n onClick={() => _addNewRow()}\n icon={<PlusOutlined />}\n >\n Add new record\n </Button>\n ) : (\n <></>\n )\n }\n />\n </Col>\n </Row>\n </Form>\n </Modal>\n </>\n );\n};\n","// Core React libraries import\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Button, Divider, Form, Alert, Typography } from 'antd';\nimport { Gutter } from 'antd/lib/grid/row';\nimport { EditOutlined } from '@ant-design/icons';\nimport { get } from 'lodash';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport { updateTransactionDetail } from 'utils/ez_api/transactionAPIs';\n// EZ web-app types import\nimport { TransactionDetailType } from 'types/transaction';\n// EZ web-app components import\nimport { CommissionInfo, EZCopyable } from 'components';\nimport { showNotification } from 'utils/notificationUtil';\nimport { ModalEditTransactionParty } from '../modals/Modal_showEditParty';\nimport { HomeContext } from 'context/EZContext';\n\n// EZ web-app styles and assets import\n\nconst { Text } = Typography;\n\nconst colLabelSpan = 14;\nconst colValueSpan = 10;\nconst rowFormViewGutter: [Gutter, Gutter] = [12, 6];\n\nconst partiesSectionDefaultStyle: React.CSSProperties = {\n minHeight: '106px',\n};\n\nconst PartyComponent: React.FC<{\n listName: string; // for e.g.: contract_sellers\n recordColumnName: string; // for e.g.: seller_name\n listLabel: string; // for e.g.: seller\n seeAllLabel: string; // for e.g.: See All Sellers Information\n listPrimaryID: string; // for e.g.: leasing_agent_id\n transactionData: TransactionDetailType | undefined;\n isModalVisible?: boolean;\n setIsModalVisible: React.Dispatch<React.SetStateAction<boolean>>;\n setModalTitle: React.Dispatch<React.SetStateAction<string>>;\n openPartyModal: (\n isEdit: boolean,\n modalTitle: string,\n listName: string,\n listFullnameColumnName: string,\n listPrimaryID: string\n ) => void;\n}> = ({\n listName,\n recordColumnName,\n listLabel,\n seeAllLabel,\n listPrimaryID,\n transactionData,\n isModalVisible,\n setIsModalVisible,\n setModalTitle,\n openPartyModal,\n}) => {\n const HomeCtx = useContext(HomeContext);\n\n const UserPermission = HomeCtx.userPermission;\n\n const dataList: any[] = get(transactionData, listName) || [];\n\n const hasCommission = [\n 'contract_buyer_agents',\n 'contract_seller_agents',\n 'contract_referral_sources',\n 'contract_leasing_agents',\n ].includes(listName);\n\n const useMarketedPrice = ['contract_referral_sources', 'contract_leasing_agents'].includes(\n listName\n );\n\n const _openPartyModal = (\n isEdit: boolean,\n modalTitle: string,\n listName: string,\n listFullnameColumnName: string,\n listPrimaryID: string\n ) => {\n openPartyModal(isEdit, modalTitle, listName, listFullnameColumnName, listPrimaryID);\n };\n\n const isDeleted = useMemo(() => {\n return transactionData?.active === false || transactionData?.active === 0;\n }, [transactionData]);\n const isArchived = useMemo(() => {\n return transactionData?.is_archived === true;\n }, [transactionData]);\n\n return (\n <>\n <Col span={24} className=\"\">\n <Row className=\"\">\n <Col span={12} className=\"text-title-secondary party-header-name\">\n {listLabel}\n </Col>\n <Col span={12} style={{ textAlign: 'right' }}>\n {UserPermission && UserPermission.toggle === 2 && (\n <Button\n className=\"ez-action-btn\"\n size=\"small\"\n icon={<EditOutlined />}\n disabled={isArchived || isDeleted}\n onClick={() =>\n _openPartyModal(\n true,\n seeAllLabel,\n listName,\n recordColumnName,\n listPrimaryID\n )\n }\n >\n Edit\n </Button>\n )}\n </Col>\n </Row>\n </Col>\n <Divider />\n <Col span={24} style={{ ...partiesSectionDefaultStyle }}>\n {dataList?.length ? (\n <ol>\n {dataList?.map((record: any, idx) => (\n <li key={`${listName}-${idx}`}>\n <div>\n {record[recordColumnName] ? (\n <>\n {record[recordColumnName]}\n <EZCopyable\n text={record[recordColumnName]}\n className=\"ml-1\"\n />\n </>\n ) : (\n <Text type=\"secondary\">Name is empty</Text>\n )}\n </div>\n <div>\n {record.email ? (\n <>\n {record.email}\n <EZCopyable text={record.email} className=\"ml-1\" />\n </>\n ) : (\n <Text type=\"secondary\">Email is empty</Text>\n )}\n </div>\n <div>\n {record.telephone ? (\n <>\n {record.telephone}\n <EZCopyable text={record.telephone} className=\"ml-1\" />\n </>\n ) : (\n <Text type=\"secondary\">Phone is empty</Text>\n )}\n </div>\n {hasCommission && (\n <div>\n <CommissionInfo\n commission_base={\n useMarketedPrice\n ? transactionData?.contract_price?.marketedprice\n : transactionData?.contract_price?.salesprice\n }\n commission_rate={record.commission_rate}\n commission_amount={record.commission_amount}\n ifEmptyText={\n <Text type=\"secondary\">Commission isn't set</Text>\n }\n />\n </div>\n )}\n </li>\n ))}\n </ol>\n ) : (\n <Alert\n message={`No ${listLabel} record is found, click the Edit button to start adding it`}\n type=\"info\"\n showIcon\n />\n )}\n </Col>\n <Divider />\n <Col span={24}>\n <span\n className={`${\n dataList?.length ? 'text-action-primary' : 'text-action-disabled'\n }`}\n onClick={() =>\n _openPartyModal(\n false,\n seeAllLabel,\n listName,\n recordColumnName,\n listPrimaryID\n )\n }\n >\n {seeAllLabel}\n </span>\n </Col>\n </>\n );\n};\n\nexport const PartiesSection: React.FC<{\n contractID: number;\n reloadSubTabData: () => void;\n transactionData: TransactionDetailType | undefined;\n isRentalProperty: boolean;\n}> = ({ contractID, reloadSubTabData, transactionData, isRentalProperty }) => {\n const [form] = Form.useForm();\n\n const [isEditMode, setIsEditMode] = useState(false);\n const [isSubmittingForm, setIsSubmittingForm] = useState(false);\n const [isModalVisible, setIsModalVisible] = useState(false);\n\n const [modalTitle, setModalTitle] = useState('');\n const [listName, setListName] = useState('');\n const [listFullnameColumnName, setListFullnameColumnName] = useState('');\n const [listPrimaryID, setListPrimaryID] = useState('');\n\n const _onSubmitForm = async (formValues?: any) => {\n if (isSubmittingForm) return;\n setIsSubmittingForm(true);\n updateTransactionDetail(contractID, formValues, 'general_information')\n .then(async resp => {\n if (reloadSubTabData) {\n reloadSubTabData();\n }\n\n showNotification(\n 'success',\n 'New data changes on general information have been saved successfully'\n );\n setIsEditMode(false);\n })\n .finally(() => {\n setIsSubmittingForm(false);\n });\n };\n\n const _openPartyModal = (\n isEdit: boolean,\n modalTitle: string,\n listName: string,\n listFullnameColumnName: string,\n listPrimaryID: string\n ) => {\n setIsEditMode(isEdit ? true : false);\n setIsModalVisible(true);\n setModalTitle(modalTitle);\n setListName(listName);\n setListFullnameColumnName(listFullnameColumnName);\n setListPrimaryID(listPrimaryID);\n };\n\n useEffect(() => {\n if (isEditMode) {\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isEditMode]);\n const isDeleted = useMemo(() => {\n return transactionData?.active === false || transactionData?.active === 0;\n }, [transactionData]);\n const isArchived = useMemo(() => {\n return transactionData?.is_archived === true;\n }, [transactionData]);\n\n return (\n <>\n <ModalEditTransactionParty\n isModalVisible={isModalVisible}\n setIsModalVisible={setIsModalVisible}\n transactionData={transactionData}\n isEditMode={isEditMode}\n isDeleted={isDeleted}\n isArchived={isArchived}\n modalTitle={modalTitle}\n listName={listName}\n listPrimaryID={listPrimaryID}\n listFullnameColumnName={listFullnameColumnName}\n reloadSubTabData={reloadSubTabData}\n />\n {!isRentalProperty && (\n <>\n <Col span={8}>\n <Row gutter={rowFormViewGutter}>\n <PartyComponent\n setModalTitle={setModalTitle}\n openPartyModal={_openPartyModal}\n isModalVisible={isModalVisible}\n setIsModalVisible={setIsModalVisible}\n listName={'contract_buyers'}\n listPrimaryID={'buyer_id'}\n recordColumnName={'buyer_name'}\n listLabel={'buyer'}\n seeAllLabel={'See All Buyers Information'}\n transactionData={transactionData}\n />\n\n <Col span={24} className=\"\">\n \n </Col>\n\n <PartyComponent\n setModalTitle={setModalTitle}\n openPartyModal={_openPartyModal}\n isModalVisible={isModalVisible}\n setIsModalVisible={setIsModalVisible}\n listName={'contract_buyer_agents'}\n listPrimaryID={'agent_id'}\n recordColumnName={'agent_name'}\n listLabel={`buyer's agent`}\n seeAllLabel={`See All Buyer's Agents Information`}\n transactionData={transactionData}\n />\n </Row>\n </Col>\n <Col span={8}>\n <Row gutter={rowFormViewGutter}>\n <PartyComponent\n setModalTitle={setModalTitle}\n openPartyModal={_openPartyModal}\n isModalVisible={isModalVisible}\n setIsModalVisible={setIsModalVisible}\n listName={'contract_sellers'}\n listPrimaryID={'seller_id'}\n recordColumnName={'seller_name'}\n listLabel={`seller`}\n seeAllLabel={`See All Sellers Information`}\n transactionData={transactionData}\n />\n\n <Col span={24} className=\"\">\n \n </Col>\n\n <PartyComponent\n setModalTitle={setModalTitle}\n openPartyModal={_openPartyModal}\n isModalVisible={isModalVisible}\n setIsModalVisible={setIsModalVisible}\n listName={'contract_seller_agents'}\n listPrimaryID={'broker_id'}\n recordColumnName={'broker_name'}\n listLabel={`seller's agent`}\n seeAllLabel={`See All Seller's Agents Information`}\n transactionData={transactionData}\n />\n </Row>\n </Col>\n </>\n )}\n {isRentalProperty && (\n <>\n <Col span={8}>\n <Row gutter={rowFormViewGutter}>\n <PartyComponent\n setModalTitle={setModalTitle}\n openPartyModal={_openPartyModal}\n isModalVisible={isModalVisible}\n setIsModalVisible={setIsModalVisible}\n listName={'contract_tenants'}\n listPrimaryID={'tenant_id'}\n recordColumnName={'tenant_name'}\n listLabel={`tenant`}\n seeAllLabel={`See All Tenants Information`}\n transactionData={transactionData}\n />\n\n <Col span={24} className=\"\">\n \n </Col>\n\n <PartyComponent\n setModalTitle={setModalTitle}\n openPartyModal={_openPartyModal}\n isModalVisible={isModalVisible}\n setIsModalVisible={setIsModalVisible}\n listName={'contract_referral_sources'}\n listPrimaryID={'referral_source_id'}\n recordColumnName={'referral_source_name'}\n listLabel={`referral source`}\n seeAllLabel={`See All Referral Sources Information`}\n transactionData={transactionData}\n />\n </Row>\n </Col>\n <Col span={8}>\n <Row gutter={rowFormViewGutter}>\n <PartyComponent\n setModalTitle={setModalTitle}\n openPartyModal={_openPartyModal}\n isModalVisible={isModalVisible}\n setIsModalVisible={setIsModalVisible}\n listName={'contract_landlords'}\n listPrimaryID={'landlord_id'}\n recordColumnName={'landlord_name'}\n listLabel={`landlord`}\n seeAllLabel={`See All Landlords Information`}\n transactionData={transactionData}\n />\n\n <Col span={24} className=\"\">\n \n </Col>\n\n <PartyComponent\n setModalTitle={setModalTitle}\n openPartyModal={_openPartyModal}\n isModalVisible={isModalVisible}\n setIsModalVisible={setIsModalVisible}\n listName={'contract_leasing_agents'}\n listPrimaryID={'leasing_agent_id'}\n recordColumnName={'leasing_agent_name'}\n listLabel={`leasing agent`}\n seeAllLabel={`See All Leasing Agents Information`}\n transactionData={transactionData}\n />\n </Row>\n </Col>\n </>\n )}\n </>\n );\n};\n","// Core React libraries import\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Button, Divider, Space, Form, Input, Alert, Select } from 'antd';\nimport { Gutter } from 'antd/lib/grid/row';\nimport { EditOutlined, SaveOutlined } from '@ant-design/icons';\nimport moment from 'moment';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport { updateCustomFieldsByCategory } from 'utils/ez_api/transactionAPIs';\n// EZ web-app types import\nimport {\n AdditionalInfoFieldType,\n contractAdditionalInfoCategoryType,\n TransactionDetailType,\n} from 'types/transaction';\n// EZ web-app components import\nimport { EZCurrencyFormat, EZDateFormat, EZDatePicker, EZInputNumber } from 'components';\nimport { showNotification } from 'utils/notificationUtil';\nimport { FormInstance } from 'antd/es/form/Form';\nimport { HomeContext } from 'context/EZContext';\n\n// EZ web-app styles and assets import\n\nconst colLabelSpan = 14;\nconst colValueSpan = 10;\nconst rowFormViewGutter: [Gutter, Gutter] = [12, 6];\nconst section2RowGutter: [Gutter, Gutter] = [48, 48];\n\nconst CustomFieldComponent: React.FC<{\n isEditMode: boolean;\n form: FormInstance<any>;\n transactionData: TransactionDetailType | undefined;\n categoryObject: contractAdditionalInfoCategoryType;\n fieldObject: AdditionalInfoFieldType;\n}> = ({ isEditMode, form, categoryObject, fieldObject }) => {\n const fieldName = [\n categoryObject.additional_info_fields_category_id,\n fieldObject.additional_info_field_id.toString(),\n ];\n\n useEffect(() => {\n if (isEditMode) {\n if (fieldObject.contract_additional_info_field.class === 'dropdown') {\n form.setFieldsValue({\n [categoryObject.additional_info_fields_category_id]: {\n [fieldObject.additional_info_field_id.toString()]:\n fieldObject.field_option_id,\n },\n });\n } else if (fieldObject.contract_additional_info_field.class === 'date') {\n const momentObj = moment(fieldObject.field_value);\n form.setFieldsValue({\n [categoryObject.additional_info_fields_category_id]: {\n [fieldObject.additional_info_field_id.toString()]:\n fieldObject.field_value && momentObj.isValid()\n ? momentObj.hours(10)\n : '',\n },\n });\n } else {\n form.setFieldsValue({\n [categoryObject.additional_info_fields_category_id]: {\n [fieldObject.additional_info_field_id.toString()]: fieldObject.field_value,\n },\n });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // check the field class: date, dropdown, numeric, text. Default will use the text field\n if (fieldObject.contract_additional_info_field.class === 'date') {\n return (\n <Form.Item name={fieldName} noStyle>\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n placement=\"topLeft\"\n placeholder={`Choose the date for ${fieldObject.newname}`}\n />\n </Form.Item>\n );\n } else if (fieldObject.contract_additional_info_field.class === 'dropdown') {\n return (\n <Form.Item name={fieldName} noStyle>\n <Select\n style={{ width: '100%' }}\n options={fieldObject.contract_additional_info_options.map(optObj => ({\n value: optObj.additional_info_fields_option_id,\n label: optObj.option_value,\n }))}\n placeholder={`Choose ${fieldObject.newname}`}\n allowClear\n ></Select>\n </Form.Item>\n );\n } else if (fieldObject.contract_additional_info_field.class === 'numeric') {\n return (\n <Form.Item name={fieldName} noStyle>\n <EZInputNumber\n style={{ width: '100%' }}\n placeholder={`Enter the ${fieldObject.newname}`}\n step={1}\n min={undefined}\n />\n </Form.Item>\n );\n } else if (fieldObject.contract_additional_info_field.class === 'money') {\n return (\n <Form.Item name={fieldName} noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder={`Enter the ${fieldObject.newname}`}\n step={10}\n min={undefined}\n />\n </Form.Item>\n );\n }\n return (\n <Form.Item name={fieldName} noStyle>\n <Input style={{ width: '100%' }} placeholder={`Enter the ${fieldObject.newname}`} />\n </Form.Item>\n );\n};\n\nconst CustomFieldCategory: React.FC<{\n form: FormInstance<any>;\n reloadSubTabData: () => void;\n transactionData: TransactionDetailType | undefined;\n categoryObject: contractAdditionalInfoCategoryType;\n}> = ({ form, reloadSubTabData, categoryObject, transactionData }) => {\n const HomeCtx = useContext(HomeContext);\n\n const UserPermission = HomeCtx.userPermission;\n\n const [isEditMode, setIsEditMode] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const _saveFieldsChange = () => {\n const contractID = transactionData?.contract_id || 0;\n const categoryFieldValuesObj = form.getFieldValue(\n categoryObject.additional_info_fields_category_id\n );\n\n const payload: any = {};\n payload[categoryObject.additional_info_fields_category_id.toString()] = {};\n\n if (isSubmitting) return;\n setIsSubmitting(true);\n\n categoryObject.contract_additional_info_preferences.forEach(field => {\n if (field.newname) {\n if (\n field.contract_additional_info_field.class === 'date' &&\n categoryFieldValuesObj[field.additional_info_field_id] &&\n categoryFieldValuesObj[field.additional_info_field_id]?.format\n ) {\n payload[categoryObject.additional_info_fields_category_id.toString()][\n field.additional_info_field_id\n ] = categoryFieldValuesObj[field.additional_info_field_id].format('MM/DD/YYYY');\n } else {\n payload[categoryObject.additional_info_fields_category_id.toString()][\n field.additional_info_field_id\n ] = categoryFieldValuesObj[field.additional_info_field_id];\n }\n }\n });\n\n updateCustomFieldsByCategory(\n contractID,\n categoryObject.additional_info_fields_category_id,\n payload\n )\n .then(async resp => {\n if (reloadSubTabData) {\n reloadSubTabData();\n }\n\n showNotification('success', 'New data changes have been saved successfully');\n setIsEditMode(false);\n })\n .finally(() => {\n setIsSubmitting(false);\n });\n };\n const isDeleted = useMemo(() => {\n return transactionData?.active === false || transactionData?.active === 0;\n }, [transactionData]);\n const isArchived = useMemo(() => {\n return transactionData?.is_archived === true;\n }, [transactionData]);\n\n return (\n <Row gutter={rowFormViewGutter}>\n <Col span={24} className=\"\">\n <Row className=\"\">\n <Col span={12} className=\"text-title-secondary\">\n {categoryObject.category?.trim() || '-'}\n </Col>\n <Col span={12} style={{ textAlign: 'right' }}>\n {UserPermission && UserPermission?.toggle === 2 && !isEditMode && (\n <Button\n className=\"ez-action-btn\"\n size=\"small\"\n icon={<EditOutlined />}\n disabled={isArchived || isDeleted}\n onClick={() => setIsEditMode(true)}\n >\n Edit\n </Button>\n )}\n {isEditMode && (\n <Space>\n <Button\n className=\"mr-2\"\n type=\"default\"\n size=\"small\"\n onClick={() => setIsEditMode(false)}\n disabled={isSubmitting}\n >\n Cancel\n </Button>\n <Button\n className=\"\"\n size=\"small\"\n icon={<SaveOutlined />}\n type=\"primary\"\n loading={isSubmitting}\n onClick={() => _saveFieldsChange()}\n >\n {isSubmitting ? 'Saving' : 'Save'}\n </Button>\n </Space>\n )}\n </Col>\n </Row>\n </Col>\n <Divider />\n <Col span={24}>\n <Row gutter={rowFormViewGutter} className=\"row-wrapper\">\n {categoryObject.contract_additional_info_preferences?.map(\n (fieldObject, idx) => {\n if (!fieldObject.newname) {\n return null;\n }\n\n return (\n <React.Fragment key={`contract_additional_info_preferences-${idx}`}>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n {fieldObject.newname || '-'}\n </Col>\n <Col span={colValueSpan}>\n {!isEditMode ? (\n <span>\n {' '}\n {fieldObject.field_value ? (\n fieldObject.contract_additional_info_field\n .class === 'date' ? (\n <EZDateFormat\n noTimezone\n value={fieldObject.field_value}\n />\n ) : fieldObject.contract_additional_info_field\n .class === 'money' ? (\n <EZCurrencyFormat\n value={fieldObject.field_value}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n ) : (\n fieldObject.field_value\n )\n ) : (\n '-'\n )}\n </span>\n ) : (\n <CustomFieldComponent\n isEditMode={isEditMode}\n form={form}\n categoryObject={categoryObject}\n fieldObject={fieldObject}\n transactionData={transactionData}\n />\n )}\n </Col>\n </React.Fragment>\n );\n }\n )}\n </Row>\n </Col>\n </Row>\n );\n};\n\nexport const CustomFieldsSection: React.FC<{\n contractID: number;\n reloadSubTabData: () => void;\n transactionData: TransactionDetailType | undefined;\n isRentalProperty: boolean;\n}> = ({ contractID, reloadSubTabData, transactionData, isRentalProperty }) => {\n const [form] = Form.useForm();\n\n const _onFinish = (val: any) => {};\n\n return (\n <Form form={form} onFinish={_onFinish}>\n <Row gutter={section2RowGutter}>\n {transactionData?.contract_additional_info_categories?.map(\n (categoryObject, idx) => (\n <Col span={16} key={`additional_info_fields-${idx}`}>\n <CustomFieldCategory\n form={form}\n reloadSubTabData={reloadSubTabData}\n categoryObject={categoryObject}\n transactionData={transactionData}\n />\n </Col>\n )\n )}\n\n {!transactionData?.contract_additional_info_categories ||\n transactionData?.contract_additional_info_categories.length === 0 ? (\n <Col span={24}>\n <Row gutter={rowFormViewGutter}>\n <Col span={24} className=\"\">\n <Alert\n message={\n <div className=\"pl-2\">\n Your custom fields will be rendered here.\n <br />\n Navigate to the Admin Area to start customizing your\n transaction to suit your needs.\n </div>\n }\n type=\"info\"\n showIcon\n />\n </Col>\n </Row>\n </Col>\n ) : (\n ''\n )}\n </Row>\n </Form>\n );\n};\n","// Core React libraries import\nimport React, { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Typography } from 'antd';\nimport { Gutter } from 'antd/lib/grid/row';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport { getTransactionDetail, updateTransactionDetail } from 'utils/ez_api/transactionAPIs';\n// EZ web-app types import\nimport {\n STATUS_LIST_RENTAL,\n TransactionDetailTabProps,\n TransactionDetailType,\n} from 'types/transaction';\n// EZ web-app components import\nimport { EZCopyable, EZCurrencyFormat, EZDateFormat, EZInputNumber } from 'components';\nimport { showNotification } from 'utils/notificationUtil';\n\nimport { GeneralInformationSection } from '../partials/ContractInfo_GeneralInformation';\nimport { PartiesSection } from '../partials/ContractInfo_Parties';\nimport { CustomFieldsSection } from '../partials/ContractInfo_CustomFields';\n\n// EZ web-app styles and assets import\n\nconst { Text } = Typography;\n\nconst colLabelSpan = 14;\nconst colValueSpan = 10;\nconst rowFormViewGutter: [Gutter, Gutter] = [12, 6];\nconst section1RowGutter: [Gutter, Gutter] = [48, 8];\nconst section2RowGutter: [Gutter, Gutter] = [48, 48];\n\nexport const SubTab_ContractInfo: React.FC<TransactionDetailTabProps> = ({\n contractID,\n manualReloadCount,\n setIsLoadingSubTabData,\n isRentalProperty,\n}) => {\n const [transactionData, setTransactionData] = useState<TransactionDetailType>();\n\n const _reloadSubTabData = (displayLoadingIndicator: boolean = false) => {\n if (displayLoadingIndicator) setIsLoadingSubTabData(true);\n getTransactionDetail(contractID, 'contract_info')\n .then(res => {\n if (res?.data?.contract_id) {\n const transactionDataTemp: TransactionDetailType = res.data;\n\n if (transactionDataTemp.contract_additional_info_categories?.length) {\n transactionDataTemp.contract_additional_info_categories.forEach(\n category => {\n category.contract_additional_info_preferences?.forEach(field => {\n if (field.contract_additional_info_field.class === 'dropdown') {\n const optValue =\n field.contract_additional_info_value?.field_value;\n if (optValue) {\n const optObject =\n field.contract_additional_info_options.find(\n optValObj =>\n optValObj.additional_info_fields_option_id ===\n parseInt(optValue)\n );\n if (optObject) {\n field.field_value = optObject.option_value;\n field.field_option_id =\n optObject.additional_info_fields_option_id;\n }\n }\n } else {\n field.field_value =\n field.contract_additional_info_value?.field_value;\n }\n });\n }\n );\n }\n\n setTransactionData(transactionDataTemp);\n }\n })\n .finally(() => {\n setIsLoadingSubTabData(false);\n });\n };\n\n useEffect(() => {\n _reloadSubTabData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [manualReloadCount]);\n\n return (\n <div className=\"ez_detail_contract_info\">\n <Row>\n <Col span={24}>\n <Row gutter={section1RowGutter}>\n <Col span={8}>\n <GeneralInformationSection\n contractID={contractID}\n transactionData={transactionData}\n reloadSubTabData={_reloadSubTabData}\n isRentalProperty={isRentalProperty}\n />\n </Col>\n <PartiesSection\n contractID={contractID}\n transactionData={transactionData}\n reloadSubTabData={_reloadSubTabData}\n isRentalProperty={isRentalProperty}\n />\n </Row>\n </Col>\n <Col span={24} className=\"mt-5 pt-4\">\n <CustomFieldsSection\n contractID={contractID}\n transactionData={transactionData}\n reloadSubTabData={_reloadSubTabData}\n isRentalProperty={isRentalProperty}\n />\n </Col>\n </Row>\n </div>\n );\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport qs from 'qs';\nimport { Row, Col, Timeline, Typography, Alert, Skeleton, List, Button, Avatar } from 'antd';\nimport { SnippetsOutlined } from '@ant-design/icons';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport { getTransactionNotes } from 'utils/ez_api/transactionNoteAPIs';\n// EZ web-app types import\nimport { TransactionDetailTabProps, TransactionNoteItemType } from 'types/transaction';\n// EZ web-app components import\nimport { EZDateFormat, EZList } from 'components';\nimport { IListQueryParams } from 'components/list/EZList';\n\n// EZ web-app styles and assets import\n\nconst { Text, Paragraph } = Typography;\n\nconst defaultQueryParams: IListQueryParams = {\n searchKeyword: '',\n orderParams: [['note_id', 'desc']],\n whereParams: {\n category: 'log',\n },\n whereFilterParams: {},\n};\n\nexport const SubTab_Changelogs: React.FC<TransactionDetailTabProps> = ({\n contractID,\n manualReloadCount,\n}) => {\n const [queryParams, setQueryParams] = useState<IListQueryParams>(defaultQueryParams);\n\n const _fetchNotes: (EZQueryParams: string) => Promise<any> = async EZQueryParams => {\n const result = await getTransactionNotes(contractID || -1, EZQueryParams);\n return result;\n };\n\n const _reloadSubTabData = () => {\n setQueryParams({\n ...defaultQueryParams,\n });\n };\n\n useEffect(() => {\n _reloadSubTabData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [manualReloadCount]);\n\n return (\n <div className=\"ez_detail_changelogs\">\n <Row gutter={[0, 0]}>\n <Col span={24} className=\"p-5\">\n <EZList\n rowKey=\"note_id\"\n paginationConfig={{\n pageSize: 20,\n }}\n queryParams={queryParams}\n fetchData={_fetchNotes}\n renderItem={(record: TransactionNoteItemType) => (\n <List.Item>\n <List.Item.Meta\n avatar={\n <Avatar\n style={{ backgroundColor: '#E6F7FF' }}\n icon={<SnippetsOutlined style={{ color: '#096DD9' }} />}\n size={42}\n />\n }\n title={\n <span>\n <Text strong className=\"mr-1\">\n {record.posted_account?.fullname}\n </Text>\n <Text className=\"mr-1\">\n {record.posted_account?.email\n ? `(${record.posted_account.email})`\n : ``}\n </Text>\n <Text type=\"secondary\" className=\"mr-2\">\n On{' '}\n <EZDateFormat\n value={record.date_posted}\n format=\"MMM DD, YYYY - hh:mma\"\n />\n </Text>\n </span>\n }\n description={\n <Paragraph\n style={{ whiteSpace: 'pre-wrap' }}\n ellipsis={{\n rows: 3,\n expandable: true,\n }}\n title={`${record.notes}`}\n >\n {record.notes}\n </Paragraph>\n }\n />\n </List.Item>\n )}\n />\n </Col>\n </Row>\n </div>\n );\n};\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Tabs, Modal, Typography } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\nimport { TransactionDetailTabProps } from 'types/transaction';\n// EZ web-app components import\nimport { ITableQueryParams } from 'components/table/EZProTable';\nimport { HomeContext } from 'context/EZContext';\nimport { EMAIL_INTEGRATION_ERR_CODE, EmailCredentialType, EmailLogType } from 'types/email';\nimport { EMAIL_TAB } from 'components/appPage/modals/taskEmailModal';\nimport { Partial_EmailLogs } from 'components/appPage/partials/emailLogs';\nimport { getEmailLogDetail } from 'utils/ez_api/emailLogAPIs';\nimport { EmailIntegrationIndicator } from 'components/partials/emailIntegrationIndicator';\nimport { Partial_EmailForm } from 'pages/tabs/email/partials/emailForm';\n\n// EZ web-app styles and assets import\n\nconst { TabPane } = Tabs;\n\nconst defaultTableParam = {\n searchKeyword: '',\n orderParams: [],\n whereParams: {},\n whereFilterParams: {},\n};\n\nexport const SubTab_Emails: React.FC<TransactionDetailTabProps> = ({\n contractID,\n isTransactionDeleted,\n manualReloadCount,\n}) => {\n const HomeCtx = useContext(HomeContext);\n\n const UserPermission = HomeCtx.userPermission;\n\n const [queryParams, setQueryParams] = useState<ITableQueryParams>(defaultTableParam);\n const [refreshCounter, setRefreshCounter] = useState<number>(0);\n\n const [activeTabKey, setActiveTabKey] = useState<string>(EMAIL_TAB.EMAIL_LIST);\n\n const _reloadSubTabData = () => {\n setQueryParams({ ...defaultTableParam });\n };\n\n const _editLogDetail = (emailLog: EmailLogType) => {\n const _onSendEmail = () => {\n editLogDetailModal.destroy();\n setRefreshCounter(refreshCounter + 1);\n };\n\n const editLogDetailModal = Modal.confirm({\n title: <Typography.Title level={4}>Edit Email Draft</Typography.Title>,\n content: (\n <>\n <Partial_EmailForm\n contractID={contractID}\n emailLog={emailLog}\n onSendEmail={_onSendEmail}\n />\n </>\n ),\n okText: 'Save',\n cancelText: 'Close',\n cancelButtonProps: {\n style: {\n display: 'none',\n },\n },\n okButtonProps: {\n style: {\n display: 'none',\n },\n },\n icon: <></>,\n style: { top: '40px' },\n width: '80%',\n autoFocusButton: null,\n onOk: async () => {\n editLogDetailModal.destroy();\n },\n onCancel: () => {\n setRefreshCounter(refreshCounter + 1);\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n useEffect(() => {\n _reloadSubTabData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [manualReloadCount]);\n\n return (\n <div className=\"ez_detail_emails\">\n <Row gutter={[0, 0]}>\n <Col span={24}>\n <Tabs\n type=\"editable-card\"\n activeKey={activeTabKey}\n onChange={val => setActiveTabKey(val as EMAIL_TAB)}\n hideAdd\n className=\"tabs-with-leftmargin\"\n >\n <TabPane\n tab={\n <>\n Draft and Sent Mails of <b>This Transaction</b>\n </>\n }\n key={EMAIL_TAB.EMAIL_LIST}\n closable={false}\n >\n {/* <EmailIntegrationIndicator /> */}\n <Row>\n <Col span={24}>\n <Partial_EmailLogs\n isTransactionDeleted={isTransactionDeleted}\n contractID={contractID}\n editLogDetail={_editLogDetail}\n pageSize={20}\n refreshCounter={refreshCounter}\n />\n </Col>\n </Row>\n </TabPane>\n </Tabs>\n </Col>\n </Row>\n </div>\n );\n};\n","// Core React libs import\nimport React from 'react';\n\n// Core ANTD and 3rd party libs import\nimport { Select } from 'antd';\nimport type { SelectProps } from 'antd/es/select';\n\ntype EZSelectContactProps = SelectProps & {};\n\nexport const EZSelectContact: React.FC<EZSelectContactProps> = ({ ...props }) => {\n return (\n <Select\n style={{ width: '100%' }}\n placeholder=\"Select a contact\"\n optionFilterProp=\"contactname\"\n fieldNames={{\n label: 'contactname',\n value: 'contact_id',\n }}\n showSearch\n showArrow\n {...props}\n />\n );\n};\n","// Core React libraries import\nimport { useContext, useEffect, useRef, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Row,\n Col,\n Typography,\n Button,\n Badge,\n Divider,\n Modal,\n Form,\n Input,\n Alert,\n Checkbox,\n Radio,\n Space,\n} from 'antd';\nimport { Gutter } from 'antd/lib/grid/row';\nimport { useReactToPrint } from 'react-to-print';\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\nimport {\n GreenSheetType,\n TransactionContactItemType,\n TransactionDetailTabProps,\n TransactionDetailType,\n} from 'types/transaction';\nimport {\n getTransactionStatusCategory,\n isRentalProperty,\n transformContractCustomFields,\n} from 'utils/webAppUtil';\nimport { TransactionSalesType } from 'components/select/selectSaleType';\nimport { EditOutlined, FlagTwoTone, PrinterOutlined, StopOutlined } from '@ant-design/icons';\nimport { CommissionInfo, EZCurrencyFormat, EZDateFormat, EZOverlaySpinner } from 'components';\nimport {\n getTransactionDetail,\n getGreensheet,\n updateGreensheet,\n} from 'utils/ez_api/transactionAPIs';\nimport { showMessage, showNotification } from 'utils/notificationUtil';\nimport React from 'react';\nimport { EZSelectContact } from 'components/select/selectTransactionContact';\nimport { DefaultOptionType, SelectProps } from 'antd/es/select';\nimport { getTransactionContacts } from 'utils/ez_api/transactionContactAPIs';\nimport { HomeContext } from 'context/EZContext';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nconst { Text, Paragraph } = Typography;\n\nconst colLabelSpan = 10;\nconst colValueSpan = 14;\nconst rowFormViewGutter: [Gutter, Gutter] = [12, 4];\n\nconst marginBottomHeaderTitle = 24;\n\nlet hasContactAPIBeenCalled = false;\n\nconst GreenSheetEditModalContent: React.FC<{\n additionalContacts: TransactionContactItemType[] | [];\n onSelectTitlecoContact: (value: any, opt: any) => void;\n onSelectLendercoContact: (value: any, opt: any) => void;\n}> = ({ additionalContacts, onSelectTitlecoContact, onSelectLendercoContact }) => {\n return (\n <Row>\n <Col span={24}>\n <Row gutter={[64, 0]}>\n <Col span={24}>\n <Alert\n message={\n <>\n To save the changes, hit the <b>'Save Setting'</b> button on the\n footter section of this pop-up.\n </>\n }\n type=\"info\"\n showIcon\n />\n </Col>\n <Col span={24}>\n <Divider orientation=\"left\">\n <b>\n <Form.Item\n name=\"titleco_contact_id\"\n style={{ margin: 0, width: '350px', textAlign: 'left' }}\n >\n <EZSelectContact\n onSelect={onSelectTitlecoContact}\n onClear={() => onSelectTitlecoContact(null, null)}\n placeholder=\"Title Company\"\n allowClear\n options={additionalContacts?.map(additionalContact => ({\n label: `${additionalContact.contact_role?.role} (${additionalContact.contactname})`,\n value: additionalContact.contact_id,\n }))}\n fieldNames={undefined}\n />\n </Form.Item>\n </b>\n </Divider>\n </Col>\n <Col span={12}>\n <Row gutter={[64, 0]}>\n <Col span={24}>\n <Form.Item label=\"Company\" name=\"titleco_company\">\n <Input placeholder=\"Enter the company name\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Closing Officer\" name=\"titleco_closing_officer\">\n <Input placeholder=\"Enter the closing officer name\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Address\" name=\"titleco_address\">\n <Input placeholder=\"Enter the title co's company address\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Fax\" name=\"titleco_fax\">\n <Input placeholder=\"Enter the title co's fax\" />\n </Form.Item>\n </Col>\n </Row>\n </Col>\n <Col span={12}>\n <Row gutter={[64, 0]}>\n <Col span={24}>\n <Form.Item label=\"E-mail\" name=\"titleco_email\">\n <Input placeholder=\"Enter the title co's email\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Office #\" name=\"titleco_office_num\">\n <Input placeholder=\"Enter the title co's office #\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Mobile\" name=\"titleco_mobile\">\n <Input placeholder=\"Enter the title co's mobile\" />\n </Form.Item>\n </Col>\n </Row>\n </Col>\n </Row>\n </Col>\n <Col span={24}>\n <Row gutter={[64, 0]} align=\"middle\">\n <Col span={24}>\n <Divider orientation=\"left\">\n <b>\n <Form.Item\n name=\"lenderco_contact_id\"\n style={{ margin: 0, width: '350px', textAlign: 'left' }}\n >\n <EZSelectContact\n options={additionalContacts?.map(additionalContact => ({\n label: `${additionalContact.contact_role?.role} (${additionalContact.contactname})`,\n value: additionalContact.contact_id,\n }))}\n onSelect={onSelectLendercoContact}\n onClear={() => onSelectLendercoContact(null, null)}\n placeholder=\"Lender Company\"\n allowClear\n fieldNames={undefined}\n />\n </Form.Item>\n </b>\n </Divider>\n </Col>\n\n <Col span={12}>\n <Row gutter={[64, 0]}>\n <Col span={24}>\n <Form.Item label=\"Cash Deal\" name=\"lenderco_cash_deal\">\n <Radio.Group>\n <Radio value={1}>Yes</Radio>\n <Radio value={0}>No</Radio>\n </Radio.Group>\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Company\" name=\"lenderco_company\">\n <Input placeholder=\"Enter the company name\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Loan Officer\" name=\"lenderco_loan_officer\">\n <Input placeholder=\"Enter the loan officer name\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Address\" name=\"lenderco_address\">\n <Input placeholder=\"Enter the lender co's company address\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Fax\" name=\"lenderco_fax\">\n <Input placeholder=\"Enter the lender co's fax\" />\n </Form.Item>\n </Col>\n </Row>\n </Col>\n <Col span={12}>\n <Row gutter={[64, 0]}>\n <Col span={24}>\n <Form.Item label=\"E-mail\" name=\"lenderco_email\">\n <Input placeholder=\"Enter the lender co's email\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Office #\" name=\"lenderco_office_num\">\n <Input placeholder=\"Enter the lender co's office #\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Mobile\" name=\"lenderco_mobile\">\n <Input placeholder=\"Enter the lender co's mobile\" />\n </Form.Item>\n </Col>\n </Row>\n </Col>\n </Row>\n </Col>\n <Col span={24}>\n <Row gutter={[64, 0]}>\n <Col span={24}>\n <Divider orientation=\"left\">\n <b>Additional Info (Custom Sections and Fields)</b>\n </Divider>\n </Col>\n <Col span={12}>\n <Row gutter={[64, 0]}>\n <Col span={24}>\n <Form.Item\n label=\"\"\n name=\"show_additional_info\"\n valuePropName=\"checked\"\n initialValue={true}\n >\n <Checkbox>Show additional info</Checkbox>\n </Form.Item>\n </Col>\n </Row>\n </Col>\n </Row>\n </Col>\n <Col span={24}>\n <Row gutter={[64, 0]}>\n <Col span={24}>\n <Divider orientation=\"left\">\n <b>Notes</b>\n </Divider>\n </Col>\n <Col span={24}>\n <Row gutter={[64, 0]}>\n <Col span={24}>\n <Form.Item label=\"Notes\" name=\"notes\">\n <Input.TextArea\n style={{ width: '100%' }}\n rows={4}\n placeholder=\"Please provide info on commission splits, referrals and any other deductions here.\"\n />\n </Form.Item>\n </Col>\n </Row>\n </Col>\n </Row>\n </Col>\n </Row>\n );\n};\n\nexport const SubTab_Greensheet: React.FC<TransactionDetailTabProps> = ({\n contractID,\n isTransactionDeleted,\n manualReloadCount,\n}) => {\n const [form] = Form.useForm();\n const componentRef = useRef<HTMLDivElement>(null);\n\n const [isLoadingTransactionDetail, setIsLoadingTransactionDetail] = useState<boolean>(false);\n const [isSavingGreensheetSetting, setIsSavingGreensheetSetting] = useState<boolean>(false);\n\n const [transactionData, setTransactionData] = useState<TransactionDetailType>();\n const [greensheet, setGreensheet] = useState<GreenSheetType>();\n const [isRental, setIsRental] = useState<boolean>(false);\n\n const [isEditModalOpen, setIsEditModalOpen] = useState(false);\n\n const [contactOptions, setContactOptions] = useState<TransactionContactItemType[]>([]);\n\n const handlePrint = useReactToPrint({\n content: () => componentRef.current,\n documentTitle: `Green Sheet - ${transactionData?.address}`,\n });\n\n const _reloadTransactionDetail = async () => {\n setIsLoadingTransactionDetail(true);\n\n Promise.all([\n getTransactionDetail(contractID, 'basic_info').then(({ data }) => data),\n getTransactionDetail(contractID, 'contract_info').then(({ data }) => data),\n getGreensheet(contractID).then(({ data }) => data),\n ])\n .then(values => {\n const transactionData: TransactionDetailType = { ...values[0], ...values[1] };\n\n transformContractCustomFields(transactionData);\n\n setGreensheet(values[2]);\n setTransactionData(transactionData);\n setIsRental(isRentalProperty(transactionData.status_id));\n })\n .catch(() => {\n showNotification('error', 'Error happened while reloading the transaction data.');\n })\n .finally(() => {\n setIsLoadingTransactionDetail(false);\n });\n };\n\n const _reloadSubTabData = () => {\n _reloadTransactionDetail();\n };\n\n const _onFinish = (values: any) => {\n const payload = {\n ...values,\n show_additional_info: values.show_additional_info ? true : false,\n };\n\n setIsSavingGreensheetSetting(true);\n updateGreensheet(contractID, payload)\n .then(() => {\n showMessage('success', 'New setting has been saved.');\n setIsEditModalOpen(false);\n _reloadSubTabData();\n })\n .finally(() => {\n setIsSavingGreensheetSetting(false);\n });\n };\n\n const _onSelectTitlecoContact = (contactID: any) => {\n const additionalContact = contactOptions.find(c => c.contact_id === contactID);\n const _formValue = form.getFieldsValue();\n if (additionalContact) {\n form.setFieldsValue({\n ..._formValue,\n titleco_contact_id: additionalContact.contact_id,\n titleco_company: additionalContact.company,\n titleco_address: additionalContact.address,\n titleco_fax: additionalContact.fax,\n titleco_email: additionalContact.email,\n titleco_mobile: additionalContact.telephone,\n });\n } else {\n form.setFieldsValue({\n ..._formValue,\n titleco_contact_id: '',\n titleco_company: '',\n titleco_address: '',\n titleco_fax: '',\n titleco_email: '',\n titleco_mobile: '',\n });\n }\n };\n\n const _onSelectLendercoContact = (contactID: any) => {\n const additionalContact = contactOptions.find(c => c.contact_id === contactID);\n const _formValue = form.getFieldsValue();\n if (additionalContact) {\n form.setFieldsValue({\n ..._formValue,\n lenderco_contact_id: additionalContact.contact_id,\n lenderco_company: additionalContact.company,\n lenderco_address: additionalContact.address,\n lenderco_fax: additionalContact.fax,\n lenderco_email: additionalContact.email,\n lenderco_mobile: additionalContact.telephone,\n });\n } else {\n form.setFieldsValue({\n ..._formValue,\n lenderco_contact_id: '',\n lenderco_company: '',\n lenderco_address: '',\n lenderco_fax: '',\n lenderco_email: '',\n lenderco_mobile: '',\n });\n }\n };\n\n const { triggerRefetchDataList, setTriggerRefetchDataList } = useContext(HomeContext);\n const hasTriggerRefetchData = triggerRefetchDataList.includes('additional_contact');\n\n const _fetchTransactionContact = () => {\n getTransactionContacts(contractID).then(({ data }) => {\n const _transactionContact = (data as TransactionContactItemType[]) || [];\n setContactOptions(_transactionContact);\n if (hasTriggerRefetchData) {\n const newTriggerRefetchDataList = triggerRefetchDataList.filter(\n key => key !== 'additional_contact'\n );\n setTriggerRefetchDataList(newTriggerRefetchDataList);\n }\n });\n };\n\n useEffect(() => {\n if (isEditModalOpen) {\n _fetchTransactionContact();\n form.setFieldsValue({\n ...greensheet,\n show_additional_info: greensheet?.show_additional_info !== false ? true : false,\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isEditModalOpen]);\n\n useEffect(() => {\n _reloadSubTabData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [manualReloadCount]);\n\n return (\n <div className=\"ez_detail_greensheet\">\n {!isLoadingTransactionDetail && transactionData ? (\n <>\n <Row gutter={24} className=\"mt-2 mb-3\">\n <Col span={24} className=\"text-right\">\n <Modal\n title=\"Edit Green Sheet Setting\"\n visible={isEditModalOpen}\n onOk={() => form.submit()}\n onCancel={() => setIsEditModalOpen(false)}\n closable\n maskClosable\n cancelText=\"Close\"\n okText={isSavingGreensheetSetting ? 'Saving...' : 'Save Setting'}\n okButtonProps={{\n disabled: isSavingGreensheetSetting,\n }}\n width={1000}\n style={{ top: '40px' }}\n >\n <Form form={form} layout=\"vertical\" onFinish={_onFinish}>\n <GreenSheetEditModalContent\n additionalContacts={contactOptions}\n onSelectTitlecoContact={_onSelectTitlecoContact}\n onSelectLendercoContact={_onSelectLendercoContact}\n />\n </Form>\n </Modal>\n {!isTransactionDeleted && (\n <Button\n className=\"ez-action-btn\"\n icon={<EditOutlined />}\n onClick={() => setIsEditModalOpen(true)}\n >\n Edit Green Sheet Setting\n </Button>\n )}\n <Divider type=\"vertical\" />\n <Button type=\"primary\" icon={<PrinterOutlined />} onClick={handlePrint}>\n Print\n </Button>\n </Col>\n </Row>\n <Row ref={componentRef} gutter={24} className=\"mt-2 greensheet-content\">\n <Col\n span={24}\n style={{ marginBottom: marginBottomHeaderTitle }}\n className=\"greensheet-div-header mt-4\"\n >\n <Typography.Title level={4}>Transaction Summary Sheet</Typography.Title>\n <Text>Transaction Email Address: </Text>\n <Text code>\n {transactionData.account_id}_{transactionData.contract_id}\n @ezcoordinator.com\n </Text>\n </Col>\n <Col\n className=\"pl-5 pr-5 greensheet-div-summary\"\n span={12}\n sm={24}\n md={24}\n lg={12}\n xl={12}\n >\n <Row gutter={rowFormViewGutter}>\n <Col span={colLabelSpan}>\n <Text strong>Address:</Text>\n </Col>\n <Col span={colValueSpan}>\n <div className=\"\">\n {transactionData.address || (\n <Text type=\"secondary\" italic>\n Address is empty\n </Text>\n )}\n </div>\n <div className=\"\">\n {transactionData.city || (\n <Text type=\"secondary\" italic>\n City is empty\n </Text>\n )}\n ,{' '}\n {transactionData.state || (\n <Text type=\"secondary\" italic>\n State is empty\n </Text>\n )}\n ,{' '}\n {transactionData.zip || (\n <Text type=\"secondary\" italic>\n ZIP is empty\n </Text>\n )}\n </div>\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Status:</Text>\n </Col>\n <Col span={colValueSpan}>\n {getTransactionStatusCategory(transactionData.status_id)}\n <Badge className=\"mr-1 ml-2\" color={'black'} />\n <Button\n className={`ez-btn-contract-status ez-tr-status-${transactionData.status_id}`}\n type=\"text\"\n shape=\"round\"\n style={{\n backgroundColor: `${transactionData.contract_status?.color}`,\n color: 'white',\n }}\n size=\"small\"\n >{`${transactionData.contract_status?.status}`}</Button>\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>MLS:</Text>\n </Col>\n <Col span={colValueSpan}>{transactionData.mis || '-'}</Col>\n <Col span={colLabelSpan}>\n <Text strong>ESCROW:</Text>\n </Col>\n <Col span={colValueSpan}>{transactionData.escrow || '-'}</Col>\n <Col span={colLabelSpan}>\n <Text strong>Type:</Text>\n </Col>\n <Col span={colValueSpan}>\n {transactionData.contract_property_type?.type_name || '-'}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Sales Type:</Text>\n </Col>\n <Col span={colValueSpan}>\n <TransactionSalesType\n contract_id={transactionData.contract_id}\n sale_types_id={transactionData.sale_types_id}\n />\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Flag:</Text>\n </Col>\n <Col span={colValueSpan}>\n {transactionData.flag_id !== 1 ? (\n <FlagTwoTone\n twoToneColor={transactionData.contract_flag?.flag_color}\n />\n ) : (\n <StopOutlined />\n )}\n <span className=\"ml-2\">\n {transactionData.contract_flag?.flag}\n </span>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Year Built:\n </Col>\n <Col span={colValueSpan}>\n {transactionData?.contract_date?.year_built || '-'}\n </Col>\n </Row>\n </Col>\n <Col\n className=\"pl-2 pr-5 greensheet-div-summary\"\n span={12}\n sm={24}\n md={24}\n lg={12}\n xl={12}\n >\n <Row gutter={rowFormViewGutter}>\n {!isRental && (\n <>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n List Price:\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={transactionData?.contract_price?.listprice}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Sales Price:\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={transactionData?.contract_price?.salesprice}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Closing Cost Credit:\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={transactionData?.contract_price?.cccredit}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Deposit:\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={transactionData?.contract_price?.deposits}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n </>\n )}\n {isRental && (\n <>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Marketed Price:\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={\n transactionData?.contract_price?.marketedprice\n }\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Rental Price:\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={transactionData?.contract_price?.rentalprice}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Credits:\n </Col>\n <Col span={colValueSpan}>\n <EZCurrencyFormat\n value={transactionData?.contract_price?.credits}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease Term(s):\n </Col>\n <Col span={colValueSpan}>\n {transactionData?.contract_date?.lease_term || '-'}\n </Col>\n </>\n )}\n </Row>\n </Col>\n <Divider />\n <Col className=\"pl-5 pr-5\" span={24} sm={24} md={24} lg={24} xl={24}>\n <Row gutter={rowFormViewGutter}>\n {!isRental && (\n <>\n <Col className=\"\" span={12} sm={12} md={12} lg={12} xl={12}>\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Contract Date:\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={\n transactionData?.contract_date\n ?.contract_date\n }\n />\n </Col>\n </Row>\n </Col>\n <Col className=\"\" span={12} sm={12} md={12} lg={12} xl={12}>\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Contract Effective Date:\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={\n transactionData?.contract_date\n ?.effective_date\n }\n />\n </Col>\n </Row>\n </Col>\n <Col className=\"\" span={12} sm={12} md={12} lg={12} xl={12}>\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Close Date:\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={\n transactionData?.contract_date\n ?.close_date\n }\n />\n </Col>\n </Row>\n </Col>\n <Col className=\"\" span={12} sm={12} md={12} lg={12} xl={12}>\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Listing Date:\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={\n transactionData?.contract_date\n ?.listing_date\n }\n />\n </Col>\n </Row>\n </Col>\n <Col className=\"\" span={12} sm={12} md={12} lg={12} xl={12}>\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Listing Live Date:\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={\n transactionData?.contract_date\n ?.listing_live_date\n }\n />\n </Col>\n </Row>\n </Col>\n <Col className=\"\" span={12} sm={12} md={12} lg={12} xl={12}>\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Listing Expiration Date:\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={\n transactionData?.contract_date\n ?.expiration_date\n }\n />\n </Col>\n </Row>\n </Col>\n <Col className=\"\" span={12} sm={12} md={12} lg={12} xl={12}>\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Inspection Contingency Date:\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={\n transactionData?.contract_date\n ?.inspection_contingency_date\n }\n />\n </Col>\n </Row>\n </Col>\n <Col className=\"\" span={12} sm={12} md={12} lg={12} xl={12}>\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Appraisal Contingency Date:\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={\n transactionData?.contract_date\n ?.appraisal_contingency_date\n }\n />\n </Col>\n </Row>\n </Col>\n <Col className=\"\" span={12} sm={12} md={12} lg={12} xl={12}>\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Financing Contingency Date:\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={\n transactionData?.contract_date\n ?.financing_contingency_date\n }\n />\n </Col>\n </Row>\n </Col>\n </>\n )}\n {isRental && (\n <>\n <Col className=\"\" span={12} sm={12} md={12} lg={12} xl={12}>\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Application Date:\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={\n transactionData?.contract_date\n ?.application_date\n }\n />\n </Col>\n </Row>\n </Col>\n <Col className=\"\" span={12} sm={12} md={12} lg={12} xl={12}>\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease Signed Date:\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={\n transactionData?.contract_date\n ?.lease_signed_date\n }\n />\n </Col>\n </Row>\n </Col>\n <Col className=\"\" span={12} sm={12} md={12} lg={12} xl={12}>\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease Start:\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={\n transactionData?.contract_date\n ?.lease_start_date\n }\n />\n </Col>\n </Row>\n </Col>\n <Col className=\"\" span={12} sm={12} md={12} lg={12} xl={12}>\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease End:\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={\n transactionData?.contract_date\n ?.lease_end_date\n }\n />\n </Col>\n </Row>\n </Col>\n <Col className=\"\" span={12} sm={12} md={12} lg={12} xl={12}>\n <Row>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Move In Date:\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={\n transactionData?.contract_date\n ?.move_in_date\n }\n />\n </Col>\n </Row>\n </Col>\n </>\n )}\n {transactionData?.contract_date_additionals?.length ? (\n <>\n {transactionData.contract_date_additionals.map(\n (dateAdditional, index) => (\n <Col\n className=\"\"\n span={12}\n sm={12}\n md={12}\n lg={12}\n xl={12}\n >\n <Row key={`contract_date_additionals_${index}`}>\n <Col\n span={colLabelSpan}\n className=\"ez-form-label\"\n >\n <span\n style={{\n textTransform: 'capitalize',\n }}\n >\n {dateAdditional.date_name}\n </span>\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={dateAdditional?.val_date}\n />\n </Col>\n </Row>\n </Col>\n )\n )}\n </>\n ) : (\n ''\n )}\n </Row>\n </Col>\n <Col\n span={24}\n style={{ marginBottom: marginBottomHeaderTitle }}\n className=\"greensheet-div-header mt-5\"\n >\n <Typography.Title level={4}>Transaction Info</Typography.Title>\n </Col>\n {!isRental ? (\n <Col span={24}>\n <table className=\"table\">\n <thead>\n <tr>\n <th style={{ width: '140px' }}></th>\n <th style={{ width: '180px' }}>Fullname</th>\n <th style={{ width: '280px' }}>\n Phone - Email - Address\n </th>\n <th style={{ width: '220px' }}>Company</th>\n </tr>\n </thead>\n <tbody>\n {transactionData?.contract_buyers?.length ? (\n transactionData.contract_buyers.map((record, index) => (\n <tr>\n {index === 0 ? (\n <td\n rowSpan={\n transactionData?.contract_buyers\n ?.length || undefined\n }\n >\n <b>Buyer</b>\n </td>\n ) : (\n ''\n )}\n <td>{record.buyer_name || '-'}</td>\n <td>\n <Space direction=\"vertical\">\n <span>{record.telephone || '-'}</span>\n <span>{record.email || '-'}</span>\n <span> </span>\n <span>\n {[\n record.address || '-',\n record.city,\n record.state,\n ]\n .filter(item => item)\n .join(', ')}\n </span>\n </Space>\n </td>\n <td>{record.company || '-'}</td>\n </tr>\n ))\n ) : (\n <tr>\n <td>Buyer</td>\n <td>-</td>\n <td>-</td>\n <td>-</td>\n </tr>\n )}\n {transactionData?.contract_sellers?.length ? (\n transactionData.contract_sellers.map(\n (record, index) => (\n <tr>\n {index === 0 ? (\n <td\n rowSpan={\n transactionData\n ?.contract_sellers\n ?.length || undefined\n }\n >\n <b>Seller</b>\n </td>\n ) : (\n ''\n )}\n <td>{record.seller_name || '-'}</td>\n <td>\n <Space direction=\"vertical\">\n <span>\n {record.telephone || '-'}\n </span>\n <span>{record.email || '-'}</span>\n <span> </span>\n <span>\n {[\n record.address || '-',\n record.city,\n record.state,\n ]\n .filter(item => item)\n .join(', ')}\n </span>\n </Space>\n </td>\n <td>{record.company || '-'}</td>\n </tr>\n )\n )\n ) : (\n <tr>\n <td>Seller</td>\n <td>-</td>\n <td>-</td>\n <td>-</td>\n </tr>\n )}\n </tbody>\n </table>\n <table className=\"table mt-5 mb-3\">\n <thead>\n <tr>\n <th style={{ width: '140px' }}></th>\n <th style={{ width: '180px' }}>Fullname</th>\n <th style={{ width: '160px' }}>Commission</th>\n <th style={{ width: '280px' }}>\n Phone - Email - Address\n </th>\n <th style={{ width: '220px' }}>Company</th>\n </tr>\n </thead>\n <tbody>\n {transactionData?.contract_buyer_agents?.length ? (\n transactionData.contract_buyer_agents.map(\n (record, index) => (\n <tr>\n {index === 0 ? (\n <td\n rowSpan={\n transactionData\n ?.contract_buyer_agents\n ?.length || undefined\n }\n >\n <b>Buyer's agent(s)</b>\n </td>\n ) : (\n ''\n )}\n <td>{record.agent_name || '-'}</td>\n <td>\n <CommissionInfo\n commission_base={\n transactionData?.contract_price\n ?.salesprice\n }\n commission_rate={\n record.commission_rate\n }\n commission_amount={\n record.commission_amount\n }\n ifEmptyText={'-'}\n />\n </td>\n <td>\n <Space direction=\"vertical\">\n <span>\n {record.telephone || '-'}\n </span>\n <span>{record.email || '-'}</span>\n <span> </span>\n <span>\n {[\n record.address || '-',\n record.city,\n record.state,\n ]\n .filter(item => item)\n .join(', ')}\n </span>\n </Space>\n </td>\n <td>{record.company || '-'}</td>\n </tr>\n )\n )\n ) : (\n <tr>\n <td>Buyer's agent(s)</td>\n <td>-</td>\n <td>-</td>\n <td>-</td>\n <td>-</td>\n </tr>\n )}\n {transactionData?.contract_seller_agents?.length ? (\n transactionData.contract_seller_agents.map(\n (record, index) => (\n <tr>\n {index === 0 ? (\n <td\n rowSpan={\n transactionData\n ?.contract_seller_agents\n ?.length || undefined\n }\n >\n <b>Seller's Agents</b>\n </td>\n ) : (\n ''\n )}\n <td>{record.broker_name || '-'}</td>\n <td>\n <CommissionInfo\n commission_base={\n transactionData?.contract_price\n ?.salesprice\n }\n commission_rate={\n record.commission_rate\n }\n commission_amount={\n record.commission_amount\n }\n ifEmptyText={'-'}\n />\n </td>\n <td>\n <Space direction=\"vertical\">\n <span>\n {record.telephone || '-'}\n </span>\n <span>{record.email || '-'}</span>\n <span> </span>\n <span>\n {[\n record.address || '-',\n record.city,\n record.state,\n ]\n .filter(item => item)\n .join(', ')}\n </span>\n </Space>\n </td>\n <td>{record.company || '-'}</td>\n </tr>\n )\n )\n ) : (\n <tr>\n <td>Seller's Agents</td>\n <td>-</td>\n <td>-</td>\n <td>-</td>\n <td>-</td>\n </tr>\n )}\n </tbody>\n </table>\n </Col>\n ) : (\n <Col span={24}>\n <table className=\"table\">\n <thead>\n <tr>\n <th style={{ width: '140px' }}></th>\n <th style={{ width: '180px' }}>Fullname</th>\n <th style={{ width: '280px' }}>\n Phone - Email - Address\n </th>\n <th style={{ width: '180px' }}>Company</th>\n </tr>\n </thead>\n <tbody>\n {transactionData?.contract_tenants?.length ? (\n transactionData.contract_tenants.map(\n (record, index) => (\n <tr>\n {index === 0 ? (\n <td\n rowSpan={\n transactionData\n ?.contract_tenants\n ?.length || undefined\n }\n >\n <b>Tenant</b>\n </td>\n ) : (\n ''\n )}\n <td>{record.tenant_name || '-'}</td>\n <td>\n <Space direction=\"vertical\">\n <span>\n {record.telephone || '-'}\n </span>\n <span>{record.email || '-'}</span>\n <span> </span>\n <span>\n {[\n record.address || '-',\n record.city,\n record.state,\n ]\n .filter(item => item)\n .join(', ')}\n </span>\n </Space>\n </td>\n <td>{record.company || '-'}</td>\n </tr>\n )\n )\n ) : (\n <tr>\n <td>Tenant</td>\n <td>-</td>\n <td>-</td>\n <td>-</td>\n </tr>\n )}\n {transactionData?.contract_landlords?.length ? (\n transactionData.contract_landlords.map(\n (record, index) => (\n <tr>\n {index === 0 ? (\n <td\n rowSpan={\n transactionData\n ?.contract_landlords\n ?.length || undefined\n }\n >\n <b>Landlord</b>\n </td>\n ) : (\n ''\n )}\n <td>{record.landlord_name || '-'}</td>\n <td>\n <Space direction=\"vertical\">\n <span>\n {record.telephone || '-'}\n </span>\n <span>{record.email || '-'}</span>\n <span> </span>\n <span>\n {[\n record.address || '-',\n record.city,\n record.state,\n ]\n .filter(item => item)\n .join(', ')}\n </span>\n </Space>\n </td>\n <td>{record.company || '-'}</td>\n </tr>\n )\n )\n ) : (\n <tr>\n <td>Landlord</td>\n <td>-</td>\n <td>-</td>\n <td>-</td>\n </tr>\n )}\n </tbody>\n </table>\n <table className=\"table mt-5 mb-3\">\n <thead>\n <tr>\n <th style={{ width: '140px' }}></th>\n <th style={{ width: '180px' }}>Fullname</th>\n <th style={{ width: '160px' }}>Commission</th>\n <th style={{ width: '280px' }}>\n Phone - Email - Address\n </th>\n <th style={{ width: '220px' }}>Company</th>\n </tr>\n </thead>\n <tbody>\n {transactionData?.contract_referral_sources?.length ? (\n transactionData.contract_referral_sources.map(\n (record, index) => (\n <tr>\n {index === 0 ? (\n <td\n rowSpan={\n transactionData\n ?.contract_referral_sources\n ?.length || undefined\n }\n >\n <b>Referral Source(s)</b>\n </td>\n ) : (\n ''\n )}\n <td>\n {record.referral_source_name || '-'}\n </td>\n <td>\n <CommissionInfo\n commission_base={\n transactionData?.contract_price\n ?.marketedprice\n }\n commission_rate={\n record.commission_rate\n }\n commission_amount={\n record.commission_amount\n }\n ifEmptyText={'-'}\n />\n </td>\n <td>\n <Space direction=\"vertical\">\n <span>\n {record.telephone || '-'}\n </span>\n <span>{record.email || '-'}</span>\n <span> </span>\n <span>\n {[\n record.address || '-',\n record.city,\n record.state,\n ]\n .filter(item => item)\n .join(', ')}\n </span>\n </Space>\n </td>\n <td>{record.company || '-'}</td>\n </tr>\n )\n )\n ) : (\n <tr>\n <td>Referral Source(s)</td>\n <td>-</td>\n <td>-</td>\n <td>-</td>\n <td>-</td>\n </tr>\n )}\n {transactionData?.contract_leasing_agents?.length ? (\n transactionData.contract_leasing_agents.map(\n (record, index) => (\n <tr>\n {index === 0 ? (\n <td\n rowSpan={\n transactionData\n ?.contract_leasing_agents\n ?.length || undefined\n }\n >\n <b>Leasing Agents</b>\n </td>\n ) : (\n ''\n )}\n <td>{record.leasing_agent_name || '-'}</td>\n <td>\n <CommissionInfo\n commission_base={\n transactionData?.contract_price\n ?.marketedprice\n }\n commission_rate={\n record.commission_rate\n }\n commission_amount={\n record.commission_amount\n }\n ifEmptyText={'-'}\n />\n </td>\n <td>\n <Space direction=\"vertical\">\n <span>\n {record.telephone || '-'}\n </span>\n <span>{record.email || '-'}</span>\n <span> </span>\n <span>\n {[\n record.address || '-',\n record.city,\n record.state,\n ]\n .filter(item => item)\n .join(', ')}\n </span>\n </Space>\n </td>\n <td>{record.company || '-'}</td>\n </tr>\n )\n )\n ) : (\n <tr>\n <td>Leasing Agents</td>\n <td>-</td>\n <td>-</td>\n <td>-</td>\n <td>-</td>\n </tr>\n )}\n </tbody>\n </table>\n </Col>\n )}\n {!isRental && (\n <>\n <Col\n span={24}\n style={{ marginBottom: marginBottomHeaderTitle }}\n className=\"greensheet-div-header mt-5\"\n >\n <Typography.Title level={4}>\n {greensheet?.titleco_contact?.contact_id\n ? `${greensheet?.titleco_contact?.contact_role?.role} (${greensheet?.titleco_contact?.contactname})`\n : `Title Co.`}\n </Typography.Title>\n </Col>\n <Col\n className=\"pl-5 pr-5 greensheet-div-summary\"\n span={12}\n sm={24}\n md={24}\n lg={12}\n xl={12}\n >\n <Row gutter={rowFormViewGutter}>\n <Col span={colLabelSpan}>\n <Text strong>Company:</Text>\n </Col>\n <Col span={colValueSpan}>\n {greensheet?.titleco_company || '-'}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Closing Officer:</Text>\n </Col>\n <Col span={colValueSpan}>\n {greensheet?.titleco_closing_officer || '-'}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Address:</Text>\n </Col>\n <Col span={colValueSpan}>\n {greensheet?.titleco_address || '-'}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Fax:</Text>\n </Col>\n <Col span={colValueSpan}>\n {greensheet?.titleco_fax || '-'}\n </Col>\n </Row>\n </Col>\n <Col\n className=\"pl-5 pr-5 greensheet-div-summary\"\n span={12}\n sm={24}\n md={24}\n lg={12}\n xl={12}\n >\n <Row gutter={rowFormViewGutter}>\n <Col span={colLabelSpan}>\n <Text strong>E-mail:</Text>\n </Col>\n <Col span={colValueSpan}>\n {greensheet?.titleco_email || '-'}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Office #:</Text>\n </Col>\n <Col span={colValueSpan}>\n {greensheet?.titleco_office_num || '-'}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Mobile:</Text>\n </Col>\n <Col span={colValueSpan}>\n {greensheet?.titleco_mobile || '-'}\n </Col>\n </Row>\n </Col>\n </>\n )}\n {!isRental && (\n <>\n <Col\n span={24}\n style={{ marginBottom: marginBottomHeaderTitle }}\n className=\"greensheet-div-header mt-5\"\n >\n <Typography.Title level={4}>\n {greensheet?.lenderco_contact?.contact_id\n ? `${greensheet?.lenderco_contact?.contact_role?.role} (${greensheet?.lenderco_contact?.contactname})`\n : `Lender Co.`}\n </Typography.Title>\n </Col>\n <Col\n className=\"pl-5 pr-5 greensheet-div-summary\"\n span={12}\n sm={24}\n md={24}\n lg={12}\n xl={12}\n >\n <Row gutter={rowFormViewGutter}>\n <Col span={colLabelSpan}>\n <Text strong>Cash Deal:</Text>\n </Col>\n <Col span={colValueSpan}>\n {greensheet?.lenderco_cash_deal ? 'Yes' : 'No'}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Company:</Text>\n </Col>\n <Col span={colValueSpan}>\n {greensheet?.lenderco_company || '-'}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Loan Officer:</Text>\n </Col>\n <Col span={colValueSpan}>\n {greensheet?.lenderco_loan_officer || '-'}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Fax:</Text>\n </Col>\n <Col span={colValueSpan}>\n {greensheet?.titleco_fax || '-'}\n </Col>\n </Row>\n </Col>\n <Col\n className=\"pl-5 pr-5 greensheet-div-summary\"\n span={12}\n sm={24}\n md={24}\n lg={12}\n xl={12}\n >\n <Row gutter={rowFormViewGutter}>\n <Col span={colLabelSpan}>\n <Text strong>E-mail:</Text>\n </Col>\n <Col span={colValueSpan}>\n {greensheet?.lenderco_email || '-'}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Office #:</Text>\n </Col>\n <Col span={colValueSpan}>\n {greensheet?.lenderco_office_num || '-'}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Mobile:</Text>\n </Col>\n <Col span={colValueSpan}>\n {greensheet?.lenderco_mobile || '-'}\n </Col>\n </Row>\n </Col>\n </>\n )}\n {greensheet?.show_additional_info !== false ? (\n <>\n <Col\n span={24}\n style={{ marginBottom: marginBottomHeaderTitle }}\n className=\"greensheet-div-header mt-5\"\n >\n <Typography.Title level={4}>Additional Info</Typography.Title>\n </Col>\n <Col span={24} className=\"pl-5 pr-5\">\n <Row gutter={[64, 0]}>\n {transactionData?.contract_additional_info_categories?.map(\n (categoryObject, idx) => (\n <Col\n span={24}\n key={`additional_info_fields-${idx}`}\n className=\"mb-5\"\n >\n <Row gutter={rowFormViewGutter}>\n <Col span={24} className=\"\">\n <Row className=\"\">\n <Col\n span={12}\n className=\"text-title-secondary\"\n >\n {categoryObject.category?.trim() ||\n '-'}\n </Col>\n </Row>\n </Col>\n <Divider />\n <Col span={24}>\n <Row\n gutter={rowFormViewGutter}\n className=\"row-wrapper\"\n >\n {categoryObject.contract_additional_info_preferences?.map(\n (fieldObject, idx) => (\n <React.Fragment\n key={`contract_additional_info_preferences-${idx}`}\n >\n <Col\n span={colLabelSpan}\n className=\"ez-form-label\"\n >\n {fieldObject.newname ||\n '-'}\n :\n </Col>\n <Col\n span={colValueSpan}\n >\n <span>\n {fieldObject.field_value ? (\n fieldObject\n .contract_additional_info_field\n .class ===\n 'date' ? (\n <EZDateFormat\n value={\n fieldObject.field_value\n }\n />\n ) : fieldObject\n .contract_additional_info_field\n .class ===\n 'money' ? (\n <EZCurrencyFormat\n value={\n fieldObject.field_value\n }\n thousandSeparator={\n true\n }\n prefix={\n '$ '\n }\n displayType={\n 'text'\n }\n />\n ) : (\n fieldObject.field_value\n )\n ) : (\n '-'\n )}\n </span>\n </Col>\n </React.Fragment>\n )\n )}\n </Row>\n </Col>\n </Row>\n </Col>\n )\n )}\n </Row>\n </Col>\n </>\n ) : (\n <></>\n )}\n <Col\n span={24}\n style={{ marginBottom: marginBottomHeaderTitle }}\n className=\"greensheet-div-header mt-5\"\n >\n <Typography.Title level={4}>Notes</Typography.Title>\n </Col>\n <Col span={24} className=\"pl-5 pr-5\">\n {greensheet?.notes || '-'}\n </Col>\n </Row>\n </>\n ) : (\n <></>\n )}\n {isLoadingTransactionDetail && <EZOverlaySpinner style={{ height: '120px' }} />}\n </div>\n );\n};\n","// Core React libs import\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\n\n// Core ANTD and other libs import\nimport {\n CaretRightOutlined,\n ContainerOutlined,\n CopyOutlined,\n DeleteOutlined,\n DownOutlined,\n EditOutlined,\n FlagTwoTone,\n FolderOpenOutlined,\n InfoCircleFilled,\n InfoCircleOutlined,\n ReloadOutlined,\n SaveOutlined,\n StopOutlined,\n UndoOutlined,\n} from '@ant-design/icons';\nimport {\n BackTop,\n Badge,\n Button,\n Col,\n Collapse,\n Descriptions,\n Dropdown,\n Menu,\n Modal,\n Row,\n Select,\n Space,\n Tabs,\n Tag,\n Tooltip,\n Typography,\n} from 'antd';\nimport { Gutter } from 'antd/lib/grid/row';\nimport moment from 'moment';\n\n// EZ web-app APIs import\nimport {\n DetailType,\n archiveTransaction,\n deleteTransaction,\n duplicateTransaction,\n getTransactionDetail,\n getTransactionQuickStats,\n requestTransactionBackup,\n unArchiveTransaction,\n unDeleteTransaction,\n} from 'utils/ez_api/transactionAPIs';\n// Core EZ app level import\nimport { EZCopyable, EZOverlaySpinner } from 'components';\nimport { TransactionSalesType } from 'components/select/selectSaleType';\nimport { HomeContext } from 'context/EZContext';\nimport {\n TransactionDetailTabPane,\n TransactionDetailType,\n TransactionQuickStat,\n} from 'types/transaction';\nimport { ITabContentProps, TAB_CATEGORY, TransactionTabIcon } from 'types/webAppTab';\n\nimport { SubTab_Contacts } from './subTabs/SubTab_Contacts';\nimport { SubTab_ContractInfo } from './subTabs/SubTab_ContractInfo';\nimport { SubTab_Notes } from './subTabs/SubTab_Notes';\nimport { SubTab_Tasks } from './subTabs/SubTab_Tasks';\n// import { SubTab_PropertyDetail } from './subTabs/SubTab_PropertyDetail';\nimport { ModalEditTransactionInfo } from 'pages/tabs/transaction/modals';\nimport { AccountPermissionType } from 'types/account';\nimport { NODE_ENV, isDemoENV, isProductionENV } from 'utils/envUtil';\nimport { showNotification } from 'utils/notificationUtil';\nimport { getTransactionStatusCategory, isRentalProperty } from 'utils/webAppUtil';\nimport { SubTab_Changelogs } from './subTabs/SubTab_Changelogs';\nimport { SubTab_Documents } from './subTabs/SubTab_Documents';\nimport { SubTab_Emails } from './subTabs/SubTab_Emails';\nimport { SubTab_Greensheet } from './subTabs/SubTab_Greensheet';\n\nimport { HOTJAR_EVENT_TYPE, hotjarEvent } from 'utils/3rd_party_api/hotjarUtil';\nimport './ViewDetailTransaction.scss';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\ntype ItemTypeMod = ItemType & {\n hidden?: boolean;\n};\n\nconst { Text } = Typography;\nconst { Option } = Select;\nconst { TabPane } = Tabs;\nconst { Panel } = Collapse;\n\nconst _subTabs: TransactionDetailTabPane[] = [\n {\n key: 'ez_detail_general_information',\n label: 'Contract Information',\n tabContent: SubTab_ContractInfo,\n },\n {\n key: 'ez_detail_tasks',\n label: <span>Tasks</span>,\n tabContent: SubTab_Tasks,\n },\n {\n key: 'ez_detail_emails',\n label: <span>Emails</span>,\n tabContent: SubTab_Emails,\n },\n {\n key: 'ez_detail_contacts',\n label: 'Additional Contacts',\n tabContent: SubTab_Contacts,\n },\n {\n key: 'ez_detail_documents',\n label: <span>Documents and Files</span>,\n tabContent: SubTab_Documents,\n },\n {\n key: 'ez_detail_notes',\n label: 'Notes',\n tabContent: SubTab_Notes,\n },\n {\n key: 'ez_detail_greensheet',\n label: 'Green Sheet',\n tabContent: SubTab_Greensheet,\n },\n {\n key: 'ez_detail_changelog',\n label: 'Changelogs',\n tabContent: SubTab_Changelogs,\n },\n];\n\nconst DefaultTransactionQuickStat = {\n taskStatInfo: {\n incomplete: 0,\n complete: 0,\n total: 0,\n },\n documentStatInfo: {\n incomplete: 0,\n complete: 0,\n total: 0,\n },\n noteStatInfo: {\n total: 0,\n },\n};\n\nconst colLabelSpan = 6;\nconst colValueSpan = 18;\nconst rowFormViewGutter: [Gutter, Gutter] = [12, 4];\n\nconst ChangeSubTabLayoutElm: React.FC<{\n subTabLayout: string;\n setSubTabLayout: React.Dispatch<React.SetStateAction<string>>;\n}> = ({ subTabLayout, setSubTabLayout }) => {\n return (\n <Select\n defaultValue={subTabLayout}\n style={{ width: 200 }}\n onChange={val => setSubTabLayout(val)}\n >\n <Option value=\"tabs\">\n <span>\n <Text>View Layout: </Text>\n <Text strong>Tabs</Text>\n </span>\n </Option>\n <Option value=\"collapsible\">\n <span>\n <Text>View Layout: </Text>\n <Text strong>Collapsible</Text>\n </span>\n </Option>\n </Select>\n );\n};\n\nexport const generateTaskBadge = (transactionQuickStat: TransactionQuickStat) => {\n const hasIncompleteRecords =\n transactionQuickStat.taskStatInfo.complete < transactionQuickStat.taskStatInfo.total;\n\n return (\n <Tooltip\n title={`${transactionQuickStat.taskStatInfo.complete} of ${transactionQuickStat.taskStatInfo.total} tasks are complete`}\n >\n <Tag\n className={`tag-rounded ml-2 mr-0 ${\n hasIncompleteRecords && 'has-incomplete-records'\n }`}\n >\n {transactionQuickStat.taskStatInfo.complete} / \n {transactionQuickStat.taskStatInfo.total}\n </Tag>\n </Tooltip>\n );\n};\n\nexport const generateDocBadge = (transactionQuickStat: TransactionQuickStat) => {\n return (\n <Tag className={`tag-rounded ml-2 mr-0 `}>\n {transactionQuickStat.documentStatInfo.complete} / \n {transactionQuickStat.documentStatInfo.total}\n </Tag>\n );\n};\n\nexport const generateNoteBadge = (transactionQuickStat: TransactionQuickStat) => {\n return (\n // <></>\n <Tag className={`tag-rounded ml-2 mr-0 `}>{transactionQuickStat.noteStatInfo.total}</Tag>\n );\n};\n\nconst getTabsByPermission = (permission?: AccountPermissionType) => {\n let subTabs: TransactionDetailTabPane[] = _subTabs;\n if (permission) {\n if (!permission.tasks_toggle) {\n subTabs = subTabs.filter(t => t.key !== 'ez_detail_tasks');\n }\n\n if (!permission.contacts_toggle) {\n subTabs = subTabs.filter(t => t.key !== 'ez_detail_contacts');\n }\n\n if (!permission.documents_toggle) {\n subTabs = subTabs.filter(t => t.key !== 'ez_detail_documents');\n }\n\n if (!permission.notes_toggle) {\n subTabs = subTabs.filter(t => t.key !== 'ez_detail_notes');\n subTabs = subTabs.filter(t => t.key !== 'ez_detail_changelog');\n }\n\n return subTabs;\n } else {\n return [];\n }\n};\n\nconst ViewDetailTransaction: React.FC<ITabContentProps> = ({ addTab, tabKey, data }) => {\n const HomeCtx = useContext(HomeContext);\n const UserPermission = HomeCtx.userPermission;\n\n const [isRental, setIsRental] = useState<boolean>(false);\n\n // custom reload counter to force the sub tab to re-load the data\n const [manualReloadCount, setManualReloadCount] = useState<number>(0);\n\n // const subTabs = [..._subTabs];\n const subTabs = getTabsByPermission(UserPermission);\n const [subTabLayout, setSubTabLayout] = useState<string>('tabs');\n\n const [isLoadingTransactionDetail, setIsLoadingTransactionDetail] = useState<boolean>(false);\n const [isLoadingSubTabData, setIsLoadingSubTabData] = useState<boolean>(false);\n const [transactionData, setTransactionData] = useState<TransactionDetailType>(\n data as TransactionDetailType\n );\n const [transactionQuickStat, setTransactionQuickStat] = useState<TransactionQuickStat>(\n DefaultTransactionQuickStat\n );\n\n const [isModalEditTransactionInfoVisible, setIsModalEditTransactionInfoVisible] =\n useState(false);\n\n const _handleChangeSubTab = (subTab: string) => {\n // hit hotjar event every click sub-tab tasks\n if (subTab === 'ez_detail_tasks') {\n hotjarEvent(HOTJAR_EVENT_TYPE.CLICK_TRANSACTION_TASKS);\n return;\n }\n };\n const _reloadTransactionDetail = async (\n showLoadingProgress: boolean = false,\n detailType: DetailType = 'all'\n ) => {\n if (showLoadingProgress) {\n setIsLoadingTransactionDetail(true);\n }\n return getTransactionDetail(transactionData.contract_id, detailType)\n .then(resp => {\n if (resp.data) {\n setTransactionData({ ...transactionData, ...resp.data });\n setIsRental(isRentalProperty(resp.data?.status_id));\n }\n })\n .catch(() => {\n showNotification('error', 'Error happened while reloading the transaction data.');\n })\n .finally(() => {\n if (showLoadingProgress) {\n setIsLoadingTransactionDetail(false);\n }\n });\n };\n\n const _reloadTransactionStat = (contract_id?: number) => {\n if (!contract_id) return;\n\n getTransactionQuickStats(contract_id).then(resp => {\n if (resp.data) {\n setTransactionQuickStat({\n taskStatInfo: {\n incomplete: resp.data?.incomplete_task_count || 0,\n complete: resp.data?.complete_task_count || 0,\n total:\n resp.data?.complete_task_count + resp.data?.incomplete_task_count || 0,\n },\n documentStatInfo: {\n incomplete: resp.data?.incomplete_doc_count || 0,\n complete: resp.data?.complete_doc_count || 0,\n total: resp.data?.complete_doc_count + resp.data?.incomplete_doc_count || 0,\n },\n noteStatInfo: {\n total: resp.data?.email_msg_count + resp.data?.contract_note_count || 0,\n },\n });\n }\n });\n };\n\n const _doActionTaskMenu = (menuKey: string) => {\n switch (menuKey) {\n case 'backup_transaction':\n const backupConfirmationModal = Modal.confirm({\n title: `Confirmation to back up`,\n width: 600,\n content: (\n <>\n <p>\n Are you sure to backup the transaction:{' '}\n <b>{transactionData.address}</b>?\n </p>\n <br />\n <p>\n *Important to note that:\n <ul>\n <li>\n The backup link will be sent to the email(s):{' '}\n <b>{HomeCtx?.userInfo?.email}</b> and the backup files will\n be automatically deleted after 2 weeks.\n </li>\n <li>\n The email might land in your Spam folder. Please make sure\n to double-check the folder.\n </li>\n </ul>\n </p>\n </>\n ),\n okText: 'Back up',\n onOk: () => {\n backupConfirmationModal.update({\n closable: true,\n maskClosable: true,\n okButtonProps: {\n disabled: true,\n },\n okText: 'Requesting...',\n });\n return requestTransactionBackup(transactionData.contract_id).then(() => {\n showNotification(\n 'success',\n `You have successfully requested to backup the transaction: ${transactionData.address}`\n );\n return true;\n });\n },\n closable: true,\n maskClosable: true,\n });\n break;\n case 'duplicate_transaction':\n const duplicateConfirmationModal = Modal.confirm({\n title: `Duplicate Confirmation`,\n width: 600,\n content: (\n <>\n <p>\n Are you sure to duplicate the transaction:{' '}\n <b>{transactionData.address}</b>?\n </p>\n </>\n ),\n okText: 'Duplicate',\n onOk: () => {\n duplicateConfirmationModal.update({\n closable: false,\n maskClosable: false,\n okButtonProps: {\n disabled: true,\n },\n okText: 'Duplicating...',\n });\n\n return duplicateTransaction(transactionData.contract_id).then(\n (res: any) => {\n const subTabKey = null;\n HomeCtx.setActiveTabByButton(true);\n\n showNotification(\n 'success',\n `You have successfully duplicated the transaction: ${transactionData.address}`\n );\n\n addTab(\n {\n title: res.data.address,\n key: '-', // this will be overridden by the key generator function inside this addTab function\n tabIcon: <TransactionTabIcon />,\n content: ViewDetailTransaction,\n closeable: true,\n tooltip: res.data.address,\n tabCategory: TAB_CATEGORY.TRANSACTION,\n isMainMenu: false,\n recordId: res.data.contract_id,\n data: { ...res.data, subTabKey },\n },\n true\n );\n\n return true;\n }\n );\n },\n closable: true,\n maskClosable: true,\n });\n break;\n case 'archive_transaction':\n const archiveConfirmationModal = Modal.confirm({\n title: `Archive Confirmation`,\n width: 600,\n content: (\n <>\n Are you sure to archive the transaction:{' '}\n <b>{transactionData.address}</b>?\n </>\n ),\n okText: 'Archive',\n onOk: () => {\n archiveConfirmationModal.update({\n closable: true,\n maskClosable: true,\n okButtonProps: {\n disabled: true,\n },\n okText: 'Archiving...',\n });\n return archiveTransaction(transactionData.contract_id).then(() => {\n HomeCtx.closeTab?.(tabKey);\n showNotification(\n 'success',\n `You have successfully archived the transaction: ${transactionData.address}`\n );\n return true;\n });\n },\n closable: true,\n maskClosable: true,\n });\n break;\n case 'unarchive_transaction':\n const unArchiveTransactionModal = Modal.confirm({\n title: `Unarchive Confirmation`,\n width: 600,\n content: (\n <>\n Are you sure to unarchive the transaction:{' '}\n <b>{transactionData.address}</b>?\n </>\n ),\n okText: 'Unarchive',\n onOk: () => {\n unArchiveTransactionModal.update({\n closable: true,\n maskClosable: true,\n okButtonProps: {\n disabled: true,\n },\n okText: 'Unarchiving...',\n });\n return unArchiveTransaction(transactionData.contract_id).then(() => {\n HomeCtx.closeTab?.(tabKey);\n showNotification(\n 'success',\n `You have successfully unarchived the transaction: ${transactionData.address}`\n );\n return true;\n });\n },\n closable: true,\n maskClosable: true,\n });\n break;\n case 'undelete_transaction':\n const undeleteConfirmationModal = Modal.confirm({\n title: `Restore Confirmation`,\n width: 600,\n content: (\n <>\n Are you sure to restore the transaction:{' '}\n <b>{transactionData.address}</b>?\n </>\n ),\n okText: 'Restore',\n onOk: () => {\n undeleteConfirmationModal.update({\n closable: true,\n maskClosable: true,\n okButtonProps: {\n disabled: true,\n },\n okText: 'Restoring...',\n });\n return unDeleteTransaction(transactionData.contract_id).then(() => {\n HomeCtx.closeTab?.(tabKey);\n showNotification(\n 'success',\n `You have successfully Restored the transaction: ${transactionData.address}`\n );\n return true;\n });\n },\n closable: true,\n maskClosable: true,\n });\n break;\n case 'delete_transaction':\n const deleteConfirmationModal = Modal.confirm({\n title: `Delete Confirmation`,\n width: 600,\n content: (\n <>\n Are you sure to delete the transaction: <b>{transactionData.address}</b>\n ?\n </>\n ),\n okText: 'Delete',\n onOk: () => {\n deleteConfirmationModal.update({\n closable: true,\n maskClosable: true,\n okButtonProps: {\n disabled: true,\n },\n okText: 'Deleting...',\n });\n return deleteTransaction(transactionData.contract_id).then(() => {\n HomeCtx.closeTab?.(tabKey);\n showNotification(\n 'success',\n `You have successfully deleted the transaction: ${transactionData.address}`\n );\n return true;\n });\n },\n closable: true,\n maskClosable: true,\n });\n break;\n default:\n break;\n }\n };\n\n const _getTransactionEmailAddress = () => {\n return `${transactionData.account_id}_${transactionData.contract_id}${\n isProductionENV() ? '' : '+' + NODE_ENV\n }@${isProductionENV() ? '' : 'mailv2appdev.'}ezcoordinator.com`;\n };\n\n useEffect(() => {\n _reloadTransactionDetail(true, 'basic_info');\n _reloadTransactionStat(transactionData.contract_id);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const isDeleted = useMemo(() => {\n return transactionData?.active === false || transactionData?.active === 0;\n }, [transactionData]);\n const isArchived = useMemo(() => {\n return transactionData?.is_archived === true;\n }, [transactionData]);\n\n const moreActions: ItemTypeMod[] = [\n {\n label: 'Duplicate Transaction',\n key: 'duplicate_transaction',\n icon: <CopyOutlined />,\n },\n {\n type: 'divider',\n },\n {\n label: 'Backup Transaction',\n key: 'backup_transaction',\n icon: <SaveOutlined />,\n },\n {\n label: 'Unarchive Transaction',\n key: 'unarchive_transaction',\n hidden: !isArchived,\n icon: <FolderOpenOutlined />,\n },\n {\n label: 'Archive Transaction',\n key: 'archive_transaction',\n hidden: isArchived,\n icon: <ContainerOutlined />,\n },\n {\n type: 'divider',\n },\n {\n label: 'Restore Transaction',\n key: 'undelete_transaction',\n hidden: !isDeleted,\n icon: <UndoOutlined />,\n },\n {\n label: 'Delete Transaction',\n key: 'delete_transaction',\n hidden: isDeleted,\n danger: true,\n icon: <DeleteOutlined style={{ color: 'red' }} />,\n },\n ];\n\n return (\n <div\n className=\"ez-tab-transaction-detail\"\n id={`ez-tab-transaction-detail-${transactionData.contract_id}`}\n >\n <>\n <ModalEditTransactionInfo\n transactionData={transactionData}\n setTransactionData={setTransactionData}\n isModalVisible={isModalEditTransactionInfoVisible}\n setIsModalVisible={setIsModalEditTransactionInfoVisible}\n reloadTransactionDetail={_reloadTransactionDetail}\n />\n </>\n {isDeleted && (\n <div\n style={{\n background: '#e6f4ff',\n border: '1px solid #91caff',\n borderRadius: '8px',\n display: 'flex',\n padding: '12px',\n gap: '12px',\n marginBottom: '24px',\n placeItems: 'center',\n }}\n >\n <InfoCircleFilled style={{ fontSize: '24px', color: '#1890ff' }} />\n <span style={{ fontWeight: 'bold', fontSize: '16px' }}>\n Changes are not allowed on a deleted transaction. Restore the transaction to\n allow making changes again\n </span>\n </div>\n )}\n {isArchived && (\n <div\n style={{\n background: '#e6f4ff',\n border: '1px solid #91caff',\n borderRadius: '8px',\n display: 'flex',\n padding: '12px',\n gap: '12px',\n marginBottom: '24px',\n placeItems: 'center',\n }}\n >\n <InfoCircleFilled style={{ fontSize: '24px', color: '#1890ff' }} />\n <span style={{ fontWeight: 'bold', fontSize: '16px' }}>\n Changes are not allowed on an archived transaction. Unarchive the\n transaction to allow making changes again\n </span>\n </div>\n )}\n <Badge.Ribbon\n className={` ${\n transactionData.contract_flag && transactionData.flag_id === 1 ? 'no-flag' : ''\n } ${isLoadingTransactionDetail && 'loading'}`}\n text={<span style={{ minWidth: '10px', display: 'inline-block' }}> </span>}\n color={\n transactionData.contract_flag && transactionData.flag_id !== 1\n ? transactionData.contract_flag.flag_color\n : 'transparent'\n }\n placement=\"start\"\n >\n {isLoadingTransactionDetail && <EZOverlaySpinner />}\n <div className=\"mb-4 ez-sub-content-wrapper ez-sub-content-header-section\">\n <div>\n <Row>\n <Col span={24}>\n <Descriptions\n title={\n <>{transactionData.address}</> || (\n <>\n <Text type=\"secondary\" italic>\n Address is empty\n </Text>\n </>\n )\n }\n bordered={true}\n column={1}\n size=\"small\"\n layout=\"horizontal\"\n extra={\n <>\n <Button\n className=\"ez-action-btn\"\n icon={<ReloadOutlined />}\n // size=\"small\"\n onClick={() => {\n _reloadTransactionDetail(true, 'basic_info');\n _reloadTransactionStat(\n transactionData.contract_id\n );\n setManualReloadCount(manualReloadCount + 1);\n }}\n loading={isLoadingTransactionDetail}\n >\n Reload\n </Button>\n {UserPermission && UserPermission.toggle === 2 && (\n <Button\n className=\"mr-3 ml-3 ez-action-btn\"\n icon={<EditOutlined />}\n // size=\"small\"\n disabled={isArchived || isDeleted}\n onClick={() =>\n setIsModalEditTransactionInfoVisible(true)\n }\n >\n Edit Basic Information\n </Button>\n )}\n {UserPermission && UserPermission.toggle === 2 && (\n <Dropdown\n trigger={['click']}\n className=\"ez-action-btn\"\n placement=\"bottomRight\"\n overlay={\n <Menu\n onClick={({ key }) =>\n _doActionTaskMenu(key)\n }\n items={moreActions}\n />\n }\n >\n <Button>\n <Space>\n More actions\n <DownOutlined />\n </Space>\n </Button>\n </Dropdown>\n )}\n </>\n }\n ></Descriptions>\n </Col>\n </Row>\n <Row gutter={24} className=\"mt-2\">\n <Col span={12} sm={24} md={24} lg={12} xl={12}>\n <Row gutter={rowFormViewGutter}>\n <Col span={colLabelSpan}>\n <Text strong>Address</Text>\n </Col>\n <Col span={colValueSpan}>\n <div className=\"\">\n {transactionData.address || (\n <Text type=\"secondary\" italic>\n Address is empty\n </Text>\n )}\n </div>\n <div className=\"\">\n {transactionData.city || (\n <Text type=\"secondary\" italic>\n City is empty\n </Text>\n )}\n ,{' '}\n {transactionData.state || (\n <Text type=\"secondary\" italic>\n State is empty\n </Text>\n )}\n ,{' '}\n {transactionData.zip || (\n <Text type=\"secondary\" italic>\n ZIP is empty\n </Text>\n )}\n <EZCopyable\n text={`${\n transactionData.address || 'Address is empty'\n }\\n${transactionData.city || 'City is empty'}, ${\n transactionData.state || 'State is empty'\n }, ${transactionData.zip || 'ZIP is empty'}`}\n className=\"ml-1\"\n />\n </div>\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Status</Text>\n </Col>\n <Col span={colValueSpan}>\n {getTransactionStatusCategory(transactionData.status_id)}\n <Badge className=\"mr-1 ml-2\" color={'black'} />\n <Button\n className={`ez-btn-contract-status ez-tr-status-${transactionData.status_id}`}\n type=\"text\"\n shape=\"round\"\n style={{\n backgroundColor: `${transactionData.contract_status?.color}`,\n color: 'white',\n }}\n size=\"small\"\n >{`${transactionData.contract_status?.status}`}</Button>\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>MLS</Text>\n </Col>\n <Col span={colValueSpan}>{transactionData.mis || '-'}</Col>\n <Col span={colLabelSpan}>\n <Text strong>ESCROW</Text>\n </Col>\n <Col span={colValueSpan}>{transactionData.escrow || '-'}</Col>\n <Col span={colLabelSpan}>\n <Text strong>Type</Text>\n </Col>\n <Col span={colValueSpan}>\n {transactionData.contract_property_type?.type_name || '-'}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Sales Type</Text>\n </Col>\n <Col span={colValueSpan}>\n <TransactionSalesType\n contract_id={transactionData.contract_id}\n sale_types_id={transactionData.sale_types_id}\n />\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Flag</Text>\n </Col>\n <Col span={colValueSpan}>\n {transactionData.flag_id !== 1 ? (\n <FlagTwoTone\n twoToneColor={\n transactionData.contract_flag?.flag_color\n }\n />\n ) : (\n <StopOutlined />\n )}\n <span className=\"ml-2\">\n {transactionData.contract_flag?.flag}\n </span>\n </Col>\n </Row>\n </Col>\n <Col span={12} sm={24} md={24} lg={12} xl={12}>\n <Row gutter={rowFormViewGutter}>\n {!isDemoENV() && (\n <>\n <Col span={colLabelSpan}>\n <Text strong>Email Address</Text>\n </Col>\n <Col span={colValueSpan}>\n <div>\n <Text code>\n {_getTransactionEmailAddress()}\n </Text>\n <EZCopyable\n className=\"ml-1\"\n text={_getTransactionEmailAddress()}\n />\n </div>\n {!isDemoENV() && (\n <div>\n <Text type=\"secondary\">\n <InfoCircleOutlined /> Any message,\n notes and docs sent to this address will\n be synced to the respective transaction\n record\n </Text>\n </div>\n )}\n </Col>\n </>\n )}\n <Col span={colLabelSpan}>\n <Text strong>Added By</Text>\n </Col>\n <Col span={colValueSpan}>\n <span className=\"mr-1\">\n {transactionData.account?.fullname || '-'}\n </span>\n <span>\n On{' '}\n {transactionData.date_posted\n ? moment(transactionData.date_posted).format(\n 'MMM Do, YYYY hh:mma'\n )\n : '-'}\n </span>\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Assigned To</Text>\n </Col>\n <Col span={colValueSpan}>\n {transactionData.assigned_accounts?.length ? (\n <ul style={{ paddingLeft: 14 }}>\n {transactionData.assigned_accounts.map(account => (\n <li>\n {account.fullname}\n {/* <Text code className=\"mb-2 ml-2\">\n {account.accountrole?.accountrole}\n </Text> */}\n <Tag className=\"mb-1 ml-2 tag-rounded\">\n {account.accountrole?.accountrole}\n </Tag>\n </li>\n ))}\n </ul>\n ) : (\n '-'\n )}\n </Col>\n </Row>\n </Col>\n </Row>\n </div>\n </div>\n </Badge.Ribbon>\n <div className=\"mb-4 ez-sub-content-wrapper ez-sub-content-section\">\n <Row>\n <Col span={24}>\n {isLoadingSubTabData && <EZOverlaySpinner />}\n {subTabLayout === 'tabs' && (\n <Tabs\n id=\"ez-tab-transaction-detail-tab-wrapper-id\"\n className=\"ez-tab-transaction-detail-tab-wrapper\"\n style={{ marginBottom: 32 }}\n defaultActiveKey={data?.subTabKey || subTabs[0].key}\n tabBarExtraContent={\n <Row\n style={{\n paddingRight: '24px',\n paddingBottom: '2px',\n }}\n >\n <ChangeSubTabLayoutElm\n subTabLayout={subTabLayout}\n setSubTabLayout={setSubTabLayout}\n />\n </Row>\n }\n onChange={activeKey => {\n _handleChangeSubTab(activeKey);\n // setActiveTabKey(activeKey);\n if (window.scrollY >= 400) window.scrollTo(0, 387);\n }}\n >\n {subTabs.map(subTab => (\n <TabPane\n tab={\n <>\n {subTab.label}\n <span>\n {subTab.key === 'ez_detail_tasks'\n ? generateTaskBadge(transactionQuickStat)\n : subTab.key === 'ez_detail_documents'\n ? generateDocBadge(transactionQuickStat)\n : subTab.key === 'ez_detail_notes'\n ? generateNoteBadge(transactionQuickStat)\n : ''}\n </span>\n </>\n }\n key={subTab.key}\n >\n <subTab.tabContent\n subTabs={subTabs}\n currentTab={subTab}\n isTransactionDeleted={isDeleted || isArchived}\n contractID={transactionData.contract_id}\n contractAddress={transactionData.address}\n isRentalProperty={isRental}\n manualReloadCount={manualReloadCount}\n isLoadingSubTabData={isLoadingSubTabData}\n setIsLoadingSubTabData={setIsLoadingSubTabData}\n reloadTransactionStat={_reloadTransactionStat}\n />\n </TabPane>\n ))}\n </Tabs>\n )}\n {subTabLayout === 'collapsible' && (\n <>\n <Row\n style={{\n position: 'absolute',\n right: '24px',\n paddingTop: '4px',\n zIndex: 80,\n }}\n >\n <Col span={24}>\n <ChangeSubTabLayoutElm\n subTabLayout={subTabLayout}\n setSubTabLayout={setSubTabLayout}\n />\n </Col>\n </Row>{' '}\n <Collapse\n defaultActiveKey={subTabs[0].key}\n ghost\n expandIcon={({ isActive }) => (\n <CaretRightOutlined rotate={isActive ? 90 : 0} />\n )}\n onChange={activeKey => {}}\n >\n {subTabs.map(subTab => (\n <Panel header={subTab.label} key={subTab.key}>\n <subTab.tabContent\n subTabs={subTabs}\n currentTab={subTab}\n isTransactionDeleted={isDeleted || isArchived}\n contractID={transactionData.contract_id}\n contractAddress={transactionData.address}\n isRentalProperty={isRental}\n manualReloadCount={manualReloadCount}\n isLoadingSubTabData={isLoadingSubTabData}\n setIsLoadingSubTabData={setIsLoadingSubTabData}\n reloadTransactionStat={_reloadTransactionStat}\n />\n </Panel>\n ))}\n </Collapse>\n </>\n )}\n </Col>\n <BackTop />\n </Row>\n </div>\n </div>\n );\n};\n\nexport default ViewDetailTransaction;\n","// Core React libraries import\nimport React from 'react';\n\n// Core ANTD and 3rdparty libraries import\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\nimport { TransactionDetailTabProps } from 'types/transaction';\n// EZ web-app components import\nimport { AppPageTasks, TASK_EMBEDDED_TYPE } from 'components/appPage/tasks';\n\n// EZ web-app styles and assets import\n\nexport const SubTab_Tasks: React.FC<TransactionDetailTabProps> = ({\n contractID,\n contractAddress,\n manualReloadCount,\n isTransactionDeleted,\n reloadTransactionStat,\n}) => {\n return (\n <div className=\"ez_detail_tasks\">\n <AppPageTasks\n pageType={TASK_EMBEDDED_TYPE.TRANSACTION_DETAIL}\n contractID={contractID}\n isTransactionDeleted={isTransactionDeleted}\n contractAddress={contractAddress}\n manualReloadCount={manualReloadCount}\n reloadTransactionStat={reloadTransactionStat}\n />\n </div>\n );\n};\n","// Core React libraries import\nimport React from 'react';\n\n// Core ANTD and 3rdparty libraries import\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\nimport { TransactionDetailTabProps } from 'types/transaction';\n// EZ web-app components import\nimport { AppPageDocuments, DOC_EMBEDDED_TYPE } from 'components/appPage/documents';\n\n// EZ web-app styles and assets import\n\nexport const SubTab_Documents: React.FC<TransactionDetailTabProps> = ({\n contractID,\n manualReloadCount,\n isTransactionDeleted,\n reloadTransactionStat,\n}) => {\n return (\n <div className=\"ez_detail_documents\">\n <AppPageDocuments\n pageType={DOC_EMBEDDED_TYPE.TRANSACTION_DETAIL}\n isTransactionDeleted={isTransactionDeleted}\n contractID={contractID}\n manualReloadCount={manualReloadCount}\n reloadTransactionStat={reloadTransactionStat}\n />\n </div>\n );\n};\n","// Core React libraries import\nimport React from 'react';\n\n// Core ANTD and 3rdparty libraries import\n\n// EZ web-app utils import\n// EZ web-app APIs importtransactionNoteAPIs';\n// EZ web-app types import\nimport { TransactionDetailTabProps } from 'types/transaction';\n// EZ web-app components import\nimport { AppPageNotes, NOTE_EMBEDDED_TYPE } from 'components/appPage/notes';\n\n// EZ web-app styles and assets import\n\nexport const SubTab_Notes: React.FC<TransactionDetailTabProps> = ({\n contractID,\n manualReloadCount,\n isTransactionDeleted,\n reloadTransactionStat,\n}) => {\n return (\n <div className=\"ez_detail_notes\">\n <AppPageNotes\n pageType={NOTE_EMBEDDED_TYPE.TRANSACTION_DETAIL}\n contractID={contractID}\n isTransactionDeleted={isTransactionDeleted}\n manualReloadCount={manualReloadCount}\n reloadTransactionStat={reloadTransactionStat}\n />\n </div>\n );\n};\n","import qs from 'qs';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nimport { EmailSignatureType } from 'types/emailSignature';\nimport { DataTableQueryType } from 'types/base';\n\nexport const getEmailSignatures = (params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `email-signatures` + (params ? `?${params}` : ''),\n });\n};\n\nexport const addNewEmailSignature = (record: Partial<EmailSignatureType>) => {\n Mixpanel.track('app.add_email_signature', { signature_name: record?.signature_name });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `email-signatures`,\n data: record,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const editEmailSignature = (record: Partial<EmailSignatureType>) => {\n Mixpanel.track('app.edit_email_signature', {\n email_signature_id: record.email_signature_id,\n action: 'edit',\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `email-signatures/${record.email_signature_id}`,\n data: record,\n });\n};\n\nexport const deleteEmailSignature = (email_signature_id: number) => {\n Mixpanel.track('app.delete_email_signature', {\n email_signature_id: email_signature_id,\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `email-signatures/${email_signature_id}`,\n });\n};\n","import { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nexport const getLoggedAccountData = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'me',\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getMyPermission = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'me/permission',\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getSuperAdminInfo = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'superadmin-info',\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateMyAccountData = (payload: any) => {\n Mixpanel.track('app.update_myaccount_data', {});\n\n return APIRequest({\n method: 'put',\n url: apiUrl + 'me',\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const changePassword = (payload: any) => {\n Mixpanel.track('app.change_password', {});\n\n return APIRequest({\n method: 'put',\n url: apiUrl + 'change-password',\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n","import { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nexport const getTransactionNotes = (contract_id: number, params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `transaction/${contract_id}/notes` + (params ? `?${params}` : ''),\n });\n};\n\nexport const getTransactionEmailNotes = (contract_id: number, params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `transaction/${contract_id}/email-notes` + (params ? `?${params}` : ''),\n });\n};\n\nexport const updateContactNote = (contract_id: number, notes: string, note_id?: number) => {\n if (note_id) {\n Mixpanel.track('app.edit_transaction', {\n contract_id,\n sub_tab: 'notes',\n action: 'edit',\n });\n } else {\n Mixpanel.track('app.edit_transaction', {\n contract_id,\n sub_tab: 'notes',\n action: 'add',\n });\n }\n\n return APIRequest({\n method: note_id ? 'put' : 'post',\n url:\n apiUrl +\n (note_id\n ? `transaction/${contract_id}/note/${note_id}`\n : `transaction/${contract_id}/notes`),\n data: {\n notes: notes,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteContactNote = (contract_id: number, note_id: number) => {\n Mixpanel.track('app.edit_transaction', {\n contract_id,\n sub_tab: 'notes',\n action: 'delete',\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `transaction/${contract_id}/note/${note_id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteContactEmailNote = (contract_id: number, m_id: number) => {\n Mixpanel.track('app.edit_transaction', {\n contract_id,\n sub_tab: 'email-notes',\n action: 'delete',\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `transaction/${contract_id}/email-note/${m_id}`,\n useDefaultErrorNotif: true,\n });\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { Select } from 'antd';\nimport { AccountCompactDataType } from 'types/account';\nimport { AddressbookType } from 'types/contact';\nimport { ContactRoleType } from 'types/transaction';\nimport { getContactRoles } from 'utils/ez_api/contactAPIs';\nimport { getAllTeamMembers } from 'utils/ez_api/memberAPIs';\n\nimport type { DefaultOptionType, SelectProps } from 'antd/es/select';\n\ntype EZSelectEmailRecipientProps = SelectProps & {\n showTransactionOptions?: boolean;\n showMe?: boolean;\n};\n\nconst _onSelectRecipient: SelectProps['onSelect'] = (value: string, option: any) => {\n // console.log(this);\n return false;\n};\n\nconst _onChange: SelectProps['onChange'] = (value: string, option: any) => {\n // console.log(value, option);\n};\n\nconst _onKeyDown = (e: React.KeyboardEvent) => {};\n\nexport const DefaultMeStrOptions: string[] = ['{{ Me }}'];\nexport const DefaultMeOptions: {\n value: string;\n label: string;\n}[] = DefaultMeStrOptions.map(v => ({\n value: v,\n label: v,\n}));\n\nexport const DefaultTransactionStrOptions_Listing: string[] = [\n '{{ Buyers }}',\n \"{{ Buyer's agents }}\",\n '{{ Sellers }}',\n \"{{ Seller's agents }}\",\n];\nexport const DefaultTransactionStrOptions_Rental: string[] = [\n '{{ Tenants }}',\n '{{ Referral Source }}',\n '{{ Landlord }}',\n '{{ Leasing agents }}',\n];\n\nexport const DefaultTransactionOptions: SelectProps['options'] = [\n {\n label: 'Listing',\n options: DefaultTransactionStrOptions_Listing.map(v => ({\n value: v,\n label: v,\n })),\n },\n {\n label: 'Rental',\n options: DefaultTransactionStrOptions_Rental.map(v => ({\n value: v,\n label: v,\n })),\n },\n];\n\nexport const DefaultAdditionalContactStrOptions_Roles: string = 'ROLE_ID_';\n\nlet hasTeamMemberAPIBeenCalled = false;\nlet teamMembers: AccountCompactDataType[] = [];\nlet contactRoles: ContactRoleType[] = [];\n\nexport const EZSelectEmailRecipient: React.FC<EZSelectEmailRecipientProps> = ({\n showTransactionOptions,\n showMe,\n ...props\n}) => {\n const opts: SelectProps['options'] = [];\n\n if (showMe) {\n opts.push(...DefaultMeOptions);\n }\n\n if (showTransactionOptions) {\n opts.push(...DefaultTransactionOptions);\n }\n\n const [selectOpts, setSelectOpts] = useState<DefaultOptionType[]>(opts);\n\n const _fetchTeamMembers = () => {\n return new Promise<DefaultOptionType>((resolve, reject) => {\n if (hasTeamMemberAPIBeenCalled) {\n resolve({\n label: 'Team Members',\n options: teamMembers.map(member => ({\n label: `${member.fullname} - ${member.email}`,\n value: member.email,\n })),\n });\n } else {\n getAllTeamMembers()\n .then(({ data }) => {\n hasTeamMemberAPIBeenCalled = true;\n teamMembers = (data as AccountCompactDataType[]) || [];\n resolve({\n label: 'Team Members',\n options: teamMembers.map(member => ({\n label: member.fullname,\n value: member.email,\n })),\n });\n })\n .catch(error => {\n reject(error);\n });\n }\n });\n };\n\n const _fetchContactRoles = () => {\n return new Promise<DefaultOptionType>((resolve, reject) => {\n getContactRoles()\n .then(({ data }) => {\n contactRoles = (data as ContactRoleType[]) || [];\n resolve({\n label: 'Additional Contact by Roles',\n options: contactRoles.map(el => ({\n label: `{{ ${el.role} }}`,\n value: `ROLE_ID_${el.role_id}`,\n groupLabel: 'Additional Contact by Roles',\n })),\n });\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n useEffect(() => {\n Promise.all([_fetchTeamMembers(), _fetchContactRoles()])\n .then(results => {\n setSelectOpts([...opts, ...results]);\n })\n .catch(error => {\n // Handle catch error\n });\n }, []);\n\n return (\n <Select<any, any>\n mode=\"tags\"\n style={{ width: '100%' }}\n placeholder=\"Choose from the list or enter the email address(es)\"\n notFoundContent={''}\n options={selectOpts}\n allowClear\n {...props}\n ></Select>\n );\n};\n","// Core React libraries import\nimport React, {\n forwardRef,\n ReactText,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Input } from 'antd';\nimport type { TablePaginationConfig } from 'antd/es/table';\nimport type { FilterValue, SorterResult, SortOrder } from 'antd/es/table/interface';\nimport qs from 'qs';\nimport type { ActionType, ProTableProps } from '@ant-design/pro-components';\nimport { ProTable } from '@ant-design/pro-components';\nimport debounce from 'lodash/debounce';\n\n// EZ types import\nimport { ITablePaginationConfig } from 'types/base';\n// EZ utils import\nimport { showNotification } from 'utils/notificationUtil';\nimport { cloneDeep } from 'lodash';\n\nconst { Search } = Input;\n\nexport interface IAntdTablePaginationParams {\n pagination?: TablePaginationConfig;\n sorter?: SorterResult<any> | SorterResult<any>[];\n total?: number;\n sortField?: string;\n sortOrder?: string;\n}\n\nexport interface IDataType {\n name: string;\n key: string;\n}\n\nexport interface ITableQueryParams {\n searchKeyword: string;\n orderParams: [string, string][];\n whereParams: any;\n whereFilterParams: any;\n resetPagination?: boolean;\n silentLoading?: boolean;\n}\n\nexport type IOnChangeCallbackProps = (\n data: any[],\n pagination: ITablePaginationConfig,\n replaceTableRecords?: (data: any[]) => void\n) => void;\n\nexport interface IAntdProTablePropsExtended {\n fetchData?: (params: string) => Promise<any>;\n onChangeCallback?: IOnChangeCallbackProps;\n queryParams?: ITableQueryParams;\n toolBarComponents?: React.ReactNode[];\n disableNativeSearch?: boolean;\n\n // keyColumnName: string;\n}\n\nexport type IAntdProTableProps = ProTableProps<any, any, any> & IAntdProTablePropsExtended;\n\nexport type forwardRefEZTableProps = {\n modifyData: (record: any, idValue: React.Key) => void;\n deleteByKey: (idValue: React.Key) => void;\n\n replaceRecords: (newData: any[]) => void;\n\n reload: () => void;\n};\n\nexport const EZTable = React.forwardRef<forwardRefEZTableProps | undefined, IAntdProTableProps>(\n (\n {\n fetchData,\n queryParams,\n onChangeCallback,\n toolBarComponents,\n disableNativeSearch = false,\n ...props\n },\n ref\n ) => {\n const EZTableRef = useRef<ActionType>();\n\n const [data, setData] = useState<any[]>([]);\n const [loading, setLoading] = useState(false);\n\n const useAjax = fetchData ? true : false;\n\n const [pagination, setPagination] = useState<ITablePaginationConfig>(\n Object.assign(\n {\n current: 1,\n pageSize: 20,\n position: ['topLeft', 'bottomLeft'],\n pageSizeOptions: [10, 20],\n },\n { ...props.pagination }\n )\n );\n const [keyword, setKeyword] = useState<string>('');\n const [sort, setSort] = useState<[string, string]>();\n\n const _callFetchData = (params: IAntdTablePaginationParams = {}, keyword?: string) => {\n if (!useAjax) return;\n if (loading) return;\n if (fetchData) {\n setLoading(true);\n const arrOrderParams: [string, string][] = queryParams?.orderParams?.length\n ? cloneDeep(queryParams.orderParams)\n : [];\n if (params.sortOrder && params.sortField) {\n arrOrderParams.splice(0, arrOrderParams.length);\n arrOrderParams.push([\n params.sortField,\n params.sortOrder === 'descend' ? 'desc' : 'asc',\n ]);\n }\n fetchData(\n qs.stringify({\n page: params.pagination?.current,\n pageSize: params.pagination?.pageSize,\n keyword: disableNativeSearch ? queryParams?.searchKeyword : keyword,\n order: arrOrderParams,\n where: queryParams?.whereParams,\n whereFilter: queryParams?.whereFilterParams,\n WebPaginationSetting: params.pagination,\n })\n )\n .then(response => {\n if (response?.pagination) {\n const newTotal = response?.pagination?.total || 0;\n const newTotalFiltered = response?.pagination?.totalFiltered;\n setData(response.data);\n setPagination({\n ...params.pagination,\n total: newTotal,\n totalFiltered: newTotalFiltered,\n });\n if (onChangeCallback) {\n onChangeCallback(response.data || [], {\n ...params.pagination,\n total: newTotal,\n totalFiltered: newTotalFiltered,\n });\n }\n }\n // return response;\n })\n .catch(err => {\n console.log('err', err);\n showNotification(\n 'error',\n 'Unexpected error happened. Please try again later.'\n );\n // throw err;\n })\n .finally(() => {\n setLoading(false);\n });\n }\n };\n\n // const _request = async (\n // params: {\n // pageSize: number;\n // current: number;\n // },\n // sort: Record<string, SortOrder>,\n // filter: Record<string, ReactText[] | null>\n // ) => {\n // if (fetchData) {\n // const arrOrderParams: [string, string][] = queryParams?.orderParams?.length\n // ? queryParams.orderParams\n // : [];\n\n // if (sort && Object.values(sort)[0]) {\n // arrOrderParams.splice(0, arrOrderParams.length);\n // arrOrderParams.push([\n // Object.keys(sort)[0],\n // Object.values(sort)[0] === 'descend' ? 'desc' : 'asc',\n // ]);\n // }\n // console.log(\n // '🚀 ~ file: EZProTable.tsx ~ line 201 ~ arrOrderParams',\n // queryParams?.orderParams?.length ? queryParams.orderParams : ''\n // );\n\n // return fetchData(\n // qs.stringify({\n // page: params.current || 1,\n // pageSize: params.pageSize || 10,\n // keyword: disableNativeSearch ? queryParams?.searchKeyword : keyword,\n // order: arrOrderParams,\n // where: queryParams?.whereParams,\n // whereFilter: queryParams?.whereFilterParams,\n // WebPaginationSetting: pagination,\n // })\n // )\n // .then(async response => {\n // setAjaxLoadCount(ajaxLoadCount + 1);\n // if (response?.pagination) {\n // const newTotal = response?.pagination?.total || 0;\n // const newTotalFiltered = response?.pagination?.totalFiltered;\n\n // return Promise.resolve({\n // total: newTotal,\n // data: transformData\n // ? await transformData(response.data)\n // : response.data,\n // success: true,\n // });\n // } else {\n // return Promise.resolve({\n // total: 0,\n // data: [],\n // success: false,\n // });\n // }\n // })\n // .catch(err => {\n // console.log('err', err);\n // showNotification(\n // 'error',\n // 'Unexpected error happened. Please try again later.'\n // );\n // return Promise.resolve({\n // total: 0,\n // data: [],\n // success: false,\n // });\n // });\n // }\n\n // return Promise.resolve({\n // total: 0,\n // data: [],\n // success: true,\n // });\n // };\n\n const _onDataSourceChange = (dataSource: any[]) => {};\n\n const _handleTableChange = (\n newPagination: TablePaginationConfig,\n filters: Record<string, FilterValue | null>,\n sorter: SorterResult<any> | SorterResult<any>[]\n ) => {\n const sortField = (sorter as SorterResult<any>).field as string;\n const sortOrder = (sorter as SorterResult<any>).order as string;\n\n if (useAjax) {\n _callFetchData({\n sortField: sortField,\n sortOrder: sortOrder,\n pagination: newPagination,\n ...filters,\n });\n }\n\n if (sortField) {\n setSort([sortField, sortOrder]);\n } else {\n setSort(undefined);\n }\n };\n\n const _refetch = (resetPagination: boolean = false) => {\n if (resetPagination) {\n _callFetchData(\n {\n pagination: { ...pagination, current: 1 },\n sortField: sort?.[0],\n sortOrder: sort?.[1],\n },\n keyword\n );\n } else\n _callFetchData({ pagination, sortField: sort?.[0], sortOrder: sort?.[1] }, keyword);\n };\n\n const _reload = () => {\n if (queryParams) {\n queryParams.silentLoading = false;\n }\n\n _callFetchData({ pagination, sortField: sort?.[0], sortOrder: sort?.[1] }, keyword);\n };\n\n const _triggerUpdateKeywordDelayed = debounce((newKeyword: string) => {\n _callFetchData({ pagination, sortField: sort?.[0], sortOrder: sort?.[1] }, newKeyword);\n setKeyword(newKeyword);\n }, 500);\n\n useImperativeHandle(ref, () => ({\n modifyData: (record: any, idValue: React.Key) => {\n let dataIdx = data?.findIndex(item => item[props.rowKey as string] === idValue);\n\n if (dataIdx !== -1) {\n data[dataIdx] = { ...record };\n setData([...data]);\n }\n },\n deleteByKey: (idValue: React.Key) => {\n setData([...data.filter(item => item[props.rowKey as string] !== idValue)]);\n },\n replaceRecords: (newData: any[]) => {\n setData([...newData]);\n },\n reload: () => {\n _reload();\n },\n }));\n\n useEffect(() => {\n if (useAjax) {\n _refetch(queryParams?.resetPagination === false ? false : true);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [queryParams]);\n\n return (\n <ProTable\n actionRef={EZTableRef}\n showSorterTooltip={false}\n search={false}\n dataSource={data}\n // request={_request}\n loading={queryParams?.silentLoading ? false : loading}\n onDataSourceChange={_onDataSourceChange}\n onChange={_handleTableChange}\n options={{\n density: false,\n // reload: true,\n reload: _reload,\n }}\n toolBarRender={() => [\n !disableNativeSearch ? (\n <Search\n // autoFocus\n className=\"no-print\"\n allowClear\n placeholder=\"Enter the keyword(s)\"\n style={{ width: '300px' }}\n size=\"middle\"\n onChange={e => _triggerUpdateKeywordDelayed(e?.target?.value)}\n />\n ) : undefined,\n toolBarComponents?.length ? toolBarComponents : '',\n ]}\n {...props}\n pagination={pagination}\n className={`${props.className ? props.className : ''} ez-pro-table ${\n pagination?.total && pagination.total > 0 ? 'has-rows' : 'no-row'\n } ${\n pagination?.position?.length\n ? pagination?.position?.map(item => item.toString()).join(' ')\n : ''\n } ${loading ? 'loading' : ''} `}\n />\n );\n }\n);\n","// Core React libs import\nimport React, { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rd party libs import\nimport { Select } from 'antd';\nimport { cloneDeep } from 'lodash';\n\n// import type { SelectProps, BaseOptionType, DefaultOptionType } from 'antd/es/select';\nimport type { SelectProps } from 'antd/es/select';\n\n// EZ level libs import\nimport { SALE_TYPES } from 'types/transaction';\nimport { SaleTypePreference } from 'types/admin';\nimport { getSaleTypeSetting } from 'utils/ez_api/AdminAPIs';\nimport { HomeContext } from 'context/EZContext';\n\nexport interface EZSelectSaleTypesProps<ValueType = any>\n extends Omit<SelectProps<ValueType | ValueType[]>, 'options' | 'children'> {}\n\nlet defaultSaleTypes = cloneDeep(SALE_TYPES);\n\nlet hasSettingAPIBeenCalled = false;\n\nexport const TransactionSalesType: React.FC<{\n contract_id: number;\n sale_types_id: number | null;\n}> = ({ contract_id, sale_types_id }) => {\n let saletype_name: string = '';\n if (defaultSaleTypes.length) {\n saletype_name =\n defaultSaleTypes.find(iSales => iSales.sale_type_id === sale_types_id)?.saletype_name ||\n '';\n } else {\n saletype_name =\n SALE_TYPES.find(iSales => iSales.sale_type_id === sale_types_id)?.saletype_name || '';\n }\n\n return <span>{saletype_name || '-'}</span>;\n};\n\nexport function EZSelectSaleType({ ...props }) {\n const [options, setOptions] = useState<typeof SALE_TYPES>(defaultSaleTypes);\n\n const { triggerRefetchDataList, setTriggerRefetchDataList } = useContext(HomeContext);\n const hasTriggerRefetchData = triggerRefetchDataList.includes('sales_type');\n\n const _fetchSetting = () => {\n if (hasSettingAPIBeenCalled && !hasTriggerRefetchData) return;\n\n getSaleTypeSetting().then(({ data }) => {\n hasSettingAPIBeenCalled = true;\n if (data) {\n const saleTypePreference = data as SaleTypePreference[];\n saleTypePreference.forEach(preferenceObj => {\n const saleType = defaultSaleTypes.find(\n s => s.sale_type_id === preferenceObj.sale_type_id\n );\n if (saleType && preferenceObj.sale_type_name) {\n saleType.saletype_name = preferenceObj.sale_type_name;\n }\n });\n // defaultSaleTypes = [...options];\n setOptions([...defaultSaleTypes]);\n }\n if (hasTriggerRefetchData) {\n const newTriggerRefetchDataList = triggerRefetchDataList.filter(\n key => key !== 'sales_type'\n );\n setTriggerRefetchDataList(newTriggerRefetchDataList);\n }\n });\n };\n\n useEffect(() => {\n _fetchSetting();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Select\n style={{ width: '100%' }}\n showSearch\n allowClear\n placeholder=\"Select Sale Type\"\n fieldNames={{\n label: 'saletype_name',\n value: 'sale_type_id',\n }}\n {...props}\n options={options}\n ></Select>\n );\n}\n","import { EMAIL_INTEGRATION_ERR_CODE, EmailCredentialType, SENDMAIL_ONBEHALF } from 'types/email';\n\nexport const checkEmailCredential = (emailCredential: EmailCredentialType) => {\n const now = new Date().getTime();\n let emailIntegrationErrCode: EMAIL_INTEGRATION_ERR_CODE | undefined;\n let emailIntegrationIsSet = false;\n\n if (emailCredential && emailCredential.relay_type_id) {\n switch (emailCredential.relay_type_id) {\n case SENDMAIL_ONBEHALF.GMAIL:\n if (\n emailCredential.google_access_token &&\n emailCredential.google_rt_expires_in &&\n now < new Date(emailCredential.google_rt_expires_in).getTime()\n ) {\n emailIntegrationIsSet = true;\n } else if (emailCredential.google_access_token) {\n emailIntegrationErrCode = EMAIL_INTEGRATION_ERR_CODE.GOOGLE_REFRESTOKEN_EXPIRED;\n } else {\n emailIntegrationErrCode = EMAIL_INTEGRATION_ERR_CODE.RELAY_TYPE_IS_UNSET;\n }\n break;\n case SENDMAIL_ONBEHALF.MS_365:\n if (\n emailCredential.ms_access_token &&\n emailCredential.ms_rt_expires_in &&\n now < new Date(emailCredential.ms_rt_expires_in).getTime()\n ) {\n emailIntegrationIsSet = true;\n } else if (emailCredential.ms_access_token) {\n emailIntegrationErrCode = EMAIL_INTEGRATION_ERR_CODE.MS365_REFRESHTOKEN_EXPIRED;\n } else {\n emailIntegrationErrCode = EMAIL_INTEGRATION_ERR_CODE.RELAY_TYPE_IS_UNSET;\n }\n break;\n case SENDMAIL_ONBEHALF.CUSTOM_SMTP:\n if (\n emailCredential.smtp_outgoing_server &&\n emailCredential.smtp_outgoing_username\n ) {\n emailIntegrationIsSet = true;\n } else {\n emailIntegrationErrCode = EMAIL_INTEGRATION_ERR_CODE.RELAY_TYPE_IS_UNSET;\n }\n break;\n\n default:\n break;\n }\n } else {\n emailIntegrationErrCode = EMAIL_INTEGRATION_ERR_CODE.RELAY_TYPE_IS_UNSET;\n }\n\n return {\n emailIntegrationErrCode: emailIntegrationErrCode,\n isEmailIntegrationSet: emailIntegrationIsSet,\n };\n};\n","import qs from 'qs';\n\nimport { DataTableQueryType } from 'types/base';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { EmailPayloadType } from 'types/notification';\n\nexport const getLogs = (params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `logs` + (params ? `?${params}` : ''),\n });\n};\n\nexport const getNotificationInfo = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `notification-info`,\n });\n};\n\nexport const sendEmail = (payload: EmailPayloadType) => {\n return APIRequest({\n method: 'post',\n url: apiUrl + `emails`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n","// Core React libraries import\nimport React, { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Form, FormInstance, Col, Alert } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\n// EZ web-app components import\nimport { EZDateFormat, EmailEditorFormItem } from 'components';\nimport { EmailLogType, SENDMAIL_ONBEHALF } from 'types/email';\nimport { getEmailLogDetail } from 'utils/ez_api/emailLogAPIs';\n\n// EZ web-app styles and assets import\n\nexport const EmailLogModalContent: React.FC<{\n contactRoles?: any;\n emailLog: Partial<EmailLogType>;\n form: FormInstance<any>;\n}> = ({ contactRoles, emailLog, form }) => {\n const [activeEmailLog, setActiveEmailLog] = useState<EmailLogType>(emailLog as EmailLogType);\n const [checkingActiveDraft, setCheckingActiveDraft] = useState<boolean>(true);\n\n const isEditable = false;\n\n const _getDetail = (messageId: number) => {\n setCheckingActiveDraft(true);\n getEmailLogDetail(messageId)\n .then(({ data }) => {\n const emailLog = data as EmailLogType;\n\n if (contactRoles) {\n for (const key in contactRoles) {\n if (Object.hasOwnProperty.call(contactRoles, key)) {\n const value = `${contactRoles[key]}}}`;\n const search = `${key.toLowerCase()}}}`;\n emailLog.msg_body = emailLog.msg_body?.replaceAll(search, value);\n }\n }\n }\n\n setActiveEmailLog(emailLog);\n form.setFieldsValue({\n ...emailLog,\n });\n })\n .finally(() => {\n setCheckingActiveDraft(false);\n });\n };\n\n const _setFieldValues = () => {\n form.resetFields();\n\n form.setFieldsValue({\n ...emailLog,\n });\n };\n\n useEffect(() => {\n _setFieldValues();\n\n if (emailLog.message_id) {\n _getDetail(emailLog.message_id);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Form layout=\"vertical\" form={form} requiredMark={true}>\n <Row gutter={[16, 0]}>\n <Col span={24}>\n <Alert\n message=\"See more detailed information on the sent folder of your selected email integration (i.e.: Your Gmail / Microsoft 365 / Custom email domain).\"\n type=\"info\"\n showIcon\n className=\"mb-3\"\n />\n </Col>\n <Col span={12}>\n <Form.Item label=\"Dispatched By\">\n {emailLog.relayed_at ? (\n <>\n {emailLog.relayed_by_account?.fullname || <i>Empty</i>} on \n <EZDateFormat\n value={emailLog.relayed_at}\n format=\"MMM Do, YYYY [at] hh:mma\"\n />\n </>\n ) : (\n <>-</>\n )}\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Sent Using\">\n {activeEmailLog.relay_type_id ? (\n <>\n <span>{activeEmailLog.msg_sender || '-'}</span> (\n {activeEmailLog.relay_type_id === SENDMAIL_ONBEHALF.GMAIL\n ? 'Gmail integration'\n : activeEmailLog.relay_type_id === SENDMAIL_ONBEHALF.MS_365\n ? 'Microsoft 365 integration'\n : activeEmailLog.relay_type_id === SENDMAIL_ONBEHALF.CUSTOM_SMTP\n ? 'Custom SMTP integration'\n : '-'}\n )\n </>\n ) : (\n <>-</>\n )}\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Email Subject\" name=\"msg_subject\">\n {emailLog.msg_subject || '-'}\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Email Recipient(s)\">\n {emailLog?.msg_to\n ?.map((msg: any) =>\n msg.startsWith('ROLE_ID') ? `{{ ${contactRoles[msg]} }}` : msg\n )\n .join(', ') || '-'}\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Email CC(s)\">\n {emailLog?.msg_cc\n ?.map((msg: any) =>\n msg.startsWith('ROLE_ID') ? `{{ ${contactRoles[msg]} }}` : msg\n )\n .join(', ') || '-'}\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Email BCC(s)\">\n {emailLog?.msg_bcc\n ?.map((msg: any) =>\n msg.startsWith('ROLE_ID') ? `{{ ${contactRoles[msg]} }}` : msg\n )\n .join(', ') || '-'}\n </Form.Item>\n </Col>\n <Col span={24}>\n <EmailEditorFormItem readOnly={!isEditable} hideToolbar hideToolbarInsertCode />\n </Col>\n <Col span={24}>\n <Form.Item label=\"Attachments (From Documents and Files)\">\n {emailLog.docs?.length ? (\n <ul>\n {emailLog.docs.map(doc => (\n <li>{doc.filename}</li>\n ))}\n </ul>\n ) : (\n <span>-</span>\n )}\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Linked Transaction\">\n {activeEmailLog.contract?.address || '-'}\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Linked Task\">\n {activeEmailLog.task_todolist?.title || '-'}\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Last Updated By\">\n {activeEmailLog.updated_by_account?.fullname} on \n <EZDateFormat\n value={activeEmailLog.updated_at}\n format=\"MMM Do, YYYY [at] hh:mma\"\n />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Created By\">\n {activeEmailLog.account?.fullname} on \n <EZDateFormat\n value={activeEmailLog.created_at}\n format=\"MMM Do, YYYY [at] hh:mma\"\n />\n </Form.Item>\n </Col>\n </Row>\n </Form>\n );\n};\n","// Core React libraries import\nimport React, { useContext, useEffect, useRef, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n DeleteOutlined,\n EditOutlined,\n EllipsisOutlined,\n FileSearchOutlined,\n SendOutlined,\n} from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\nimport {\n Button,\n ConfigProvider,\n Divider,\n Dropdown,\n Form,\n Menu,\n Modal,\n Tag,\n Typography,\n} from 'antd';\nimport enUS from 'antd/lib/locale/en_US';\n\n// EZ web-app utils import\nimport { showMessage, showNotification } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport { deleteEmailDraft, getEmailLogs } from 'utils/ez_api/emailLogAPIs';\n// EZ web-app types import\nimport { ITableQueryParams, forwardRefEZTableProps } from 'components/table/EZProTable';\nimport { EmailLogType } from 'types/email';\n// EZ web-app components import\nimport { EZDateFormat, EZTable } from 'components';\nimport { EmailLogModalContent } from 'components/appPage/modals/emailLogDetail';\nimport { HomeContext } from 'context/EZContext';\nimport { Partial_EmailForm } from 'pages/tabs/email/partials/emailForm';\nimport { getContactRoles } from 'utils/ez_api/contactAPIs';\n\n// EZ web-app styles and assets import\n\nconst { Text, Paragraph } = Typography;\n\nconst defaultTableParam: ITableQueryParams = {\n searchKeyword: '',\n // orderParams: [],\n orderParams: [['created_at', 'desc']],\n whereParams: {},\n whereFilterParams: {},\n};\n\ntype Partial_EmailLogsProps = {\n contractTaskID?: number;\n contractID?: number;\n isTransactionDeleted?: boolean;\n pageSize?: number;\n\n editLogDetail?: (emailLog: EmailLogType) => void;\n\n refreshCounter?: number;\n};\n\nexport const Partial_EmailLogs: React.FC<Partial_EmailLogsProps> = ({\n contractID,\n contractTaskID,\n pageSize,\n editLogDetail,\n isTransactionDeleted,\n refreshCounter,\n}) => {\n const HomeCtx = useContext(HomeContext);\n const UserInfo = HomeCtx.userInfo;\n\n const [form] = Form.useForm();\n\n const EZTableRef = useRef<forwardRefEZTableProps>();\n const [contactRoles, setContactroles] = useState<any>();\n const [queryParams, setQueryParams] = useState<ITableQueryParams>({\n ...defaultTableParam,\n orderParams: [['created_at', 'desc']],\n whereParams: {\n contract_id: contractID || undefined,\n contract_task_id: contractTaskID || undefined,\n $and: {\n $or: {\n '!msg_subject': null,\n '!msg_body': null,\n '!msg_to': '[]',\n '!msg_cc': '[]',\n '!msg_bcc': '[]',\n },\n },\n account_id: !contractTaskID && !contractID ? UserInfo?.account_id : undefined,\n },\n });\n\n async function _fetchData(EZTableQueryParams: string): Promise<any> {\n return getEmailLogs(EZTableQueryParams).then(result => result);\n }\n\n const _deleteMessageLog = (record: EmailLogType) => {\n // if (!record.is_draft) {\n // return showNotification(\n // 'error',\n // `You can't delete email that has been dispatched/sent.`\n // );\n // }\n if (UserInfo?.account_id !== record.account_id) {\n return showNotification(\n 'error',\n `You are not the original owner of the selected email. Therefore, you can't delete it.`\n );\n }\n\n const deleteConfirmationModal = Modal.confirm({\n title: `Delete confirmation`,\n content: (\n <>\n Are you sure to delete the selected email log with the subject:{' '}\n <b>{record.msg_subject || '-'}</b>?\n </>\n ),\n onOk: () => {\n deleteConfirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Deleting...',\n });\n return deleteEmailDraft(record.message_id).then(() => {\n deleteConfirmationModal.destroy();\n\n showNotification(\n 'success',\n `Selected email log has been successfully deleted.`\n );\n EZTableRef.current?.reload();\n return true;\n });\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const _columns: ProColumns<EmailLogType>[] = [\n {\n title: 'Subject',\n dataIndex: 'msg_subject',\n width: '82px',\n sorter: true,\n // fixed: 'left',\n render: (_, record) => (\n <>\n <Text title={record.msg_subject}>{record.msg_subject || '-'}</Text>\n </>\n ),\n },\n {\n title: 'Is Draft?',\n dataIndex: 'is_draft',\n width: '24px',\n sorter: true,\n render: (_, record) => (\n <>\n <Text>{record.is_draft ? <Tag color=\"warning\">Yes</Tag> : <Tag>No</Tag>}</Text>\n </>\n ),\n },\n {\n title: 'To',\n dataIndex: 'msg_to',\n width: '82px',\n sorter: false,\n render: (_, record) => {\n const msg_to = record.msg_to?.map(msg => {\n if (\n msg.startsWith('ROLE_ID') &&\n contactRoles &&\n contactRoles.hasOwnProperty(msg)\n ) {\n return `{{ ${contactRoles[msg]} }}`;\n }\n\n return msg;\n });\n\n return <Text>{msg_to?.join(', ') || '-'}</Text>;\n },\n },\n {\n title: 'Dispached Time',\n dataIndex: 'relayed_at',\n width: '50px',\n editable: false,\n sorter: true,\n // ellipsis: true,\n render: (_, record) => (\n <>\n <Text>\n <EZDateFormat value={record.relayed_at} format=\"MMM Do, YYYY hh:mma\" />\n </Text>\n {record.relayed_at && record.relayed_by_account?.fullname ? (\n <> by {record.relayed_by_account?.fullname}</>\n ) : (\n <></>\n )}\n </>\n ),\n },\n {\n title: 'Last Updated Time',\n dataIndex: 'updated_at',\n width: '50px',\n editable: false,\n sorter: true,\n // ellipsis: true,\n render: (_, record) => (\n <>\n <Text>\n <EZDateFormat value={record.updated_at} format=\"MMM Do, YYYY hh:mma\" />\n </Text>\n {record.updated_by_account?.fullname ? (\n <> by {record.updated_by_account?.fullname}</>\n ) : (\n <></>\n )}\n </>\n ),\n },\n {\n title: 'Created Time',\n dataIndex: 'created_at',\n width: '50px',\n editable: false,\n sorter: true,\n // ellipsis: true,\n render: (_, record) => (\n <>\n <Text>\n <EZDateFormat value={record.created_at} format=\"MMM Do, YYYY hh:mma\" />\n </Text>\n {record.account?.fullname ? <> by {record.account?.fullname}</> : <></>}\n </>\n ),\n },\n {\n title: 'Action',\n dataIndex: 'action',\n width: editLogDetail ? '35px' : '25px',\n valueType: 'option',\n fixed: 'right',\n render: (_, record, index, action) =>\n isTransactionDeleted ? (\n <></>\n ) : (\n // <Space size=\"small\" className=\"pl-1\">\n <>\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<FileSearchOutlined />}\n title=\"See Detail\"\n onClick={() => {\n _showLogDetailModal(record, contactRoles);\n }}\n ></Button>\n {editLogDetail ? (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EditOutlined />}\n title=\"Edit\"\n onClick={() => {\n if (record.is_draft) {\n editLogDetail?.(record);\n } else\n showMessage(\n 'error',\n 'You can only edit the unsent draft.'\n );\n }}\n disabled={!record.is_draft}\n ></Button>\n </>\n ) : (\n <></>\n )}\n <Divider type=\"vertical\" />\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu>\n <Menu.Item\n key=\"2\"\n danger\n onClick={() => {\n _deleteMessageLog(record);\n }}\n // disabled={!record.is_draft}\n >\n <DeleteOutlined className=\"mr-3\" />\n Delete {record.is_draft ? 'Draft' : 'Sent Item'}\n </Menu.Item>\n </Menu>\n }\n placement=\"bottomRight\"\n >\n <span onClick={e => e.preventDefault()}>\n <Button size=\"small\" type=\"link\" icon={<EllipsisOutlined />} />\n </span>\n </Dropdown>\n </>\n ),\n // </Space>\n },\n ];\n\n const _showLogDetailModal = (record: Partial<EmailLogType>, contactRoles: any) => {\n const editLogDetailModal = Modal.confirm({\n title: (\n <Typography.Title level={4}>\n <span>Email Log Detail </span>\n {record.is_draft ? <Tag style={{ verticalAlign: 'middle' }}>Draft</Tag> : <></>}\n </Typography.Title>\n ),\n content: (\n <EmailLogModalContent contactRoles={contactRoles} emailLog={record} form={form} />\n ),\n okText: 'Save',\n cancelText: 'Close',\n okButtonProps: {\n style: {\n // display: record.is_draft ? 'initial' : 'none',\n display: 'none',\n },\n },\n icon: <></>,\n style: { top: '40px' },\n width: '80%',\n autoFocusButton: null,\n onOk: async () => {\n editLogDetailModal.destroy();\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const _showNewEmailForm = () => {\n const _onSendEmail = () => {\n editLogDetailModal.destroy();\n EZTableRef.current?.reload();\n };\n\n const editLogDetailModal = Modal.confirm({\n title: <Typography.Title level={4}>New Email Form</Typography.Title>,\n content: (\n <>\n <Partial_EmailForm contractID={contractID} onSendEmail={_onSendEmail} />\n </>\n ),\n okText: 'Save',\n cancelText: 'Close',\n cancelButtonProps: {\n style: {\n display: 'none',\n },\n },\n okButtonProps: {\n style: {\n display: 'none',\n },\n },\n icon: <></>,\n style: { top: '40px' },\n width: '80%',\n autoFocusButton: null,\n onOk: async () => {\n editLogDetailModal.destroy();\n },\n onCancel: () => {\n EZTableRef.current?.reload();\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const _fetchContactRoles = () => {\n getContactRoles().then((res: any) => {\n const roles = res.data.reduce((acc: any, role: any) => {\n acc[`ROLE_ID_${role.role_id}`] = role.role;\n return acc;\n }, {});\n\n setContactroles(roles);\n });\n };\n\n useEffect(() => {\n if (refreshCounter) {\n EZTableRef.current?.reload();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [refreshCounter]);\n\n useEffect(() => {\n _fetchContactRoles();\n }, []);\n\n return (\n <div className=\"ez_email_logs\">\n <ConfigProvider locale={enUS}>\n <EZTable\n ref={EZTableRef}\n className=\"eztable-hide-delete-editable\"\n pagination={{\n pageSize: pageSize || 20,\n pageSizeOptions: [10, 20, 30],\n position: ['bottomLeft', 'topLeft'],\n }}\n queryParams={queryParams}\n columns={_columns}\n size=\"small\"\n rowKey=\"message_id\"\n fetchData={_fetchData}\n scroll={{ x: 1800 }}\n tableAlertRender={false}\n toolBarComponents={\n contractID && !isTransactionDeleted\n ? [\n <Button\n key={`toolBarComponents-2-task-list`}\n className=\"ml-2 ez-action-btn\"\n onClick={() => _showNewEmailForm()}\n >\n <SendOutlined />\n Send New Email\n </Button>,\n ]\n : []\n }\n />\n </ConfigProvider>\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { Row, Col, Typography, Alert } from 'antd';\n\nimport { EMAIL_INTEGRATION_ERR_CODE, EmailCredentialType, SENDMAIL_ONBEHALF } from 'types/email';\nimport { getMyEmailCredential } from 'utils/ez_api/emailLogAPIs';\nimport { checkEmailCredential } from 'utils/emailUtil';\n\nconst { Text } = Typography;\n\nexport const EmailIntegrationIndicator: React.FC<{}> = ({ ...props }) => {\n const [emailCredential, setEmailCredential] = useState<EmailCredentialType>();\n const [isEmailCredentialSet, setIsEmailCredentialSet] = useState<boolean>(false);\n const [emailIntegrationErrCode, setEmailIntegrationErrCode] =\n useState<EMAIL_INTEGRATION_ERR_CODE | null>();\n\n const _fetchMyCredentials = () => {\n getMyEmailCredential().then(resp => {\n const emailCredentialTemp = resp.data as EmailCredentialType;\n\n setEmailCredential(emailCredentialTemp);\n\n const checkResult = checkEmailCredential(emailCredentialTemp);\n setEmailIntegrationErrCode(checkResult.emailIntegrationErrCode);\n setIsEmailCredentialSet(checkResult.isEmailIntegrationSet);\n });\n };\n\n useEffect(() => {\n _fetchMyCredentials();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <Row gutter={[16, 0]}>\n {emailIntegrationErrCode &&\n emailIntegrationErrCode === EMAIL_INTEGRATION_ERR_CODE.RELAY_TYPE_IS_UNSET && (\n <Col span={24} className=\"pull-left text-left\">\n <Alert\n message={\n <>\n You haven't set your email integration. Click <b>Email</b>{' '}\n menu and navigate to tab - 'Integration' to set your sender\n profile.\n </>\n }\n type=\"error\"\n showIcon\n className=\"mb-3\"\n />\n </Col>\n )}\n {emailIntegrationErrCode &&\n (emailIntegrationErrCode ===\n EMAIL_INTEGRATION_ERR_CODE.GOOGLE_REFRESTOKEN_EXPIRED ||\n emailIntegrationErrCode ===\n EMAIL_INTEGRATION_ERR_CODE.MS365_REFRESHTOKEN_EXPIRED) && (\n <Col span={24} className=\"pull-left text-left\">\n <Alert\n message={\n <>\n Your 3rd-party email integration is expired. Click{' '}\n <b>Email</b> menu and navigate to tab - 'Integration' to\n reconnect the selected sender profile.\n </>\n }\n type=\"error\"\n showIcon\n className=\"mb-3\"\n />\n </Col>\n )}\n\n {isEmailCredentialSet && emailCredential && (\n <Col span={24} className=\"pull-left text-left\">\n <Alert\n message={\n <>\n You currently use \n <b>\n {emailCredential?.relay_type_id === SENDMAIL_ONBEHALF.GMAIL\n ? emailCredential?.google_email\n : emailCredential?.relay_type_id ===\n SENDMAIL_ONBEHALF.MS_365\n ? emailCredential.ms_email\n : emailCredential?.relay_type_id ===\n SENDMAIL_ONBEHALF.CUSTOM_SMTP\n ? emailCredential.smtp_outgoing_username\n : '-'}\n </b>{' '}\n (\n {emailCredential?.relay_type_id === SENDMAIL_ONBEHALF.GMAIL\n ? 'Gmail integration'\n : emailCredential?.relay_type_id ===\n SENDMAIL_ONBEHALF.MS_365\n ? 'Microsoft 365 integration'\n : emailCredential?.relay_type_id ===\n SENDMAIL_ONBEHALF.CUSTOM_SMTP\n ? 'Custom SMTP integration'\n : '-'}\n ) for sending your email.\n </>\n }\n type=\"info\"\n showIcon\n className=\"mb-3\"\n />\n </Col>\n )}\n </Row>\n </>\n );\n};\n","// Core React libraries import\nimport React, { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Form, Col, Skeleton, Row, Button, Tooltip } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\n// EZ web-app components import\nimport { EmailIntegrationIndicator } from 'components/partials/emailIntegrationIndicator';\nimport { Partial_EmailTemplateFormItems } from './PartialEmailTemplateFormItems';\nimport { EMAIL_INTEGRATION_ERR_CODE, EmailCredentialType, EmailLogType } from 'types/email';\nimport { EmailTemplateType } from 'types/emailTemplate';\nimport {\n createEmailDraft,\n getEmailLogDetail,\n getMyEmailCredential,\n sendEmailByEmailLogID,\n updateEmailDraft,\n} from 'utils/ez_api/emailLogAPIs';\nimport { showMessage, showNotification } from 'utils/notificationUtil';\nimport { checkEmailCredential } from 'utils/emailUtil';\nimport { InfoCircleOutlined } from '@ant-design/icons';\n// EZ web-app styles and assets import\n\nexport const Partial_EmailForm: React.FC<{\n contractID?: number;\n\n emailLog?: EmailLogType;\n\n onSendEmail?: () => void;\n}> = ({ contractID, emailLog, onSendEmail }) => {\n const [form] = Form.useForm();\n\n const [emailCredential, setEmailCredential] = useState<EmailCredentialType>();\n const [activeEmailLog, setActiveEmailLog] = useState<EmailLogType>(emailLog as EmailLogType);\n const [loadingLogDetail, setLoadingLogDetail] = useState<boolean>(false);\n const [isEmailCredentialSet, setIsEmailCredentialSet] = useState<boolean>(false);\n const [isFailedSendEmail, setIsFailedSendEmail] = useState<boolean>(false);\n\n const _onFormFinish = (values: any) => {\n console.log('🚀 ~ file: taskEmailModal.tsx:41 ~ values:', values);\n };\n\n const _getDetail = (messageId: number) => {\n setLoadingLogDetail(true);\n getEmailLogDetail(messageId)\n .then(({ data }) => {\n const emailLogResponse = data as EmailLogType;\n\n if (emailLogResponse?.message_id) {\n setActiveEmailLog(emailLogResponse);\n\n if (emailLogResponse.is_draft) {\n form.setFieldsValue(emailLogResponse);\n form.setFieldValue(\n 'msg_attachments',\n emailLogResponse?.docs?.length\n ? emailLogResponse?.docs?.map(doc => doc.doc_id)\n : []\n );\n\n form.setFields([{ name: 'msg_body', validating: false }]);\n }\n }\n })\n .finally(() => {\n setLoadingLogDetail(false);\n });\n };\n\n const _sendPreview = () => {\n _sendEmail(false);\n };\n\n const _sendEmail = async (isNotPreview: boolean = true) => {\n form.validateFields()\n .then(async () => {\n if (!emailCredential?.relay_type_id) {\n return showMessage('error', \"Email integration hasn't been set.\");\n }\n\n let payload: Partial<EmailLogType> = {\n ...activeEmailLog,\n ...form.getFieldsValue(),\n };\n\n if (!payload?.message_id && !isFailedSendEmail) {\n payload.contract_id = contractID;\n const { data } = await createEmailDraft(payload);\n\n payload = { ...payload, ...data };\n } else {\n updateEmailDraft(activeEmailLog.message_id, payload);\n }\n\n if (payload?.message_id) {\n sendEmailByEmailLogID(payload.message_id, payload, isNotPreview)\n .then(() => {\n setIsFailedSendEmail(false);\n\n showNotification(\n 'success',\n `New ${\n isNotPreview ? 'email' : 'preview email'\n } has been queued for delivery.`\n );\n if (isNotPreview) {\n onSendEmail?.();\n }\n })\n .catch(err => {\n setActiveEmailLog({\n ...activeEmailLog,\n ...payload,\n message_id: payload?.message_id || 0,\n });\n\n setIsFailedSendEmail(true);\n\n if (\n err.response &&\n err.response.status === 422 &&\n err.response.data?.message === 'email_recipient_is_empty'\n ) {\n return showNotification(\n 'error',\n 'Email recipient is empty. Please double-check your transaction/listing information.'\n );\n }\n });\n }\n })\n .catch(() => {});\n };\n\n const _saveAsDraft = () => {\n const payload: Partial<EmailLogType> = {\n ...activeEmailLog,\n ...form.getFieldsValue(),\n };\n payload.is_draft = true;\n if (activeEmailLog?.message_id) {\n updateEmailDraft(activeEmailLog.message_id, payload).then(() => {\n showNotification('success', 'Changes have been saved to draft.');\n });\n } else {\n payload.contract_id = contractID;\n createEmailDraft(payload).then(({ data }) => {\n const emailLogResponse = data as EmailLogType;\n showNotification('success', 'Changes have been saved to draft.');\n\n setActiveEmailLog({ ...emailLogResponse });\n });\n }\n };\n\n const _onSelectEmailTemplate = (emailTemplate: EmailTemplateType) => {\n if (activeEmailLog && emailTemplate) {\n activeEmailLog.email_template = emailTemplate;\n activeEmailLog.email_template_id = emailTemplate.email_template_id;\n setActiveEmailLog({ ...activeEmailLog });\n }\n };\n\n const _fetchMyCredentials = () => {\n getMyEmailCredential().then(resp => {\n const emailCredentialTemp = resp.data as EmailCredentialType;\n\n setEmailCredential(emailCredentialTemp);\n\n const checkResult = checkEmailCredential(emailCredentialTemp);\n setIsEmailCredentialSet(checkResult.isEmailIntegrationSet);\n });\n };\n\n useEffect(() => {\n _fetchMyCredentials();\n\n if (emailLog?.message_id) {\n _getDetail(emailLog.message_id);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [emailLog]);\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <Form\n layout=\"vertical\"\n form={form}\n onFinish={_onFormFinish}\n requiredMark={true}\n // validateTrigger={['onSubmit']}\n >\n {loadingLogDetail && <Skeleton active />}\n {!loadingLogDetail && (\n <>\n <EmailIntegrationIndicator />\n <Row gutter={[16, 0]}>\n <Partial_EmailTemplateFormItems\n formType=\"EMAIL_FORM\"\n onSelectTemplate={_onSelectEmailTemplate}\n showAttachmentField\n contractID={contractID}\n />\n {activeEmailLog?.email_template?.email_template_id && (\n <Col span={24}>\n <Form.Item label=\"Note(s) from Linked Email Template\">\n {activeEmailLog?.email_template?.template_note || '-'}\n </Form.Item>\n </Col>\n )}\n <Col span={24}>\n <Row align=\"middle\">\n <Col span={12} className=\"pull-left text-left\">\n <Button\n // type=\"primary\"\n onClick={() => _sendPreview()}\n disabled={!isEmailCredentialSet}\n >\n Send Me the Preview\n </Button>\n <Tooltip title=\"Preview email will be sent to your current email address. Click the avatar icon at the top right corner of your screen to see your email.\">\n <InfoCircleOutlined className=\"ml-2\" />\n </Tooltip>\n </Col>\n <Col span={12} className=\"pull-right text-right\">\n <Button\n onClick={() => _saveAsDraft()}\n className=\"mr-3\"\n disabled={\n emailLog?.message_id && !activeEmailLog?.is_draft\n ? true\n : false\n }\n >\n Save as draft\n </Button>\n <Button\n type=\"primary\"\n onClick={() => _sendEmail()}\n disabled={!isEmailCredentialSet}\n >\n Send\n </Button>\n </Col>\n </Row>\n </Col>\n </Row>\n </>\n )}\n </Form>\n </>\n );\n};\n","// Core React libraries import\r\nimport { useEffect, useState, useContext } from 'react';\r\n\r\n// Core ANTD and 3rdparty libraries import\r\nimport {\r\n Row,\r\n Col,\r\n Typography,\r\n List,\r\n Avatar,\r\n Button,\r\n Menu,\r\n Popconfirm,\r\n Tabs,\r\n Modal,\r\n Popover,\r\n Input,\r\n} from 'antd';\r\nimport {\r\n ContainerOutlined,\r\n DeleteOutlined,\r\n EditOutlined,\r\n MailOutlined,\r\n PlusOutlined,\r\n} from '@ant-design/icons';\r\n\r\n// EZ web-app utils import\r\n// EZ web-app APIs import\r\nimport {\r\n getTransactionNotes,\r\n getTransactionEmailNotes,\r\n updateContactNote,\r\n deleteContactNote,\r\n deleteContactEmailNote,\r\n} from 'utils/ez_api/transactionNoteAPIs';\r\n// EZ web-app types import\r\nimport { TransactionEmailNoteItemType, TransactionNoteItemType } from 'types/transaction';\r\n// EZ web-app components import\r\nimport { EZList, EZDateFormat } from 'components';\r\nimport { IListQueryParams } from 'components/list/EZList';\r\nimport { HomeContext } from 'context/EZContext';\r\nimport { updateOnboardingStep } from 'utils/onboardingUtil';\r\n\r\n// EZ web-app styles and assets import\r\n\r\nconst { Text, Paragraph } = Typography;\r\n\r\nconst defaultQueryParams: IListQueryParams = {\r\n searchKeyword: '',\r\n orderParams: [['note_id', 'desc']],\r\n whereParams: {\r\n category: 'note',\r\n },\r\n whereFilterParams: {},\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nconst menu = (\r\n <Menu\r\n items={[\r\n {\r\n key: '1',\r\n icon: <MailOutlined />,\r\n label: 'Email Note',\r\n },\r\n ]}\r\n />\r\n);\r\n\r\nexport enum NOTE_EMBEDDED_TYPE {\r\n TRANSACTION_DETAIL = 'transaction_detail',\r\n MAIN_MENU = 'main_menu',\r\n TRANSACTION_LIST = 'transaction_list',\r\n}\r\n\r\nconst EditNoteComponent: React.FC<{\r\n noteRecord?: TransactionNoteItemType;\r\n isTransactionDeleted?: boolean;\r\n saveNote: (note: string, note_id?: number) => Promise<any>;\r\n}> = ({ noteRecord, saveNote, isTransactionDeleted }) => {\r\n const isEditMode = noteRecord && noteRecord.note_id ? true : false;\r\n\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [noteContent, setNoteContent] = useState('');\r\n const HomeCtx = useContext(HomeContext);\r\n\r\n const _saveNote = () => {\r\n if (noteContent.trim().length > 0) {\r\n saveNote(noteContent.trim(), noteRecord?.note_id).then(() => {\r\n setIsVisible(false);\r\n setNoteContent('');\r\n if (!isEditMode) {\r\n // update onboarding step to completed\r\n updateOnboardingStep('add_notes', HomeCtx.refetchOnboardingList);\r\n }\r\n });\r\n }\r\n };\r\n\r\n // the effect is to populate \"noteContent\" whenever there is a change of \"noteRecord\"\r\n useEffect(() => {\r\n setNoteContent(noteRecord ? noteRecord.notes : '');\r\n }, [noteRecord]);\r\n\r\n return (\r\n <Popover\r\n visible={isVisible}\r\n content={\r\n <div className=\"add-new-note-popover\">\r\n <Row gutter={[0, 10]}>\r\n <Col span={24}>\r\n <Input.TextArea\r\n rows={4}\r\n value={noteContent}\r\n onChange={e => setNoteContent(e?.currentTarget?.value)}\r\n ></Input.TextArea>\r\n </Col>\r\n <Col span={24} style={{ textAlign: 'right' }}>\r\n <Button\r\n type=\"default\"\r\n className=\"mr-2\"\r\n onClick={() => setIsVisible(false)}\r\n >\r\n Close\r\n </Button>\r\n <Button type=\"primary\" onClick={() => _saveNote()}>\r\n Save\r\n </Button>\r\n </Col>\r\n </Row>\r\n </div>\r\n }\r\n overlayClassName=\"\"\r\n title={\r\n <>{isEditMode ? <span>Edit Note</span> : <span>Add New Contract's Note</span>}</>\r\n }\r\n trigger={'click'}\r\n showArrow={false}\r\n placement=\"left\"\r\n >\r\n {isEditMode && !isTransactionDeleted ? (\r\n <Button\r\n className=\"p-0 mr-2\"\r\n type=\"link\"\r\n icon={<EditOutlined />}\r\n onClick={() => setIsVisible(true)}\r\n title=\"Edit this note\"\r\n >\r\n Edit\r\n </Button>\r\n ) : (\r\n !isTransactionDeleted && (\r\n <Button\r\n className=\"ez-action-btn ml-3\"\r\n icon={<PlusOutlined />}\r\n onClick={() => setIsVisible(true)}\r\n >\r\n Add New Contract's Note\r\n </Button>\r\n )\r\n )}\r\n </Popover>\r\n );\r\n};\r\n\r\nexport const AppPageNotes: React.FC<{\r\n pageType: NOTE_EMBEDDED_TYPE;\r\n contractID?: number;\r\n isTransactionDeleted?: boolean;\r\n manualReloadCount: number;\r\n reloadTransactionStat?: (contract_id?: number) => void;\r\n}> = ({ pageType, contractID, manualReloadCount, isTransactionDeleted, reloadTransactionStat }) => {\r\n const HomeCtx = useContext(HomeContext);\r\n const UserPermission = HomeCtx.userPermission;\r\n\r\n const [modal, contextHolder] = Modal.useModal();\r\n\r\n const [noteType, setNoteType] = useState<string>('contract_notes');\r\n const [queryParams, setQueryParams] = useState<IListQueryParams>(defaultQueryParams);\r\n\r\n const _fetchNotes: (EZQueryParams: string) => Promise<any> = async EZQueryParams => {\r\n const result = await getTransactionNotes(contractID || -1, EZQueryParams);\r\n return result;\r\n };\r\n\r\n const _fetchEmailNotes: (EZQueryParams: string) => Promise<any> = async EZQueryParams => {\r\n const result = await getTransactionEmailNotes(contractID || -1, EZQueryParams);\r\n return result;\r\n };\r\n const _reloadSubTabData = () => {\r\n if (noteType === 'from_emails') {\r\n setQueryParams({\r\n ...defaultQueryParams,\r\n orderParams: [['m_id', 'desc']],\r\n whereParams: {},\r\n });\r\n } else {\r\n setQueryParams({\r\n ...defaultQueryParams,\r\n });\r\n }\r\n };\r\n\r\n const _showEmailBody = (record: TransactionEmailNoteItemType) => {\r\n modal.info({\r\n content: <Paragraph style={{ whiteSpace: 'pre-wrap' }}>{record.msg_body}</Paragraph>,\r\n width: '70%',\r\n closable: true,\r\n wrapClassName: 'note-email-modal-wrapper',\r\n icon: <></>,\r\n okText: 'Close',\r\n maskClosable: true,\r\n title: `${record.msg_subject}`,\r\n });\r\n };\r\n\r\n const _saveNote = async (note: string, note_id?: number) => {\r\n return updateContactNote(contractID || 0, note, note_id)\r\n .then(() => {\r\n _reloadSubTabData();\r\n\r\n if (!note_id) {\r\n reloadTransactionStat?.(contractID);\r\n }\r\n })\r\n .finally(() => {});\r\n };\r\n\r\n const _deleteNote = async (note_id: number) => {\r\n return deleteContactNote(contractID || 0, note_id)\r\n .then(() => {\r\n reloadTransactionStat?.(contractID);\r\n _reloadSubTabData();\r\n })\r\n .finally(() => {});\r\n };\r\n\r\n const _deleteEmailNote = async (m_id: number) => {\r\n return deleteContactEmailNote(contractID || 0, m_id)\r\n .then(() => {\r\n reloadTransactionStat?.(contractID);\r\n _reloadSubTabData();\r\n })\r\n .finally(() => {});\r\n };\r\n\r\n useEffect(() => {\r\n _reloadSubTabData();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [manualReloadCount]);\r\n\r\n return (\r\n <div className=\"ez-component-documents\">\r\n <div>{contextHolder}</div>\r\n <Row gutter={[0, 18]}>\r\n {pageType !== NOTE_EMBEDDED_TYPE.TRANSACTION_LIST && (\r\n <Col span={24} style={{ textAlign: 'center' }}>\r\n <Tabs\r\n type=\"card\"\r\n defaultActiveKey=\"contract_notes\"\r\n onChange={(val: string) => {\r\n const noteType = val;\r\n setNoteType(noteType);\r\n if (noteType === 'from_emails') {\r\n setQueryParams({\r\n ...defaultQueryParams,\r\n orderParams: [['m_id', 'desc']],\r\n whereParams: {},\r\n });\r\n } else {\r\n setQueryParams({\r\n ...defaultQueryParams,\r\n });\r\n }\r\n }}\r\n >\r\n <Tabs.TabPane\r\n tab=\"Contract's Notes\"\r\n key=\"contract_notes\"\r\n closable={false}\r\n ></Tabs.TabPane>\r\n <Tabs.TabPane\r\n tab=\"From Emails\"\r\n key=\"from_emails\"\r\n closable={false}\r\n ></Tabs.TabPane>\r\n </Tabs>\r\n </Col>\r\n )}\r\n <Col span={24}>\r\n {noteType === 'contract_notes' && (\r\n <EZList\r\n rowKey=\"note_id\"\r\n paginationConfig={{\r\n pageSize: 20,\r\n }}\r\n queryParams={queryParams}\r\n fetchData={_fetchNotes}\r\n toolBarComponents={\r\n UserPermission && UserPermission.notes_toggle === 2\r\n ? [\r\n <EditNoteComponent\r\n saveNote={_saveNote}\r\n isTransactionDeleted={isTransactionDeleted}\r\n />,\r\n ]\r\n : []\r\n }\r\n renderItem={(record: TransactionNoteItemType) => (\r\n <List.Item\r\n actions={\r\n UserPermission && UserPermission.notes_toggle === 2\r\n ? [\r\n <EditNoteComponent\r\n isTransactionDeleted={isTransactionDeleted}\r\n saveNote={_saveNote}\r\n noteRecord={record}\r\n />,\r\n !isTransactionDeleted && (\r\n <Popconfirm\r\n placement=\"bottomRight\"\r\n title={`Delete this note?`}\r\n okText=\"Yes\"\r\n cancelText=\"Cancel\"\r\n onConfirm={() =>\r\n _deleteNote(record.note_id)\r\n }\r\n >\r\n <Button\r\n className=\"p-0\"\r\n type=\"link\"\r\n style={{ color: 'red' }}\r\n icon={<DeleteOutlined />}\r\n >\r\n Delete\r\n </Button>\r\n </Popconfirm>\r\n ),\r\n ]\r\n : []\r\n }\r\n >\r\n <List.Item.Meta\r\n avatar={\r\n <Avatar\r\n style={{ backgroundColor: '#E6F7FF' }}\r\n icon={\r\n <ContainerOutlined\r\n style={{ color: '#096DD9' }}\r\n />\r\n }\r\n size={42}\r\n />\r\n }\r\n title={\r\n <span>\r\n <Text strong className=\"mr-1\">\r\n {record.posted_account?.fullname}\r\n </Text>\r\n <Text className=\"mr-1\">\r\n {record.posted_account?.email\r\n ? `(${record.posted_account.email})`\r\n : ``}\r\n </Text>\r\n <Text type=\"secondary\" className=\"mr-2\">\r\n On{' '}\r\n <EZDateFormat\r\n value={record.date_posted}\r\n format=\"MMM DD, YYYY - hh:mma\"\r\n />\r\n </Text>\r\n </span>\r\n }\r\n description={\r\n <Paragraph\r\n style={{ whiteSpace: 'pre-wrap' }}\r\n ellipsis={{\r\n rows: 3,\r\n expandable: true,\r\n }}\r\n title={`${record.notes}`}\r\n >\r\n {record.notes}\r\n </Paragraph>\r\n }\r\n />\r\n </List.Item>\r\n )}\r\n />\r\n )}\r\n {noteType === 'from_emails' && (\r\n <EZList\r\n rowKey=\"note_id\"\r\n paginationConfig={{\r\n pageSize: 20,\r\n }}\r\n queryParams={queryParams}\r\n fetchData={_fetchEmailNotes}\r\n renderItem={(record: TransactionEmailNoteItemType) => (\r\n <List.Item\r\n actions={\r\n UserPermission &&\r\n UserPermission.notes_toggle === 2 &&\r\n !isTransactionDeleted\r\n ? [\r\n <Popconfirm\r\n placement=\"bottomRight\"\r\n title={`Delete this email's note?`}\r\n okText=\"Yes\"\r\n cancelText=\"Cancel\"\r\n onConfirm={() =>\r\n _deleteEmailNote(record.m_id)\r\n }\r\n >\r\n <Button\r\n className=\"p-0\"\r\n type=\"link\"\r\n style={{ color: 'red' }}\r\n icon={<DeleteOutlined />}\r\n >\r\n Delete\r\n </Button>\r\n </Popconfirm>,\r\n ]\r\n : []\r\n }\r\n >\r\n <List.Item.Meta\r\n avatar={\r\n <Avatar\r\n style={{ backgroundColor: '#E6F7FF' }}\r\n icon={<MailOutlined style={{ color: '#096DD9' }} />}\r\n size={42}\r\n />\r\n }\r\n title={\r\n <span>\r\n <Text strong className=\"mr-1\">\r\n {record.msg_sender || record.account?.fullname}\r\n </Text>\r\n {!record.msg_sender && record.account?.email ? (\r\n <Text className=\"mr-1\">\r\n {record.account?.email\r\n ? `(${record.account.email})`\r\n : ``}\r\n </Text>\r\n ) : (\r\n ''\r\n )}\r\n <Text type=\"secondary\" className=\"mr-2\">\r\n On{' '}\r\n <EZDateFormat\r\n value={record.msg_date}\r\n format=\"MMM DD, YYYY - hh:mma\"\r\n />\r\n </Text>\r\n </span>\r\n }\r\n description={\r\n <>\r\n <div>\r\n <Paragraph\r\n style={{ whiteSpace: 'pre-wrap' }}\r\n ellipsis={{\r\n rows: 3,\r\n expandable: true,\r\n }}\r\n title={`${record.msg_subject}`}\r\n >\r\n {record.msg_subject}\r\n </Paragraph>\r\n </div>\r\n <div className=\"mt-2\">\r\n <Button\r\n onClick={() => _showEmailBody(record)}\r\n size=\"small\"\r\n type=\"ghost\"\r\n >\r\n Show email body\r\n </Button>\r\n </div>\r\n </>\r\n }\r\n />\r\n </List.Item>\r\n )}\r\n />\r\n )}\r\n </Col>\r\n </Row>\r\n </div>\r\n );\r\n};\r\n","import React, { PropsWithChildren, ReactNode } from 'react';\n\nimport { AccountDataType, AccountPermissionType } from 'types/account';\nimport { TriggerRefetchDataKey } from 'types/triggerRefetchData';\nimport { TAB_CATEGORY } from 'types/webAppTab';\n\ninterface UserContextProviderProps extends PropsWithChildren<any> {\n userInfo: AccountDataType | undefined;\n userPermission: AccountPermissionType | undefined;\n\n closeTab: (tabKey: string) => void;\n setActiveTabByButton: React.Dispatch<React.SetStateAction<boolean>>;\n openTransactionDetailTab: (\n contractID: number | string,\n contractAddress: string | undefined,\n contractData: any,\n origin?: string\n ) => void;\n\n openProspectDetailTab: (\n prospectID: number | string,\n prospectName: string | undefined,\n prospectData: any | undefined\n ) => void;\n\n openMainTab: (tabKey: TAB_CATEGORY, shiftFocus?: boolean) => void;\n refetchOnboardingList: () => void;\n isOnboadingLoading: boolean;\n\n triggerRefetchDataList: TriggerRefetchDataKey[];\n setTriggerRefetchDataList: React.Dispatch<React.SetStateAction<TriggerRefetchDataKey[]>>;\n\n children?: ReactNode;\n}\n\nexport const HomeContext = React.createContext<UserContextProviderProps>({} as any);\n\nexport const UserContextProvider = React.memo((props: UserContextProviderProps) => {\n const {\n children,\n userInfo,\n userPermission,\n openTransactionDetailTab,\n openProspectDetailTab,\n closeTab,\n setActiveTabByButton,\n openMainTab,\n triggerRefetchDataList,\n setTriggerRefetchDataList,\n refetchOnboardingList,\n isOnboadingLoading,\n } = props;\n\n const contextValue = React.useMemo(\n () => ({\n userInfo,\n userPermission,\n openTransactionDetailTab,\n openProspectDetailTab,\n openMainTab,\n closeTab,\n setActiveTabByButton,\n triggerRefetchDataList,\n setTriggerRefetchDataList,\n refetchOnboardingList,\n isOnboadingLoading,\n }),\n [\n userInfo,\n userPermission,\n openTransactionDetailTab,\n openProspectDetailTab,\n openMainTab,\n closeTab,\n setActiveTabByButton,\n triggerRefetchDataList,\n setTriggerRefetchDataList,\n refetchOnboardingList,\n isOnboadingLoading,\n ]\n );\n\n return <HomeContext.Provider value={contextValue}>{children}</HomeContext.Provider>;\n});\n","// Core React libraries import\nimport React, { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Form, Col, Tabs, Skeleton } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport {\n getEmailLogDetail,\n getEmailLogDetailByTransactionTaskID,\n getMyEmailCredential,\n sendEmailByEmailLogID,\n updateEmailDraft,\n} from 'utils/ez_api/emailLogAPIs';\n// EZ web-app types import\nimport {\n EMAIL_INTEGRATION_ERR_CODE,\n EmailCredentialType,\n EmailLogType,\n SENDMAIL_ONBEHALF,\n} from 'types/email';\nimport { TransactionTaskItemType } from 'types/transaction';\n// EZ web-app components import\nimport { Partial_EmailLogs } from '../partials/emailLogs';\nimport { Partial_EmailForm } from 'pages/tabs/email/partials/emailForm';\n\n// EZ web-app styles and assets import\n\nconst { TabPane } = Tabs;\n\nexport enum EMAIL_TAB {\n COMPOSE_TAB = 'compose_new_email',\n EMAIL_LIST = 'list_of_sent_mails',\n}\n\nconst EDIT_EMAIL_TABKEY_PREFIX = 'edit_email';\n\nconst generateEditEmailKey = (logID: number) => {\n return `${EDIT_EMAIL_TABKEY_PREFIX}_logID`;\n};\n\ntype TaskEmailModalContentProps = {\n taskRecord: TransactionTaskItemType;\n};\n\nexport const TaskEmailModalContent: React.FC<TaskEmailModalContentProps> = ({ taskRecord }) => {\n const contractID = taskRecord.task_list?.contract_id || 0;\n\n const [activeEmailLog, setActiveEmailLog] = useState<EmailLogType>();\n const [checkingActiveDraft, setCheckingActiveDraft] = useState<boolean>(true);\n\n const [activeTabKey, setActiveTabKey] = useState<string>(EMAIL_TAB.COMPOSE_TAB);\n\n const _fetchActiveLinkedDraftByTaskID = (skipTemplate: boolean = false) => {\n getEmailLogDetailByTransactionTaskID(taskRecord.id, skipTemplate)\n .then(({ data }) => {\n const emailLog = data as EmailLogType;\n\n if (emailLog?.message_id) {\n setActiveEmailLog({ ...emailLog });\n }\n })\n .finally(() => {\n setCheckingActiveDraft(false);\n });\n };\n\n const _editLogDetail = (emailLog: EmailLogType) => {\n setActiveTabKey(EMAIL_TAB.COMPOSE_TAB);\n\n setActiveEmailLog({ ...emailLog });\n };\n\n const _onSendEmail = () => {\n _fetchActiveLinkedDraftByTaskID(true);\n };\n\n useEffect(() => {\n if (taskRecord.email_template_id && !taskRecord.message_log_id) {\n _fetchActiveLinkedDraftByTaskID();\n } else {\n setCheckingActiveDraft(false);\n _fetchActiveLinkedDraftByTaskID();\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Form layout=\"vertical\" requiredMark={false}>\n <Row gutter={[16, 0]} style={{ minHeight: '400px' }}>\n <Col span={24}>\n {checkingActiveDraft && <Skeleton active />}\n {!checkingActiveDraft && (\n <Tabs\n type=\"editable-card\"\n activeKey={activeTabKey}\n onChange={val => setActiveTabKey(val as EMAIL_TAB)}\n hideAdd\n className=\"tabs-with-leftmargin\"\n >\n <TabPane\n tab={\n <>\n Draft and Sent Mails of <b>This Task</b>\n </>\n }\n key={EMAIL_TAB.EMAIL_LIST}\n closable={false}\n >\n <Row>\n <Col span={24}>\n <Partial_EmailLogs\n contractTaskID={taskRecord.id}\n editLogDetail={_editLogDetail}\n />\n </Col>\n </Row>\n </TabPane>\n <TabPane\n tab={<>Compose Email</>}\n key={EMAIL_TAB.COMPOSE_TAB}\n closable={false}\n >\n <Partial_EmailForm\n contractID={contractID}\n emailLog={activeEmailLog}\n onSendEmail={_onSendEmail}\n />\n </TabPane>\n </Tabs>\n )}\n </Col>\n </Row>\n </Form>\n );\n};\n","export enum CacheEnum {\n OpenTabs = 'OpenTabs',\n}\n\nexport function saveJson(key: CacheEnum, data: Object) {\n localStorage.setItem(key, JSON.stringify(data));\n}\nexport function getJson(key: CacheEnum): Object {\n return JSON.parse(localStorage.getItem(key) ?? '{}');\n}\n\nexport function saveObjectToLocalStorage(key: string, data: object) {\n localStorage.setItem(key, JSON.stringify(data));\n}\n\nexport function getObjectFromLocalStorage(key: string): object {\n return JSON.parse(localStorage.getItem(key) ?? '{}');\n}\n","export const capitalize = (s: string) => (s && s[0].toUpperCase() + s.slice(1)) || '';\nexport const trimmer = (s: string) => s.replace(/\\s+$/, '');\nexport const replaceSpecialChar = (s: string | undefined) =>\n s ? trimmer(s).replace(/[^A-Z0-9]+/gi, '-') : '';\n","import React from 'react';\n\nimport { Spin, SpinProps } from 'antd';\n\ntype EZSectionLoadingProps = SpinProps;\n\nexport const EZOverlaySpinner: React.FC<EZSectionLoadingProps> = ({ className, ...props }) => {\n return (\n <div className=\"ez-overlay-spinner-wrapper\">\n <Spin {...props} className={`overlay-spinner ${className || ''}`} />\n </div>\n );\n};\n","// Core React libraries import\nimport React, { useEffect, useImperativeHandle, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport qs from 'qs';\nimport { Button, Col, Input, List, Row, Typography } from 'antd';\nimport { ReloadOutlined } from '@ant-design/icons';\nimport type { ListProps } from 'antd';\nimport debounce from 'lodash/debounce';\n\n// EZ types import\nimport { IPaginationConfig } from 'types/base';\n// EZ utils import\nimport { showNotification } from 'utils/notificationUtil';\n\nexport type { ProListMetas } from '@ant-design/pro-components';\n\nexport interface IListQueryParams {\n searchKeyword: string;\n orderParams: [string, string][];\n whereParams: any;\n whereFilterParams: any;\n}\n\nexport interface IProListPaginationParams {\n pagination?: IPaginationConfig;\n total?: number;\n sortField?: string;\n sortOrder?: string;\n}\n\nexport type IOnChangeCallbackProps = (data: any[], pagination: IPaginationConfig) => void;\n\nexport interface IProListPropsExtended {\n paginationConfig?: IPaginationConfig;\n fetchData?: (params: string) => Promise<any>;\n onChangeCallback?: IOnChangeCallbackProps;\n toolBarComponents?: React.ReactNode[];\n disableNativeSearch?: boolean;\n queryParams?: IListQueryParams;\n}\n\nexport type IProListProps = ListProps<any> & IProListPropsExtended;\n\nexport type forwardRefEZListProps = {\n modifyData: (record: any, idValue: React.Key) => void;\n deleteByKey: (idValue: React.Key) => void;\n\n reload: () => void;\n\n replaceAllData: (records: any[]) => void;\n getData: () => any[] | [];\n getDataByKey: (idValue: React.Key) => any;\n};\n\nexport const EZList = React.forwardRef<forwardRefEZListProps | undefined, IProListProps>(\n (\n {\n paginationConfig,\n fetchData,\n onChangeCallback,\n toolBarComponents,\n disableNativeSearch,\n queryParams,\n ...props\n },\n ref\n ) => {\n const [data, setData] = useState<any[]>([]);\n const [loading, setLoading] = useState(false);\n\n const [pagination, setPagination] = useState<IPaginationConfig>(\n Object.assign(\n {\n current: 1,\n pageSize: 20,\n pageSizeOptions: [10, 20],\n },\n { ...paginationConfig }\n )\n );\n const [sort, setSort] = useState<[string, string]>();\n const [keyword, setKeyword] = useState<string>('');\n\n const _callFetchData = (params: IProListPaginationParams = {}, keyword?: string) => {\n if (loading) return;\n\n if (fetchData) {\n setLoading(true);\n fetchData(\n qs.stringify({\n page: params.pagination?.current,\n pageSize: params.pagination?.pageSize,\n keyword: disableNativeSearch ? queryParams?.searchKeyword : keyword,\n order: queryParams?.orderParams?.length\n ? queryParams.orderParams\n : params.sortOrder && params.sortField\n ? [[params.sortField, params.sortOrder === 'descend' ? 'desc' : 'asc']]\n : null,\n where: queryParams?.whereParams,\n whereFilter: queryParams?.whereFilterParams,\n WebPaginationSetting: params.pagination,\n })\n )\n .then(response => {\n if (response?.pagination) {\n const newTotal = response?.pagination?.total || 0;\n const newTotalFiltered = response?.pagination?.totalFiltered;\n\n setData(response.data);\n setPagination({\n ...params.pagination,\n total: newTotal,\n });\n setImmediate(() => {\n onChangeCallback?.(response.data, {\n ...params.pagination,\n total: newTotal,\n totalFiltered: newTotalFiltered,\n });\n });\n }\n })\n .catch(err => {\n console.log('err', err);\n showNotification(\n 'error',\n 'Unexpected error happened. Please try again later.'\n );\n })\n .finally(() => {\n setLoading(false);\n });\n }\n };\n\n const _triggerUpdateKeywordDelayed = debounce((newKeyword: string) => {\n _callFetchData({ pagination, sortField: sort?.[0], sortOrder: sort?.[1] }, newKeyword);\n setKeyword(newKeyword);\n }, 500);\n\n const _refetch = (resetPagination: boolean = false) => {\n if (resetPagination) {\n _callFetchData({ pagination: { ...pagination, current: 1 } });\n } else _callFetchData({ pagination });\n };\n\n const _changePagination = (page: number, pageSize: number) => {\n const newPagination = { ...pagination, current: page, pageSize };\n setPagination(newPagination);\n\n _callFetchData(\n {\n pagination: newPagination,\n },\n keyword\n );\n };\n\n const _generatePaginationLabel = () => {\n const current = pagination?.current || 0;\n const pageSize = pagination?.pageSize || 0;\n const total = pagination?.total || 0;\n\n const filteredFrom = pagination.totalFiltered\n ? `(filtered from ${pagination.totalFiltered} total entries)`\n : '';\n\n if (!total) {\n return `0 item ${filteredFrom}`;\n }\n\n if (current === 1 && total < current * pageSize) {\n return `${total} items ${filteredFrom}`;\n }\n\n return pagination\n ? `${1 + (current - 1) * pageSize}-${Math.min(\n total,\n current * pageSize\n )} of ${total} items ${filteredFrom}`\n : '';\n };\n\n useImperativeHandle(ref, () => ({\n modifyData: (record: any, idValue: React.Key) => {\n let dataIdx = data?.findIndex(item => item[props.rowKey as string] === idValue);\n\n if (dataIdx !== -1) {\n data[dataIdx] = { ...record };\n setData([...data]);\n }\n },\n deleteByKey: (idValue: React.Key) => {\n setData([...data.filter(item => item[props.rowKey as string] !== idValue)]);\n },\n reload: () => {\n _refetch(true);\n },\n replaceAllData: (newData: any[]) => {\n setData([...newData]);\n },\n getData: () => {\n return data;\n },\n getDataByKey: (idValue: React.Key) => {\n return data.find(item => item[props.rowKey as string] === idValue);\n },\n }));\n\n useEffect(() => {\n _refetch(true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [queryParams]);\n\n return (\n <Row gutter={[0, 0]}>\n <Col span={10} style={{ textAlign: 'left' }}>\n <>\n <span>\n <Typography.Text type=\"secondary\" className=\"ez-list-pagination-info\">\n Shows: {_generatePaginationLabel()}\n </Typography.Text>\n </span>\n </>\n </Col>\n <Col span={14} style={{ textAlign: 'right' }}>\n <>\n {!disableNativeSearch && (\n <Input.Search\n placeholder=\"Enter the keyword(s) to search\"\n style={{ width: '300px' }}\n size=\"middle\"\n // className=\"mr-3\"\n allowClear\n onChange={e => _triggerUpdateKeywordDelayed(e.target?.value)}\n />\n )}\n <Button\n className=\"ml-3\"\n icon={<ReloadOutlined />}\n // size=\"small\"\n loading={loading}\n onClick={() => _refetch()}\n ></Button>\n {toolBarComponents?.map((elm, idx) => elm)}\n </>\n </Col>\n <Col span={24}>\n <List\n className=\"ez-list\"\n loading={loading}\n itemLayout=\"horizontal\"\n dataSource={data}\n pagination={{\n onChange: _changePagination,\n ...pagination,\n }}\n {...props}\n />\n </Col>\n </Row>\n );\n }\n);\n","import React, { useEffect, useImperativeHandle, useMemo, useRef } from 'react';\n\nimport { Row, Col } from 'antd';\n\nimport ReactQuill, { QuillOptions, ReactQuillProps } from 'react-quill';\nimport 'react-quill/dist/quill.snow.css';\nimport Quill from 'quill';\n\nconst BlockEmbed = Quill.import('blots/block/embed');\n\nexport { ReactQuill as EZRichTextEditorRef };\n\n// const defaultToolbar: any[] = [\n// [{ header: [1, 2, false] }],\n// ['bold', 'italic', 'underline', 'strike', 'blockquote'],\n// [{ list: 'ordered' }, { list: 'bullet' }, { indent: '-1' }, { indent: '+1' }],\n// ['link', 'image'],\n// ['clean'],\n// ];\n\nexport type EZRichTextEditorProps = ReactQuillProps & {\n showTemplateDropdown?: boolean;\n showEmailSignatureDropdown?: boolean;\n isRequired?: boolean;\n formMode?: 'ADD' | 'EDIT';\n};\n\nexport type EZRichTextEditorForwardedRefProps = {\n getEditorInstance: () => Quill | undefined;\n};\n\nexport const EZRichTextEditor = React.forwardRef<\n EZRichTextEditorForwardedRefProps,\n EZRichTextEditorProps | undefined\n>(({ showTemplateDropdown, ...props }, forwardedRef) => {\n const reactQuillRef = useRef<ReactQuill>(null);\n\n useImperativeHandle(forwardedRef, () => ({\n getEditorInstance: () => reactQuillRef.current?.getEditor(),\n }));\n\n const defaultToolbar: any = {\n container: [\n [{ header: [1, 2, false] }],\n ['bold', 'italic', 'underline', 'strike', 'blockquote'],\n [{ list: 'ordered' }, { list: 'bullet' }, { indent: '-1' }, { indent: '+1' }],\n ['link', 'image'],\n ['clean'],\n ],\n handlers: {},\n };\n\n if (showTemplateDropdown) {\n defaultToolbar?.container.push([\n {\n chooseTemplateDropdown: [\n 'Option 1',\n 'Option 2',\n 'Option 3',\n 'Option 4',\n 'Option 5',\n ],\n },\n ]);\n defaultToolbar.handlers = {\n chooseTemplateDropdown: function (value: string) {\n if (value) {\n const quill = reactQuillRef?.current?.getEditor();\n if (quill) {\n const cursorPosition = quill.getSelection()!.index;\n quill.insertText(cursorPosition, value);\n quill.setSelection(cursorPosition + value.length, 0);\n }\n }\n },\n };\n }\n\n const modules = useMemo(\n () => ({\n toolbar: defaultToolbar,\n }),\n []\n );\n\n useEffect(() => {\n if (showTemplateDropdown) {\n const placeholderPickerItems = Array.prototype.slice.call(\n document.querySelectorAll('.ql-chooseTemplateDropdown .ql-picker-item')\n );\n placeholderPickerItems.forEach(item => (item.textContent = item.dataset.value));\n if (document && document.querySelector('.ql-chooseTemplateDropdown .ql-picker-label')) {\n document.querySelector('.ql-chooseTemplateDropdown .ql-picker-label')!.innerHTML =\n 'Copy from Template' +\n document?.querySelector('.ql-chooseTemplateDropdown .ql-picker-label')\n ?.innerHTML;\n }\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row>\n <Col className=\"ezrichtext-placeholder\" span={24}>\n <ReactQuill\n ref={reactQuillRef}\n style={{ width: '100%' }}\n // modules={{ toolbar: defaultToolbar }}\n modules={modules}\n theme=\"snow\"\n {...props}\n />\n </Col>\n </Row>\n );\n});\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Modal, Form, Input, Select, Typography } from 'antd';\n\n// EZ web-app utils import\nimport { getAllTeamMembers } from 'utils/ez_api/memberAPIs';\nimport { updateTransactionDetail, DetailType } from 'utils/ez_api/transactionAPIs';\n// EZ web-app types import\nimport { TransactionDetailType } from 'types/transaction';\n// EZ web-app components import\nimport { showNotification } from 'utils/notificationUtil';\nimport {\n EZSelectFlag,\n EZSelectPropertyType,\n EZSelectStatus,\n EZSelectSaleType,\n EZAutocompleteCity,\n EZSelectUSState,\n} from 'components';\nimport { AccountCompactDataType } from 'types/account';\nimport { SelectProps } from 'antd/es/select';\nimport { isRentalProperty } from 'utils/webAppUtil';\n\n// EZ web-app styles and assets import\n\nconst { Text } = Typography;\n\nexport const EditTransactionFormContent: React.FC<{\n subUsers: AccountCompactDataType[];\n mode?: 'ADD' | 'EDIT';\n setIsRental?: React.Dispatch<React.SetStateAction<boolean>>;\n}> = ({ subUsers, setIsRental, mode = 'EDIT' }) => {\n const _onChangeStatus: SelectProps['onChange'] = (val: number) => {\n setIsRental?.(isRentalProperty(val));\n };\n\n return (\n <>\n <Row gutter={20}>\n <Col span={24}>\n <Form.Item\n label=\"Address\"\n name=\"address\"\n rules={[{ required: true, message: \"Address can't be empty\" }]}\n >\n <Input placeholder=\"Enter the Property Address\" />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"City\" name=\"city\">\n <EZAutocompleteCity />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"State\" name=\"state\">\n <EZSelectUSState />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item label=\"ZIP\" name=\"zip\">\n <Input placeholder=\"Enter the ZIP\" />\n </Form.Item>\n </Col>\n </Row>\n <Row gutter={20}>\n <Col span={24}>\n <Form.Item\n label=\"Transaction Status\"\n name=\"status_id\"\n rules={[{ required: true, message: \"Status can't be empty\" }]}\n >\n <EZSelectStatus\n placeholder=\"Select Transaction Status\"\n allowClear={false}\n onChange={_onChangeStatus}\n />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"MLS\" name=\"mis\">\n <Input placeholder=\"Enter the MLS\" />\n </Form.Item>\n </Col>\n <Col span={15}>\n <Form.Item label=\"ESCROW #\" name=\"escrow\">\n <Input placeholder=\"Enter the ESCROW number\" />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"Property Type\" name=\"type_id\">\n <EZSelectPropertyType\n allowClear={false}\n placeholder=\"Select Property Type\"\n />\n </Form.Item>\n </Col>\n <Col span={15}>\n <Form.Item label=\"Sale Type\" name=\"sale_types_id\">\n <EZSelectSaleType placeholder=\"Select Sale Type\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n label=\"Flag\"\n name=\"flag_id\"\n rules={[{ required: true, message: \"Flag can't be empty\" }]}\n >\n <EZSelectFlag allowClear={false} />\n </Form.Item>\n </Col>\n {/* <Col span={9}>\n <Form.Item\n label=\"Office\"\n name=\"office_id\"\n tooltip={{\n title: 'Main office will be choosen automatically \\n if you leave this field empty',\n icon: <InfoCircleOutlined />,\n }}\n >\n <Select\n style={{ width: '100%' }}\n options={offices}\n optionFilterProp=\"office\"\n fieldNames={{\n label: 'office',\n value: 'office_id',\n }}\n defaultActiveFirstOption\n allowClear\n showArrow\n placeholder={'Select office'}\n ></Select>\n </Form.Item>\n </Col> */}\n <Col span={24}>\n <Form.Item label=\"Assign To\" name=\"assign_to_account_ids\">\n <Select\n style={{ width: '100%' }}\n mode=\"multiple\"\n options={subUsers?.map(user => ({\n label: user.fullname,\n value: user.account_id,\n }))}\n // options={subUsers as any}\n // fieldNames={{ label: 'fullname', value: 'account_id' }}\n // optionFilterProp=\"fullname\"\n showArrow\n showSearch\n placeholder=\"Choose user(s)\"\n optionFilterProp=\"label\"\n placement=\"topRight\"\n />\n </Form.Item>\n </Col>\n </Row>\n </>\n );\n};\n\nexport const ModalEditTransactionInfo: React.FC<{\n transactionData: TransactionDetailType;\n setTransactionData: React.Dispatch<React.SetStateAction<TransactionDetailType>>;\n isModalVisible?: boolean;\n setIsModalVisible?: React.Dispatch<React.SetStateAction<boolean>>;\n reloadTransactionDetail: (showLoadingProgress: boolean, detailType: DetailType) => void;\n}> = ({\n transactionData,\n isModalVisible = false,\n setIsModalVisible = () => {},\n setTransactionData,\n reloadTransactionDetail,\n}) => {\n const [form] = Form.useForm();\n\n const [subUsers, setSubUsers] = useState<AccountCompactDataType[]>([]);\n\n const [SubmittingData, SetSubmittingData] = useState(false);\n\n const _onSubmitForm = (formValues?: any) => {\n SetSubmittingData(true);\n\n const assign_to_account_ids: number[] = formValues.assign_to_account_ids;\n\n const payload = {\n ...formValues,\n sale_types_id: formValues.sale_types_id || null,\n assign_to_accounts: assign_to_account_ids\n ? subUsers\n .filter(u => assign_to_account_ids.includes(u.account_id))\n .map(su => ({\n account_id: su.account_id,\n accountrole_id: su.accountrole_id,\n }))\n : [],\n };\n\n updateTransactionDetail(transactionData.contract_id, payload)\n .then(res => {\n if (res.data) {\n reloadTransactionDetail(false, 'basic_info');\n setIsModalVisible(false);\n showNotification(\n 'success',\n 'Basic transaction info has been successfully updated.'\n );\n }\n })\n .finally(() => {\n SetSubmittingData(false);\n });\n };\n\n const _fetchSubUsers = () => {\n getAllTeamMembers({\n pageSize: 1000,\n }).then(({ data }) => {\n setSubUsers((data as AccountCompactDataType[]) || []);\n });\n };\n\n const _setFormFieldsValue = () => {\n if (transactionData && transactionData.contract_id) {\n const formPayload = transactionData as any;\n formPayload.type_id = transactionData.type_id === 0 ? null : transactionData.type_id;\n formPayload.sale_types_id =\n transactionData.sale_types_id === 0 ? null : transactionData.sale_types_id;\n formPayload.assign_to_account_ids = transactionData.assigned_accounts?.map(\n account => account.account_id\n );\n form.setFieldsValue(formPayload);\n } else {\n form.setFieldsValue({\n status_id: 1,\n flag_id: 1,\n });\n }\n };\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n if (isModalVisible) {\n _setFormFieldsValue();\n }\n }, [transactionData]);\n\n useEffect(() => {\n if (isModalVisible) {\n _fetchSubUsers();\n _setFormFieldsValue();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isModalVisible]);\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <Modal\n title={`Edit basic information`}\n visible={isModalVisible}\n onOk={() => form.submit()}\n onCancel={() => setIsModalVisible(false)}\n okText=\"Save Changes\"\n confirmLoading={SubmittingData}\n width={700}\n style={{ top: 40 }}\n bodyStyle={{ overflowY: 'auto', height: '600px' }}\n >\n <Form layout=\"vertical\" form={form} onFinish={_onSubmitForm} requiredMark={false}>\n <EditTransactionFormContent subUsers={subUsers} />\n </Form>\n </Modal>\n </>\n );\n};\n","import qs from 'qs';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nexport const getAlertSetting = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'admin/settings/alerts',\n });\n};\n\nexport const getPropertyStatusSetting = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'admin/settings/property-status',\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getPropertyTypeSetting = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'admin/settings/property-type',\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getSaleTypeSetting = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'admin/settings/sale-type',\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getTaskTabsDetail = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'admin/settings/default-tasktabs',\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getContractCustomFields = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'transaction/all-additional-info',\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateAlertSetting = (payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'alerts',\n action: 'edit',\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `admin/settings/alerts`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateTransactionSetting = (payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: payload?.property_status\n ? 'property_status'\n : payload?.property_types\n ? 'property_types'\n : payload?.sale_types\n ? 'sale_types'\n : '-',\n action: 'edit',\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `admin/settings/transaction`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateDefaultTaskTabData = (defaulttasktab_id: number, payload: any) => {\n return APIRequest({\n method: 'put',\n url: apiUrl + `admin/settings/default-tasktab/${defaulttasktab_id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const bulkUpdateDefaultTaskPositions = (\n defaulttasktab_id: number,\n arrTaskIDsOrder: { defaulttask_id: number; position_order: number }[]\n) => {\n return APIRequest({\n method: 'put',\n url: apiUrl + `admin/settings/default-tasktab/${defaulttasktab_id}/positions`,\n data: {\n arrTaskIDsOrder,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const bulkUpdateCustomFieldPositions = (\n additional_info_fields_category_id: number,\n arrCustomFieldIDsOrder: { additional_info_field_id: number; rank: number }[]\n) => {\n return APIRequest({\n method: 'put',\n url:\n apiUrl +\n `admin/settings/contract-custom-section/${additional_info_fields_category_id}/positions`,\n data: {\n arrCustomFieldIDsOrder,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateDefaultTaskData = (\n defaulttasktab_id?: number,\n defaulttask_id?: number,\n payload?: any\n) => {\n return APIRequest({\n method: 'put',\n url:\n apiUrl +\n `admin/settings/default-tasktab/${defaulttasktab_id}/default-task/${defaulttask_id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const addNewDefaultTaskTab = (payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'task_templates',\n action: 'add_tasktab',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/settings/default-tasktabs`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const addNewDefaultTaskData = (defaulttasktab_id?: number, payload?: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'task_templates',\n action: 'add_task',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/settings/default-tasktab/${defaulttasktab_id}/default-tasks`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteDefaultTask = (defaulttasktab_id: number, defaulttask_id: number) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'task_templates',\n action: 'delete_task',\n });\n\n return APIRequest({\n method: 'delete',\n url:\n apiUrl +\n `admin/settings/default-tasktab/${defaulttasktab_id}/default-task/${defaulttask_id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteDefaultTaskTab = (defaulttasktab_id: number) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'task_templates',\n action: 'delete_tasktab',\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `admin/settings/default-tasktab/${defaulttasktab_id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const duplicateTaskTemplate = (defaulttasktab_id: number) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'task_templates',\n action: 'duplicate_tasktab',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/settings/default-tasktab/${defaulttasktab_id}/duplicate`,\n useDefaultErrorNotif: true,\n });\n};\n// Custom sections and fields APIs\n\nexport const addNewContractCustomSection = (payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'custom_section_fields',\n action: 'add_section',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/settings/contract-custom-sections`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\nexport const updateContractCustomSection = (\n additional_info_fields_category_id: number,\n payload: any\n) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'custom_section_fields',\n action: 'edit_section',\n });\n\n return APIRequest({\n method: 'put',\n url:\n apiUrl + `admin/settings/contract-custom-section/${additional_info_fields_category_id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteContractCustomSection = (additional_info_fields_category_id: number) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'custom_section_fields',\n action: 'delete_section',\n });\n\n return APIRequest({\n method: 'delete',\n url:\n apiUrl + `admin/settings/contract-custom-section/${additional_info_fields_category_id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const addNewContractCustomField = (\n additional_info_fields_category_id: number,\n payload: any\n) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'custom_section_fields',\n action: 'add_field',\n });\n\n return APIRequest({\n method: 'post',\n url:\n apiUrl +\n `admin/settings/contract-custom-section/${additional_info_fields_category_id}/fields`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateContractCustomField = (\n additional_info_fields_category_id: number,\n additional_info_field_id: number,\n payload: any\n) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'custom_section_fields',\n action: 'edit_field',\n });\n\n return APIRequest({\n method: 'put',\n url:\n apiUrl +\n `admin/settings/contract-custom-section/${additional_info_fields_category_id}/field/${additional_info_field_id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteContractCustomField = (\n additional_info_fields_category_id: number,\n additional_info_field_id: number\n) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'custom_section_fields',\n action: 'delete_field',\n });\n\n return APIRequest({\n method: 'delete',\n url:\n apiUrl +\n `admin/settings/contract-custom-section/${additional_info_fields_category_id}/field/${additional_info_field_id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const addNewDropdownOption = (\n additional_info_fields_category_id: number,\n additional_info_field_id: number,\n option_value: string\n) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'custom_section_fields',\n action: 'add_dropdown_option',\n });\n\n return APIRequest({\n method: 'post',\n url:\n apiUrl +\n `admin/settings/contract-custom-section/${additional_info_fields_category_id}/field/${additional_info_field_id}/options`,\n data: { option_value },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateDropdownOption = (\n additional_info_fields_category_id: number,\n additional_info_field_id: number,\n additional_info_fields_option_id: number,\n option_value: string\n) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'custom_section_fields',\n action: 'edit_dropdown_option',\n });\n\n return APIRequest({\n method: 'put',\n url:\n apiUrl +\n `admin/settings/contract-custom-section/${additional_info_fields_category_id}/field/${additional_info_field_id}/option/${additional_info_fields_option_id}`,\n data: { option_value },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteDropdownOption = (\n additional_info_fields_category_id: number,\n additional_info_field_id: number,\n additional_info_fields_option_id: number\n) => {\n return APIRequest({\n method: 'delete',\n url:\n apiUrl +\n `admin/settings/contract-custom-section/${additional_info_fields_category_id}/field/${additional_info_field_id}/option/${additional_info_fields_option_id}`,\n useDefaultErrorNotif: true,\n });\n};\n// End of custom section and fields API call\n\n// Custom Document Folder APIs\nexport const getDocumentFolders = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'documents/folders',\n useDefaultErrorNotif: true,\n });\n};\n\nexport const addNewDocumentFolder = (payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'document_templates',\n action: 'add_folder',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/settings/document-folders`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const addNewDocumentTemplate = (folder_id?: number, payload?: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'document_templates',\n action: 'add_doc_template',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/settings/document-folder/${folder_id}/template`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateDocumentFolder = (folder_id: number, payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'document_templates',\n action: 'edit_folder',\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `admin/settings/document-folder/${folder_id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateTemplateData = (\n folder_id?: number,\n docs_template_id?: number,\n payload?: any\n) => {\n return APIRequest({\n method: 'put',\n url: apiUrl + `admin/settings/document-folder/${folder_id}/template/${docs_template_id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteDocumentFolder = (folder_id: number) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'document_templates',\n action: 'delete_folder',\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `admin/settings/document-folder/${folder_id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteDocumentTemplate = (folder_id: number, docs_template_id: number) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'transaction',\n sub_section: 'document_templates',\n action: 'delete_folder',\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `admin/settings/document-folder/${folder_id}/template/${docs_template_id}`,\n useDefaultErrorNotif: true,\n });\n};\n\n// End of Custom Document Folder APIs\n\n// Sub User APIs\nexport const getSubUsers = (params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'admin/sub-users' + (params ? `?${params}` : ''),\n useDefaultErrorNotif: true,\n });\n};\n\nexport const addNewSubUser = (payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'team_access_management',\n sub_section: 'sub_users',\n action: 'add_user',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/sub-users`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateSubUser = (account_id: number, payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'team_access_management',\n sub_section: 'sub_users',\n action: 'edit_user',\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `admin/sub-user/${account_id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteSubUser = (account_id: number) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'team_access_management',\n sub_section: 'sub_users',\n action: 'delete_user',\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `admin/sub-user/${account_id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const resendInvitation = (account_id: number) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'team_access_management',\n sub_section: 'sub_users',\n action: 'resend_invitation',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/sub-user/${account_id}/resend-invitation`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getSubUserPermission = (account_id: number) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `admin/sub-user/${account_id}/permission`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getMaxNumberOfSubUsers = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'admin/max-no-of-sub-users',\n });\n};\n\nexport const updateSubUserPermission = (account_id: number, payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'team_access_management',\n sub_section: 'sub_users',\n action: 'edit_permission',\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `admin/sub-user/${account_id}/permission`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n// End of Sub User APIs\n\n// Office APIs\nexport const addNewOffice = (payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'team_access_management',\n sub_section: 'offices',\n action: 'add_office',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `offices`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateOffice = (office_id: number, payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'team_access_management',\n sub_section: 'offices',\n action: 'edit_office',\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `office/${office_id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteOffice = (office_id: number) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'team_access_management',\n sub_section: 'offices',\n action: 'delete_office',\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `office/${office_id}`,\n useDefaultErrorNotif: true,\n });\n};\n// End of Office APIs\n","import { Alert, Button, Space } from 'antd';\n\nimport { AccountDataType } from 'types/account';\n\nexport const DemoBanner: React.FC<{ account?: AccountDataType }> = ({ account }) => {\n return (\n <Alert\n className={`demo-banner ${account?.account_id ? 'with-action' : ''}`}\n message=\"You are currently accessing the Demo version.\"\n type=\"info\"\n action={\n account?.account_id ? (\n <Space>\n <Button size=\"small\" type=\"link\">\n {/* <a\n href={`https://docs.google.com/forms/d/e/1FAIpQLSc_KXgn2Z4YE8NJ6jY2S5UovJItL2wsQlOV_h38AthWhhTd0Q/viewform?usp=pp_url&entry.359900509=${encodeURIComponent(\n account?.fullname || '-'\n )}&entry.1112551051=${account?.email}&entry.162893942=${\n account?.account_id\n }`}\n target=\"_blank\"\n > */}\n <a\n href={`https://docs.google.com/forms/d/e/1FAIpQLSe-rtW1gIpk_LXqC-pT5p_eFH9Afkuwn4jKGHydDaTiePF9oA/viewform`}\n target=\"_blank\"\n >\n <u>Migration Form</u>\n </a>\n </Button>\n </Space>\n ) : (\n <></>\n )\n }\n showIcon\n />\n );\n};\n","import { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\n\nexport const getOnboardingList = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `onboarding-list`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateOnboardingCompleted = (payload: any) => {\n return APIRequest({\n method: 'put',\n url: apiUrl + `onboarding-completed`,\n data: {\n ...payload,\n },\n useDefaultErrorNotif: true,\n });\n};\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Modal, Form } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app types import\n// EZ web-app components import\nimport { EditProspectFormContent } from './Modal_editProspectInfo';\nimport { showNotification } from 'utils/notificationUtil';\nimport { addNewProspect } from 'utils/ez_api/prospect/prospectAPIs';\nimport { HomeContext } from 'context/EZContext';\nimport { ProspectDataType } from 'types/prospect';\n\n// EZ web-app styles and assets import\n\nexport const AddNewProspectModal: React.FC<{\n isModalVisible: boolean;\n setIsModalVisible: React.Dispatch<React.SetStateAction<boolean>>;\n onSuccess?: () => void;\n}> = ({ isModalVisible, setIsModalVisible, onSuccess }) => {\n const HomeCtx = useContext(HomeContext);\n\n const [form] = Form.useForm();\n\n const [submittingData, setSubmittingData] = useState(false);\n\n const _onSubmitForm = (formValues: any) => {\n setSubmittingData(true);\n\n const payload = {\n ...formValues,\n };\n\n addNewProspect(payload)\n .then(res => {\n if (res.data) {\n const prospect = res.data as ProspectDataType;\n\n setIsModalVisible(false);\n showNotification('success', 'New prospect has been successfully added.');\n setTimeout(() => {\n HomeCtx.openProspectDetailTab(prospect.prospect_id, prospect.fullname, {\n ...prospect,\n });\n }, 10);\n }\n onSuccess?.();\n })\n .finally(() => {\n setSubmittingData(false);\n });\n };\n\n useEffect(() => {\n if (isModalVisible) {\n } else {\n form?.resetFields();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isModalVisible]);\n\n return (\n <>\n <>\n <Modal\n title={`Add New Prospect`}\n visible={isModalVisible}\n onOk={() => form.submit()}\n onCancel={() => setIsModalVisible(false)}\n okText=\"Save and Edit Detail\"\n confirmLoading={submittingData}\n width={800}\n style={{ top: 40 }}\n className=\"add-new-prospect-modal\"\n >\n <Form\n layout=\"vertical\"\n form={form}\n onFinish={_onSubmitForm}\n requiredMark={true}\n >\n <EditProspectFormContent />\n </Form>\n </Modal>\n </>\n </>\n );\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Modal, Form, Input, Select, Typography, Divider, Button } from 'antd';\nimport moment from 'moment';\n\n// EZ web-app utils import\n// EZ web-app types import\n// EZ web-app components import\nimport { showNotification } from 'utils/notificationUtil';\nimport { EZAutocompleteCity, EZDatePicker, EZSelectUSState } from 'components';\nimport { AccountCompactDataType } from 'types/account';\nimport { SelectProps } from 'antd/es/select';\nimport {\n ProspectDataType,\n ProspectFlagType,\n ProspectFollowupCodeType,\n ProspectGroupType,\n} from 'types/prospect';\nimport { getProspectMetaOptions, updateProspectDetail } from 'utils/ez_api/prospect/prospectAPIs';\nimport { FlagTwoTone, MinusCircleOutlined, PlusOutlined, StopOutlined } from '@ant-design/icons';\n\n// EZ web-app styles and assets import\n\nconst { Text } = Typography;\n\nexport const PHONE_CATEGORY_OPTS: SelectProps['options'] = [\n {\n label: 'Best',\n value: 'Best',\n },\n {\n label: 'Cell',\n value: 'Cell',\n },\n {\n label: 'Fax',\n value: 'Fax',\n },\n {\n label: 'Work',\n value: 'Work',\n },\n];\n\nexport const EditProspectFormContent: React.FC<{\n mode?: 'ADD' | 'EDIT';\n setIsBuyer?: React.Dispatch<React.SetStateAction<boolean>>;\n}> = ({ setIsBuyer, mode = 'EDIT' }) => {\n const [groups, setGroups] = useState<ProspectGroupType[]>([]);\n const [flags, setFlags] = useState<ProspectFlagType[]>([]);\n const [followupCodes, setFollowupCodes] = useState<ProspectFollowupCodeType[]>([]);\n\n const _fetchMetaOptions = () => {\n Promise.all([\n getProspectMetaOptions('groups', true).then(({ data }) => data),\n getProspectMetaOptions('flags', true).then(({ data }) => data),\n getProspectMetaOptions('followup_codes', true).then(({ data }) => data),\n ]).then(resolveValues => {\n setGroups(resolveValues?.[0] || []);\n setFlags(resolveValues?.[1] || []);\n setFollowupCodes(resolveValues?.[2] || []);\n });\n };\n\n useEffect(() => {\n _fetchMetaOptions();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return (\n <>\n {/* <Divider orientation=\"left\" className=\"\">\n <b>Personal Information</b>\n </Divider> */}\n <Row gutter={20}>\n <Col span={18}>\n <Form.Item\n label=\"Fullname\"\n name=\"fullname\"\n rules={[{ required: true, message: \"Name can't be empty\" }]}\n >\n <Input placeholder=\"Enter the fullname\" />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item label=\"Client Type\" name=\"inquirytype_id\">\n <Select allowClear showArrow placeholder=\"Select Type\">\n <Select.Option value={1}>Buyer</Select.Option>\n <Select.Option value={2}>Seller</Select.Option>\n </Select>\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"Email\" name=\"email\" rules={[{ required: true }]}>\n <Input placeholder=\"Enter the email\" />\n </Form.Item>\n </Col>\n <Col span={15}>\n <Form.Item label=\"Phone(s)\" className=\"mb-0\">\n <Form.List name=\"prospects_phones\">\n {(fields, { add, remove }) => (\n <Row gutter={[0, 8]}>\n {fields.map((field, index) => (\n <Col span={24}>\n <Form.Item\n {...field}\n name={[field.name, 'category']}\n noStyle\n >\n <Select\n style={{ width: '45%' }}\n options={PHONE_CATEGORY_OPTS}\n placeholder=\"Select Category\"\n ></Select>\n </Form.Item>\n <Form.Item\n {...field}\n name={[field.name, 'phone']}\n noStyle\n >\n <Input\n placeholder=\"Enter the phone number\"\n style={{ width: '45%' }}\n className=\"ml-2\"\n />\n </Form.Item>\n\n {index > 0 ? (\n <MinusCircleOutlined\n onClick={() => remove(field.name)}\n className=\"ml-2\"\n />\n ) : (\n <MinusCircleOutlined\n onClick={() => remove(field.name)}\n className=\"ml-2\"\n />\n )}\n </Col>\n ))}\n <Col span={24}>\n <Form.Item>\n <Button\n type=\"dashed\"\n onClick={() => add()}\n block\n icon={<PlusOutlined />}\n >\n Add Phone\n </Button>\n </Form.Item>\n </Col>\n </Row>\n )}\n </Form.List>\n </Form.Item>\n </Col>\n <Col span={18}>\n <Form.Item\n label=\"Address\"\n name=\"address\"\n // rules={[{ required: true, message: \"Address can't be empty\" }]}\n >\n <Input placeholder=\"Enter the address\" />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item label=\"Country\" name=\"country\">\n <Input placeholder=\"Enter the country\" />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"City\" name=\"city\">\n <EZAutocompleteCity />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"State\" name=\"state\">\n <EZSelectUSState />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item label=\"ZIP\" name=\"zip\">\n <Input placeholder=\"Enter the ZIP\" />\n </Form.Item>\n </Col>\n </Row>\n <Divider orientation=\"left\" className=\"\">\n <b>Prospect Information</b>\n </Divider>\n <Row gutter={20}>\n <Col span={12}>\n <Form.Item label=\"Registration Date\" name=\"registration_date\">\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Last Contacted Date\" name=\"prospects_last_visit_date_id\">\n <EZDatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n <Col span={8}>\n <Form.Item\n label=\"Group\"\n name=\"group_id\"\n tooltip=\"Edit the options on Admin Area page.\"\n >\n <Select\n allowClear\n showArrow\n placeholder=\"Select Group\"\n options={groups}\n fieldNames={{\n value: 'group_id',\n label: 'group_name',\n }}\n ></Select>\n </Form.Item>\n </Col>\n <Col span={8}>\n <Form.Item\n label=\"Follow-up Code\"\n name=\"followup_id\"\n tooltip=\"Edit the options on Admin Area page.\"\n >\n <Select\n allowClear\n showArrow\n placeholder=\"Select Followup Code\"\n options={followupCodes}\n fieldNames={{\n value: 'followup_id',\n label: 'code',\n }}\n ></Select>\n </Form.Item>\n </Col>\n <Col span={8}>\n <Form.Item\n label=\"Flag\"\n name=\"flag_id\"\n tooltip=\"Edit the options on Admin Area page.\"\n >\n <Select allowClear showArrow placeholder=\"Select Flag\">\n {flags?.map(flag => (\n <Select.Option value={flag.flag_id}>\n {flag.flag_id !== 0 ? (\n <FlagTwoTone\n twoToneColor={flag.prospects_default_flag?.flag_color}\n />\n ) : (\n <StopOutlined />\n )}\n <span className=\"ml-2 text-capitalize\">\n {flag.prospects_default_flag?.flag_color}\n </span>\n </Select.Option>\n ))}\n </Select>\n </Form.Item>\n </Col>\n </Row>\n </>\n );\n};\n\nexport const ModalEditProspectInfo: React.FC<{\n prospectData: ProspectDataType;\n setProspectData: React.Dispatch<React.SetStateAction<ProspectDataType>>;\n isModalVisible?: boolean;\n setIsModalVisible?: React.Dispatch<React.SetStateAction<boolean>>;\n reloadProspectDetail: (showLoadingProgress: boolean) => void;\n}> = ({\n prospectData,\n isModalVisible = false,\n setIsModalVisible = () => {},\n setProspectData,\n reloadProspectDetail,\n}) => {\n const [form] = Form.useForm();\n\n const [SubmittingData, SetSubmittingData] = useState(false);\n\n const _onSubmitForm = (formValues?: any) => {\n SetSubmittingData(true);\n\n const payload = {\n ...formValues,\n };\n\n updateProspectDetail(prospectData.prospect_id, payload)\n .then(res => {\n if (res.data) {\n reloadProspectDetail(false);\n setIsModalVisible(false);\n showNotification(\n 'success',\n 'Basic prospect info has been successfully updated.'\n );\n }\n })\n .finally(() => {\n SetSubmittingData(false);\n });\n };\n\n const _setFormFieldsValue = () => {\n if (prospectData && prospectData.prospect_id) {\n const formPayload = prospectData as any;\n\n const registrationDateteMoment = prospectData.registration_date\n ? moment.utc(prospectData.registration_date)\n : '';\n const prospects_last_visit_date_idMoment = prospectData.prospects_last_visit_date_id\n ? moment.utc(prospectData.prospects_last_visit_date_id)\n : '';\n\n form.setFieldsValue({\n ...formPayload,\n registration_date:\n registrationDateteMoment && registrationDateteMoment.isValid()\n ? registrationDateteMoment\n : null,\n prospects_last_visit_date_id:\n prospects_last_visit_date_idMoment &&\n prospects_last_visit_date_idMoment.isValid()\n ? prospects_last_visit_date_idMoment\n : null,\n\n group_id: prospectData.group_id || null,\n inquirytype_id: prospectData.inquirytype_id || null,\n followup_id: prospectData.followup_id || null,\n flag_id: prospectData.flag_id || null,\n type_id: prospectData.type_id || null,\n });\n } else {\n form.setFieldsValue({\n status_id: 1,\n flag_id: 1,\n });\n }\n };\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n if (isModalVisible) {\n _setFormFieldsValue();\n }\n }, [prospectData]);\n\n useEffect(() => {\n if (isModalVisible) {\n _setFormFieldsValue();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isModalVisible]);\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <Modal\n title={`Edit basic information`}\n visible={isModalVisible}\n onOk={() => form.submit()}\n onCancel={() => setIsModalVisible(false)}\n okText=\"Save Changes\"\n confirmLoading={SubmittingData}\n width={700}\n style={{ top: 40 }}\n // bodyStyle={{ overflowY: 'auto', height: '600px' }}\n >\n <Form layout=\"vertical\" form={form} onFinish={_onSubmitForm} requiredMark={false}>\n <EditProspectFormContent />\n </Form>\n </Modal>\n </>\n );\n};\n","import {\n DefaultAdditionalContactStrOptions_Roles,\n DefaultMeStrOptions,\n DefaultTransactionStrOptions_Listing,\n DefaultTransactionStrOptions_Rental,\n} from 'components/select/selectEmailRecipient';\nimport { SIMPLE_EMAIL_REGEX } from 'static/consts';\n\nexport enum CacheEnum {\n OpenTabs = 'OpenTabs',\n}\n\nexport function saveJson(key: CacheEnum, data: Object) {\n localStorage.setItem(key, JSON.stringify(data));\n}\nexport const validateEmailTemplateRecipients = (values?: string[]) => {\n if (values) {\n for (let index = 0; index < values.length; index++) {\n const recipientTagValue = values[index];\n\n if (\n !SIMPLE_EMAIL_REGEX.test(recipientTagValue) &&\n !DefaultMeStrOptions.includes(recipientTagValue) &&\n !DefaultTransactionStrOptions_Listing.includes(recipientTagValue) &&\n !DefaultTransactionStrOptions_Rental.includes(recipientTagValue) &&\n !recipientTagValue.startsWith(DefaultAdditionalContactStrOptions_Roles) // For Additional Contact - Roles\n ) {\n return Promise.reject('Invalid email(s) and or template code(s) has been found');\n }\n }\n }\n\n return Promise.resolve();\n};\n","// Core React libraries import\nimport React, { useEffect, useRef, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Input, Form, Col, Mentions } from 'antd';\nimport qs from 'qs';\n\n// EZ web-app utils import\nimport { validateEmailTemplateRecipients } from 'utils/formUtil';\n// EZ web-app APIs import\n// EZ web-app types import\n// EZ web-app components import\nimport { EZSelectDocument, EZSelectEmailRecipient, EmailEditorFormItem } from 'components';\nimport { EmailTemplateType } from 'types/emailTemplate';\nimport { TransactionDocItemType } from 'types/transaction';\nimport { getTransactionDocs } from 'utils/ez_api/documentAPIs';\n\n// EZ web-app styles and assets import\n\nexport const Partial_EmailTemplateFormItems: React.FC<{\n formType: 'EMAIL_TEMPLATE' | 'EMAIL_FORM';\n formMode?: 'ADD' | 'EDIT';\n onSelectTemplate?: (emailTemplate: EmailTemplateType) => void;\n excludedTemplateIDs?: number[];\n showAttachmentField?: boolean;\n contractID?: number;\n docList?: TransactionDocItemType[];\n}> = ({\n formType,\n formMode,\n onSelectTemplate,\n excludedTemplateIDs,\n showAttachmentField,\n contractID,\n}) => {\n const [docList, setDocList] = useState<TransactionDocItemType[]>([]);\n\n const _fetchDocList = () => {\n if (contractID && showAttachmentField)\n getTransactionDocs(\n contractID,\n qs.stringify({\n pageSize: 500,\n })\n ).then(result => {\n setDocList(result?.data || []);\n });\n };\n\n useEffect(() => {\n if (showAttachmentField) _fetchDocList();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <Col span={24}>\n <Form.Item\n label=\"Email Subject\"\n name=\"msg_subject\"\n rules={[\n {\n required: formType === 'EMAIL_FORM' ? true : false,\n message: \"Email subject can't be empty\",\n },\n ]}\n extra={\n 'Type { to add custom email code such as transaction/listing address. Currently, only address can be added.'\n }\n >\n {/* <Input placeholder=\"Enter the subject\" /> */}\n <Mentions\n style={{ width: '100%' }}\n prefix={['{']}\n onKeyPress={e => {\n e.key === 'Enter' && e.preventDefault();\n }}\n rows={1}\n placeholder=\"Enter the subject\"\n >\n <Mentions.Option value=\"{ address }}\">Address</Mentions.Option>\n </Mentions>\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n label=\"Email Recipient(s)\"\n name=\"msg_to\"\n rules={[\n {\n required: formType === 'EMAIL_FORM' ? true : false,\n message: \"Email recipient(s) can't be empty\",\n },\n {\n validator: (_, value: string[]) => {\n return validateEmailTemplateRecipients(value);\n },\n },\n ]}\n >\n <EZSelectEmailRecipient showTransactionOptions showMe />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item\n label=\"Email CC(s)\"\n name=\"msg_cc\"\n rules={[\n {\n validator: (_, value: string[]) => {\n return validateEmailTemplateRecipients(value);\n },\n },\n ]}\n >\n <EZSelectEmailRecipient showTransactionOptions showMe />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item\n label=\"Email BCC(s)\"\n name=\"msg_bcc\"\n rules={[\n {\n validator: (_, value: string[]) => {\n return validateEmailTemplateRecipients(value);\n },\n },\n ]}\n >\n <EZSelectEmailRecipient showTransactionOptions showMe />\n </Form.Item>\n </Col>\n <Col span={24} className=\"email-body-container\">\n <EmailEditorFormItem\n isRequired\n showTemplateDropdown\n showEmailSignatureDropdown\n formMode={formMode}\n onSelectTemplate={onSelectTemplate}\n excludedTemplateIDs={excludedTemplateIDs}\n />\n </Col>\n {showAttachmentField && (\n <Col span={24}>\n <Form.Item label=\"Attachments\" name=\"msg_attachments\">\n <EZSelectDocument\n options={docList as any[]}\n onChange={(values: TransactionDocItemType, options: any) => {\n // _onChangeSelectedDocIDs(values, options)\n }}\n notFoundContent={\n <span>\n No documents/files uploaded on <b>\"Documents and Files\"</b> tab.\n </span>\n }\n // value={[]}\n />\n </Form.Item>\n </Col>\n )}\n </>\n );\n};\n","// Core React libraries import\nimport React, { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { useHistory, useLocation } from 'react-router-dom';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Layout,\n Menu,\n Tabs,\n Avatar,\n Dropdown,\n Space,\n Typography,\n Badge,\n Button,\n Modal,\n} from 'antd';\nimport {\n AppstoreOutlined,\n QuestionCircleOutlined,\n BellOutlined,\n PlusOutlined,\n LogoutOutlined,\n UpOutlined,\n SearchOutlined,\n} from '@ant-design/icons';\nimport { MenuClickEventHandler } from 'rc-menu/lib/interface';\nimport { Quill } from 'react-quill';\n\n// EZ web-app utils import\nimport { clearLocalStoragePayload } from 'utils/ez_api/loginUtil';\nimport { getLoggedAccountData, getMyPermission } from 'utils/ez_api/accountAPIs';\nimport { getInitialFromFullname } from 'utils/commonUtil';\nimport { MSloginRequest, isDemoENV } from 'utils/envUtil';\n// EZ web-app types import\nimport {\n IWebAppTabProps,\n TAB_CATEGORY,\n TransactionTabIcon,\n CalendarTabIcon,\n DocumentTabIcon,\n MAIN_TAB_INSTANCES,\n WEB_APP_MAIN_MENU,\n ProspectTabIcon,\n} from '../types/webAppTab';\nimport {\n ACCOUNT_ROLE_HAS_ACCESS_TO_ADMIN_AREA,\n AccountDataType,\n AccountPermissionType,\n} from 'types/account';\n// EZ web-app components import\nimport { HomeContext, UserContextProvider } from '../context/EZContext';\nimport { EZSelectTransaction } from 'components';\nimport { DemoBanner } from 'components/general/demoBanner';\nimport { NewTransactionModal } from 'components/appPage/modals/newTransactionModal';\nimport { AddNewProspectModal } from './tabs/prospect/modal/Modal_addNewProspectModal';\nimport ViewDetailTransaction from './tabs/transaction/ViewDetailTransaction';\nimport ProspectDetail from './tabs/prospect/ProspectDetail';\nimport { HomeNotification } from './home/notification';\nimport { getAccountRole, hasPermission } from 'utils/permissionUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\n// EZ web-app styles and assets import\nimport '../styles/home.scss';\nimport {\n getMyEmailCredential,\n requestNew3rdPartyEmailAccessToken,\n updateEmailCredential,\n} from 'utils/ez_api/emailLogAPIs';\nimport { EmailCredentialType, SENDMAIL_ONBEHALF } from 'types/email';\nimport { useMsal } from '@azure/msal-react';\nimport { CodeTemplateMarker } from 'utils/quillUtils';\nimport { loadSubscriptionListFromServer } from 'utils/paymentUtil';\nimport { HOTJAR_EVENT_TYPE, hotjarEvent, hotjarIdentify } from 'utils/3rd_party_api/hotjarUtil';\nimport { TriggerRefetchDataKey } from 'types/triggerRefetchData';\nimport { EZOnboardingButton } from 'components/onboarding/OnboardingButton';\nimport { getOnboardingList } from 'utils/ez_api/onboardingAPIs';\nimport { saveObjectToLocalStorage } from 'utils/cacheUtil';\nimport { updateOnboardingStep } from 'utils/onboardingUtil';\nimport { captureException } from '@sentry/react';\nimport { capitalize, replaceSpecialChar } from 'utils/stringUtil';\nimport { getTransactionDetail } from 'utils/ez_api/transactionAPIs';\nimport { showNotification } from 'utils/notificationUtil';\n\ndeclare global {\n interface Window {\n FreshworksWidget: any;\n }\n}\n\nwindow.FreshworksWidget = window.FreshworksWidget || {};\n\nconst { Header, Content, Footer } = Layout;\nconst { TabPane } = Tabs;\nconst { Text } = Typography;\n\nQuill.register({\n 'formats/CodeTemplateMarker': CodeTemplateMarker,\n});\n\nconst QuickSearch: React.FC<{\n openTransactionDetailTab: (\n contractID: number | string,\n contractAddress: string | undefined,\n contractData: any | undefined,\n origin?: string\n ) => void;\n}> = ({ openTransactionDetailTab }) => {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const HomeCtx = useContext(HomeContext);\n\n const _onSelect = (contractID: number, option: any) => {\n HomeCtx.setActiveTabByButton(true);\n openTransactionDetailTab(contractID, option.selectedLabel, {}, 'Quick_search');\n setTimeout(() => {\n setIsModalOpen(false);\n }, 10);\n // update onboarding step to completed\n updateOnboardingStep('use_quick_search', HomeCtx.refetchOnboardingList);\n };\n const _showSearchModal = () => {\n setIsModalOpen(true);\n };\n\n return (\n <>\n <Button\n className=\"ez-action-btn\"\n size=\"small\"\n icon={<SearchOutlined />}\n onClick={() => _showSearchModal()}\n >\n Search\n </Button>\n <Modal\n width={700}\n closable\n maskClosable\n title=\"Quick Search for Transaction\"\n visible={isModalOpen}\n okButtonProps={{\n style: {\n display: 'none',\n },\n }}\n cancelText=\"Close\"\n onCancel={() => setIsModalOpen(false)}\n destroyOnClose\n >\n <div>\n <>\n <EZSelectTransaction\n placeholder=\"Search by address and choose a transaction\"\n onChange={value => {}}\n mode={undefined}\n autoFocus\n onSelect={(val: any, option: any) => {\n _onSelect(val, option);\n\n Mixpanel.track('app.use_quick_search', {\n contract_id: val,\n });\n }}\n showArrow={false}\n size=\"large\"\n />\n </>\n </div>\n </Modal>\n </>\n );\n};\n\nconst QuickActionAddButtons: React.FC<{\n openTransactionDetailTab: (\n contractID: number | string,\n contractAddress: string | undefined,\n contractData: any\n ) => void;\n}> = ({ openTransactionDetailTab }) => {\n const [isModalAddTransactionOpen, setIsModalAddTransactionOpen] = useState(false);\n const [isModalAddProspectOpen, setIsModalAddProspectOpen] = useState(false);\n\n const _quickButtonMenuAction = (key: string) => {\n switch (key) {\n case 'add-prospect':\n setIsModalAddProspectOpen(true);\n break;\n\n default:\n break;\n }\n };\n\n return (\n <>\n <Dropdown.Button\n type=\"primary\"\n className=\"main-menu-add-action\"\n onClick={() => setIsModalAddTransactionOpen(true)}\n trigger={['click']}\n overlay={\n <Menu\n onClick={info => _quickButtonMenuAction(info.key)}\n items={[\n {\n label: 'Add Prospect',\n key: 'add-prospect',\n icon: <ProspectTabIcon />,\n },\n // {\n // label: 'Add new agenda',\n // key: '2',\n // icon: <CalendarTabIcon />,\n // },\n // {\n // label: 'Upload new document',\n // key: '3',\n // icon: <DocumentTabIcon />,\n // },\n ]}\n />\n }\n >\n <PlusOutlined />\n Add transaction\n </Dropdown.Button>\n {/* <Button\n type=\"primary\"\n className=\"main-menu-add-action\"\n icon={<PlusOutlined />}\n onClick={() => setIsModalAddTransactionOpen(true)}\n >\n Add transaction\n </Button> */}\n <>\n <NewTransactionModal\n isModalVisible={isModalAddTransactionOpen}\n setIsModalVisible={setIsModalAddTransactionOpen}\n />\n <AddNewProspectModal\n isModalVisible={isModalAddProspectOpen}\n setIsModalVisible={setIsModalAddProspectOpen}\n />\n </>\n </>\n );\n};\n\nexport const Home = function Home(props: any) {\n const history = useHistory();\n const location = useLocation();\n\n const queryParameters = useMemo(() => {\n return new URLSearchParams(location.search);\n }, [location.search]);\n\n const tabsUrl = capitalize(queryParameters.get('tabs')?.toString() || '');\n const idUrl = capitalize(queryParameters.get('id')?.toString() || '');\n const subTabsUrl = queryParameters.get('sub_tabs')?.toString() || '';\n\n const _generateNewTabIndex = (\n tabCategory: string,\n recordId?: string | number | undefined\n ): string => {\n return `${tabCategory.replaceAll(' ', '-').toLowerCase()}${\n recordId ? '&id=' + recordId.toString() : ''\n }`;\n };\n\n const defaultTabs = [MAIN_TAB_INSTANCES[0], MAIN_TAB_INSTANCES[1]];\n\n const [UserData, setUserData] = useState<AccountDataType>();\n const [UserPermission, setUserPermission] = useState<AccountPermissionType>();\n const [triggerRefetchDataList, setTriggerRefetchDataList] = useState<TriggerRefetchDataKey[]>(\n []\n );\n const [isOnboadingLoading, setIsOnboadingLoading] = useState(false);\n const [_activeTabByButton, _setActiveTabByButton] = useState(false);\n const [firstRender, setFirstRender] = useState(true);\n\n const accountrole_id = UserPermission?.accountrole_id;\n\n const hasAccessToAdminArea = accountrole_id\n ? ACCOUNT_ROLE_HAS_ACCESS_TO_ADMIN_AREA.includes(accountrole_id)\n : false;\n\n const [_appTabs, _setAppTabs] = useState<IWebAppTabProps[]>(\n defaultTabs.map(defaultTab => ({\n title: defaultTab.label,\n key: _generateNewTabIndex(defaultTab.tabCategory),\n tabIcon: defaultTab.tabIcon(),\n content: defaultTab.tabContent,\n closeable: defaultTab.tabCloseable,\n\n tabCategory: defaultTab.tabCategory,\n isMainMenu: true,\n }))\n );\n const [activeTabKey, setActiveTabKey] = useState(_appTabs[0].key);\n\n const fetchOnboardingList = () => {\n setIsOnboadingLoading(true);\n getOnboardingList()\n .then(({ data }) => {\n saveObjectToLocalStorage('onboarding_list', data);\n })\n .catch(() => {\n saveObjectToLocalStorage('onboarding_list', { learner: [] });\n })\n .finally(() => {\n setIsOnboadingLoading(false);\n });\n };\n\n const { instance: MSInstance } = useMsal();\n\n const _logout = () => {\n clearLocalStoragePayload();\n history.push('/');\n };\n\n const _handleChangeMenuTab = (menuTab: string) => {\n // hit hotjar event every click Tasks menu\n if (menuTab === 'Tasks') {\n hotjarEvent(HOTJAR_EVENT_TYPE.CLICK_TASKS_MENU);\n // update onboarding step to completed\n updateOnboardingStep('check_daily_task', fetchOnboardingList);\n return;\n }\n };\n\n const _openMainMenuTabByKey = (key: string) => {\n _handleChangeMenuTab(key);\n const selectedMenu = MAIN_TAB_INSTANCES.find(el => el.key === key);\n\n if (selectedMenu) {\n const activeTab = _appTabs.find(\n tab => tab.tabCategory.toString() === key && tab.isMainMenu && !tab.recordId\n );\n\n if (activeTab) {\n setActiveTabKey(activeTab.key);\n } else {\n _addTab({\n title: selectedMenu.label,\n key: '',\n tabIcon: selectedMenu.tabIcon(),\n content: selectedMenu.tabContent,\n closeable: selectedMenu.tabCloseable,\n\n tabCategory: key,\n isMainMenu: true,\n });\n }\n }\n };\n\n const _mainMenuOnClick: MenuClickEventHandler = ({ key }) => {\n _openMainMenuTabByKey(key);\n };\n\n const _onChange = (newActiveKey: string) => {\n _setActiveTabByButton(true);\n setActiveTabKey(newActiveKey);\n };\n\n const _addTab = (tab: IWebAppTabProps, shiftFocus: boolean = true) => {\n if (!UserPermission || !hasPermission(UserPermission, tab.tabCategory, true)) {\n return;\n }\n\n tab.key = _generateNewTabIndex(tab.tabCategory, tab.recordId);\n\n const newPanes = [..._appTabs];\n newPanes.push(tab);\n _setAppTabs(newPanes);\n\n if (shiftFocus) setActiveTabKey(tab.key);\n setImmediate(() => {\n Mixpanel.track('app.add_tab', {\n title: tab.title,\n tabCategory: tab.tabCategory,\n recordId: tab.recordId,\n triggered_from: tab.origin,\n });\n });\n };\n\n const _openTransactionDetailTab = (\n contractID: number | string,\n contractAddress: string | undefined,\n contractData: any | undefined,\n origin?: string\n ) => {\n const tabTitle =\n contractAddress && contractAddress !== '-' ? contractAddress : \"Address isn't set\";\n\n const activeTransactionRecordTab = _appTabs?.find(\n tab => tab.recordId === contractID && tab.tabCategory === TAB_CATEGORY.TRANSACTION\n );\n\n //check whether the selected record has already an active tab\n if (activeTransactionRecordTab) {\n if (setActiveTabKey) setActiveTabKey(activeTransactionRecordTab.key);\n } else {\n _addTab(\n {\n title: tabTitle,\n key: '-', // this will be overridden by the key generator function inside this addTab function\n tabIcon: <TransactionTabIcon />,\n content: ViewDetailTransaction,\n closeable: true,\n tooltip: tabTitle,\n\n tabCategory: TAB_CATEGORY.TRANSACTION,\n isMainMenu: false,\n recordId: contractID,\n\n data: { ...contractData, contract_id: contractID },\n\n origin,\n },\n true\n );\n }\n };\n\n const _openProspectDetailTab = (\n prospectID: number | string,\n prospectName: string | undefined,\n prospectData: any | undefined\n ) => {\n const tabTitle = prospectName && prospectName !== '-' ? prospectName : \"Name isn't set\";\n\n const activeProspectDetailTab = _appTabs?.find(\n tab => tab.recordId === prospectID && tab.tabCategory === TAB_CATEGORY.PROSPECT\n );\n\n //check whether the selected record has already an active tab\n if (activeProspectDetailTab) {\n if (setActiveTabKey) setActiveTabKey(activeProspectDetailTab.key);\n } else {\n _addTab(\n {\n title: tabTitle,\n key: '-', // this will be overridden by the key generator function inside this addTab function\n tabIcon: <ProspectTabIcon />,\n content: ProspectDetail,\n closeable: true,\n tooltip: tabTitle,\n\n tabCategory: TAB_CATEGORY.PROSPECT,\n isMainMenu: false,\n recordId: prospectID,\n\n data: { ...prospectData, prospect_id: prospectID },\n },\n true\n );\n }\n };\n\n const _openMainTab = (tabKey: TAB_CATEGORY, shiftFocus: boolean = true) => {\n const mainTab = MAIN_TAB_INSTANCES.find(tab => tab.key === tabKey);\n\n if (mainTab) {\n const tabTitle = mainTab.label;\n\n const activeTab = _appTabs?.find(tab => tab.tabCategory === tabKey);\n\n //check whether the selected record has already an active tab\n if (activeTab) {\n if (setActiveTabKey) setActiveTabKey(activeTab.key);\n } else {\n _addTab(\n {\n title: tabTitle,\n key: '-', // this will be overridden by the key generator function inside this addTab function\n tabIcon: mainTab.tabIcon(),\n content: mainTab.tabContent,\n closeable: mainTab.tabCloseable,\n tooltip: tabTitle,\n\n tabCategory: mainTab.tabCategory,\n isMainMenu: true,\n },\n shiftFocus\n );\n }\n }\n };\n\n const remove = (targetKey: string) => {\n let newActiveKey = activeTabKey;\n let lastIndex = -1;\n _appTabs.forEach((pane, i) => {\n if (pane.key === targetKey) {\n lastIndex = i - 1;\n }\n });\n const newPanes = _appTabs.filter(pane => pane.key !== targetKey);\n if (newPanes.length && newActiveKey === targetKey) {\n if (lastIndex >= 0) {\n newActiveKey = newPanes[lastIndex].key;\n } else {\n newActiveKey = newPanes[0].key;\n }\n }\n _setAppTabs(newPanes);\n setActiveTabKey(newActiveKey);\n };\n\n const _onEdit = (\n targetKey: React.MouseEvent | React.KeyboardEvent | string,\n action: 'add' | 'remove'\n ) => {\n if (action === 'add') {\n // add();\n } else {\n remove(targetKey.toString());\n }\n };\n\n const _reloadLoggedUserData = () => {\n getLoggedAccountData().then(({ data }) => {\n if (data) {\n setUserData(data);\n\n const formPayload = {\n name: data?.fullname,\n email: data?.email,\n custom_fields: {\n cf_account_id363837: data?.account_id?.toString(),\n },\n };\n window.FreshworksWidget('prefill', 'ticketForm', formPayload);\n }\n });\n getMyPermission().then(({ data }) => {\n if (data) {\n setUserPermission(data);\n }\n });\n };\n //cek here\n const fetchTransactionDetailViaUrl = useCallback(\n (contract_id: number, subTabKey?: string) => {\n getTransactionDetail(contract_id, 'basic_info')\n .then(resp => {\n if (resp.data) {\n _openTransactionDetailTab(\n contract_id,\n resp.data?.address,\n { ...resp.data, subTabKey },\n 'url'\n );\n }\n })\n .catch(() => {\n showNotification(\n 'error',\n 'Error happened while reloading the transaction data.'\n );\n });\n },\n [UserPermission]\n );\n\n const _setCSForm = () => {};\n\n const _checkEmailCredential = async () => {\n getMyEmailCredential().then(async resp => {\n const emailCredential = resp.data as EmailCredentialType;\n const now = new Date().getTime();\n\n if (emailCredential?.account_id) {\n if (\n emailCredential.google_access_token &&\n emailCredential.google_rt_expires_in &&\n emailCredential.google_last_issued\n ) {\n // If the refresh token from Google is expired, unset the tokens and given email. Otherwise, if the last issued date is more than 12 hours, request a new access token to prolong the refresh token\n // Read more about google's refresh token expiry here - https://developers.google.com/identity/protocols/oauth2 (as of 22nd of May 2023 21.07 Jakarta local time)\n // A refresh token might stop working for one of these reasons:\n // (i) The user has revoked your app's access.\n // (ii) The refresh token has not been used for six months.\n // (iii) The user changed passwords and the refresh token contains Gmail scopes.\n // And many more.\n if (now >= new Date(emailCredential.google_rt_expires_in).getTime()) {\n updateEmailCredential({\n google_access_token: '',\n google_refresh_token: '',\n google_email: '',\n });\n } else if (\n now - new Date(emailCredential.google_last_issued).getTime() >=\n 43200000\n ) {\n // request new access token\n requestNew3rdPartyEmailAccessToken(SENDMAIL_ONBEHALF.GMAIL)\n .then(() => {})\n .catch((err: Error) => {\n captureException(err);\n });\n }\n }\n\n if (\n emailCredential.ms_access_token &&\n emailCredential.ms_rt_expires_in &&\n emailCredential.ms_last_issued\n ) {\n // If the refresh token from Microsoft is expired, unset the tokens and given email. Otherwise, if the last issued date is more than 12 hours, request a new access token to prolong the refresh token\n // Read more here -- https://learn.microsoft.com/en-us/azure/active-directory/develop/refresh-tokens#refresh-token-lifetime (as of 22nd of May 2023 21.07 Jakarta local time)\n // Access token expiry is 60 minutes / 1 hour\n // The default lifetime for the refresh tokens is 24 hours for single page apps and 90 days for all other scenarios. Refresh tokens replace themselves with a fresh token upon every use.\n if (now >= new Date(emailCredential.ms_rt_expires_in).getTime()) {\n updateEmailCredential({\n ms_access_token: '',\n ms_refresh_token: '',\n ms_email: '',\n });\n } else if (\n now - new Date(emailCredential.ms_last_issued).getTime() >=\n 43200000\n ) {\n // request new access token\n requestNew3rdPartyEmailAccessToken(SENDMAIL_ONBEHALF.MS_365)\n .then(() => {})\n .catch((err: Error) => {\n captureException(err);\n });\n }\n }\n }\n });\n };\n\n useEffect(() => {\n if (activeTabKey !== _generateNewTabIndex(TAB_CATEGORY.TRANSACTION)) {\n window.scrollTo(0, 0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeTabKey]);\n\n useEffect(() => {\n if (tabsUrl && UserPermission && !idUrl) {\n const selectedTab = MAIN_TAB_INSTANCES.find(el => el.key === tabsUrl);\n\n if (selectedTab) {\n const activeTab = _appTabs.find(\n tab => tab.tabCategory.toString() === tabsUrl && tab.isMainMenu && !tab.recordId\n );\n\n if (activeTab) {\n setActiveTabKey(activeTab.key);\n } else {\n _addTab({\n title: selectedTab.label,\n key: '',\n tabIcon: selectedTab.tabIcon(),\n content: selectedTab.tabContent,\n closeable: selectedTab.tabCloseable,\n\n tabCategory: tabsUrl,\n isMainMenu: true,\n });\n }\n }\n }\n }, [tabsUrl, UserPermission, idUrl]);\n\n useEffect(() => {\n if (tabsUrl === 'Transactions' && UserPermission && idUrl && _activeTabByButton === false) {\n fetchTransactionDetailViaUrl(Number(idUrl), subTabsUrl);\n }\n }, [idUrl, tabsUrl, _activeTabByButton, UserPermission, subTabsUrl]);\n\n useEffect(() => {\n //START OF DESCRIPTION\n //Will always go through this line because we had defaultTabs for Summary Tabs\n //Need to check the first render so it doesn't go back to Summary Tabs whenever pass tabs with URL\n if (firstRender && activeTabKey === 'summary') {\n setFirstRender(false);\n return;\n }\n //END OF DESCRIPTION\n if (activeTabKey.includes('&id=') && !firstRender) {\n //string processing\n const splitActiveTabKey = activeTabKey.split('&id=');\n const getAddrressFromId = _appTabs.find(\n ({ recordId }) => recordId === Number(splitActiveTabKey[1])\n );\n const subTabKey = _appTabs.find(\n ({ recordId }) => recordId === Number(splitActiveTabKey[1])\n )?.data.subTabKey;\n\n // end of string processing\n queryParameters.set('tabs', splitActiveTabKey[0]);\n queryParameters.set('id', splitActiveTabKey[1]);\n splitActiveTabKey[0] === 'transactions'\n ? queryParameters.set('address', replaceSpecialChar(getAddrressFromId?.title))\n : queryParameters.set('fullname', replaceSpecialChar(getAddrressFromId?.title));\n subTabKey && queryParameters.set('sub_tabs', subTabKey);\n history.push({\n pathname: '/home',\n search: queryParameters.toString(),\n });\n } else {\n queryParameters.delete('id');\n queryParameters.delete('address');\n queryParameters.delete('sub_tabs');\n queryParameters.delete('fullname');\n queryParameters.set('tabs', activeTabKey);\n history.push({\n pathname: '/home',\n search: queryParameters.toString(),\n });\n }\n }, [activeTabKey]);\n\n useEffect(() => {\n _reloadLoggedUserData();\n _setCSForm();\n _checkEmailCredential();\n\n loadSubscriptionListFromServer();\n Mixpanel.track('app.access_home_page', {});\n hotjarIdentify();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const token = localStorage.getItem('jwt');\n if (!token) {\n _logout();\n }\n });\n return (\n <UserContextProvider\n userInfo={UserData}\n userPermission={UserPermission}\n openTransactionDetailTab={_openTransactionDetailTab}\n openProspectDetailTab={_openProspectDetailTab}\n openMainTab={_openMainTab}\n setActiveTabByButton={_setActiveTabByButton}\n triggerRefetchDataList={triggerRefetchDataList}\n setTriggerRefetchDataList={setTriggerRefetchDataList}\n refetchOnboardingList={fetchOnboardingList}\n isOnboadingLoading={isOnboadingLoading}\n closeTab={remove}\n >\n <Layout className=\"home-layout\">\n <EZOnboardingButton />\n <Header className=\"main-menu-header\">\n <div className=\"logo-wrapper\">\n <div className=\"logo\" />\n </div>\n\n <Menu\n style={{ float: 'left', width: '50%' }}\n className=\"main-menu-header-left\"\n mode=\"horizontal\"\n defaultSelectedKeys={['2']}\n items={WEB_APP_MAIN_MENU}\n onClick={_mainMenuOnClick}\n />\n <Space\n className=\"main-menu-header-right\"\n align=\"center\"\n style={{ float: 'right' }}\n >\n <span>\n <QuickActionAddButtons\n openTransactionDetailTab={_openTransactionDetailTab}\n />\n </span>\n <span className=\"cursor-pointer\">\n <HomeNotification />\n </span>\n <span>\n <a\n href=\"https://ezcoordinator.freshdesk.com/support/solutions\"\n target={'_blank'}\n style={{ color: 'black' }}\n >\n <QuestionCircleOutlined style={{ fontSize: '18px' }} />\n </a>\n </span>\n <span className=\"cursor-pointer pr-0\">\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu\n style={{ width: 250 }}\n onClick={({ key }) => {\n if (key === 'avatar-menu-my-profile') {\n _openMainMenuTabByKey(TAB_CATEGORY.MY_PROFILE);\n } else if (key === 'avatar-menu-admin') {\n _openMainMenuTabByKey(TAB_CATEGORY.ADMIN_SETTING);\n }\n }}\n items={[\n {\n key: 'avatar-menu-0',\n label: (\n <div>\n <Text>\n {UserData?.fullname ? (\n <Text strong>\n {UserData.fullname}\n </Text>\n ) : (\n <Text italic>\n Fullname isn't set\n </Text>\n )}\n </Text>\n <br />\n <Text>\n <Text\n strong\n style={{\n width: '250px',\n overflowWrap: 'break-word',\n wordBreak: 'break-all',\n inlineSize: '250px',\n }}\n >\n {UserData?.email}\n </Text>\n </Text>\n <br />\n <Text>\n <Text\n strong\n style={{\n width: '250px',\n overflowWrap: 'break-word',\n wordBreak: 'break-all',\n inlineSize: '250px',\n }}\n >\n Role:{' '}\n {getAccountRole(\n UserData?.accountrole_id\n ) || '-'}\n </Text>\n </Text>\n </div>\n ),\n },\n {\n type: 'divider',\n },\n {\n key: 'avatar-menu-my-profile',\n label: <Text>My Profile</Text>,\n },\n {\n type: 'divider',\n style: {\n display: hasAccessToAdminArea\n ? 'inherit'\n : 'none',\n },\n },\n {\n key: 'avatar-menu-admin',\n label: <Text>Admin Area</Text>,\n style: {\n display: hasAccessToAdminArea\n ? 'inherit'\n : 'none',\n },\n },\n {\n type: 'divider',\n },\n {\n key: 'avatar-menu-2',\n icon: <LogoutOutlined style={{ color: 'red' }} />,\n label: (\n <span>\n <Text type=\"danger\">Logout</Text>\n </span>\n ),\n onClick: () => _logout(),\n },\n ]}\n />\n }\n placement=\"bottomRight\"\n // arrow\n >\n <Avatar size={36}>\n {UserData?.fullname\n ? getInitialFromFullname(UserData.fullname)\n : 'USER'}\n </Avatar>\n </Dropdown>\n </span>\n </Space>\n </Header>\n <Content>\n <div className=\"site-layout-content\">\n <Tabs\n type=\"editable-card\"\n className=\"app-tab-wrapper\"\n onChange={_onChange}\n activeKey={activeTabKey}\n onEdit={_onEdit}\n id=\"app-tab-wrapper\"\n animated={false}\n tabBarExtraContent={\n <Space direction=\"horizontal\">\n <Button\n className=\"ez-action-btn\"\n size=\"small\"\n icon={<UpOutlined />}\n onClick={() => {\n window.scrollTo(0, 0);\n }}\n ></Button>\n <QuickSearch\n openTransactionDetailTab={_openTransactionDetailTab}\n />\n </Space>\n }\n >\n {_appTabs.map((pane, idx) => (\n <TabPane\n closable={pane.closeable}\n tab={\n <span title={pane.title}>\n {pane.tabIcon || <AppstoreOutlined />}\n {pane.title}\n </span>\n }\n key={pane.key}\n id={pane.key}\n disabled={pane.disabled ? true : false}\n >\n <div className=\"tab-pane-content-wrapper\">\n <pane.content\n appTabs={_appTabs}\n addTab={_addTab}\n isCurrentTabActive={activeTabKey === pane.key}\n setActiveTabKey={setActiveTabKey}\n data={pane.data}\n tabKey={pane.key}\n />\n </div>\n </TabPane>\n ))}\n </Tabs>\n </div>\n </Content>\n <Footer style={{ textAlign: 'center' }} className=\"mt-5\">\n EZ Coordinator Version 2.0 ©2023 Crafted with love by the EZ team\n {isDemoENV() && <DemoBanner account={UserData} />}\n </Footer>\n </Layout>\n </UserContextProvider>\n );\n};\n","import {\n ACCOUNT_ROLES,\n ACCOUNT_ROLE_HAS_ACCESS_TO_ADMIN_AREA,\n AccountPermissionType,\n PERMISSION_TYPE,\n} from 'types/account';\nimport { TAB_CATEGORY } from 'types/webAppTab';\nimport { showMessage } from './notificationUtil';\n\nexport function hasPermission(\n permission: AccountPermissionType,\n tabCategory: string | 'DOCUMENT' | 'TASK' | 'ASSIGN' | 'CONTACT',\n showFeedback: boolean = false,\n allowedAccess: number[] = [\n PERMISSION_TYPE.YES,\n PERMISSION_TYPE.VIEW_ONLY,\n PERMISSION_TYPE.FULL_ACCESS,\n ]\n) {\n let isAllowed = false;\n\n if (!permission) return false;\n\n // owner -> accountrole_id === 1\n if (permission.accountrole_id === 1) {\n isAllowed = true;\n } else {\n switch (tabCategory) {\n case TAB_CATEGORY.SUMMARY:\n case TAB_CATEGORY.MY_PROFILE:\n isAllowed = true;\n break;\n\n case TAB_CATEGORY.CALENDAR:\n case TAB_CATEGORY.REPORT:\n case TAB_CATEGORY.TRANSACTION:\n if (allowedAccess.includes(permission.toggle)) {\n isAllowed = true;\n }\n break;\n\n case 'CONTACT':\n case TAB_CATEGORY.ADDRESS_BOOK:\n case TAB_CATEGORY.PROSPECT:\n if (allowedAccess.includes(permission.contacts_toggle)) {\n isAllowed = true;\n }\n break;\n\n case TAB_CATEGORY.DOC_LIBRARY:\n case TAB_CATEGORY.DOC_REVIEW:\n case 'DOCUMENT':\n if (allowedAccess.includes(permission.documents_toggle)) {\n isAllowed = true;\n }\n break;\n\n case 'NOTES':\n if (allowedAccess.includes(permission.notes_toggle)) {\n isAllowed = true;\n }\n break;\n\n case TAB_CATEGORY.TASK:\n case 'TASK':\n if (allowedAccess.includes(permission.tasks_toggle)) {\n isAllowed = true;\n }\n break;\n\n case 'ASSIGN':\n if (allowedAccess.includes(permission.assigntasks_toggle)) {\n isAllowed = true;\n }\n break;\n\n case TAB_CATEGORY.EMAIL:\n if (allowedAccess.includes(permission.emails_toggle)) {\n isAllowed = true;\n }\n break;\n\n case TAB_CATEGORY.ADMIN_SETTING: {\n if (ACCOUNT_ROLE_HAS_ACCESS_TO_ADMIN_AREA.includes(permission.accountrole_id)) {\n isAllowed = true;\n }\n break;\n }\n\n default:\n break;\n }\n }\n\n if (showFeedback && !isAllowed) {\n showMessage(\n 'error',\n `You aren't allowed to access the page. Please ask your administrator for granting you the access.`\n );\n }\n\n return isAllowed;\n}\n\nexport const getAccountRole = (accountRoleID?: number) => {\n if (accountRoleID) {\n const role = ACCOUNT_ROLES.find(role => role.accountrole_id === accountRoleID);\n return role?.accountrole;\n } else {\n return '';\n }\n};\n","/**\n *\n * LoginSocialGoogle\n *\n */\nimport React, { memo, useCallback, useEffect, useState } from 'react';\nimport { objectType, IResolveParams } from './';\nimport { GoogleOAuthProvider, useGoogleLogin } from '@react-oauth/google';\nimport { useHistory } from 'react-router-dom';\n\nimport { showMessage, showNotification } from 'utils/notificationUtil';\nimport { REDIRECT_URI, GOOGLE_CLIENTID } from 'utils/envUtil';\nimport { exchangeGoogleOauthCodeForLogin, storeLoginPayload } from 'utils/ez_api/loginUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\ninterface Props {\n children?: React.ReactNode;\n onReject: (reject: string | objectType) => void;\n onResolve: ({ provider, data }: IResolveParams) => void;\n}\n\nconst LoginSocialGoogle = memo(({ onReject, onResolve, children }: Props) => {\n const history = useHistory(); // To programmatically navigate\n\n const _loginWithGoogle = useGoogleLogin({\n onSuccess: tokenResponse => {\n const code = tokenResponse.code;\n const scope = tokenResponse.scope;\n\n console.log('🚀 ~ LoginSocialGoogle ~ code:', code);\n\n if (!scope.includes('profile')) {\n showNotification(\n 'error',\n 'Required scope is still missing. Please re-authorize your google permission and make sure that you check all the necessary access.'\n );\n } else {\n exchangeGoogleOauthCodeForLogin(code)\n .then(({ data }) => {\n storeLoginPayload(data.jwt, data.loginPayload);\n\n try {\n Mixpanel.setLoggedUserData(data.loginPayload);\n } catch (error) {}\n\n showNotification('success', 'Login is successful.');\n\n setImmediate(() => {\n history.push('/home');\n });\n })\n .catch(err => {\n showMessage('error', 'User not found. Please use a correct email address.');\n });\n }\n },\n flow: 'auth-code',\n scope: 'openid profile email',\n redirect_uri: REDIRECT_URI,\n });\n\n // const handlelogin = () => {\n // console.log(\"handle login\")\n // }\n\n return (\n // <div>\n // <div id=\"g_id_onload\"\n // data-client_id={client_id}\n // data-callback={handlelogin}>\n // </div>\n\n <div className=\"login-int-button\" onClick={_loginWithGoogle}>\n {children}\n </div>\n // </div>\n );\n});\n\nexport default LoginSocialGoogle;\n","import qs from 'qs';\r\n\r\nimport { PARTY_TYPES } from 'types/transaction';\r\nimport { HOTJAR_EVENT_TYPE, hotjarEvent } from 'utils/3rd_party_api/hotjarUtil';\r\nimport { Mixpanel } from 'utils/mixPanelUtil';\r\nimport { APIRequest } from '../apiUtil';\r\nimport { apiUrl } from '../envUtil';\r\n\r\nexport type DetailType =\r\n | 'all'\r\n | 'basic_info'\r\n | 'contract_info'\r\n | 'general_information'\r\n | 'contacts'\r\n | 'documents'\r\n | 'tasks'\r\n | 'notes'\r\n | undefined;\r\n\r\nexport const getAllTransactions = (list_type: string, params?: string) => {\r\n return APIRequest({\r\n method: 'get',\r\n url: apiUrl + `transactions?list_type=${list_type}&${params}`,\r\n });\r\n};\r\n\r\nexport const getTransactionParties = (partyType: PARTY_TYPES, keyword?: string) => {\r\n const params: string = qs.stringify({\r\n party_type: partyType,\r\n keyword: keyword,\r\n });\r\n\r\n return APIRequest({\r\n method: 'get',\r\n url: apiUrl + 'transaction/parties?' + params,\r\n });\r\n};\r\n\r\nexport const getTransactionDetail = async (contract_id: number, detail_type?: DetailType) => {\r\n return APIRequest({\r\n method: 'get',\r\n url: apiUrl + `transaction/${contract_id}?detail_type=` + (detail_type || 'basic_info'),\r\n });\r\n};\r\nexport const getQuickStatByContractIDs = (contract_ids: number[]) => {\r\n const params: string = qs.stringify({\r\n contract_ids: contract_ids,\r\n });\r\n\r\n return APIRequest({\r\n method: 'get',\r\n url: apiUrl + `transaction/quick-stat-by-ids?${params}`,\r\n });\r\n};\r\n\r\nexport const addNewTransaction = (payload: any) => {\r\n return APIRequest({\r\n method: 'post',\r\n url: apiUrl + `transactions`,\r\n data: payload,\r\n useDefaultErrorNotif: true,\r\n }).then(resp => {\r\n hotjarEvent(HOTJAR_EVENT_TYPE.ADD_NEW_TRANSACTION);\r\n Mixpanel.track('app.add_transaction', {\r\n contract_id: resp?.data?.contract_id,\r\n ...payload,\r\n });\r\n return resp;\r\n });\r\n};\r\n\r\nexport const loadTemplates = async (contract_id: number) => {\r\n return APIRequest({\r\n method: 'post',\r\n url: apiUrl + `transaction/${contract_id}/templates`,\r\n useDefaultErrorNotif: true,\r\n }).then(resp => {\r\n hotjarEvent(HOTJAR_EVENT_TYPE.LOAD_TEMPLATES);\r\n Mixpanel.track('app.load_templates_on_transaction', {\r\n contract_id: resp?.data?.contract_id,\r\n });\r\n return resp;\r\n });\r\n};\r\n\r\nexport const updateTransactionDetail = (\r\n contract_id: number,\r\n payload: any,\r\n detail_type?: DetailType\r\n) => {\r\n Mixpanel.track('app.edit_transaction', {\r\n contract_id,\r\n section: 'basic',\r\n detail_type,\r\n });\r\n\r\n return APIRequest({\r\n method: 'put',\r\n url: apiUrl + `transaction/${contract_id}?detail_type=` + (detail_type || 'basic_info'),\r\n data: {\r\n ...payload,\r\n },\r\n useDefaultErrorNotif: true,\r\n });\r\n};\r\n\r\nexport const getTransactionQuickStats = (contract_id: number) => {\r\n return APIRequest({\r\n method: 'get',\r\n url: apiUrl + `transaction/${contract_id}?detail_type=quick_stats`,\r\n });\r\n};\r\n\r\nexport const bulkUpdateTaskTransaction = (\r\n task_id: number,\r\n arrTaskIDsOrder: { uuid: string; ow: number }[]\r\n) => {\r\n return APIRequest({\r\n method: 'put',\r\n url: apiUrl + `transaction/${task_id}/tasks/positions`,\r\n data: {\r\n arrTaskIDsOrder,\r\n },\r\n useDefaultErrorNotif: true,\r\n });\r\n};\r\n\r\nexport const updateTransactionParty = (\r\n contract_id: number | undefined,\r\n party_id: number | string,\r\n party_type: PARTY_TYPES,\r\n payload: any\r\n) => {\r\n Mixpanel.track('app.edit_transaction', {\r\n contract_id,\r\n sub_tab: 'contract_information',\r\n action: 'update_transaction_party',\r\n });\r\n\r\n return APIRequest({\r\n method: 'put',\r\n url: apiUrl + `transaction/${contract_id}/party/${party_id}?party_type=` + party_type,\r\n data: {\r\n ...payload,\r\n },\r\n useDefaultErrorNotif: true,\r\n });\r\n};\r\n\r\nexport const deleteTransactionParty = (\r\n contract_id: number | undefined,\r\n party_id: number | string,\r\n party_type: PARTY_TYPES\r\n) => {\r\n Mixpanel.track('app.edit_transaction', {\r\n contract_id,\r\n sub_tab: 'contract_information',\r\n action: 'delete_transaction_party',\r\n });\r\n\r\n return APIRequest({\r\n method: 'delete',\r\n url: apiUrl + `transaction/${contract_id}/party/${party_id}?party_type=` + party_type,\r\n useDefaultErrorNotif: true,\r\n });\r\n};\r\n\r\nexport const updateCustomFieldsByCategory = (\r\n contract_id: number,\r\n category_id: number,\r\n payload: any\r\n) => {\r\n Mixpanel.track('app.edit_transaction', {\r\n contract_id,\r\n sub_tab: 'contract_information',\r\n action: 'update_custom_fields',\r\n });\r\n\r\n return APIRequest({\r\n method: 'put',\r\n url: apiUrl + `transaction/${contract_id}/custom-fields-category/${category_id}`,\r\n data: {\r\n ...payload,\r\n },\r\n useDefaultErrorNotif: true,\r\n });\r\n};\r\n\r\nexport const getGreensheet = (contract_id: number) => {\r\n return APIRequest({\r\n method: 'get',\r\n url: apiUrl + `transaction/${contract_id}/greensheet`,\r\n useDefaultErrorNotif: true,\r\n });\r\n};\r\n\r\nexport const updateGreensheet = (contract_id: number, payload: any) => {\r\n Mixpanel.track('app.edit_transaction', {\r\n contract_id,\r\n section: 'green_sheet',\r\n });\r\n\r\n return APIRequest({\r\n method: 'put',\r\n url: apiUrl + `transaction/${contract_id}/greensheet`,\r\n data: payload,\r\n });\r\n};\r\n\r\nexport const archiveTransaction = (contract_id: number) => {\r\n Mixpanel.track('app.archive_transaction', {\r\n contract_id,\r\n });\r\n\r\n return APIRequest({\r\n method: 'put',\r\n url: apiUrl + `transaction/${contract_id}/archive`,\r\n useDefaultErrorNotif: true,\r\n });\r\n};\r\n\r\nexport const unArchiveTransaction = (contract_id: number) => {\r\n Mixpanel.track('app.unarchive_transaction', {\r\n contract_id,\r\n });\r\n\r\n return APIRequest({\r\n method: 'put',\r\n url: apiUrl + `transaction/${contract_id}/unarchive`,\r\n useDefaultErrorNotif: true,\r\n });\r\n};\r\n\r\nexport const deleteTransaction = (contract_id: number) => {\r\n Mixpanel.track('app.delete_transaction', {\r\n contract_id,\r\n });\r\n\r\n return APIRequest({\r\n method: 'delete',\r\n url: apiUrl + `transaction/${contract_id}`,\r\n useDefaultErrorNotif: true,\r\n });\r\n};\r\n\r\nexport const unDeleteTransaction = (contract_id: number) => {\r\n Mixpanel.track('app.undelete_transaction', {\r\n contract_id,\r\n });\r\n\r\n return APIRequest({\r\n method: 'put',\r\n url: apiUrl + `restore-transaction/${contract_id}`,\r\n useDefaultErrorNotif: true,\r\n });\r\n};\r\n\r\nexport const requestTransactionBackup = (contract_id: number) => {\r\n Mixpanel.track('app.backup_transaction', {\r\n contract_id,\r\n });\r\n\r\n return APIRequest({\r\n method: 'put',\r\n url: apiUrl + `transaction/${contract_id}/request-backup`,\r\n useDefaultErrorNotif: true,\r\n });\r\n};\r\n\r\nexport const duplicateTransaction = (contract_id: number) => {\r\n Mixpanel.track('app.duplicate_transaction', {\r\n contract_id,\r\n });\r\n\r\n return APIRequest({\r\n method: 'post',\r\n url: apiUrl + `transaction/${contract_id}/duplicate`,\r\n useDefaultErrorNotif: true,\r\n });\r\n};\r\n","import { AntTreeNodeProps } from 'antd/es/tree';\nimport { EmailTemplateType } from './emailTemplate';\nimport { AccountInfo } from '@azure/msal-browser';\nimport {\n TransactionDetailType,\n TransactionDocItemType,\n TransactionTaskItemType,\n} from './transaction';\n\nexport enum SENDMAIL_ONBEHALF {\n EZ_SUPPORT = 1,\n GMAIL = 2,\n MS_365 = 3,\n CUSTOM_SMTP = 4,\n}\n\nexport enum EMAIL_INTEGRATION_ERR_CODE {\n GOOGLE_REFRESTOKEN_EXPIRED = 1,\n MS365_REFRESHTOKEN_EXPIRED = 2,\n CUSTOM_SMT_ERR_CONNECTION = 4,\n RELAY_TYPE_IS_UNSET = 4,\n}\n\nexport type EmailCodeTreeDataChildType = AntTreeNodeProps & {\n meta?: any;\n\n children?: EmailCodeTreeDataChildType[];\n};\n\nexport type TemplateListTreeDataChildType = AntTreeNodeProps & {\n meta?: EmailTemplateType;\n\n children?: TemplateListTreeDataChildType[];\n};\n\nexport type EmailCodeTreeDataType = EmailCodeTreeDataChildType[];\n\nexport type EmailLogType = {\n message_id: number;\n account_id: number;\n parent_account_id: number;\n msg_type: number;\n email_template_id?: number;\n is_draft?: boolean;\n msg_subject?: string;\n msg_body?: string;\n msg_sender?: string;\n msg_to?: string[];\n msg_bcc?: string[];\n msg_cc?: string[];\n contract_id?: number;\n contract_task_id?: number;\n prospect_id?: number;\n prospect_task_id?: number;\n relay_type_id?: number;\n\n relayed_at?: Date;\n relayed_by?: number;\n\n sent_at?: Date;\n delivered_at?: Date;\n read_at?: Date;\n msg_meta?: string;\n delivery_issue_type?: number;\n delivery_issue_at?: Date;\n\n created_at: Date;\n updated_at?: Date;\n updated_by: number;\n\n email_template?: EmailTemplateType;\n docs?: TransactionDocItemType[];\n\n account?: {\n email: string;\n fullname: string;\n };\n\n updated_by_account?: {\n email: string;\n fullname: string;\n };\n\n relayed_by_account?: {\n email: string;\n fullname: string;\n };\n\n contract?: TransactionDetailType;\n task_todolist?: TransactionTaskItemType;\n};\n\nexport type EmailCredentialType = {\n credential_id: number;\n account_id: number;\n parent_account_id: number;\n\n relay_type_id?: number;\n\n google_email?: string;\n google_access_token?: string;\n google_last_issued?: Date; // UTC Date\n google_expires_in?: Date; // UTC Date\n google_rt_last_issued?: Date; // UTC Date\n google_rt_expires_in?: Date; // UTC Date\n google_token_type?: string;\n google_refresh_token?: string;\n google_scope?: string;\n\n ms_email?: string;\n ms_access_token?: string;\n ms_last_issued?: Date; // UTC Date\n ms_expires_in?: Date; // UTC Date\n ms_rt_last_issued?: Date; // UTC Date\n ms_rt_expires_in?: Date; // UTC Date\n ms_token_type?: string;\n ms_refresh_token?: string;\n ms_scope?: string;\n ms_account?: AccountInfo;\n\n smtp_outgoing_server?: string;\n smtp_outgoing_port?: number;\n smtp_outgoing_ssl?: Boolean;\n smtp_outgoing_auth?: number;\n smtp_outgoing_username?: string;\n smtp_outgoing_password?: string;\n\n smtp_incoming_server?: string;\n smtp_incoming_port?: number;\n smtp_incoming_ssl?: Boolean;\n smtp_incoming_auth?: number;\n smtp_incoming_username?: string;\n smtp_incoming_password?: string;\n smtp_incoming_del_fetch?: number;\n\n created_at: Date;\n updated_at?: Date;\n};\n","// Core React libraries import\nimport React, { useEffect, useState } from 'react';\nimport { useHistory, useLocation } from 'react-router-dom';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Alert,\n Button,\n Checkbox,\n Col,\n Divider,\n Form,\n FormInstance,\n Input,\n Row,\n Select,\n Steps,\n Typography,\n} from 'antd';\nimport { CreditCardOutlined } from '@ant-design/icons';\n\n// EZ web-app utils import\nimport { showMessage, showNotification } from 'utils/notificationUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\nimport {\n checkAccountEmail,\n registerNewAccount,\n resendVerificationEmail,\n storeLoginPayload,\n verifyConfirmationCode,\n} from 'utils/ez_api/loginUtil';\n// EZ web-app APIs import\nimport { getAddressbookRoles } from 'utils/ez_api/contactAPIs';\n// EZ web-app types import\nimport { PASSWORD_REGEX } from 'types/account';\n// EZ web-app components import\nimport { EZAutocompleteCity, EZInputMasked, EZSelectUSState } from 'components';\n\n// EZ web-app styles and assets import\nimport './registerByEmail.scss';\nimport {\n getAnnuallyPaidSubscriptionList,\n getMonthlyPaidSubscriptionList,\n getSubscriptionList,\n} from 'utils/paymentUtil';\nimport { SubscriptionTypeItem } from 'types/payment';\n\ndeclare global {\n interface Window {\n tolt: any;\n tolt_referral: any;\n }\n}\n\nwindow.tolt = window.tolt || {};\nwindow.tolt_referral = window.tolt_referral || {};\n\nconst { Option, OptGroup } = Select;\n\nconst steps = [\n {\n title: 'Your credential',\n description: '',\n // description: 'Fill out all the fields.',\n },\n {\n title: 'Subscription',\n // description: 'Our system communicates with the DocuSign APIs.',\n },\n {\n title: `Finish`,\n // description: 'Arrange the signature field.',\n },\n];\n\nconst months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\nconst CredentialForm: React.FC<{}> = () => {\n return (\n <>\n <Row>\n <Col span={24}>\n <Row gutter={20}>\n <Col span={12}>\n <Form.Item\n label=\"First Name\"\n name=\"firstname\"\n rules={[\n {\n required: true,\n message: \"Firstname can't be empty\",\n },\n ]}\n >\n <Input placeholder=\"Enter your first name\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item\n label=\"Last Name\"\n name=\"lastname\"\n rules={[\n {\n required: true,\n message: \"Lastname can't be empty\",\n },\n ]}\n >\n <Input placeholder=\"Enter your last name\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n label=\"Your Email\"\n name=\"email\"\n rules={[\n {\n required: true,\n type: 'email',\n message: \"Email can't be empty\",\n },\n ]}\n >\n <Input placeholder=\"Enter the email address\" type=\"email\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n label=\"Create Password\"\n name=\"password\"\n rules={[\n {\n required: true,\n },\n {\n pattern: PASSWORD_REGEX,\n message: 'Weak password is detected.',\n },\n ]}\n help={\n <Row>\n <Col span={24}>\n <span>Password must:</span>\n </Col>\n <Col span={12}>\n <span>- have at least one letter</span>\n <br />\n <span>- have at least one capital letter</span>\n <br />\n <span>- have at least one number</span>\n <br />\n </Col>\n <Col span={12}>\n <span>\n - have at least one special symbol that is\n #?!@$%^&*-\n </span>\n <br />\n <span>- be at least 8 characters</span>\n <br />\n </Col>\n </Row>\n }\n >\n <Input.Password placeholder=\"Enter your password\" />\n </Form.Item>\n </Col>\n <Col span={12} className=\"mt-2\">\n <Form.Item\n label=\"Organization Size\"\n name=\"organization_size\"\n rules={[\n {\n required: true,\n message: \"This field can't be empty\",\n },\n ]}\n >\n <Select\n placeholder=\"Select the size\"\n style={{ width: '100%' }}\n allowClear\n options={[\n {\n value: 'type_1',\n label: '1 (Only me)',\n },\n {\n value: 'type_2',\n label: '2 - 12 Employees',\n },\n {\n value: 'type_3',\n label: '13 - 20 Employees',\n },\n {\n value: 'type_4',\n label: '21 - 40 Employees',\n },\n {\n value: 'type_5',\n label: '41+ Employees',\n },\n ]}\n />\n </Form.Item>\n </Col>\n <Col span={12} className=\"mt-2\">\n <Form.Item label=\"Company Name (Optional)\" name=\"company\">\n <Input placeholder=\"Enter your company name\" />\n </Form.Item>\n </Col>\n <Col span={12} className=\"mt-2\">\n <Form.Item\n label=\"Where did you hear about us?\"\n name=\"lead_info\"\n rules={[\n {\n required: true,\n message: \"This field can't be empty\",\n },\n ]}\n >\n <Select\n placeholder=\"Select the answer\"\n style={{ width: '100%' }}\n allowClear\n options={[\n {\n value: 'SEARCH_ENGINE',\n label: 'Search Engine (e.g., Google, Bing, Etc)',\n },\n {\n value: 'SOCIAL_MEDIA',\n label: 'Social Media (e.g., LinkedIn, Twitter, Facebook)',\n },\n {\n value: 'FRIEND_COLLEAGUE',\n label: 'Referral from a friend or colleague',\n },\n {\n value: 'ONLINE_ADS',\n label: 'Online Advertisement',\n },\n {\n value: 'EMAIL_MARKETING',\n label: 'Email Marketing/Campaigns',\n },\n {\n value: 'WEBINAR',\n label: 'Webinar or Online Workshop',\n },\n {\n value: 'ONLINE_ARTICLE',\n label: 'Blog Post or Online Article',\n },\n {\n value: 'PARTNER_REFERRAL',\n label: 'Partner Referral',\n },\n {\n value: 'OTHER',\n label: 'Other',\n },\n ]}\n />\n </Form.Item>\n </Col>\n <Col span={12} className=\"mt-2\">\n <Form.Item\n label=\"Work Phone\"\n name=\"workphone\"\n rules={[\n {\n required: false,\n message: \"Work Phone can't be empty\",\n },\n {\n pattern:\n /^(\\+1|1)?[-. ]?\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/,\n message: 'Please enter a valid US phone number',\n },\n ]}\n >\n <EZInputMasked\n placeholder=\"Enter the work phone number\"\n mask={'+1 (000) 000-0000'}\n />\n </Form.Item>\n </Col>\n </Row>\n </Col>\n </Row>\n </>\n );\n};\n\nconst SubscriptionForm: React.FC<{ form: FormInstance<any> }> = ({ form }) => {\n const { search } = useLocation();\n const query = new URLSearchParams(search);\n const selectedSubscription = query.get('subscription');\n const promoCode = query.get('promo_code');\n\n const MONTHLY_PAID_SUBSCRIPTION_TYPES = getMonthlyPaidSubscriptionList();\n const ANNUALLY_PAID_SUBSCRIPTION_TYPES = getAnnuallyPaidSubscriptionList();\n let selectedArraySubscription = [];\n let selectedUserTypeId;\n const SUBSCRIPTION_TYPES = getSubscriptionList();\n if (selectedSubscription) {\n selectedArraySubscription = SUBSCRIPTION_TYPES.filter(\n (val: SubscriptionTypeItem) => val.chargify_handler === selectedSubscription?.toString()\n );\n selectedUserTypeId = selectedArraySubscription[0]?.user_type_id || '';\n }\n\n if (selectedUserTypeId) {\n form.setFieldValue('user_type_id', selectedUserTypeId);\n }\n\n if (promoCode) {\n form.setFieldValue('promo_code', promoCode?.toString());\n }\n\n return (\n <>\n <Row>\n <Col span={24}>\n <Row gutter={20}>\n <Col span={16}>\n <Form.Item\n label=\"Subscription\"\n name=\"user_type_id\"\n rules={[\n {\n required: true,\n message: 'Please select a subscription',\n },\n ]}\n >\n <Select\n placeholder=\"Select a subscription\"\n style={{ width: '100%' }}\n >\n {/* <Option value=\"2\">Free</Option> */}\n <OptGroup label=\"Monthly\">\n {MONTHLY_PAID_SUBSCRIPTION_TYPES.map(sub => (\n <Option value={sub.user_type_id}>\n {sub.plan_name_with_price}\n </Option>\n ))}\n </OptGroup>\n <OptGroup label=\"Annually (2-Months off)\">\n {ANNUALLY_PAID_SUBSCRIPTION_TYPES.map(sub => (\n <Option value={sub.user_type_id}>\n {sub.plan_name_with_price}\n </Option>\n ))}\n </OptGroup>\n </Select>\n </Form.Item>\n </Col>\n <Col span={8} className=\"\">\n <Form.Item label=\"Promo Code (Optional)\" name=\"promo_code\">\n <Input placeholder=\"Enter the promo code\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Divider orientation=\"left\">\n <b>\n <CreditCardOutlined /> Card Detail\n </b>\n </Divider>\n </Col>\n <Col span={24}>\n <Alert\n className=\"mb-3\"\n message=\"Your credit card will not be charged until the end of your 14 day trial. You may cancel at anytime.\"\n type=\"info\"\n showIcon\n />\n </Col>\n <Col span={12}>\n <Form.Item\n label=\"First Name on Account\"\n name=\"firstname_card\"\n rules={[\n {\n required: true,\n message: \"Firstname can't be empty\",\n },\n ]}\n >\n <Input placeholder=\"Enter your first name\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Last Name on Account\" name=\"lastname_card\">\n <Input placeholder=\"Enter your last name\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item\n label=\"Card Number\"\n name=\"cardnumber\"\n rules={[\n {\n required: true,\n message: 'Invalid card number',\n },\n ]}\n >\n {/* <EZInputMasked\n placeholder=\"Enter the card number\"\n mask={'0000 0000 0000 0000'}\n /> */}\n <Input placeholder=\"Enter the card number\" />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item\n label=\"Month\"\n name=\"ccmonth\"\n rules={[\n {\n required: true,\n message: 'Invalid',\n },\n ]}\n >\n <Select\n placeholder=\"Select\"\n options={months.map((m, idx) => ({\n label: `${idx < 9 ? `0${idx + 1}` : idx + 1} - ${m}`,\n value: idx + 1,\n }))}\n />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item\n label=\"Year\"\n name=\"ccyear\"\n rules={[\n {\n required: true,\n max: 4,\n message: 'Invalid',\n },\n ]}\n >\n <EZInputMasked placeholder=\"YYYY\" mask={'0000'} />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n rules={[\n {\n required: true,\n },\n ]}\n label=\"Address\"\n name=\"billing_address\"\n >\n <Input placeholder=\"Enter the street detail\" />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item\n rules={[\n {\n required: true,\n },\n ]}\n label=\"City\"\n name=\"billing_city\"\n >\n <EZAutocompleteCity placement=\"topRight\" />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item\n rules={[\n {\n required: true,\n },\n ]}\n label=\"State\"\n name=\"billing_state\"\n >\n <EZSelectUSState placement=\"topRight\" />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item\n rules={[\n {\n required: true,\n },\n ]}\n label=\"ZIP\"\n name=\"billing_zip\"\n >\n <Input placeholder=\"Enter the ZIP\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n className=\"mb-3 mt-3\"\n name=\"agree\"\n valuePropName=\"checked\"\n rules={[\n {\n required: true,\n message:\n 'Please check this if you agree to our Terms of Service and Privacy Policy',\n },\n ]}\n >\n <Checkbox>\n By clicking \"Register\", you agree to our{' '}\n <a href=\"https://www.ezcoordinator.com/terms\" target={'_blank'}>\n Terms of Service\n </a>{' '}\n and that you have read our{' '}\n <a\n href=\"https://www.ezcoordinator.com/privacy\"\n target={'_blank'}\n >\n Privacy Policy\n </a>\n .\n </Checkbox>\n </Form.Item>\n </Col>\n </Row>\n </Col>\n </Row>\n </>\n );\n};\n\nconst VerifyMessage: React.FC<{ form: FormInstance<any> }> = ({ form }) => {\n const history = useHistory();\n\n const [isSubmittingData, setIsSubmittingData] = useState(false);\n\n const resendEmail = () => {\n setIsSubmittingData(true);\n resendVerificationEmail(form.getFieldValue('email'))\n .then(() => {\n showMessage('success', 'Verification email has been resent.');\n })\n .finally(() => {\n setIsSubmittingData(false);\n });\n };\n\n const verifyCode = () => {\n const email = form.getFieldValue('email');\n const verificationCode = (form.getFieldValue('verification_code') as string).replaceAll(\n /\\s|_/g,\n ''\n );\n\n if (verificationCode.length !== 6) {\n return;\n }\n\n setIsSubmittingData(true);\n verifyConfirmationCode(email, verificationCode)\n .then(({ data }) => {\n showMessage(\n 'success',\n 'Account has been confirmed, and now we are redirecting you to the main home page.'\n );\n\n storeLoginPayload(data.jwt, data.loginPayload);\n\n try {\n Mixpanel.setLoggedUserData(data.loginPayload);\n if (window.tolt_referral && window.tolt) {\n window.tolt.signup(email);\n }\n } catch (error) {\n console.log('🚀 ~ .then ~ error:', error);\n }\n\n setImmediate(() => {\n history.push('/home');\n });\n })\n .catch(err => {\n if (err.response && err.response.status === 400) {\n if (err.response.data?.message === 'invalid_code') {\n showMessage('error', 'The code you provided is invalid.');\n } else if (err.response.data?.message === 'expired_code') {\n showMessage('error', 'The code you provided is expired.');\n }\n }\n })\n .finally(() => {\n setIsSubmittingData(false);\n });\n };\n\n return (\n <>\n <Row className=\"mb-5\">\n <Col span={24}>\n <Col span={24} style={{ textAlign: 'center' }}>\n <Typography.Title level={5}>You're almost there!</Typography.Title>\n\n <div>\n We have sent an email, containing 6-digits code to{' '}\n <b>{form.getFieldValue('email')}</b>\n </div>\n <div className=\"\">\n If you don't see it, you may need to <b>check your spam folder</b>.\n </div>\n <div className=\"\">\n <Row className=\"mt-5 mb-5\" justify=\"center\" gutter={[12, 64]}>\n <Col>\n <div>\n <Form.Item\n rules={[\n {\n required: true,\n message: 'Please enter the code',\n },\n ]}\n label=\"\"\n name=\"verification_code\"\n >\n <EZInputMasked\n style={{ width: '120px' }}\n size=\"large\"\n mask={'0 0 0 0 0 0'}\n />\n </Form.Item>\n </div>\n </Col>\n <Col>\n <div>\n <Button\n loading={isSubmittingData}\n disabled={isSubmittingData}\n type=\"primary\"\n size=\"large\"\n onClick={() => verifyCode()}\n >\n Verify\n </Button>\n </div>\n </Col>\n </Row>\n </div>\n <div className=\"mt-4\">\n Still can't find the email? <a onClick={() => resendEmail()}>Resend</a>\n </div>\n {/* <div className=\"mt-4\">\n <Button\n loading={isSubmittingData}\n disabled={isSubmittingData}\n onClick={() => resendEmail()}\n type=\"primary\"\n >\n Resend Email\n </Button>\n </div> */}\n {/* <div className=\"mt-4\">\n Need help?{' '}\n <a\n href=\"https://ezcoordinator.freshdesk.com/support/tickets/new\"\n target={'_blank'}\n >\n Contact Us\n </a>\n </div> */}\n </Col>\n </Col>\n </Row>\n </>\n );\n};\n\nexport const RegisterByEmail: React.FC<{}> = () => {\n const [form] = Form.useForm();\n\n const [currentStep, setCurrentStep] = useState(0);\n const [isValidatingStep, setIsValidatingStep] = useState(false);\n const [isSubmittingData, setIsSubmittingData] = useState(false);\n\n const [formValues, setFormValues] = useState<any>({});\n\n const _reloadContactRoles = () => {\n getAddressbookRoles().then(response => {});\n };\n\n const _processForm = async () => {\n const updatedFormValues = { ...formValues, ...form.getFieldsValue() };\n const newStep = currentStep + 1;\n\n const isValid = await form.validateFields();\n\n if (!isValid) {\n return;\n }\n if (newStep === 1) {\n setIsValidatingStep(true);\n checkAccountEmail(updatedFormValues.email)\n .then(resp => {\n if (resp.data?.data) {\n if (resp.data?.data.available) {\n setCurrentStep(newStep);\n setFormValues(updatedFormValues);\n } else {\n showNotification(\n 'error',\n `An existing account with the email: ${updatedFormValues.email} is found. Please use another email.`\n );\n }\n } else {\n showNotification(\n 'error',\n `Unidentified error happened. Please try again later.`\n );\n }\n })\n .catch(() => {\n showNotification(\n 'error',\n `Unidentified error happened. Please try again later.`\n );\n })\n .finally(() => {\n setIsValidatingStep(false);\n });\n } else if (newStep === 2) {\n setIsValidatingStep(true);\n registerNewAccount(updatedFormValues)\n .then(({ data }) => {\n setCurrentStep(newStep);\n setFormValues(updatedFormValues);\n })\n .catch(err => {\n showNotification(\n 'error',\n `Unidentified error happened. Please try again later.`\n );\n })\n .finally(() => {\n setIsValidatingStep(false);\n });\n }\n };\n\n const _prevStep = (currentStep: number) => {\n switch (currentStep) {\n case 0:\n setCurrentStep(0);\n break;\n case 1:\n setCurrentStep(currentStep - 1);\n break;\n case 2:\n setCurrentStep(currentStep - 1);\n break;\n\n default:\n break;\n }\n };\n\n const _nextStep = (currentStep: number) => {\n switch (currentStep) {\n case 0:\n _processForm();\n break;\n case 1:\n _processForm();\n break;\n\n default:\n break;\n }\n };\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"ez-auth-register-by-email\">\n <Form layout=\"vertical\" form={form}>\n <Row>\n <Col span={24}>\n <Steps current={currentStep}>\n {steps.map(item => (\n <Steps.Step\n key={item.title}\n title={item.title}\n description={item.description}\n />\n ))}\n </Steps>\n </Col>\n </Row>\n <div className=\"mt-3 mb-3\">\n {currentStep === 0 ? (\n <>\n <CredentialForm />\n </>\n ) : currentStep === 1 ? (\n <>\n <SubscriptionForm form={form} />\n </>\n ) : currentStep === 2 ? (\n <>\n <VerifyMessage form={form} />\n </>\n ) : (\n ''\n )}\n </div>\n {currentStep !== steps.length - 1 && (\n <Row gutter={[16, 0]} className=\"\">\n <Col span={24} style={{ textAlign: 'right' }}>\n <Button\n type=\"default\"\n className=\"mr-3\"\n disabled={currentStep === 0 || currentStep === 2}\n onClick={() => _prevStep(currentStep)}\n >\n Back\n </Button>\n <Button\n disabled={currentStep === steps.length - 1 || isValidatingStep}\n type=\"primary\"\n onClick={() => _nextStep(currentStep)}\n loading={isValidatingStep}\n >\n {currentStep !== 1 ? 'Next' : 'Register'}\n </Button>\n </Col>\n </Row>\n )}\n </Form>\n </div>\n );\n};\n","import { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { DocType } from 'components/appPage/documents';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nexport const getTransactionDocs = (contract_id: number, params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `transaction/${contract_id}/documents` + (params ? `?${params}` : ''),\n });\n};\n\nexport const getTransactionFolders = (contract_id: number, params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `transaction/${contract_id}/folders` + (params ? `?${params}` : ''),\n });\n};\n\nexport const getPresignedURLContractDocUpload = (\n contract_id: number,\n filePayload: {\n original_name: string;\n mime_type: string;\n size: number;\n }\n) => {\n return APIRequest({\n method: 'post',\n url: apiUrl + `transaction/${contract_id}/file-upload/presign-url`,\n data: {\n ...filePayload,\n },\n });\n};\n\nexport const getPresignedURLDocsRead = (\n doc_type: DocType,\n doc_list: {\n contract_id?: number;\n prospect_id?: number;\n file_id: number;\n }[]\n) => {\n return APIRequest({\n method: 'post',\n url: apiUrl + `documents/presign-urls`,\n data: {\n doc_type,\n doc_list,\n },\n });\n};\n\nexport const addNewTransactionDoc = (\n contract_id: number,\n docPayload: {\n folder_id?: number;\n filename?: string;\n u_filename?: string;\n bucket?: string;\n key?: string;\n template_type?: string | null;\n doc_title?: string | null;\n docs_template_id?: number | null;\n content_type?: string;\n size?: number;\n }\n) => {\n Mixpanel.track('app.add_transaction_doc', {\n contract_id,\n ...docPayload,\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `transaction/${contract_id}/documents`,\n data: docPayload,\n });\n};\n\nexport const linkDocsToTasks = (contract_id: number, docIDs: number[], taskIDs: number[]) => {\n Mixpanel.track('app.edit_transaction_doc', {\n contract_id,\n action: 'link-to-docs',\n task_ids: taskIDs,\n doc_ids: docIDs,\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `transaction/${contract_id}/documents/link-to-tasks`,\n data: {\n doc_ids: docIDs,\n task_ids: taskIDs,\n },\n });\n};\n\nexport const downloadLegacyDocument = (doc_type: DocType, file_id: number) => {\n return APIRequest({\n method: 'get',\n responseType: 'blob',\n url: apiUrl + `document/${file_id}/legacy-read?doc_type=${doc_type}&read_mode=download`,\n });\n};\n\nexport const getPresignedURLDoc = (\n doc_type: DocType,\n file_id: number,\n read_mode: 'inline' | 'download'\n) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `document/${file_id}/presign-url/${read_mode}?doc_type=${doc_type}`,\n });\n};\n\nexport const deleteDocument = (contract_id: number, doc_id: number) => {\n Mixpanel.track('app.delete_transaction_doc', {\n contract_id,\n doc_id: doc_id,\n bulk: false,\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `transaction/${contract_id}/document/${doc_id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteFile = (contract_id: number, doc_id: number) => {\n Mixpanel.track('app.delete_transaction_file', {\n contract_id,\n doc_id: doc_id,\n bulk: false,\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `transaction/${contract_id}/document/${doc_id}/delete-file`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getDocNotes = (doc_id: number, params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `document/${doc_id}/notes` + (params ? `?${params}` : ''),\n useDefaultErrorNotif: true,\n });\n};\n\nexport const addNewNote = (contract_id: number, doc_id: number, note: string) => {\n Mixpanel.track('app.edit_transaction_doc', {\n contract_id,\n doc_id,\n action: 'new_note',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `document/${doc_id}/notes`,\n data: {\n contract_id: contract_id,\n note: note,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateDocument = (\n contract_id: number,\n id: number,\n payload: any,\n formType: 'FULL' | 'PARTIAL' | 'SINGLE' = 'PARTIAL'\n) => {\n Mixpanel.track('app.edit_transaction_doc', {\n contract_id,\n doc_id: id,\n action: 'edit',\n ...payload,\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `transaction/${contract_id}/document/${id}?formType=${formType}`,\n data: {\n ...payload,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const executeSignature = (\n contract_id: number,\n id: number,\n payload: any,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n) => {\n Mixpanel.track('app.edit_transaction_doc', {\n contract_id,\n doc_id: id,\n action: 'edit',\n ...payload,\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `transaction/${contract_id}/document/signatures/${id}?formType=${formType}`,\n data: {\n ...payload,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const generateDocuSignEnvelope = (\n contract_id: number,\n doc_id: number,\n emailSubject: string,\n emailBlurb: string,\n recipients: { email: string; fullname: string }[]\n) => {\n Mixpanel.track('app.generate_docusign_envelope', {\n contract_id,\n doc_id,\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `transaction/${contract_id}/document/${doc_id}/generate-docusign-envelope`,\n data: {\n emailSubject,\n emailBlurb,\n recipients,\n },\n useDefaultErrorNotif: true,\n });\n};\nexport const getDocuSignConsentURL = (contract_id: number, doc_id: number) => {\n return APIRequest({\n method: 'post',\n url: apiUrl + `transaction/${contract_id}/document/${doc_id}/get-docusign-consent-url`,\n useDefaultErrorNotif: true,\n });\n};\n\n// bulk actions\nexport const moveSelectedDocs = (contract_id: number, doc_ids: number[], folder_id: number) => {\n Mixpanel.track('app.edit_transaction_doc', {\n contract_id,\n doc_ids: doc_ids,\n action: 'move_docs',\n folder_id,\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `transaction/${contract_id}/documents/bulk-move-docs`,\n data: {\n contract_id: contract_id,\n doc_ids: doc_ids,\n folder_id: folder_id,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteDocuments = (contract_id: number, doc_ids: number[]) => {\n Mixpanel.track('app.delete_transaction_doc', {\n contract_id,\n doc_ids: doc_ids,\n bulk: true,\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `transaction/${contract_id}/documents`,\n data: {\n doc_ids: doc_ids,\n },\n useDefaultErrorNotif: true,\n });\n};\n","// Core React libs import\nimport React, { useMemo, useState } from 'react';\n\n// Core ANTD and 3rd party libs import\nimport { Avatar, Space, Tooltip, Typography } from 'antd';\nimport { TransactionDocItemType } from 'types/transaction';\nimport { EZOverlaySpinner } from 'components/spinner/overlaySpinner';\n\ntype EZSignatureTrackerProps = {\n onSubmit: (\n newData: TransactionDocItemType,\n oldData: TransactionDocItemType,\n callback: React.Dispatch<React.SetStateAction<boolean>>\n ) => void;\n data: any;\n isTransactionDeleted?: boolean;\n isLoading: boolean;\n record: TransactionDocItemType;\n};\ntype CellSignatureProps = {\n B: number;\n S: number;\n SA: number;\n BA: number;\n};\nexport const EZSignatureTracker: React.FC<EZSignatureTrackerProps> = ({\n onSubmit,\n data,\n isTransactionDeleted,\n isLoading,\n record,\n}) => {\n const [cell, setCell] = useState<CellSignatureProps>(data);\n const [isModified, setIsModified] = useState(false);\n\n let newData = useMemo(() => {\n return {\n ...record,\n buyer_sign: cell.B,\n seller_sign: cell.S,\n seller_agent_sign: cell.SA,\n buyer_agent_sign: cell.BA,\n };\n }, [cell, record]);\n\n return (\n <Space wrap size={8}>\n {Object.entries(cell).map(([key, val], idx) => {\n let popoverText = '';\n switch (key) {\n case 'S':\n popoverText = 'Seller';\n break;\n case 'SA':\n popoverText = 'Seller Agent';\n break;\n case 'B':\n popoverText = 'Buyer';\n break;\n case 'BA':\n popoverText = 'Buyer Agent';\n break;\n }\n let signatures = cell;\n let value = val === 1 ? true : false;\n let classNameCustom = value ? 'avatar-signature-tracking-done ' : ' ';\n return (\n <Tooltip title={isTransactionDeleted ? '' : popoverText} color=\"#1890ff\">\n <span\n onClick={() => {\n if (isTransactionDeleted) return;\n setIsModified(true);\n signatures = {\n ...signatures,\n [key]: value === true ? 0 : 1,\n };\n setCell(signatures);\n }}\n >\n <Avatar\n style={{ cursor: isTransactionDeleted ? 'not-allowed' : '' }}\n className={`avatar-signature-tracking ${classNameCustom}`}\n size=\"small\"\n >\n {key}\n </Avatar>\n </span>\n </Tooltip>\n );\n })}\n {isModified &&\n (isLoading ? (\n <EZOverlaySpinner />\n ) : (\n <Typography.Text\n onClick={() => onSubmit(newData, record, setIsModified)}\n className=\"avatar-signature-executor\"\n >\n Execute\n </Typography.Text>\n ))}\n </Space>\n );\n};\n","// Core React libraries import\nimport React, { useContext, useEffect, useRef, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Row,\n Col,\n Space,\n Menu,\n Button,\n Tabs,\n Typography,\n Dropdown,\n Tag,\n Tooltip,\n Popover,\n Divider,\n Select,\n UploadProps,\n Alert,\n Popconfirm,\n UploadFile,\n Collapse,\n Modal,\n Table,\n Form,\n Input,\n} from 'antd';\nimport { ProColumns } from '@ant-design/pro-components';\nimport {\n DeleteOutlined,\n FieldTimeOutlined,\n InboxOutlined,\n CloseOutlined,\n EllipsisOutlined,\n SaveFilled,\n DownloadOutlined,\n FileSearchOutlined,\n DeliveredProcedureOutlined,\n DeleteFilled,\n FolderAddOutlined,\n} from '@ant-design/icons';\nimport fileDownload from 'js-file-download';\n\n// EZ web-app utils import\nimport { downloadFileRequest } from 'utils/apiUtil';\n// EZ web-app APIs import\nimport { downloadLegacyDocument, getPresignedURLDoc } from 'utils/ez_api/documentAPIs';\nimport {\n addNewAccountDoc,\n addNewAccountDocFolder,\n deleteAccountDocument,\n deleteAccountDocuments,\n getAccountDocFolders,\n getAccountDocs,\n getPresignedURLAccountDocUpload,\n moveSelectedAccountDocs,\n updateAccountDocument,\n} from 'utils/ez_api/accountDocumentAPIs';\n// EZ web-app types import\nimport { AccountDocFolderType, AccountDocType } from 'types/accountDocument';\nimport { ACCOUNT_ROLE_ID } from 'types/account';\n// EZ web-app components import\nimport { EZDateFormat, EZTable, EZUpload, UploadProgress } from 'components';\nimport {\n forwardRefEZTableProps,\n IOnChangeCallbackProps,\n ITableQueryParams,\n} from 'components/table/EZProTable';\nimport { EZUploadProps } from 'components/upload/upload';\nimport { showMessage, showNotification } from 'utils/notificationUtil';\nimport { HomeContext } from 'context/EZContext';\nimport { previewDoc } from 'components/appPage/documents';\n\n// Page level styles\nimport './docLibrary.scss';\n\nconst { Text, Paragraph } = Typography;\nconst { Option } = Select;\nconst { TabPane } = Tabs;\nconst { Panel } = Collapse;\n\nconst defaultTableParam: ITableQueryParams = {\n searchKeyword: '',\n orderParams: [],\n // orderParams: [['$doc_folder.rank$', 'desc']],\n whereParams: {},\n whereFilterParams: {},\n};\n\nconst AddNewFolderContent: React.FC<{ onSuccess: () => void }> = ({ onSuccess }) => {\n const [form] = Form.useForm();\n\n const _onFinish = (values: any) => {\n const folder_name = values.folder_name.trim();\n\n addNewAccountDocFolder(folder_name).then(() => {\n onSuccess();\n form.resetFields();\n showMessage('success', 'New folder has been added.');\n });\n };\n\n useEffect(() => {\n form.resetFields();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Popover\n content={\n <Form form={form} onFinish={_onFinish} layout=\"vertical\">\n <Row gutter={[8, 0]} style={{ width: '400px' }} className=\"mt-2\">\n <Col span={20}>\n <Form.Item\n name=\"folder_name\"\n rules={[\n {\n required: true,\n whitespace: true,\n pattern: new RegExp('^[A-Za-z0-9_-]+$'),\n message: 'Invalid folder name.',\n },\n ]}\n extra=\"Tip: Only alphanumeric characthers are allowed.\"\n >\n <Input placeholder=\"Enter the folder name\" />\n </Form.Item>\n </Col>\n <Col span={4} className=\"text-left\">\n <Button type=\"primary\" htmlType=\"submit\">\n Add\n </Button>\n </Col>\n </Row>\n </Form>\n }\n trigger={['click']}\n placement=\"bottomLeft\"\n >\n <Button icon={<FolderAddOutlined />} className=\"mb-2 ez-action-btn\">\n Add New Folder\n </Button>\n </Popover>\n );\n};\n\nconst DocumentLibraryTab: React.FC<{}> = ({}) => {\n const HomeCtx = useContext(HomeContext);\n\n const UserPermission = HomeCtx.userPermission;\n\n const hasFullAccessPermission = [\n ACCOUNT_ROLE_ID.OWNER,\n ACCOUNT_ROLE_ID.MANAGER,\n ACCOUNT_ROLE_ID.COORDINATOR,\n ].includes(UserPermission?.accountrole_id || 0);\n\n const EZTableRef = useRef<forwardRefEZTableProps>();\n\n const [docFolders, setDocFolders] = useState<AccountDocFolderType[]>([]);\n\n const [fileUploadList, setFileUploadList] = useState<UploadFile[]>([]);\n\n const [queryParams, setQueryParams] = useState<ITableQueryParams>(defaultTableParam);\n\n const [docUploadFolderID, setDocUploadFolderID] = useState<number>();\n const [docFolderFilter, setDocFolderFilter] = useState<number>();\n\n const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);\n\n // const [isUpdatingDoc, setIsUpdatingDoc] = useState<boolean>(false);\n\n async function _fetchData(EZTableQueryParams: string): Promise<any> {\n return getAccountDocs(EZTableQueryParams).then(result => result);\n }\n\n const _handleFileUploadChange: UploadProps['onChange'] = ({ file, fileList }) => {\n setFileUploadList([...fileList]);\n\n if (file.status === 'done') {\n addNewAccountDoc({\n accountfolder_id: docUploadFolderID,\n path: docFolders.find(f => f.accountfolder_id === docUploadFolderID)?.folder_name,\n\n filename: file.name,\n u_filename: file.response?.newFilename,\n bucket: file.response?.Bucket,\n key: file.response?.Key,\n size: file.size,\n content_type: file.type,\n }).then(() => {\n setQueryParams({\n ...queryParams,\n resetPagination: false,\n });\n _fetchDocFolders();\n });\n setFileUploadList(fileList.filter(f => f.uid !== file.uid));\n }\n };\n\n async function _fetchPresignURL(payload: any): Promise<any> {\n return getPresignedURLAccountDocUpload(payload);\n }\n\n const _onChangeCallback: IOnChangeCallbackProps = () => {};\n\n const _reloadSubTabData = (resetPagination?: boolean, silentLoading?: boolean) => {\n setQueryParams({\n ...queryParams,\n resetPagination,\n silentLoading: silentLoading || undefined,\n });\n };\n\n const _fetchDocFolders = () => {\n getAccountDocFolders().then(resp => {\n if (resp.data) {\n setDocFolders(resp.data);\n setDocUploadFolderID(resp.data?.[0]?.accountfolder_id);\n }\n });\n };\n\n const _downloadDocument = (doc: AccountDocType) => {\n showMessage('success', 'Download has been initiated. Please wait...');\n\n // if bucket and doc property has value, the doc will be downloaded from AWS S3\n if (doc.bucket && doc.key) {\n getPresignedURLDoc('doc_library', doc.document_id, 'download').then(resp => {\n downloadFileRequest(resp.data?.presignedURL, doc.filename || 'untitled');\n });\n } else {\n downloadLegacyDocument('doc_library', doc.document_id).then((resp: any) => {\n fileDownload(resp, doc.filename || 'untitled');\n });\n }\n };\n\n const _saveDocumentRecord = async (\n newData: AccountDocType,\n oldData: AccountDocType,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n ) => {\n // setDocIDsEdit([...docIDsEdit, { docID: newData.document_id }]);\n\n if (newData.filename === '' || newData.filename === null) {\n newData.filename = oldData.filename;\n }\n\n if (newData.document_id) EZTableRef.current?.modifyData(newData, newData.document_id);\n\n return updateAccountDocument(\n newData.document_id,\n {\n ...newData,\n },\n formType\n )\n .then(() => {\n showNotification(\n 'success',\n `Document: \"${newData.filename}\" has been successfully updated.`\n );\n\n if (oldData.accountfolder_id !== newData.accountfolder_id) {\n _reloadSubTabData(false, true);\n }\n\n return newData;\n })\n .catch(err => {\n throw err;\n });\n };\n\n const _applyFilter = (docFolderFilter?: number) => {\n const currentWhereFilterParams: any = {};\n // const currentWhereFilterParams = { ...queryParams.whereFilterParams };\n\n if (docFolderFilter === -1) {\n if (currentWhereFilterParams['$accountfolder.accountfolder_id$']) {\n delete currentWhereFilterParams['$accountfolder.accountfolder_id$'];\n }\n } else if (docFolderFilter) {\n currentWhereFilterParams['$accountfolder.accountfolder_id$'] = docFolderFilter;\n }\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: { ...currentWhereFilterParams },\n resetPagination: true,\n });\n };\n\n const _columns: ProColumns<AccountDocType>[] = [\n {\n title: 'Document Name',\n dataIndex: 'filename',\n width: '140px',\n sorter: true,\n // ellipsis: true,\n fixed: 'left',\n render: (_, record) => (\n <>\n <Text title={record.filename}>{record.filename || '-'}</Text>\n </>\n ),\n },\n {\n title: 'Folder',\n dataIndex: 'accountfolder_id',\n width: '100px',\n sorter: true,\n // hideInTable: docFolderFilter && docFolderFilter > 0 ? true : false,\n valueType: 'select',\n fieldProps: {\n options: docFolders.map((item, idx) => ({\n label: item.folder_name,\n key: item.accountfolder_id,\n value: item.accountfolder_id,\n })),\n },\n render: (_, record) => (\n <>\n <Tag>{record.accountfolder?.folder_name}</Tag>\n </>\n ),\n },\n {\n title: 'Description',\n dataIndex: 'description',\n width: '200px',\n sorter: true,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text title={record.description}>{record.description || '-'}</Text>\n </>\n ),\n },\n {\n title: 'Uploaded By',\n dataIndex: 'account.fullname',\n width: '70px',\n editable: false,\n sorter: false,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text title={record.account?.fullname}>{record.account?.fullname || '-'}</Text>\n </>\n ),\n },\n {\n title: 'Uploaded On',\n dataIndex: 'posted_date',\n width: '80px',\n editable: false,\n sorter: false,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text>\n <EZDateFormat value={record.date_uploaded} format=\"MMM Do, YYYY hh:mma\" />\n </Text>\n </>\n ),\n },\n {\n title: 'Action',\n dataIndex: 'action',\n width: '85px',\n valueType: 'option',\n render: (_, record, index, action) =>\n hasFullAccessPermission ? (\n <Space size=\"small\" className=\"pl-1\">\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<FieldTimeOutlined />}\n title=\"Quick-edit this document\"\n onClick={() => {\n action?.startEditable(record.document_id);\n }}\n >\n Quick Edit\n </Button>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 mr-1\"\n size=\"small\"\n type=\"link\"\n icon={<FileSearchOutlined />}\n title=\"Preview\"\n onClick={() => {\n previewDoc('doc_library', [\n {\n file_id: record.document_id,\n accountfolder_id: 0,\n },\n ]);\n }}\n ></Button>\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu>\n <Menu.Item key=\"0\" onClick={() => _downloadDocument(record)}>\n <DownloadOutlined className=\"mr-3\" />\n <span className=\"\">Download</span>\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item\n key=\"2\"\n danger\n onClick={() => _deleteDocument(record)}\n >\n <DeleteOutlined className=\"mr-3\" />\n Delete Document\n </Menu.Item>\n </Menu>\n }\n placement=\"bottomRight\"\n >\n <span onClick={e => e.preventDefault()}>\n <Button size=\"small\" type=\"link\" icon={<EllipsisOutlined />} />\n </span>\n </Dropdown>\n </Space>\n ) : (\n <Space size=\"small\" className=\"pl-1\">\n {' '}\n <Button\n className=\"p-0 mr-1\"\n size=\"small\"\n type=\"link\"\n icon={<FileSearchOutlined />}\n title=\"Preview\"\n onClick={() => {\n previewDoc('doc_library', [\n {\n file_id: record.document_id,\n accountfolder_id: 0,\n },\n ]);\n }}\n ></Button>\n </Space>\n ),\n fixed: 'right',\n },\n ];\n\n const _doBulkAction_moveDocs = (\n selectedRowKeys: React.Key[],\n newFolderID: number,\n newFolderTitle?: string\n ) => {\n const noOfKeys = selectedRowKeys.length;\n\n moveSelectedAccountDocs(selectedRowKeys as number[], newFolderID).then(resp => {\n showNotification(\n 'success',\n `${noOfKeys} selected doc(s) have been moved to ${newFolderTitle}.`\n );\n setImmediate(() => {\n _reloadSubTabData(false, true);\n\n setSelectedRowKeys([]);\n });\n });\n };\n\n const _deleteDocuments = (docIDs: number[]) => {\n deleteAccountDocuments(docIDs).then(() => {\n showNotification(\n 'success',\n `${docIDs.length} selected docs have been successfully deleted.`\n );\n setImmediate(() => {\n _reloadSubTabData(false, true);\n\n setSelectedRowKeys([]);\n });\n });\n };\n\n const _deleteDocument = (record: AccountDocType) => {\n const deleteConfirmationModal = Modal.confirm({\n title: `Delete confirmation`,\n content: (\n <>\n Are you sure to delete document/file: <b>{record.filename}</b>?\n </>\n ),\n onOk: () => {\n deleteConfirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Deleting...',\n });\n deleteAccountDocument(record.document_id).then(() => {\n deleteConfirmationModal.destroy();\n\n showNotification(\n 'success',\n `Document/file: \"${record.filename}\" has been successfully deleted.`\n );\n _reloadSubTabData(false, true);\n });\n return true;\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const _onEdit = (_: string, action: 'add' | 'remove') => {\n if (action === 'add') {\n const a = Modal.info({});\n }\n };\n\n const uploadProps: EZUploadProps = {\n fileList: fileUploadList,\n onChange: _handleFileUploadChange,\n getPresignedURL: _fetchPresignURL,\n };\n\n const _onSuccess = () => {\n _fetchDocFolders();\n };\n\n useEffect(() => {\n _applyFilter(docFolderFilter);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [docFolderFilter]);\n\n useEffect(() => {\n _fetchDocFolders();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"ez-component-documents ez-tab-doclibrary\">\n <div className=\"mb-4 ez-sub-content-wrapper\">\n <Row className=\"row-wrapper\">\n {hasFullAccessPermission && (\n <Col span={24} className=\"mb-3\">\n <div>\n <UploadProgress\n fileUploadList={fileUploadList}\n setFileUploadList={setFileUploadList}\n />\n </div>\n <EZUpload dragger {...uploadProps}>\n <p className=\"ant-upload-drag-icon\">\n <InboxOutlined />\n </p>\n <p className=\"ant-upload-text\">\n Click or drag file to this area to upload\n </p>\n <p className=\"ant-upload-hint\">\n Support for a single or bulk upload.\n </p>\n </EZUpload>\n <Select\n style={{ textAlign: 'left', width: 300 }}\n className=\"mb-2 default-upload-folder-selector\"\n value={docUploadFolderID}\n disabled={\n fileUploadList.filter(file => file.status === 'uploading')\n .length > 0\n }\n onChange={(val: number) => {\n setDocUploadFolderID(val);\n }}\n >\n {docFolders.map(item => (\n <Option\n value={item.accountfolder_id}\n key={`docfolder-select-${item.accountfolder_id}`}\n >\n <span>\n <Text>Upload To: </Text>\n <Text strong>{item.folder_name}</Text>\n </span>\n </Option>\n ))}\n </Select>\n </Col>\n )}\n <Col span={24}>\n <Tabs\n type=\"card\"\n defaultActiveKey=\"-1\"\n onChange={val => {\n const docFolderID = parseInt(val.replace('tab-docfolder-', ''));\n setDocFolderFilter(docFolderID);\n setSelectedRowKeys([]);\n }}\n // onEdit={(e: any, action: string) => _onEdit(e, 'add')}\n tabBarExtraContent={\n hasFullAccessPermission && (\n <AddNewFolderContent onSuccess={_onSuccess} />\n )\n }\n >\n <Tabs.TabPane\n tab=\"All Documents and Files\"\n key=\"-1\"\n closable={false}\n ></Tabs.TabPane>\n {docFolders.map(item => (\n <Tabs.TabPane\n tab={`${item.folder_name}`}\n key={`tab-docfolder-${item.accountfolder_id}`}\n closable={false}\n ></Tabs.TabPane>\n ))}\n </Tabs>\n </Col>\n <Col span={24}>\n <Row\n className={`table-selected-indicator ${\n selectedRowKeys?.length ? 'has-row-selected' : 'no-row-selected'\n }`}\n >\n <Col span={24}>\n <Alert\n style={{ minWidth: '500px' }}\n message={\n selectedRowKeys && selectedRowKeys.length ? (\n <Space>\n <Tooltip title=\"Move the selected doc(s)\">\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu\n onClick={e =>\n _doBulkAction_moveDocs(\n selectedRowKeys,\n parseInt(e.key),\n docFolders.find(\n d =>\n d.accountfolder_id ===\n parseInt(e.key)\n )?.folder_name\n )\n }\n items={docFolders.map(\n (item, idx) => ({\n label: item.folder_name,\n key: item.accountfolder_id,\n disabled:\n item.accountfolder_id ===\n docFolderFilter,\n })\n )}\n />\n }\n placement=\"bottomLeft\"\n >\n <Button\n icon={<DeliveredProcedureOutlined />}\n >\n Move To\n </Button>\n </Dropdown>\n </Tooltip>\n <Divider type=\"vertical\" />\n <Tooltip title=\"Remove the selected doc(s)\">\n <Popconfirm\n arrowPointAtCenter\n title=\"Are you sure to delete the selected document(s)?\"\n okText=\"Yes\"\n cancelText=\"No\"\n placement=\"bottomLeft\"\n onConfirm={() =>\n _deleteDocuments(\n selectedRowKeys as number[]\n )\n }\n >\n <Button\n danger\n icon={<DeleteFilled />}\n ></Button>\n </Popconfirm>\n </Tooltip>\n </Space>\n ) : (\n ''\n )\n }\n />\n </Col>\n </Row>\n <EZTable\n ref={EZTableRef}\n className=\"eztable-hide-delete-editable\"\n pagination={{\n pageSize: 50,\n pageSizeOptions: [20, 50, 100],\n position: ['bottomLeft', 'topLeft'],\n }}\n queryParams={queryParams}\n columns={_columns}\n size=\"small\"\n rowKey=\"document_id\"\n fetchData={_fetchData}\n scroll={{ x: 2000 }}\n rowSelection={\n hasFullAccessPermission\n ? {\n selectedRowKeys: selectedRowKeys,\n onChange: (newSelectedRowKeys: React.Key[]) => {\n setSelectedRowKeys(newSelectedRowKeys);\n },\n alwaysShowAlert: true,\n columnWidth: '20px',\n selections: [Table.SELECTION_NONE],\n }\n : false\n }\n tableAlertRender={false}\n toolBarComponents={\n // <EZUpload {...uploadProps} key=\"ez-upload-1\">\n // <Button\n // key={`toolBarComponents-2-task-list`}\n // className=\"ez-action-btn\"\n // >\n // <PlusOutlined />\n // Upload New Document\n // </Button>\n // </EZUpload>,\n\n []\n }\n editable={{\n actionRender: (_, __, defaultDom) => [\n defaultDom.save,\n defaultDom.cancel,\n ],\n type: 'multiple',\n onSave: async (_, data: AccountDocType, oldData) => {\n return _saveDocumentRecord(\n {\n ...data,\n },\n oldData\n );\n },\n saveText: (\n <>\n <Button\n className=\"p-0 pl-1\"\n type=\"link\"\n icon={<SaveFilled />}\n title=\"Edit this doc\"\n >\n Save\n </Button>\n </>\n ),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n onChangeCallback={_onChangeCallback}\n />\n </Col>\n </Row>\n </div>\n </div>\n );\n};\n\nexport default DocumentLibraryTab;\n","// Core React libraries import\nimport React, { useContext } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Row,\n Col,\n Typography,\n Tabs,\n Alert,\n Space,\n Tooltip,\n Dropdown,\n Menu,\n Button,\n Divider,\n Popconfirm,\n Table,\n Tag,\n Form,\n Input,\n Modal,\n} from 'antd';\nimport {\n BulbOutlined,\n CaretDownOutlined,\n DeleteFilled,\n DeleteOutlined,\n DeliveredProcedureOutlined,\n EditOutlined,\n EllipsisOutlined,\n PlusOutlined,\n TeamOutlined,\n UsergroupDeleteOutlined,\n} from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\n\n// EZ web-app utils import\nimport { showMessage, showNotification } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport {\n addNewEmailTemplate,\n addNewEmailTemplateFolder,\n deleteEmailTemplate,\n deleteEmailTemplateFolder,\n editEmailTemplate,\n editEmailTemplateFolder,\n generateEmailTemplates,\n getEmailTemplateFolders,\n getEmailTemplates,\n moveSelectedEmailTemplates,\n toggleSharingTemplateFolder,\n} from 'utils/ez_api/emailTemplateAPIs';\n// EZ web-app types import\nimport { EZTable, ITableQueryParams, forwardRefEZTableProps } from 'components/table/EZProTable';\nimport { EmailTemplateFolderType, EmailTemplateType } from 'types/emailTemplate';\n// EZ web-app components import\nimport { HomeContext } from 'context/EZContext';\nimport { EZDateFormat } from 'components';\nimport { EditEmailTemplateModalContent } from '../modal/emailTemplateEditDetail';\n\n// EZ web-app styles and assets import\n\nconst { Text, Paragraph } = Typography;\n\nconst defaultTableParam: ITableQueryParams = {\n searchKeyword: '',\n orderParams: [],\n // orderParams: [['$doc_folder.rank$', 'desc']],\n whereParams: {},\n whereFilterParams: {},\n};\n\nexport const SubTab_EmailTemplates: React.FC<{}> = ({}) => {\n const HomeCtx = useContext(HomeContext);\n const UserInfo = HomeCtx.userInfo;\n\n const [form] = Form.useForm();\n\n const EZTableRef = useRef<forwardRefEZTableProps>();\n const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);\n const [queryParams, setQueryParams] = useState<ITableQueryParams>(defaultTableParam);\n\n async function _fetchData(EZTableQueryParams: string): Promise<any> {\n return getEmailTemplates(EZTableQueryParams).then(result => result);\n }\n const _fetchTemplateFolders = () => {\n getEmailTemplateFolders({ order: [['folder_id', 'asc']] }).then(resp => {\n if (resp.data) {\n const folders = resp.data as EmailTemplateFolderType[];\n\n const myFolders: EmailTemplateFolderType[] = [];\n const foldersOwnedByOthers: EmailTemplateFolderType[] = [];\n\n for (let index = 0; index < folders.length; index++) {\n const folder = folders[index];\n\n if (folder.account_id === UserInfo?.account_id) {\n myFolders.push(folder);\n } else {\n foldersOwnedByOthers.push(folder);\n }\n }\n\n setTemplateFolders([...myFolders, ...foldersOwnedByOthers]);\n\n if (!folders.length || !myFolders || !myFolders.length) {\n setShowGenerateFolderTemplates(true);\n } else {\n setShowGenerateFolderTemplates(false);\n }\n }\n });\n };\n\n const [templateFolders, setTemplateFolders] = useState<EmailTemplateFolderType[]>([]);\n const [templateFolderFilter, setTemplateFolderFilter] = useState<string>('-1');\n const [showGenerateFolderTemplates, setShowGenerateFolderTemplates] = useState<boolean>(false);\n\n const _columns: ProColumns<EmailTemplateType>[] = [\n {\n title: 'Template Name',\n dataIndex: 'template_name',\n width: '82px',\n sorter: true,\n fixed: 'left',\n render: (_, record) => (\n <>\n <Text title={record.template_name}>{record.template_name || '-'}</Text>\n </>\n ),\n },\n {\n title: 'Folder',\n dataIndex: 'template_folder_id',\n width: '72px',\n sorter: true,\n ellipsis: true,\n valueType: 'select',\n fieldProps: {\n options: templateFolders.map((item, idx) => ({\n label: `${item.is_shared ? <TeamOutlined className=\"mr-2\" /> : <></>}${\n item.folder_name\n }`,\n key: item.folder_id,\n value: item.folder_id,\n })),\n },\n render: (_, record) => (\n <>\n <Tag>\n {record.email_template_folder?.is_shared ? (\n <TeamOutlined className=\"mr-2\" />\n ) : (\n <></>\n )}\n {record.email_template_folder?.folder_name}\n </Tag>\n </>\n ),\n },\n {\n title: 'Description',\n dataIndex: 'template_desc',\n width: '100px',\n sorter: true,\n // ellipsis: true,\n render: (_, record) => (\n <>\n <Text title={record.template_desc}>{record.template_desc || '-'}</Text>\n </>\n ),\n },\n {\n title: 'Email Subject',\n dataIndex: 'msg_subject',\n width: '100px',\n sorter: true,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text title={record.msg_subject}>{record.msg_subject || '-'}</Text>\n </>\n ),\n },\n {\n title: 'Last Updated By',\n dataIndex: 'updated_by_account.fullname',\n width: '50px',\n editable: false,\n sorter: false,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text title={record.updated_by_account?.fullname}>\n {record.updated_by_account?.fullname || '-'}\n </Text>\n </>\n ),\n },\n {\n title: 'Last Updated At',\n dataIndex: 'updated_at',\n width: '60px',\n editable: false,\n sorter: true,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text>\n <EZDateFormat value={record.updated_at} format=\"MMM Do, YYYY hh:mma\" />\n </Text>\n </>\n ),\n },\n {\n title: 'Created By',\n dataIndex: 'account.fullname',\n width: '50px',\n editable: false,\n sorter: false,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text title={record.account?.fullname}>{record.account?.fullname || '-'}</Text>\n </>\n ),\n },\n {\n title: 'Created At',\n dataIndex: 'created_at',\n width: '60px',\n editable: false,\n sorter: true,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text>\n <EZDateFormat value={record.created_at} format=\"MMM Do, YYYY hh:mma\" />\n </Text>\n </>\n ),\n },\n {\n title: 'Action',\n dataIndex: 'action',\n width: '45px',\n valueType: 'option',\n fixed: 'right',\n render: (_, record, index, action) => (\n <Space size=\"small\" className=\"pl-1\">\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<EditOutlined />}\n title=\"Edit this template\"\n onClick={() => {\n _showEditTemplateDetailModal(record, 'EDIT');\n }}\n >\n Edit\n </Button>\n <Divider type=\"vertical\" />\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu>\n <Menu.Item key=\"2\" danger onClick={() => _deleteTemplate(record)}>\n <DeleteOutlined className=\"mr-3\" />\n Delete\n </Menu.Item>\n </Menu>\n }\n placement=\"bottomRight\"\n >\n <span onClick={e => e.preventDefault()}>\n <Button size=\"small\" type=\"link\" icon={<EllipsisOutlined />} />\n </span>\n </Dropdown>\n </Space>\n ),\n },\n ];\n\n const _applyFilter = (templateFolderFilter?: string) => {\n const currentWhereFilterParams: any = {};\n\n if (templateFolderFilter === '-1') {\n if (currentWhereFilterParams['template_folder_id']) {\n delete currentWhereFilterParams['template_folder_id'];\n }\n } else if (templateFolderFilter) {\n currentWhereFilterParams['template_folder_id'] = templateFolderFilter?.replace(\n 'tab-templatefolder-',\n ''\n );\n }\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: { ...currentWhereFilterParams },\n resetPagination: true,\n });\n };\n\n const _showEditTemplateDetailModal = (\n record: Partial<EmailTemplateType>,\n mode: 'EDIT' | 'ADD' = 'EDIT'\n ) => {\n const editTemplateDetailModal = Modal.confirm({\n title: (\n <Typography.Title level={4}>\n {mode === 'ADD' ? 'Add New Template' : 'Edit Template Detail'}\n </Typography.Title>\n ),\n content: (\n <EditEmailTemplateModalContent\n emailTemplate={record}\n form={form}\n mode={mode}\n templateFolders={templateFolders}\n UserInfo={UserInfo}\n />\n ),\n okText: mode === 'EDIT' ? 'Save' : 'Add',\n icon: <></>,\n style: { top: '40px' },\n width: '80%',\n autoFocusButton: null,\n onOk: async () => {\n editTemplateDetailModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Saving...',\n });\n return form\n .validateFields()\n .then(async formValues => {\n const formParams = formValues as Partial<EmailTemplateType>;\n\n if (mode === 'ADD') {\n return addNewEmailTemplate(formParams)\n .then(resp => {\n const emailTemplateRecord = resp.data as EmailTemplateType;\n editTemplateDetailModal.destroy();\n\n _fetchTemplateFolders();\n setTemplateFolderFilter(\n `tab-templatefolder-${emailTemplateRecord.template_folder_id}`\n );\n EZTableRef.current?.reload();\n\n showNotification(\n 'success',\n 'New template has been created successfully.'\n );\n\n return emailTemplateRecord;\n })\n .catch(err => {\n throw err;\n });\n } else {\n formParams.email_template_id = record.email_template_id;\n return editEmailTemplate(formParams)\n .then(resp => {\n const emailTemplateRecord = resp.data as EmailTemplateType;\n editTemplateDetailModal.destroy();\n\n _fetchTemplateFolders();\n setTemplateFolderFilter(\n `tab-templatefolder-${emailTemplateRecord.template_folder_id}`\n );\n EZTableRef.current?.reload();\n\n showNotification(\n 'success',\n 'New changes have been applied successfully.'\n );\n\n return emailTemplateRecord;\n })\n .catch(err => {\n throw err;\n });\n }\n })\n .catch(err => {\n console.log('🚀 ~ file: subTabs_Templates.tsx:287 ~ onOk: ~ err:', err);\n\n editTemplateDetailModal.update({\n okButtonProps: {\n disabled: false,\n },\n okText: mode === 'EDIT' ? 'Save' : 'Add',\n });\n throw err;\n });\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const _showAddNewTemplateModal = () => {\n _showEditTemplateDetailModal(\n {\n template_folder_id: parseInt(\n templateFolderFilter?.replace('tab-templatefolder-', '')\n ),\n },\n 'ADD'\n );\n };\n\n const _doBulkAction_moveTemplates = (\n selectedRowKeys: React.Key[],\n newFolderID: number,\n newFolderTitle?: string\n ) => {\n const noOfKeys = selectedRowKeys.length;\n\n moveSelectedEmailTemplates(selectedRowKeys as number[], newFolderID).then(resp => {\n showNotification(\n 'success',\n `${noOfKeys} selected template(s) have been moved to ${newFolderTitle}.`\n );\n setImmediate(() => {\n _applyFilter(templateFolderFilter);\n\n setSelectedRowKeys([]);\n });\n });\n };\n\n const _deleteTemplate = (record: EmailTemplateType) => {\n if (UserInfo?.account_id !== record.account_id) {\n return showMessage('error', `Only the original owner can delete the template.`);\n }\n\n const deleteConfirmationModal = Modal.confirm({\n title: `Delete confirmation`,\n content: (\n <>\n Are you sure to delete template: <b>{record.template_name}</b>?\n </>\n ),\n onOk: () => {\n deleteConfirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Deleting...',\n });\n deleteEmailTemplate(record.email_template_id).then(() => {\n deleteConfirmationModal.destroy();\n\n showNotification(\n 'success',\n `Template: \"${record.template_name}\" has been successfully deleted.`\n );\n EZTableRef.current?.reload();\n });\n return true;\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const _showAddNewOrEditFolderModal = (\n record?: EmailTemplateFolderType,\n mode: 'EDIT' | 'ADD' = 'EDIT'\n ) => {\n form.setFieldValue('folder_name', record && record.folder_name ? record.folder_name : '');\n\n const newFolderModal = Modal.confirm({\n title: (\n <Typography.Title level={4}>\n {mode === 'ADD' ? 'Add New Folder' : 'Edit Folder Name'}\n </Typography.Title>\n ),\n content: (\n <>\n <Form layout=\"vertical\" form={form} requiredMark={false}>\n <Row gutter={[16, 0]}>\n <Col span={24}>\n <Form.Item\n label=\"Folder Name\"\n name=\"folder_name\"\n rules={[{ required: true, message: \"Name can't be empty\" }]}\n >\n <Input placeholder=\"Enter the folder name\" />\n </Form.Item>\n </Col>\n </Row>\n </Form>\n </>\n ),\n okText: mode === 'EDIT' ? 'Save' : 'Add',\n icon: <></>,\n style: { top: '40px' },\n width: '450px',\n autoFocusButton: null,\n onOk: async () => {\n newFolderModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Saving...',\n });\n return form\n .validateFields()\n .then(async formValues => {\n const formParams = formValues as Partial<EmailTemplateFolderType>;\n\n if (mode === 'ADD') {\n return addNewEmailTemplateFolder(formParams.folder_name || '')\n .then(resp => {\n const folderRecord = resp.data as EmailTemplateFolderType;\n\n newFolderModal.destroy();\n\n _fetchTemplateFolders();\n setTemplateFolderFilter(\n `tab-templatefolder-${folderRecord.folder_id}`\n );\n EZTableRef.current?.reload();\n\n showNotification(\n 'success',\n 'New folder has been created successfully.'\n );\n\n return folderRecord;\n })\n .catch(err => {\n throw err;\n });\n } else {\n formParams.folder_id = record?.folder_id;\n return editEmailTemplateFolder(formParams)\n .then(resp => {\n const folderRecord = resp.data as EmailTemplateFolderType;\n\n newFolderModal.destroy();\n\n _fetchTemplateFolders();\n setTemplateFolderFilter(\n `tab-templatefolder-${folderRecord.folder_id}`\n );\n EZTableRef.current?.reload();\n\n showNotification(\n 'success',\n 'New folder name has been saved successfully.'\n );\n\n return folderRecord;\n })\n .catch(err => {\n throw err;\n });\n }\n })\n .catch(err => {\n console.log('🚀 ~ file: subTabs_Templates.tsx:498 ~ onOk: ~ err:', err);\n newFolderModal.update({\n okButtonProps: {\n disabled: false,\n },\n okText: mode === 'EDIT' ? 'Save' : 'Add',\n });\n\n throw err;\n });\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const _showShareOrUnshareConfirmationModal = (record: EmailTemplateFolderType) => {\n if (UserInfo?.account_id !== record.account_id) {\n return showMessage('error', `Only the original owner can perform the function.`);\n }\n\n const confirmationModal = Modal.confirm({\n title: <Typography.Title level={4}>Toggle Sharing Confirmation</Typography.Title>,\n content: (\n <Row>\n <Col span={24}>\n You are about to {record.is_shared ? 'unshare' : 'share'} a folder and all\n its linked templates with your team members.{' '}\n {record.is_shared ? (\n ''\n ) : (\n <>\n <br />\n Once shared, other team members can see the folder you created and\n they will be able to add and edit the linked templates.\n </>\n )}\n </Col>\n <Col span={24}>\n <Divider />\n </Col>\n <Col span={24}>\n Are you sure to {record.is_shared ? 'unshare' : 'share'} the folder name:{' '}\n <b>{record.folder_name}</b>?\n </Col>\n </Row>\n ),\n okText: 'Continue',\n style: { top: '40px' },\n width: '550px',\n onOk: async () => {\n confirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Performing action...',\n });\n\n return toggleSharingTemplateFolder(record)\n .then(() => {\n confirmationModal.destroy();\n showNotification(\n 'success',\n `The folder: ${record.folder_name} has been ${\n record.is_shared ? 'unshared' : 'shared'\n } successfully.`\n );\n\n _fetchTemplateFolders();\n\n return record;\n })\n .catch(err => {\n throw err;\n });\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const _showDeleteFolderConfirmationModal = (record: EmailTemplateFolderType) => {\n if (UserInfo?.account_id !== record.account_id) {\n return showMessage('error', `Only the original owner can delete the folder.`);\n }\n\n if (templateFolders.length <= 1) {\n showMessage('error', `You can't delete the last folder.`);\n return;\n }\n\n form.setFieldValue('folder_name', record && record.folder_name ? record.folder_name : '');\n\n const deletionConfirmationModal = Modal.confirm({\n title: <Typography.Title level={4}>Deletion Confirmation</Typography.Title>,\n content: (\n <Row>\n <Col span={24}>\n You are about to delete a folder, and all its linked templates. You will not\n be able to restore them once done.\n </Col>\n <Col span={24}>\n <Divider />\n </Col>\n <Col span={24}>\n Are you sure to delete the folder: <b>{record.folder_name}</b>?\n </Col>\n </Row>\n ),\n okText: 'Delete',\n style: { top: '40px' },\n width: '550px',\n onOk: async () => {\n deletionConfirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Deleting...',\n });\n\n return deleteEmailTemplateFolder(record)\n .then(() => {\n deletionConfirmationModal.destroy();\n showNotification(\n 'success',\n `The folder: ${record.folder_name} has been deleted successfully.`\n );\n\n _fetchTemplateFolders();\n setTemplateFolderFilter('-1');\n return record;\n })\n .catch(err => {\n throw err;\n });\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const _onEditFolderTabs = (action: 'add' | 'remove') => {\n if (action === 'add') {\n _showAddNewOrEditFolderModal(undefined, 'ADD');\n } else {\n }\n };\n\n const _confirmGenerateDefaultFolders = () => {\n const generateDefaultFoldersConfirmationModal = Modal.confirm({\n title: <Typography.Title level={4}>Confirmation</Typography.Title>,\n content: (\n <Row>\n <Col span={24}>\n You are about to generate the default folders, which are prefilled with\n recommended email templates crafted by our team.\n </Col>\n <Col span={24}>\n <Divider />\n </Col>\n <Col span={24}>Are you sure to continue?</Col>\n </Row>\n ),\n okText: 'Yes',\n // style: { top: '40px' },\n width: '550px',\n onOk: async () => {\n generateDefaultFoldersConfirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Generating...',\n });\n\n return generateEmailTemplates()\n .then(() => {\n generateDefaultFoldersConfirmationModal.destroy();\n showNotification(\n 'success',\n `Default templates have been generated successfully.`\n );\n\n _fetchTemplateFolders();\n // setTemplateFolderFilter('-1');\n return true;\n })\n .catch(err => {\n throw err;\n });\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n useEffect(() => {\n _applyFilter(templateFolderFilter);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [templateFolderFilter]);\n\n useEffect(() => {\n _fetchTemplateFolders();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"ez_email_logs\">\n <Row gutter={24} className=\"mt-2 mb-3\">\n <Col span={24} className=\"\">\n <Tabs\n type=\"editable-card\"\n defaultActiveKey=\"-1\"\n activeKey={templateFolderFilter}\n onChange={val => {\n setTemplateFolderFilter(val);\n setSelectedRowKeys([]);\n }}\n addIcon={\n <Tooltip title=\"Add New Folder\">\n <PlusOutlined />\n </Tooltip>\n }\n tabBarExtraContent={\n showGenerateFolderTemplates ? (\n <span className=\"ml-3\">\n <Tooltip\n title={`Click to generate the default folders, prefilled with recommended email templates.`}\n >\n <Button\n type=\"link\"\n className=\"ez-action-btn\"\n icon={<BulbOutlined />}\n onClick={() => _confirmGenerateDefaultFolders()}\n >\n Generate Default Folders\n </Button>\n </Tooltip>\n </span>\n ) : (\n <></>\n )\n }\n onEdit={(e: any, action) => _onEditFolderTabs(action)}\n >\n <Tabs.TabPane tab=\"All Templates\" key=\"-1\" closable={false}></Tabs.TabPane>\n {templateFolders.map(folderItem => (\n <Tabs.TabPane\n tab={\n <span>\n {folderItem.is_shared ? (\n <Tooltip\n title={`Shared by ${folderItem.account?.fullname}`}\n >\n <TeamOutlined />\n </Tooltip>\n ) : (\n <></>\n )}\n {folderItem.folder_name}\n {templateFolderFilter ===\n `tab-templatefolder-${folderItem.folder_id}` && (\n <Dropdown\n overlay={\n <Menu\n items={[\n {\n label: 'Rename',\n key: 'rename_folder',\n icon: <EditOutlined />,\n disabled:\n folderItem.account_id !==\n UserInfo?.account_id,\n onClick: () =>\n _showAddNewOrEditFolderModal(\n folderItem,\n 'EDIT'\n ),\n },\n {\n label: folderItem.is_shared\n ? 'Unshare'\n : 'Share',\n key: 'share_folder',\n icon: !folderItem.is_shared ? (\n <TeamOutlined />\n ) : (\n <UsergroupDeleteOutlined />\n ),\n disabled:\n folderItem.account_id !==\n UserInfo?.account_id,\n onClick: () =>\n _showShareOrUnshareConfirmationModal(\n folderItem\n ),\n },\n { type: 'divider' },\n {\n label: 'Delete Folder',\n key: 'delete_folder',\n danger:\n folderItem.account_id ===\n UserInfo?.account_id,\n disabled:\n folderItem.account_id !==\n UserInfo?.account_id,\n onClick: () =>\n _showDeleteFolderConfirmationModal(\n folderItem\n ),\n },\n ]}\n />\n }\n trigger={['click']}\n >\n <Space>\n <CaretDownOutlined className=\"ml-4 mr-0\" />\n </Space>\n </Dropdown>\n )}\n </span>\n }\n key={`tab-templatefolder-${folderItem.folder_id}`}\n closable={false}\n ></Tabs.TabPane>\n ))}\n </Tabs>\n </Col>\n <Col span={24}>\n <Row\n className={`table-selected-indicator ${\n selectedRowKeys?.length ? 'has-row-selected' : 'no-row-selected'\n }`}\n >\n <Col span={24}>\n <Alert\n style={{ minWidth: '500px' }}\n message={\n selectedRowKeys && selectedRowKeys.length ? (\n <Space>\n <Tooltip title=\"Move the selected doc(s)\">\n <Dropdown\n trigger={['click']}\n overlayStyle={{\n minWidth: '200px',\n }}\n overlay={\n <Menu\n onClick={e =>\n _doBulkAction_moveTemplates(\n selectedRowKeys,\n parseInt(e.key),\n templateFolders.find(\n d =>\n d.folder_id ===\n parseInt(e.key)\n )?.folder_name\n )\n }\n items={templateFolders.map(\n (item, idx) => ({\n label: item.folder_name,\n key: item.folder_id,\n disabled:\n templateFolderFilter ===\n `tab-templatefolder-${item.folder_id}`,\n })\n )}\n />\n }\n placement=\"bottomLeft\"\n >\n <Button icon={<DeliveredProcedureOutlined />}>\n Move To\n </Button>\n </Dropdown>\n </Tooltip>\n {/* <Divider type=\"vertical\" />\n <Tooltip title=\"Remove selected template(s)\">\n <Popconfirm\n arrowPointAtCenter\n title=\"Are you sure to delete the selected template(s)?\"\n okText=\"Yes\"\n cancelText=\"No\"\n placement=\"bottomLeft\"\n onConfirm={\n () => {}\n // _deleteDocuments(\n // selectedRowKeys as number[]\n // )\n }\n >\n <Button danger icon={<DeleteFilled />}></Button>\n </Popconfirm>\n </Tooltip> */}\n </Space>\n ) : (\n ''\n )\n }\n />\n </Col>\n </Row>\n <EZTable\n ref={EZTableRef}\n className=\"eztable-hide-delete-editable\"\n pagination={{\n pageSize: 50,\n pageSizeOptions: [20, 50, 100],\n position: ['bottomLeft', 'topLeft'],\n }}\n queryParams={queryParams}\n columns={_columns}\n size=\"small\"\n rowKey=\"email_template_id\"\n fetchData={_fetchData}\n scroll={{ x: 2000 }}\n // rowSelection={{\n // selectedRowKeys: selectedRowKeys,\n // onChange: (newSelectedRowKeys: React.Key[]) => {\n // setSelectedRowKeys(newSelectedRowKeys);\n // },\n // alwaysShowAlert: true,\n // columnWidth: '20px',\n // selections: [Table.SELECTION_NONE],\n // }}\n tableAlertRender={false}\n toolBarComponents={[\n <Button\n key={`toolBarComponents-2-task-list`}\n className=\"ml-2 mr-2 ez-action-btn\"\n onClick={() => _showAddNewTemplateModal()}\n >\n <PlusOutlined />\n Add New Template\n </Button>,\n ]}\n />\n </Col>\n </Row>\n </div>\n );\n};\n","// Core React libraries import\nimport React, { useEffect, useRef, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Input, Form, FormInstance, Col, Select, InputRef, Button } from 'antd';\nimport { TeamOutlined } from '@ant-design/icons';\n\n// EZ web-app utils import\nimport { validateEmailTemplateRecipients } from 'utils/formUtil';\n// EZ web-app APIs import\n// EZ web-app types import\nimport { EmailTemplateFolderType, EmailTemplateType } from 'types/emailTemplate';\n// EZ web-app components import\nimport { EZSelectEmailRecipient, EmailEditorFormItem } from 'components';\nimport { EZRichTextEditorForwardedRefProps } from 'components/richTextEditor/richTextEditor';\nimport { Partial_EmailTemplateFormItems } from '../partials/PartialEmailTemplateFormItems';\nimport { getEmailTemplateDetail } from 'utils/ez_api/emailTemplateAPIs';\nimport { AccountDataType } from 'types/account';\n\n// EZ web-app styles and assets import\n\nconst { Option, OptGroup } = Select;\n\nexport const EditEmailTemplateModalContent: React.FC<{\n emailTemplate: Partial<EmailTemplateType>;\n form: FormInstance<any>;\n templateFolders: EmailTemplateFolderType[];\n UserInfo?: AccountDataType;\n mode: 'EDIT' | 'ADD';\n}> = ({ emailTemplate, form, templateFolders, UserInfo, mode }) => {\n const [isSharedByOther, setIsSharedByOther] = useState<boolean>(false);\n\n const _getTemplateDetail = (templateId: number) => {\n getEmailTemplateDetail(emailTemplate.email_template_id || 0).then(({ data }) => {\n const emailTemplateDetail = data as EmailTemplateType;\n if (emailTemplateDetail && emailTemplateDetail.email_template_id) {\n if (emailTemplateDetail.account_id !== UserInfo?.account_id) {\n setIsSharedByOther(true);\n } else {\n setIsSharedByOther(false);\n }\n }\n });\n };\n\n const _setFieldValues = () => {\n form.resetFields();\n\n const emailTemplateTemp = { ...emailTemplate };\n\n if (!emailTemplateTemp.template_folder_id || emailTemplateTemp.template_folder_id === -1) {\n emailTemplateTemp.template_folder_id = undefined;\n }\n\n form.setFieldsValue({\n ...emailTemplateTemp,\n });\n };\n\n useEffect(() => {\n _setFieldValues();\n\n if (emailTemplate.email_template_id) {\n _getTemplateDetail(emailTemplate.email_template_id);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n });\n\n return (\n <Form layout=\"vertical\" form={form} requiredMark={true}>\n <Row gutter={[16, 0]}>\n <Col span={12} id=\"template-name\">\n <Form.Item\n label=\"Template Name\"\n name=\"template_name\"\n rules={[{ required: true, message: \"Template name can't be empty\" }]}\n >\n <Input placeholder=\"Enter the name\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item\n label=\"Folder\"\n name=\"template_folder_id\"\n required\n rules={[{ required: true }]}\n extra={\n !isSharedByOther\n ? ''\n : \"You can't change the folder for the template that is shared by the other.\"\n }\n >\n <Select\n placeholder=\"Select the folder\"\n defaultActiveFirstOption\n disabled={isSharedByOther}\n >\n {templateFolders?.map((folder, idx) => (\n <Option key={folder.folder_id} value={folder.folder_id}>\n {folder.is_shared ? <TeamOutlined className=\"mr-2\" /> : <></>}\n {folder.folder_name}\n </Option>\n ))}\n </Select>\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Description\" name=\"template_desc\">\n <Input.TextArea placeholder=\"Enter the description.\" rows={2} />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Notes\" name=\"template_note\">\n <Input.TextArea\n placeholder=\"Enter the notes. Notes will be displayed before you send the email.\"\n rows={2}\n />\n </Form.Item>\n </Col>\n <Partial_EmailTemplateFormItems\n formType=\"EMAIL_TEMPLATE\"\n formMode={mode}\n excludedTemplateIDs={\n emailTemplate?.email_template_id ? [emailTemplate.email_template_id] : []\n }\n />\n </Row>\n </Form>\n );\n};\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Modal,\n Form,\n Typography,\n Row,\n Col,\n Input,\n Button,\n Popconfirm,\n Divider,\n Tabs,\n Switch,\n Collapse,\n Alert,\n} from 'antd';\nimport { Gutter } from 'antd/lib/grid/row';\nimport moment from 'moment';\n\n// EZ web-app utils import\nimport { getAllTeamMembers } from 'utils/ez_api/memberAPIs';\nimport { addNewTransaction, DetailType } from 'utils/ez_api/transactionAPIs';\n// EZ web-app types import\nimport { TransactionDetailType } from 'types/transaction';\nimport { DefaultTaskTabType } from 'types/admin';\n// EZ web-app components import\nimport { AccountCompactDataType } from 'types/account';\nimport { EditTransactionFormContent } from 'pages/tabs/transaction/modals/Modal_editTransactionInfo';\nimport { HomeContext } from 'context/EZContext';\nimport { showNotification } from 'utils/notificationUtil';\nimport { CheckOutlined, CloseOutlined, MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';\nimport EZInputNumber from 'components/input/inputNumber';\nimport React from 'react';\nimport { getTaskTabsDetail } from 'utils/ez_api/AdminAPIs';\nimport { EZDatePicker } from 'components';\nimport { updateOnboardingStep } from 'utils/onboardingUtil';\n\n// EZ web-app styles and assets import\n\nconst { Text } = Typography;\n\nconst colLabelSpan = 8;\nconst colValueSpan = 10;\nconst rowFormViewGutter: [Gutter, Gutter] = [12, 6];\n\nexport const NewTransactionModal: React.FC<{\n isModalVisible?: boolean;\n setIsModalVisible?: React.Dispatch<React.SetStateAction<boolean>>;\n}> = ({ isModalVisible = false, setIsModalVisible = () => {} }) => {\n const HomeCtx = useContext(HomeContext);\n\n const isEditMode = true;\n\n const [form] = Form.useForm();\n\n const [subUsers, setSubUsers] = useState<AccountCompactDataType[]>([]);\n const [taskTabs, setTaskTabs] = useState<DefaultTaskTabType[]>([]);\n\n const [isRental, setIsRental] = useState<boolean>(false);\n const [SubmittingData, SetSubmittingData] = useState(false);\n const [tabKey, setTabKey] = useState('ez_detail_general_information');\n\n const _onSubmitForm = (formValues?: any) => {\n SetSubmittingData(true);\n\n const assign_to_account_ids: number[] = formValues.assign_to_account_ids;\n\n const formValuesFormatted = {\n ...formValues,\n\n // dates\n contract_date: formValues.contract_date\n ? moment(formValues.contract_date).format('YYYY-MM-DD')\n : null,\n effective_date: formValues.effective_date\n ? moment(formValues.effective_date).format('YYYY-MM-DD')\n : null,\n close_date: formValues.close_date\n ? moment(formValues.close_date).format('YYYY-MM-DD')\n : null,\n listing_date: formValues.listing_date\n ? moment(formValues.listing_date).format('YYYY-MM-DD')\n : null,\n listing_live_date: formValues.listing_live_date\n ? moment(formValues.listing_live_date).format('YYYY-MM-DD')\n : null,\n expiration_date: formValues.expiration_date\n ? moment(formValues.expiration_date).format('YYYY-MM-DD')\n : null,\n inspection_contingency_date: formValues.inspection_contingency_date\n ? moment(formValues.inspection_contingency_date).format('YYYY-MM-DD')\n : null,\n appraisal_contingency_date: formValues.appraisal_contingency_date\n ? moment(formValues.appraisal_contingency_date).format('YYYY-MM-DD')\n : null,\n financing_contingency_date: formValues.financing_contingency_date\n ? moment(formValues.financing_contingency_date).format('YYYY-MM-DD')\n : null,\n\n application_date: formValues.application_date\n ? moment(formValues.application_date).format('YYYY-MM-DD')\n : null,\n lease_signed_date: formValues.lease_signed_date\n ? moment(formValues.lease_signed_date).format('YYYY-MM-DD')\n : null,\n lease_start_date: formValues.lease_start_date\n ? moment(formValues.lease_start_date).format('YYYY-MM-DD')\n : null,\n lease_end_date: formValues.lease_end_date\n ? moment(formValues.lease_end_date).format('YYYY-MM-DD')\n : null,\n move_in_date: formValues.move_in_date\n ? moment(formValues.move_in_date).format('YYYY-MM-DD')\n : null,\n\n contingency_dates:\n formValues.contingency_dates && formValues.contingency_dates.length\n ? formValues.contingency_dates?.map((elm: any) => ({\n ...elm,\n val_date: elm.val_date ? moment(elm.val_date).format('YYYY-MM-DD') : null,\n }))\n : [],\n };\n\n const payload = {\n ...formValuesFormatted,\n sale_types_id: formValues.sale_types_id || null,\n assign_to_accounts: assign_to_account_ids\n ? subUsers\n .filter(u => assign_to_account_ids.includes(u.account_id))\n .map(su => ({\n account_id: su.account_id,\n accountrole_id: su.accountrole_id,\n }))\n : [],\n };\n addNewTransaction(payload)\n .then(({ data }) => {\n showNotification(\n 'success',\n `New transaction: ${'address'} has been successfully created.`\n );\n setIsModalVisible(false);\n // update onboarding step to completed\n updateOnboardingStep('add_new_transaction', HomeCtx.refetchOnboardingList);\n setTimeout(() => {\n HomeCtx.openTransactionDetailTab(\n data.contract_id,\n data.address,\n data,\n 'New_transaction_modal'\n );\n }, 10);\n })\n .finally(() => {\n SetSubmittingData(false);\n });\n };\n\n const _fetchSubUsers = () => {\n getAllTeamMembers().then(({ data }) => {\n setSubUsers((data as AccountCompactDataType[]) || []);\n });\n };\n\n const _fetchTaskTabsDetail = () => {\n getTaskTabsDetail()\n .then(({ data }) => {\n let respData = data as DefaultTaskTabType[];\n\n respData.forEach(defaultTasklist => {\n defaultTasklist.defaulttasks = defaultTasklist.defaulttasks?.filter(\n defaultTask =>\n !defaultTask.defaulttask_preference ||\n defaultTask.defaulttask_preference?.toggle\n ? true\n : false\n );\n });\n\n setTaskTabs(respData || []);\n })\n .finally(() => {});\n };\n\n const _setFormFieldsValue = () => {\n form.setFieldsValue({\n status_id: 1,\n flag_id: 1,\n });\n };\n\n useEffect(() => {\n form.resetFields();\n\n if (isModalVisible) {\n _fetchSubUsers();\n\n _fetchTaskTabsDetail();\n _setFormFieldsValue();\n\n setTabKey('ez_detail_general_information');\n } else {\n setIsRental(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isModalVisible]);\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <Modal\n title={`Add New Transaction`}\n visible={isModalVisible}\n onOk={() => form.submit()}\n onCancel={() => setIsModalVisible(false)}\n okText=\"Save and Edit Detail\"\n confirmLoading={SubmittingData}\n width={800}\n style={{ top: 40 }}\n className=\"add-new-transaction-modal\"\n // bodyStyle={{ overflowY: 'auto', height: '600px' }}\n >\n <Form\n layout=\"vertical\"\n // className=\"ez-tab-transaction-detail\"\n form={form}\n onFinish={_onSubmitForm}\n requiredMark={false}\n >\n <EditTransactionFormContent subUsers={subUsers} setIsRental={setIsRental} />\n <Row gutter={rowFormViewGutter} className=\"row-wrapper\">\n <Col span={24} className=\"\">\n <Tabs\n className=\"ez-tab-transaction-detail-tab-wrapper\"\n style={{ marginBottom: 16 }}\n // defaultActiveKey=\"ez_detail_general_information\"\n onChange={key => setTabKey(key)}\n activeKey={tabKey}\n >\n <Tabs.TabPane\n tab={<b>Contract Information</b>}\n key=\"ez_detail_general_information\"\n >\n <Row gutter={rowFormViewGutter}>\n {/* <Col span={24} className=\"\">\n <Row className=\"\">\n <Col span={24} className=\"text-title-secondary\">\n <Divider>\n <b>\n General Information: Year Built and\n Prices\n </b>\n </Divider>\n </Col>\n </Row>\n </Col> */}\n\n {isEditMode && !isRental && (\n <>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Year Built\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"year_built\" noStyle>\n <EZInputNumber\n min={0}\n style={{ width: '100%' }}\n placeholder=\"Enter the year\"\n step={1}\n max={2100}\n />\n </Form.Item>\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n List Price\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"listprice\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder=\"Enter the price\"\n step={10000}\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Sales Price\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"salesprice\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder=\"Enter the price\"\n step={10000}\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Closing Cost Credit\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"cccredit\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder=\"Enter the price\"\n step={10000}\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Deposit\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"deposits\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder=\"Enter the price\"\n step={10000}\n />\n </Form.Item>\n </Col>\n {/* <Divider /> */}\n\n <Col span={24} className=\"\">\n <Row className=\"\">\n <Col\n span={24}\n className=\"text-title-secondary\"\n >\n <Divider>\n <b>Important Dates</b>\n </Divider>\n </Col>\n </Row>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Contract Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"contract_date\" noStyle>\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Contract Effective Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"effective_date\" noStyle>\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Close Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"close_date\" noStyle>\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Listing Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"listing_date\" noStyle>\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Listing Live Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"listing_live_date\" noStyle>\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Listing Expiration Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"expiration_date\" noStyle>\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Inspection Contingency Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item\n name=\"inspection_contingency_date\"\n noStyle\n >\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Appraisal Contingency Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item\n name=\"appraisal_contingency_date\"\n noStyle\n >\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Financing Contingency Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item\n name=\"financing_contingency_date\"\n noStyle\n >\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n </Col>\n </>\n )}\n\n {isEditMode && isRental && (\n <>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Year Built\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"year_built\" noStyle>\n <EZInputNumber\n min={0}\n style={{ width: '100%' }}\n placeholder=\"Enter the year\"\n step={1}\n max={2100}\n />\n </Form.Item>\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Marketed Price\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"marketedprice\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder=\"Enter the price\"\n step={10000}\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Rental Price\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"rentalprice\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder=\"Enter the price\"\n step={10000}\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Credits\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"credits\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '100%' }}\n placeholder=\"Enter the price\"\n step={10000}\n />\n </Form.Item>\n </Col>\n {/* <Divider /> */}\n <Col span={24} className=\"\">\n <Row className=\"\">\n <Col\n span={24}\n className=\"text-title-secondary\"\n >\n <Divider>\n <b>Important Dates</b>\n </Divider>\n </Col>\n </Row>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Application Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"application_date\" noStyle>\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease Signed Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"lease_signed_date\" noStyle>\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease Start\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"lease_start_date\" noStyle>\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease End\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"lease_end_date\" noStyle>\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n </Col>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Move In Date\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"move_in_date\" noStyle>\n <EZDatePicker\n style={{ width: '100%' }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n </Col>\n <Divider />\n <Col span={colLabelSpan} className=\"ez-form-label\">\n Lease Term(s)\n </Col>\n <Col span={colValueSpan}>\n <Form.Item name=\"lease_term\" noStyle>\n <Input placeholder=\"Enter the lease term(s)\" />\n </Form.Item>\n </Col>\n </>\n )}\n\n <Divider />\n <Form.List name=\"contingency_dates\">\n {(fields, { add, remove }) => (\n <>\n {fields.map(\n ({ key, name, ...restField }, index) => (\n <React.Fragment\n key={`contingency_dates_${index}`}\n >\n <Col\n span={colLabelSpan}\n className=\"ez-form-label\"\n >\n <Form.Item\n {...restField}\n name={[\n name,\n 'date_additional_id',\n ]}\n noStyle\n hidden\n >\n <Input hidden />\n </Form.Item>\n <Form.Item\n {...restField}\n name={[name, 'date_name']}\n noStyle\n >\n <Input placeholder=\"Enter the field name\" />\n </Form.Item>\n </Col>\n <Col span={colValueSpan}>\n <Form.Item\n {...restField}\n name={[name, 'val_date']}\n noStyle\n >\n <EZDatePicker\n style={{\n width: '100%',\n }}\n format=\"MM/DD/YYYY\"\n />\n </Form.Item>\n\n <Popconfirm\n placement=\"bottomRight\"\n title={`Delete this date?`}\n okText=\"Yes\"\n cancelText=\"Cancel\"\n onConfirm={() =>\n remove(name)\n }\n overlayClassName=\"custom-contingency-remover-popup\"\n // showArrow={false}\n >\n <MinusCircleOutlined className=\"custom-contingency-remover\" />\n </Popconfirm>\n </Col>\n </React.Fragment>\n )\n )}\n <Col span={18}>\n {' '}\n <Form.Item>\n <Button\n type=\"dashed\"\n onClick={() => add()}\n block\n icon={<PlusOutlined />}\n >\n Add new contingency date\n </Button>\n </Form.Item>\n </Col>\n </>\n )}\n </Form.List>\n </Row>\n </Tabs.TabPane>\n <Tabs.TabPane tab={<b>Task Templates</b>} key=\"ez_detail_tasks\">\n <div style={{ minHeight: '250px' }}>\n <Row gutter={[16, 8]}>\n <Col span={24} className=\"mb-2\">\n <Alert\n message=\"To update the task templates, go to the Admin Area => Transaction => Task Templates.\"\n type=\"info\"\n showIcon\n />\n </Col>\n {taskTabs?.length > 0 &&\n taskTabs.map(defaultTasklist => (\n <Col span={24} className=\"\">\n <Form.Item\n name={[\n 'default_tasklist_ids',\n `${defaultTasklist.defaulttasktab_id}`,\n ]}\n noStyle\n valuePropName=\"checked\"\n initialValue={\n !defaultTasklist.defaulttasktab_preference ||\n defaultTasklist\n .defaulttasktab_preference\n ?.toggle\n ? true\n : false\n }\n >\n <Switch\n checkedChildren={<CheckOutlined />}\n unCheckedChildren={\n <CloseOutlined />\n }\n defaultChecked={false}\n />\n </Form.Item>\n <span className=\"ml-3\">\n <b>{defaultTasklist.name}</b>\n </span>\n <Collapse ghost>\n <Collapse.Panel\n header={\n <>\n Tasklists\n {` - ${defaultTasklist.defaulttasks?.length} task(s)`}\n </>\n }\n key=\"1\"\n style={{ marginLeft: '40px' }}\n >\n {defaultTasklist.defaulttasks &&\n defaultTasklist.defaulttasks\n .length > 0 && (\n <div>\n <ul>\n {defaultTasklist.defaulttasks.map(\n defaultTask => (\n <li>\n {\n defaultTask.title\n }\n </li>\n )\n )}\n </ul>\n </div>\n )}\n </Collapse.Panel>\n </Collapse>\n </Col>\n ))}\n </Row>\n </div>\n </Tabs.TabPane>\n </Tabs>\n </Col>\n </Row>\n </Form>\n </Modal>\n </>\n );\n};\n","import { Quill } from 'react-quill';\n\nvar Embed = Quill.import('blots/embed');\n\nexport class CodeTemplateMarker extends Embed {\n static create(value: any) {\n let node = super.create(value);\n\n node.setAttribute('class', 'quill-template-code badge badge-' + value.colour);\n //Set up the badge, and badge colour\n\n node.setAttribute('data-marker', value.marker);\n\n node.setAttribute('data-title', value.title);\n\n //The title is what the user sees in their editor\n const codeTitleInnerSpan = document.createElement('span');\n codeTitleInnerSpan.setAttribute('title', value.title);\n codeTitleInnerSpan.setAttribute('class', 'code-title');\n\n //The code-value is what the user sees in their sent mail\n const codeValueSpan = document.createElement('span');\n codeValueSpan.setAttribute('class', 'code-value');\n codeValueSpan.innerHTML = value.marker;\n\n node.appendChild(codeTitleInnerSpan);\n node.appendChild(codeValueSpan);\n\n return node;\n }\n\n static value(node: any) {\n return {\n marker: node.getAttribute('data-marker'),\n title: node.getAttribute('data-title'),\n };\n }\n}\n\nCodeTemplateMarker.blotName = 'CodeTemplateMarker';\nCodeTemplateMarker.tagName = 'codeTemplate';\n","import React, { useEffect } from 'react';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { setTimeout } from 'timers';\nimport { exchangeMSOauthCodeForLogin, storeLoginPayload } from 'utils/ez_api/loginUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\nimport { showMessage, showNotification } from 'utils/notificationUtil';\n\nexport const MicrosoftLoginCallback: React.FC = () => {\n const location = useLocation(); // Detects changes in the route\n const history = useHistory(); // To programmatically navigate\n\n useEffect(() => {\n // get the code from the url\n const params = new URLSearchParams(location.search);\n const code = params.get('code');\n const state = params.get('state');\n\n if (code && state) {\n exchangeMSOauthCodeForLogin(code, state)\n .then(({ data }) => {\n storeLoginPayload(data.jwt, data.loginPayload);\n\n try {\n Mixpanel.setLoggedUserData(data.loginPayload);\n } catch (error) {}\n\n showNotification('success', 'Login successful. Redirecting...');\n\n setImmediate(() => {\n history.push('/home');\n });\n })\n .catch(err => {\n showMessage('error', 'User not found. Please use a correct email address.');\n history.push('/');\n });\n }\n }, []);\n\n return (\n <>\n <style>{keyframes}</style>\n <div style={styles.app}>\n <div style={styles.loaderContainer}>\n <div style={styles.loader}>\n <span>Exchange in Progress</span>\n <div>\n <span style={{ ...styles.dot, ...styles.dot1 }} />\n <span style={{ ...styles.dot, ...styles.dot2 }} />\n <span style={{ ...styles.dot, ...styles.dot3 }} />\n <span style={{ ...styles.dot, ...styles.dot4 }} />\n </div>\n </div>\n </div>\n </div>\n </>\n );\n};\n\nconst keyframes = `\n @keyframes tint {\n 50% {\n background-color: transparent;\n transform: scale(0.8);\n }\n }\n`;\n\nconst styles: Record<string, React.CSSProperties> = {\n app: {\n backgroundSize: 'cover',\n width: '100vw',\n height: '100vh',\n overflow: 'hidden',\n },\n loaderContainer: {\n margin: '3rem',\n height: '300px',\n },\n loader: {\n position: 'absolute',\n top: 0,\n left: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n width: '100vw',\n height: '100vh',\n color: '#4f5156', // sdk-dark\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n textAlign: 'center',\n padding: '2rem 0',\n },\n dot: {\n width: '40px',\n height: '8px',\n backgroundColor: 'transparent',\n display: 'inline-block',\n marginRight: '2px',\n animation: 'tint 1600ms infinite',\n },\n dot1: {\n animationDelay: '0ms',\n backgroundColor: '#f58d50', // sdk-orange\n },\n dot2: {\n animationDelay: '200ms',\n backgroundColor: '#bcd64a', // sdk-green\n },\n dot3: {\n animationDelay: '400ms',\n backgroundColor: '#2a728e', // sdk-teal\n },\n dot4: {\n animationDelay: '600ms',\n backgroundColor: '#fbcc33', // sdk-yellow\n },\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Row,\n Col,\n Typography,\n List,\n Avatar,\n Button,\n Popconfirm,\n Modal,\n Popover,\n Input,\n} from 'antd';\nimport { ContainerOutlined, DeleteOutlined, EditOutlined, PlusOutlined } from '@ant-design/icons';\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\nimport { ProspectDetailTabProps } from 'types/prospect';\nimport { ProspectNoteType } from 'types/prospectNote';\n// EZ web-app components import\nimport { EZList, EZDateFormat } from 'components';\nimport { IListQueryParams } from 'components/list/EZList';\nimport {\n deleteProspectNote,\n getProspectNotes,\n updateProspectNote,\n} from 'utils/ez_api/prospect/prospectNoteAPIs';\n\n// EZ web-app styles and assets import\n\nconst { Text, Paragraph } = Typography;\n\nconst defaultQueryParams: IListQueryParams = {\n searchKeyword: '',\n orderParams: [['note_id', 'desc']],\n whereParams: {\n // category: 'note',\n },\n whereFilterParams: {},\n};\n\nconst EditNoteComponent: React.FC<{\n noteRecord?: ProspectNoteType;\n saveNote: (note: string, note_id?: number) => Promise<any>;\n}> = ({ noteRecord, saveNote }) => {\n const isEditMode = noteRecord && noteRecord.note_id ? true : false;\n\n const [isVisible, setIsVisible] = useState(false);\n const [noteContent, setNoteContent] = useState('');\n\n const _saveNote = () => {\n if (noteContent.trim().length > 0) {\n saveNote(noteContent.trim(), noteRecord?.note_id).then(() => {\n setIsVisible(false);\n setNoteContent('');\n });\n }\n };\n\n // the effect is to populate \"noteContent\" whenever there is a change of \"noteRecord\"\n useEffect(() => {\n setNoteContent(noteRecord ? noteRecord.notes : '');\n }, [noteRecord]);\n\n return (\n <Popover\n visible={isVisible}\n content={\n <div className=\"add-new-note-popover\">\n <Row gutter={[0, 10]}>\n <Col span={24}>\n <Input.TextArea\n rows={4}\n value={noteContent}\n onChange={e => setNoteContent(e?.currentTarget?.value)}\n ></Input.TextArea>\n </Col>\n <Col span={24} style={{ textAlign: 'right' }}>\n <Button\n type=\"default\"\n className=\"mr-2\"\n onClick={() => setIsVisible(false)}\n >\n Close\n </Button>\n <Button type=\"primary\" onClick={() => _saveNote()}>\n Save\n </Button>\n </Col>\n </Row>\n </div>\n }\n overlayClassName=\"\"\n title={<>{isEditMode ? <span>Edit Note</span> : <span>Add New Note</span>}</>}\n trigger={'click'}\n showArrow={false}\n placement=\"left\"\n >\n {isEditMode ? (\n <Button\n className=\"p-0 mr-2\"\n type=\"link\"\n icon={<EditOutlined />}\n onClick={() => setIsVisible(true)}\n title=\"Edit this note\"\n >\n Edit\n </Button>\n ) : (\n <Button\n className=\"ez-action-btn ml-3\"\n icon={<PlusOutlined />}\n onClick={() => setIsVisible(true)}\n >\n Add New Prospect's Note\n </Button>\n )}\n </Popover>\n );\n};\n\nexport const ProspectSubTab_Notes: React.FC<ProspectDetailTabProps> = ({\n prospectID,\n manualReloadCount,\n reloadProspectStat,\n}) => {\n const [, contextHolder] = Modal.useModal();\n\n const [queryParams, setQueryParams] = useState<IListQueryParams>(defaultQueryParams);\n\n const _fetchNotes: (EZQueryParams: string) => Promise<any> = async EZQueryParams => {\n const result = await getProspectNotes(prospectID, EZQueryParams);\n return result;\n };\n\n const _reloadSubTabData = () => {\n setQueryParams({\n ...defaultQueryParams,\n });\n };\n\n const _saveNote = async (note: string, note_id?: number) => {\n return updateProspectNote(prospectID, note, note_id)\n .then(() => {\n _reloadSubTabData();\n\n if (!note_id) {\n reloadProspectStat?.(prospectID);\n }\n })\n .finally(() => {});\n };\n\n const _deleteNote = async (note_id: number) => {\n return deleteProspectNote(prospectID, note_id)\n .then(() => {\n reloadProspectStat?.(prospectID);\n _reloadSubTabData();\n })\n .finally(() => {});\n };\n\n useEffect(() => {\n _reloadSubTabData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [manualReloadCount]);\n\n return (\n <div className=\"ez-component-documents\">\n <div>{contextHolder}</div>\n <Row gutter={[0, 18]}>\n <Col span={24}>\n <EZList\n rowKey=\"note_id\"\n paginationConfig={{\n pageSize: 20,\n }}\n queryParams={queryParams}\n fetchData={_fetchNotes}\n toolBarComponents={[<EditNoteComponent saveNote={_saveNote} />]}\n renderItem={(record: ProspectNoteType) => (\n <List.Item\n actions={[\n <EditNoteComponent saveNote={_saveNote} noteRecord={record} />,\n <Popconfirm\n placement=\"bottomRight\"\n title={`Delete this note?`}\n okText=\"Yes\"\n cancelText=\"Cancel\"\n onConfirm={() => _deleteNote(record.note_id)}\n >\n <Button\n className=\"p-0\"\n type=\"link\"\n style={{ color: 'red' }}\n icon={<DeleteOutlined />}\n >\n Delete\n </Button>\n </Popconfirm>,\n ]}\n >\n <List.Item.Meta\n avatar={\n <Avatar\n style={{ backgroundColor: '#E6F7FF' }}\n icon={\n <ContainerOutlined style={{ color: '#096DD9' }} />\n }\n size={42}\n />\n }\n title={\n <span>\n <Text strong className=\"mr-1\">\n {record.posted_account?.fullname}\n </Text>\n <Text className=\"mr-1\">\n {record.posted_account?.email\n ? `(${record.posted_account.email})`\n : ``}\n </Text>\n <Text type=\"secondary\" className=\"mr-2\">\n On{' '}\n <EZDateFormat\n value={record.date_posted}\n format=\"MMM DD, YYYY - hh:mma\"\n />\n </Text>\n </span>\n }\n description={\n <Paragraph\n style={{ whiteSpace: 'pre-wrap' }}\n ellipsis={{\n rows: 3,\n expandable: true,\n }}\n title={`${record.notes}`}\n >\n {record.notes}\n </Paragraph>\n }\n />\n </List.Item>\n )}\n />\n </Col>\n </Row>\n </div>\n );\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Typography, Divider, Form, Space, Button, Select } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\n// EZ web-app components import\nimport { ProspectDataType, ProspectDetailTabProps } from 'types/prospect';\nimport { EditOutlined, SaveOutlined } from '@ant-design/icons';\nimport {\n getProspectDetail,\n updateProspectQuestionValues,\n} from 'utils/ez_api/prospect/prospectAPIs';\n\n// EZ web-app styles and assets import\n\nconst { Text, Paragraph } = Typography;\n\nconst colLabelSpan = 10;\nconst colValueSpan = 10;\n\ntype FormType = 'looking_for' | 'household_profile';\n\nexport const ProspectSubTab_ProfilePreference: React.FC<ProspectDetailTabProps> = ({\n prospectID,\n manualReloadCount,\n}) => {\n const [formLookingFor] = Form.useForm();\n const [formHouseholdProfile] = Form.useForm();\n\n const [prospectDetail, setProspectDetail] = useState<ProspectDataType>();\n\n const [isLoadingSubTabData, setIsLoadingSubTabData] = useState<boolean>(false);\n\n const [isEditMode, setIsEditMode] = useState({\n lookingFor: false,\n householdProfile: false,\n });\n const [isSubmittingForm, setIsSubmittingForm] = useState({\n lookingFor: false,\n householdProfile: false,\n });\n\n const _onFinish = (formType: FormType, values: any) => {\n const payload: any = {};\n const accordion_id = formType === 'looking_for' ? 1 : 2;\n\n if (prospectDetail?.questions?.length) {\n const questionList = prospectDetail.questions.filter(\n q => q.accordion_id === accordion_id\n );\n\n for (let index = 0; index < questionList.length; index++) {\n const question = questionList[index];\n payload[`${question.question_id}`] =\n values?.[question.accordion_id === 1 ? 'questions_1' : 'questions_2']?.[\n question.question_id\n ] || null;\n }\n }\n\n if (formType === 'looking_for')\n setIsSubmittingForm({ ...isSubmittingForm, lookingFor: true });\n else setIsSubmittingForm({ ...isSubmittingForm, householdProfile: true });\n\n updateProspectQuestionValues(prospectID, {\n questionListWithAnswer: payload,\n })\n .then(({ data }) => {\n _reloadSubTabData(false).then(() => {\n if (formType === 'looking_for')\n setIsEditMode({ ...isEditMode, lookingFor: false });\n else setIsEditMode({ ...isEditMode, householdProfile: false });\n });\n })\n .finally(() => {\n if (formType === 'looking_for')\n setIsSubmittingForm({ ...isSubmittingForm, lookingFor: false });\n else setIsSubmittingForm({ ...isSubmittingForm, householdProfile: false });\n });\n };\n\n const _reloadSubTabData = async (showLoadingProgress: boolean = true) => {\n if (showLoadingProgress) setIsLoadingSubTabData(true);\n try {\n const { data } = await getProspectDetail(prospectID, 'with_questions');\n if (data) {\n setProspectDetail(data as ProspectDataType);\n }\n } finally {\n setIsLoadingSubTabData(false);\n }\n };\n\n useEffect(() => {\n if (prospectDetail && prospectDetail.questions?.length) {\n const payload: { questions_1: any; questions_2: any } = {\n questions_1: {},\n questions_2: {},\n };\n\n for (let index = 0; index < prospectDetail.questions.length; index++) {\n const question = prospectDetail.questions[index];\n if (question.prospects_questions_value?.field_value) {\n payload[question.accordion_id === 1 ? 'questions_1' : 'questions_2'][\n `${question.question_id}`\n ] = parseInt(question.prospects_questions_value.field_value);\n }\n }\n\n if (isEditMode.lookingFor) {\n formLookingFor.setFieldsValue({\n questions_1: payload.questions_1,\n });\n }\n\n if (isEditMode.householdProfile) {\n formHouseholdProfile.setFieldsValue({\n questions_2: payload.questions_2,\n });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isEditMode]);\n\n useEffect(() => {\n _reloadSubTabData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [manualReloadCount]);\n\n return (\n <div className=\"ez_prospect_cnotes\">\n <Row gutter={[64, 0]}>\n <Col span={12} className=\"\">\n <Form\n form={formLookingFor}\n onFinish={(values: any) => _onFinish('looking_for', values)}\n >\n <Row gutter={[0, 12]} align=\"middle\">\n <Col span={10}>\n <Text className=\"text-title-secondary\">Looking For:</Text>\n </Col>\n <Col span={10} style={{ textAlign: 'right' }}>\n {!isEditMode.lookingFor && (\n <Button\n className=\"ez-action-btn\"\n size=\"small\"\n icon={<EditOutlined />}\n onClick={() =>\n setIsEditMode({ ...isEditMode, lookingFor: true })\n }\n >\n Edit\n </Button>\n )}\n\n {isEditMode.lookingFor && (\n <Space>\n <Button\n className=\"mr-2\"\n type=\"default\"\n size=\"small\"\n onClick={() =>\n setIsEditMode({ ...isEditMode, lookingFor: false })\n }\n disabled={isSubmittingForm.lookingFor}\n >\n Cancel\n </Button>\n <Button\n className=\"\"\n size=\"small\"\n icon={<SaveOutlined />}\n type=\"primary\"\n loading={isSubmittingForm.lookingFor}\n onClick={() => formLookingFor.submit()}\n >\n {isSubmittingForm.lookingFor ? 'Saving' : 'Save'}\n </Button>\n </Space>\n )}\n </Col>\n <Col span={20}>\n <Divider />\n </Col>\n {!isEditMode.lookingFor ? (\n <>\n {prospectDetail?.questions\n ?.filter(question => question.accordion_id === 1)\n .map(question => (\n <>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n {question.name}:\n </Col>\n <Col span={colValueSpan}>\n {question.prospects_questions_value?.field_value\n ? question.prospects_questions_options?.find(\n opt =>\n opt.option_id ===\n parseInt(\n question.prospects_questions_value!\n .field_value\n )\n )?.option_value\n : '-'}\n </Col>\n </>\n ))}\n </>\n ) : (\n <>\n {prospectDetail?.questions\n ?.filter(question => question.accordion_id === 1)\n .map(question => (\n <>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n {question.name}:\n </Col>\n <Col span={colValueSpan}>\n <Form.Item\n name={[\n 'questions_1',\n `${question.question_id}`,\n ]}\n >\n <Select\n style={{\n width: '100%',\n }}\n options={\n question.prospects_questions_options\n }\n fieldNames={{\n label: 'option_value',\n value: 'option_id',\n }}\n showArrow\n allowClear\n placeholder=\"Choose option\"\n optionFilterProp=\"label\"\n />\n </Form.Item>\n </Col>\n </>\n ))}\n </>\n )}\n </Row>\n </Form>\n </Col>\n <Col span={12} className=\"\">\n <Form\n form={formHouseholdProfile}\n onFinish={(values: any) => _onFinish('household_profile', values)}\n >\n <Row gutter={[0, 12]} align=\"middle\">\n <Col span={10}>\n <Text className=\"text-title-secondary\">Household Profile:</Text>\n </Col>\n <Col span={10} style={{ textAlign: 'right' }}>\n {!isEditMode.householdProfile && (\n <Button\n className=\"ez-action-btn\"\n size=\"small\"\n icon={<EditOutlined />}\n onClick={() =>\n setIsEditMode({ ...isEditMode, householdProfile: true })\n }\n >\n Edit\n </Button>\n )}\n\n {isEditMode.householdProfile && (\n <Space>\n <Button\n className=\"mr-2\"\n type=\"default\"\n size=\"small\"\n onClick={() =>\n setIsEditMode({\n ...isEditMode,\n householdProfile: false,\n })\n }\n disabled={isSubmittingForm.householdProfile}\n >\n Cancel\n </Button>\n <Button\n className=\"\"\n size=\"small\"\n icon={<SaveOutlined />}\n type=\"primary\"\n loading={isSubmittingForm.householdProfile}\n onClick={() => formHouseholdProfile.submit()}\n >\n {isSubmittingForm.householdProfile ? 'Saving' : 'Save'}\n </Button>\n </Space>\n )}\n </Col>\n <Col span={20}>\n <Divider />\n </Col>\n {!isEditMode.householdProfile ? (\n <>\n {prospectDetail?.questions\n ?.filter(question => question.accordion_id === 2)\n .map(question => (\n <>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n {question.name}:\n </Col>\n <Col span={colValueSpan}>\n {question.prospects_questions_value?.field_value\n ? question.prospects_questions_options?.find(\n opt =>\n opt.option_id ===\n parseInt(\n question.prospects_questions_value!\n .field_value\n )\n )?.option_value\n : '-'}\n </Col>\n </>\n ))}\n </>\n ) : (\n <>\n {prospectDetail?.questions\n ?.filter(question => question.accordion_id === 2)\n .map(question => (\n <>\n <Col span={colLabelSpan} className=\"ez-form-label\">\n {question.name}:\n </Col>\n <Col span={colValueSpan}>\n <Form.Item\n name={[\n 'questions_2',\n `${question.question_id}`,\n ]}\n >\n <Select\n style={{\n width: '100%',\n }}\n options={\n question.prospects_questions_options\n }\n fieldNames={{\n label: 'option_value',\n value: 'option_id',\n }}\n showArrow\n allowClear\n placeholder=\"Choose option\"\n optionFilterProp=\"label\"\n />\n </Form.Item>\n </Col>\n </>\n ))}\n </>\n )}\n </Row>\n </Form>\n </Col>\n </Row>\n </div>\n );\n};\n","import { apiUrl } from '../../envUtil';\nimport { APIRequest } from '../../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nexport const getProspectTasks = (prospect_id: number, params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `prospect/${prospect_id}/tasks` + (params ? `?${params}` : ''),\n });\n};\n\nexport const getProspectTaskLists = (prospect_id: number, params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `prospect/${prospect_id}/tasklists` + (params ? `?${params}` : ''),\n });\n};\n\nexport const addNewProspectTask = (\n prospect_id: number,\n payload: any,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n) => {\n Mixpanel.track('app.add_prospect_task', {\n prospect_id,\n ...payload,\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `prospect/${prospect_id}/tasks?formType=${formType}`,\n data: {\n ...payload,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateProspectTask = (\n prospect_id: number,\n id: number,\n payload: any,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n) => {\n Mixpanel.track('app.edit_prospect_task', {\n prospect_id,\n task_id: id,\n action: 'edit',\n ...payload,\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `prospect/${prospect_id}/task/${id}?formType=${formType}`,\n data: {\n ...payload,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteProspectTask = (prospect_id: number, id: number) => {\n Mixpanel.track('app.delete_prospect_task', {\n prospect_id,\n task_id: id,\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `prospect/${prospect_id}/task/${id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getProspectTaskDetail = (prospect_id: number, id: number) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `prospect/${prospect_id}/task/${id}`,\n useDefaultErrorNotif: true,\n });\n};\n","// Core React libraries import\nimport React, { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Input, Form, FormInstance, DatePicker, Col, Select, Badge } from 'antd';\nimport moment from 'moment';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport { getTaskDetail } from 'utils/ez_api/taskAPIs';\n// EZ web-app types import\nimport { ProspectTaskListType, ProspectTaskTodoListType } from 'types/prospectTask';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nexport const EditProspectTaskModalContent: React.FC<{\n prospectID: number;\n task: Partial<ProspectTaskTodoListType>;\n form: FormInstance<any>;\n taskListMenu: ProspectTaskListType[];\n mode: 'EDIT' | 'ADD';\n}> = ({ task, form, prospectID, taskListMenu, mode }) => {\n const _getDetail = (taskID: number) => {\n getTaskDetail(prospectID, taskID).then(resp => {\n const data = resp.data as ProspectTaskTodoListType;\n });\n };\n\n const _setFieldValues = () => {\n const dueDateMoment = task.duedate ? moment(task.duedate) : '';\n\n form.resetFields();\n\n form.setFieldsValue({\n ...task,\n duedate: dueDateMoment && dueDateMoment.isValid() ? dueDateMoment : null,\n prio: task.prio,\n });\n };\n\n useEffect(() => {\n _setFieldValues();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Form layout=\"vertical\" form={form} requiredMark={false}>\n <Row gutter={[16, 0]}>\n <Col span={24}>\n <Form.Item\n label=\"List\"\n name=\"list_id\"\n required\n rules={[{ required: true, message: \"List can't be empty\" }]}\n >\n <Select\n placeholder=\"Select the tasklist\"\n options={taskListMenu}\n defaultActiveFirstOption\n fieldNames={{\n label: 'name',\n value: 'id',\n }}\n />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n label=\"Task Title\"\n name=\"title\"\n rules={[{ required: true, message: \"Title can't be empty\" }]}\n >\n <Input placeholder=\"Enter the title\" />\n </Form.Item>\n </Col>\n <Col span={10}>\n <Form.Item label=\"Priority\" name=\"prio\" initialValue={0}>\n <Select\n placeholder=\"Select the priority\"\n options={[\n {\n label: (\n <Badge\n count={'-1'}\n style={{ backgroundColor: '#2db7f5' }}\n />\n ),\n value: -1,\n },\n {\n label: (\n <Badge count={'±0'} style={{ backgroundColor: 'grey' }} />\n ),\n value: 0,\n },\n {\n label: (\n <Badge count={'+1'} style={{ backgroundColor: 'gold' }} />\n ),\n value: 1,\n },\n {\n label: (\n <Badge count={'+2'} style={{ backgroundColor: '#f50' }} />\n ),\n value: 2,\n },\n ]}\n />\n </Form.Item>\n </Col>\n <Col span={14}>\n {/* TODO: To fix the momentJS timezone issue - Use the date format of YYYY-MM-DD */}\n <Form.Item label=\"Due Date\" name=\"duedate\">\n <DatePicker style={{ width: '100%' }} format=\"MM/DD/YYYY\" />\n </Form.Item>\n </Col>\n </Row>\n <Row gutter={[16, 0]}>\n <Col span={24}>\n <Form.Item label=\"Notes\" name=\"note\">\n <Input.TextArea placeholder=\"Enter the notes\" rows={4} />\n </Form.Item>\n </Col>\n </Row>\n </Form>\n );\n};\n","// Core React libraries import\nimport React, { useEffect, useState, useRef } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Row,\n Col,\n Space,\n Menu,\n Button,\n Tabs,\n Input,\n Form,\n Typography,\n Dropdown,\n Badge,\n Tag,\n Tooltip,\n Select,\n Divider,\n Modal,\n} from 'antd';\nimport { RenderExpandIcon } from 'rc-table/lib/interface';\nimport {\n DeleteOutlined,\n PlusOutlined,\n SaveOutlined,\n DownOutlined,\n MenuUnfoldOutlined,\n CheckCircleFilled,\n CheckCircleOutlined,\n RightOutlined,\n FieldTimeOutlined,\n EllipsisOutlined,\n MessageOutlined,\n CloseOutlined,\n SaveFilled,\n EditOutlined,\n} from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\nimport moment from 'moment';\n\n// EZ web-app utils import\nimport { showNotification } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport {\n addNewProspectTask,\n deleteProspectTask,\n getProspectTaskLists,\n getProspectTasks,\n updateProspectTask,\n} from 'utils/ez_api/prospect/prospectTaskAPIs';\n// EZ web-app types import\nimport { ProspectDetailTabProps } from 'types/prospect';\nimport { ProspectTaskListType, ProspectTaskTodoListType } from 'types/prospectTask';\n// EZ web-app components import\nimport { EZTable, EZDateFormat } from 'components';\nimport {\n forwardRefEZTableProps,\n IOnChangeCallbackProps,\n ITableQueryParams,\n} from 'components/table/EZProTable';\nimport { EditProspectTaskModalContent } from '../modal/prospectTaskEditDetail';\n\n// EZ web-app styles and assets import\n\nconst { Text, Paragraph } = Typography;\nconst { Option } = Select;\n\nconst defaultTableParam: ITableQueryParams = {\n searchKeyword: '',\n orderParams: [\n ['ow', 'asc'],\n ['prio', 'desc'],\n ],\n whereParams: {},\n whereFilterParams: {},\n silentLoading: false,\n};\n\nexport const ProspectSubTab_Tasks: React.FC<ProspectDetailTabProps> = ({\n prospectID,\n manualReloadCount,\n reloadProspectStat,\n}) => {\n const EZTableRef = useRef<forwardRefEZTableProps>();\n\n const [form] = Form.useForm();\n\n const [taskListMenu, setTaskListMenu] = useState<ProspectTaskListType[]>([]);\n\n const [queryParams, setQueryParams] = useState<ITableQueryParams>(defaultTableParam);\n\n const [taskTypeFilter, setTaskTypeFilter] = useState<string>('all_tasks');\n const [taskMenuFilter, setTaskMenuFilter] = useState<number>();\n\n const [toggleAllRows, setToggleAllRows] = useState<boolean>(false);\n const [tableRecordIDs, setTableRecordIDs] = useState<React.Key[]>([]);\n const [expandedRecordIDs, setExpandedRecordIDs] = useState<React.Key[]>([]);\n\n const [isUpdatingTask, setIsUpdatingTask] = useState<boolean>(false);\n\n async function _fetchData(EZTableQueryParams: string): Promise<any> {\n return getProspectTasks(prospectID, EZTableQueryParams).then(result => result);\n }\n\n // expand or collapse the rows\n const _toggleAllRows = async (tAllRows: boolean) => {\n setToggleAllRows(tAllRows);\n\n if (!tAllRows) {\n setExpandedRecordIDs([]);\n } else {\n setExpandedRecordIDs([...tableRecordIDs]);\n }\n };\n\n const _expandSelectedRows = (rowKeys: number[]) => {\n const newRowIDs: number[] = [];\n for (let index = 0; index < rowKeys.length; index++) {\n const rowID = rowKeys[index];\n\n if (!expandedRecordIDs.find(elm => elm === rowID)) newRowIDs.push(rowID);\n }\n\n if (newRowIDs.length) setExpandedRecordIDs([...expandedRecordIDs, ...newRowIDs]);\n };\n\n const _onChangeCallback: IOnChangeCallbackProps = (data: ProspectTaskTodoListType[]) => {\n if (data?.length) {\n if (toggleAllRows) {\n setExpandedRecordIDs(\n data\n .filter(\n record => record.compl !== 1 && record.note && record.note.trim() !== ''\n )\n .map(record => record.id)\n );\n }\n setTableRecordIDs(data.map(record => record.id));\n } else {\n setTableRecordIDs([]);\n setExpandedRecordIDs([]);\n }\n };\n\n const _expandIcon: RenderExpandIcon<ProspectTaskTodoListType> = ({\n expanded,\n onExpand,\n record,\n }) => {\n return expanded ? (\n <DownOutlined\n id={`ez-tr-icon-expandable-c_${prospectID}-task_${record.id}`}\n onClick={(e: any) => onExpand(record, e)}\n />\n ) : (\n <RightOutlined\n id={`ez-tr-icon-expandable-c_${prospectID}-task_${record.id}`}\n onClick={(e: any) => onExpand(record, e)}\n />\n );\n };\n\n const _reloadSubTabData = (resetPagination?: boolean, silentLoading?: boolean) => {\n setQueryParams({\n ...queryParams,\n resetPagination,\n silentLoading: silentLoading || undefined,\n });\n };\n\n const _fetchtaskListMenu = () => {\n getProspectTaskLists(prospectID).then(resp => {\n if (resp.data) {\n setTaskListMenu(resp.data);\n }\n });\n };\n\n const _saveTaskData = async (\n newData: ProspectTaskTodoListType,\n oldData: ProspectTaskTodoListType,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n ) => {\n setIsUpdatingTask(true);\n\n if (newData.id) EZTableRef.current?.modifyData(newData, newData.id);\n\n return updateProspectTask(\n prospectID,\n newData.id,\n {\n ...newData,\n },\n formType\n )\n .then(() => {\n if (prospectID) {\n reloadProspectStat?.(prospectID);\n }\n\n if (newData.compl === 1 && oldData.compl === 0) {\n showNotification(\n 'success',\n `Task: \"${newData.title}\" has been marked as complete.`\n );\n } else if (newData.compl === 0 && oldData.compl === 1) {\n showNotification(\n 'success',\n `Task: \"${newData.title}\" has been marked as incomplete.`\n );\n } else {\n showNotification(\n 'success',\n `Task: \"${newData.title}\" has been successfully updated.`\n );\n }\n\n if (oldData.list_id !== newData.list_id) {\n _reloadSubTabData(false, true);\n }\n\n if (newData.id && newData.compl !== 1 && newData.note?.length) {\n setExpandedRecordIDs([...expandedRecordIDs, newData.id]);\n }\n\n setIsUpdatingTask(false);\n\n return newData;\n })\n .catch(err => {\n setIsUpdatingTask(false);\n throw err;\n });\n };\n\n const _saveNewTaskData = async (\n payload: ProspectTaskTodoListType,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n ) => {\n setIsUpdatingTask(true);\n\n return addNewProspectTask(prospectID, payload, formType)\n .then(() => {\n if (prospectID) {\n reloadProspectStat?.(prospectID);\n }\n\n showNotification(\n 'success',\n `New task: \"${payload.title}\" has been successfully added.`\n );\n\n _reloadSubTabData(false, true);\n\n setIsUpdatingTask(false);\n\n return payload;\n })\n .catch(err => {\n setIsUpdatingTask(false);\n throw err;\n });\n };\n\n const _renderPriorityBadge = (record: ProspectTaskTodoListType) => {\n switch (record.prio) {\n case -1:\n return <Badge count={'-1'} style={{ backgroundColor: '#2db7f5' }} />;\n case 1:\n return <Badge count={'+1'} style={{ backgroundColor: 'gold' }} />;\n case 2:\n return <Badge count={'+2'} style={{ backgroundColor: '#f50' }} />;\n\n default:\n return <Text type=\"secondary\">±0</Text>;\n }\n };\n\n const _applyFilter = (filterType: string, taskTypeFilter: string, taskMenuListID?: number) => {\n const currentWhereFilterParams: any = {};\n // const currentWhereFilterParams = { ...queryParams.whereFilterParams };\n const nowMoment = moment();\n\n switch (taskTypeFilter) {\n case 'completed_tasks':\n currentWhereFilterParams['compl'] = 1;\n break;\n case 'all_tasks':\n currentWhereFilterParams['compl'] = undefined;\n break;\n case 'incomplete_tasks':\n currentWhereFilterParams['compl'] = 0;\n break;\n\n default:\n break;\n }\n\n if (taskMenuListID === -1) {\n if (currentWhereFilterParams['$prospects_task_list.id$']) {\n delete currentWhereFilterParams['$prospects_task_list.id$'];\n }\n } else if (taskMenuListID) {\n currentWhereFilterParams['$prospects_task_list.id$'] = taskMenuListID;\n }\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: { ...currentWhereFilterParams },\n resetPagination: true,\n });\n };\n\n const _deleteTask = async (record: ProspectTaskTodoListType) => {\n return deleteProspectTask(prospectID, record.id)\n .then(() => {\n if (reloadProspectStat && prospectID) {\n reloadProspectStat(prospectID);\n }\n\n showNotification(\n 'success',\n `Task: \"${record.title}\" has been successfully deleted.`\n );\n _reloadSubTabData(false, true);\n setIsUpdatingTask(false);\n\n return record;\n })\n .catch(err => {\n setIsUpdatingTask(false);\n throw err;\n });\n };\n\n const _showAddNewTaskModal = () => {\n _showEditTaskDetailModal(\n {\n id: 0,\n uuid: 'uuid-dummy',\n list_id: taskListMenu?.[0]?.id,\n d_created: 0,\n d_completed: 0,\n d_edited: 0,\n compl: 0,\n title: '',\n note: '',\n prio: 0,\n ow: 0,\n tags: '',\n tags_ids: '',\n alertnumdays: 1,\n prospects_defaulttask_id: 1,\n prospects_task_list: {\n name: taskListMenu?.[0]?.name,\n\n id: 0,\n prospect_id: prospectID,\n account_id: 0,\n },\n },\n 'ADD'\n );\n };\n\n const _showEditTaskDetailModal = (\n record: ProspectTaskTodoListType,\n mode: 'EDIT' | 'ADD' = 'EDIT'\n ) => {\n const editTaskDetailModal = Modal.confirm({\n title: (\n <Typography.Title level={4}>\n {mode === 'ADD' ? 'Add New Task' : 'Edit Task Detail'}\n </Typography.Title>\n ),\n content: (\n <EditProspectTaskModalContent\n prospectID={prospectID}\n task={record}\n form={form}\n taskListMenu={taskListMenu}\n mode={mode}\n />\n // <></>\n ),\n okText: 'Save',\n icon: <></>,\n style: { top: '40px' },\n width: '750px',\n onOk: async () => {\n editTaskDetailModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Saving...',\n });\n return form\n .validateFields()\n .then(async values => {\n if (mode === 'ADD')\n return _saveNewTaskData(values)\n .then(() => {\n editTaskDetailModal.destroy();\n return record;\n })\n .catch(err => {\n throw err;\n });\n return _saveTaskData({ ...record, ...values }, record, 'FULL')\n .then(() => {\n editTaskDetailModal.destroy();\n return record;\n })\n .catch(err => {\n throw err;\n });\n })\n .catch(err => {\n console.log('🚀 ~ file: tasks.tsx ~ line 487 ~ onOk: ~ err', err);\n editTaskDetailModal.update({\n okButtonProps: {\n disabled: false,\n },\n okText: 'Save',\n });\n\n throw err;\n });\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const _doActionTaskMenu = (menuKey: string, record: ProspectTaskTodoListType) => {\n switch (menuKey) {\n case 'edit_task_detail':\n form.resetFields();\n\n _showEditTaskDetailModal(record);\n\n break;\n\n case 'delete_task':\n const deleteConfirmationModal = Modal.confirm({\n title: `Delete confirmation`,\n content: (\n <>\n Are you sure to delete task: <b>{record.title}</b>?\n </>\n ),\n onOk: () => {\n deleteConfirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Deleting...',\n });\n _deleteTask(record).finally(() => {\n deleteConfirmationModal.destroy();\n });\n return true;\n },\n closable: true,\n maskClosable: true,\n });\n break;\n default:\n break;\n }\n };\n\n const ExpandedRowComponent: React.FC<{ record: ProspectTaskTodoListType }> = ({ record }) => {\n const [note, setNote] = useState<string>(record.note?.trim() || '');\n\n const [editMode, setEditMode] = useState<boolean>(false);\n const [isSubmittingForm, setIsSubmittingForm] = useState<boolean>(false);\n\n const _saveNote = () => {\n setIsSubmittingForm(true);\n _saveTaskData({ ...record, note: note }, record).finally(() => {\n setIsSubmittingForm(false);\n });\n };\n\n return (\n <div className=\"doc-note-wrapper p-2\">\n <div style={{ paddingLeft: '65px' }}>\n <Row>\n <Col span={12} className=\"pr-5\">\n <Row>\n <Col span={24} className=\"\">\n <Row className=\"\">\n <Col span={12} className=\"\">\n <Text strong>Notes</Text>\n </Col>\n <Col span={12} style={{ textAlign: 'right' }}>\n {!editMode && (\n <Button\n className=\"\"\n size=\"small\"\n type=\"link\"\n icon={<EditOutlined />}\n onClick={() => setEditMode(true)}\n >\n Edit\n </Button>\n )}\n\n {editMode && (\n <Space>\n <Button\n className=\"mr-2\"\n type=\"default\"\n size=\"small\"\n onClick={() => setEditMode(false)}\n disabled={isSubmittingForm}\n >\n Cancel\n </Button>\n <Button\n className=\"\"\n size=\"small\"\n icon={<SaveOutlined />}\n type=\"primary\"\n loading={isSubmittingForm}\n onClick={() => _saveNote()}\n >\n {isSubmittingForm ? 'Saving' : 'Save'}\n </Button>\n </Space>\n )}\n </Col>\n </Row>\n </Col>\n <Divider className=\"mt-2 mb-3\" />\n <Col span={24}>\n {!editMode && (\n <Paragraph\n style={{ whiteSpace: 'pre-wrap' }}\n ellipsis={{\n rows: 5,\n expandable: true,\n }}\n >\n {note ? (\n note\n ) : (\n <Text italic type=\"secondary\">\n No note added\n </Text>\n )}\n </Paragraph>\n )}\n {editMode && (\n <div>\n <Input.TextArea\n style={{ width: '100%' }}\n rows={4}\n placeholder=\"Write down the note here...\"\n className=\"mb-2\"\n value={note}\n onChange={e => setNote(e.currentTarget.value)}\n />\n </div>\n )}\n </Col>\n </Row>\n </Col>\n </Row>\n </div>\n </div>\n );\n };\n\n const additionalColumns: ProColumns<ProspectTaskTodoListType>[] = [];\n\n additionalColumns.push({\n title: 'Completed On',\n dataIndex: 'd_completed',\n width: '70px',\n sorter: true,\n editable: false,\n render: (_, record) => (\n <>\n <Text type={record.compl === 1 ? 'secondary' : undefined}>\n <EZDateFormat\n value={record.compl === 1 ? record.d_completed : null}\n format={'MMM DD, YYYY hh:mma'}\n />\n </Text>\n </>\n ),\n });\n\n const _columns: ProColumns<ProspectTaskTodoListType>[] = [\n {\n title: '',\n dataIndex: 'compl',\n width: '20px',\n align: 'center',\n sorter: true,\n editable: false,\n render: (dom, record) => (\n <Text\n type={record.compl === 1 ? 'secondary' : undefined}\n className={`cursor-pointer task-completion-toggle ${\n record.compl === 1 ? 'task-completed' : 'task-not-completed'\n }`}\n onClick={e => {\n const currentTarget = e?.currentTarget;\n\n if (currentTarget) {\n currentTarget.classList.add('loading');\n }\n _saveTaskData({ ...record, compl: record.compl === 1 ? 0 : 1 }, record);\n }}\n title={`${\n record.compl === 1 ? 'Mark task as incomplete' : 'Mark task as complete'\n }`}\n >\n {record.compl === 1 ? <CheckCircleFilled /> : <CheckCircleOutlined />}\n </Text>\n ),\n },\n {\n title: 'Task Title',\n dataIndex: 'title',\n width: '230px',\n sorter: true,\n // ellipsis: true,\n render: (_, record) => (\n <>\n <Text type={record.compl === 1 ? 'secondary' : undefined} title={record.title}>\n {record.title || '-'}\n </Text>\n {!taskMenuFilter || taskMenuFilter === -1 ? (\n <Tag\n className={`ml-2 mr-1 ${record.compl === 1 ? 'color-secondary' : ''}`}\n >\n {record.prospects_task_list?.name}\n </Tag>\n ) : (\n ''\n )}\n </>\n ),\n },\n {\n title: 'Quick Info',\n dataIndex: 'status',\n width: '45px',\n sorter: false,\n editable: false,\n render: (_, record) => (\n <>\n <Tooltip title={`${record.note?.length ? 1 : 0} note`} placement=\"left\">\n <Tag\n className={`tag-rounded ${\n record.note?.length ? '' : 'color-secondary'\n }`}\n onClick={() => _expandSelectedRows([record.id])}\n >\n <MessageOutlined /> {record.note?.length ? 1 : 0}\n </Tag>\n </Tooltip>\n </>\n ),\n },\n {\n title: 'Priority',\n dataIndex: 'prio',\n width: '45px',\n valueType: 'select',\n sorter: true,\n fieldProps: {\n options: [\n {\n label: <Badge count={'-1'} style={{ backgroundColor: '#2db7f5' }} />,\n value: -1,\n },\n {\n label: <Badge count={'±0'} style={{ backgroundColor: 'grey' }} />,\n value: 0,\n },\n {\n label: <Badge count={'+1'} style={{ backgroundColor: 'gold' }} />,\n value: 1,\n },\n {\n label: <Badge count={'+2'} style={{ backgroundColor: '#f50' }} />,\n value: 2,\n },\n ],\n },\n render: (_, record, idx, action) => <div>{_renderPriorityBadge(record)}</div>,\n },\n {\n title: 'Due Date',\n dataIndex: 'duedate',\n valueType: 'date',\n width: '75px',\n render: (_, record, idx, action) => {\n const currentYear = new Date().getFullYear();\n const nowMoment = moment();\n\n const dueDateMoment = record.duedate ? moment(record.duedate) : null;\n const isDue =\n record.compl !== 1 &&\n dueDateMoment &&\n dueDateMoment.isBefore(nowMoment.startOf('day'));\n const isWithin2Weeks = dueDateMoment?.isValid()\n ? dueDateMoment.isBetween(moment().subtract(7, 'days'), moment().add(7, 'days'))\n : false;\n\n const textType = isDue\n ? 'danger'\n : dueDateMoment && dueDateMoment.diff(nowMoment, 'day') === 0\n ? 'success'\n : dueDateMoment && dueDateMoment.diff(nowMoment, 'day') === 1\n ? undefined\n : record.compl === 1\n ? 'secondary'\n : undefined;\n\n const dueDateFormat =\n dueDateMoment && dueDateMoment.year() === currentYear\n ? 'MMM Do'\n : 'MMM Do, YYYY';\n\n const customText =\n isWithin2Weeks && dueDateMoment\n ? dueDateMoment.diff(nowMoment, 'day') === 0\n ? 'Today'\n : dueDateMoment.diff(nowMoment, 'day') === 1\n ? 'Tomorrow'\n : dueDateMoment.diff(nowMoment, 'day') === -1\n ? 'Yesterday'\n : ''\n : '';\n\n return (\n <Text\n type={textType}\n strong={\n ['Yesterday', 'Today', 'Tomorrow'].includes(customText) ? true : false\n }\n >\n {isWithin2Weeks ? (\n <Tooltip title={`${dueDateMoment?.format('MMM Do, YYYY')}`}>\n <span>\n {customText ? (\n customText\n ) : (\n <EZDateFormat value={record.duedate} humanize />\n )}\n </span>\n </Tooltip>\n ) : (\n <EZDateFormat value={record.duedate} format={dueDateFormat} />\n )}\n </Text>\n );\n },\n fieldProps: {\n format: 'MMM Do, YYYY',\n },\n sorter: true,\n },\n ...additionalColumns,\n {\n title: 'Last Edited On',\n dataIndex: 'd_edited',\n width: '70px',\n sorter: true,\n editable: false,\n render: (_, record) => (\n <>\n <Text type={record.compl === 1 ? 'secondary' : undefined}>\n <EZDateFormat value={record.d_edited} format={'MMM DD, YYYY hh:mma'} />\n </Text>\n </>\n ),\n },\n {\n title: 'Action',\n dataIndex: 'action',\n width: '85px',\n valueType: 'option',\n render: (_, record, index, action) => (\n <>\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<FieldTimeOutlined />}\n title=\"Edit this task\"\n onClick={() => {\n action?.startEditable(record.id);\n }}\n >\n Quick Edit\n </Button>\n\n <Divider type=\"vertical\" />\n\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu\n items={[\n {\n icon: <MenuUnfoldOutlined className=\"mr-3\" />,\n label: 'Edit Task Detail',\n key: 'edit_task_detail',\n },\n { type: 'divider' },\n {\n icon: <DeleteOutlined className=\"mr-3\" />,\n label: 'Delete Task',\n key: 'delete_task',\n danger: true,\n },\n ]}\n onClick={({ key }) => _doActionTaskMenu(key, record)}\n />\n }\n placement=\"bottomRight\"\n >\n <span onClick={e => e.preventDefault()}>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EllipsisOutlined />}\n title=\"More action\"\n ></Button>\n </span>\n </Dropdown>\n </>\n ),\n fixed: 'right',\n },\n ];\n\n useEffect(() => {\n _applyFilter('', taskTypeFilter, taskMenuFilter);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [taskTypeFilter, taskMenuFilter]);\n\n useEffect(() => {\n _reloadSubTabData();\n _fetchtaskListMenu();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [manualReloadCount]);\n\n return (\n <div className=\"ez-component-tasks\">\n <Row gutter={[0, 0]} className=\"row-wrapper\">\n <Col span={24}>\n <Tabs\n type=\"card\"\n defaultActiveKey=\"-1\"\n // addIcon={\n // <Tooltip title=\"Edit the todo lists on the Admin area\">\n // <SettingOutlined />\n // {/* <span className=\"mr-2\">Add New Tasklist</span> */}\n // </Tooltip>\n // }\n onChange={val => {\n const taskListID = parseInt(val.replace('tab-tasklist-', ''));\n setTaskMenuFilter(taskListID);\n }}\n tabBarExtraContent={\n <div>\n <Select\n style={{ textAlign: 'left', width: 300 }}\n value={taskTypeFilter}\n onChange={val => setTaskTypeFilter(val)}\n className=\"mb-2\"\n >\n <Option value=\"incomplete_tasks\">\n <span>\n <Text>Show: </Text>\n <Text strong>Incomplete Tasks</Text>\n </span>\n </Option>\n <Option value=\"completed_tasks\">\n <span>\n <Text>Show: </Text>\n <Text strong>Completed Tasks</Text>\n </span>\n </Option>\n <Option value=\"all_tasks\">\n <span>\n <Text>Show: </Text>\n <Text strong>All Tasks</Text>\n </span>\n </Option>\n </Select>\n </div>\n }\n >\n <Tabs.TabPane tab=\"All tasks\" key=\"-1\" closable={false}></Tabs.TabPane>\n {taskListMenu.map(taskListItem => (\n <Tabs.TabPane\n tab={`${taskListItem.name}`}\n key={`tab-tasklist-${taskListItem.id}`}\n closable={false}\n ></Tabs.TabPane>\n ))}\n </Tabs>\n </Col>\n <Col span={24}>\n <EZTable\n className=\"eztable-hide-delete-editable\"\n ref={EZTableRef}\n pagination={{\n pageSize: 100,\n pageSizeOptions: [20, 50, 100],\n position: ['bottomLeft', 'topLeft'],\n }}\n queryParams={queryParams}\n expandable={{\n columnWidth: '16px',\n expandedRowRender: (record: ProspectTaskTodoListType) => {\n return <ExpandedRowComponent record={record} />;\n },\n expandIcon: _expandIcon,\n showExpandColumn: true,\n expandedRowKeys: expandedRecordIDs,\n onExpand: (expanded, record: ProspectTaskTodoListType) => {\n if (expanded) {\n setExpandedRecordIDs([...expandedRecordIDs, record.id]);\n } else {\n setExpandedRecordIDs([\n ...expandedRecordIDs.filter(id => id !== record.id),\n ]);\n }\n },\n }}\n columns={_columns}\n size=\"small\"\n rowKey=\"id\"\n fetchData={_fetchData}\n scroll={{ x: 1650 }}\n toolBarComponents={[\n <Button\n key={`toolBarComponents-1-task-list`}\n className=\"ml-2 mr-2 ez-action-btn\"\n icon={toggleAllRows ? <RightOutlined /> : <DownOutlined />}\n onClick={() => _toggleAllRows(!toggleAllRows)}\n >\n {toggleAllRows ? 'Collapse' : 'Expand'} all rows\n </Button>,\n <Button\n key={`toolBarComponents-2-task-list`}\n className=\"ez-action-btn\"\n onClick={() => _showAddNewTaskModal()}\n >\n <PlusOutlined />\n Add New Task\n </Button>,\n ]}\n editable={{\n actionRender: (row, config, defaultDom) => [\n defaultDom.save,\n defaultDom.cancel,\n // defaultDom.delete,\n ],\n type: 'multiple',\n onSave: async (_, data: ProspectTaskTodoListType, oldData) => {\n let newDate = null;\n\n if (data.duedate) {\n let newDateMoment = moment(data.duedate, 'MMM Do, YYYY', true);\n\n if (newDateMoment.isValid()) {\n newDate = newDateMoment.format('YYYY-MM-DD');\n } else {\n newDateMoment = moment(data.duedate, 'YYYY-MM-DD', true);\n if (newDateMoment.isValid()) {\n newDate = newDateMoment.format('YYYY-MM-DD');\n }\n }\n }\n\n return await _saveTaskData(\n {\n ...data,\n duedate: newDate || undefined,\n },\n oldData\n );\n },\n saveText: (\n <>\n <Button\n className=\"p-0 pl-1\"\n type=\"link\"\n icon={<SaveFilled />}\n title=\"Edit this task\"\n >\n Save\n </Button>\n </>\n ),\n deletePopconfirmMessage: 'Are you sure to delete this task?',\n deleteText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0\"\n type=\"text\"\n title=\"Delete\"\n danger\n icon={<DeleteOutlined />}\n ></Button>\n </>\n ),\n onDelete: (key, record) => _deleteTask(record),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey mr-2\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n onChangeCallback={_onChangeCallback}\n />\n </Col>\n </Row>\n </div>\n );\n};\n","import { apiUrl } from '../../envUtil';\nimport { APIRequest } from '../../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nexport const getProspectContacts = (prospect_id: number, params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `prospect/${prospect_id}/contacts` + (params ? `?${params}` : ''),\n });\n};\n\nexport const updateProspectContact = (prospect_id: number, payload: any, contact_id?: number) => {\n if (contact_id) {\n Mixpanel.track('app.edit_prospect', {\n prospect_id,\n sub_tab: 'additional_contacts',\n action: 'edit',\n });\n } else {\n Mixpanel.track('app.edit_prospect', {\n prospect_id,\n sub_tab: 'additional_contacts',\n action: 'add',\n });\n }\n\n return APIRequest({\n method: contact_id ? 'put' : 'post',\n url:\n apiUrl +\n (contact_id\n ? `prospect/${prospect_id}/contact/${contact_id}`\n : `prospect/${prospect_id}/contacts`),\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteProspectContact = (prospect_id: number, contact_id: number) => {\n Mixpanel.track('app.edit_prospect', {\n prospect_id,\n sub_tab: 'additional_contacts',\n action: 'delete',\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `prospect/${prospect_id}/contact/${contact_id}`,\n useDefaultErrorNotif: true,\n });\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Modal, Form, Input, Typography } from 'antd';\nimport { PlusOutlined } from '@ant-design/icons';\n\n// EZ web-app utils import\n// EZ web-app types import\nimport { ContactRoleType } from 'types/transaction';\nimport { ProspectContactType } from 'types/prospectContact';\n// EZ web-app components import\nimport { EZAutocompleteCity, EZSelectUSState, EZSelectContactRole } from 'components';\nimport { showNotification } from 'utils/notificationUtil';\nimport { updateProspectContact } from 'utils/ez_api/prospect/prospectContactAPIs';\n\n// EZ web-app styles and assets import\n\nconst { Text } = Typography;\n\nexport const ModalEditAdditionalProspectContact: React.FC<{\n prospectID: number;\n contact?: ProspectContactType;\n contactRoles?: ContactRoleType[];\n isModalVisible?: boolean;\n setIsModalVisible?: React.Dispatch<React.SetStateAction<boolean>>;\n reloadSubTabData: () => void;\n}> = ({\n prospectID,\n contact,\n contactRoles = [],\n isModalVisible = false,\n setIsModalVisible = () => {},\n reloadSubTabData,\n}) => {\n const isEditMode: boolean = contact && contact.contact_id ? true : false;\n\n const [form] = Form.useForm();\n\n const [submittingData, setSubmittingData] = useState(false);\n\n const _onSubmitForm = (formValues?: any) => {\n setSubmittingData(true);\n if (formValues.role_id) {\n formValues.role =\n contactRoles.find(role => role.role_id.toString() === formValues.role_id.toString())\n ?.role || '';\n }\n\n const reqPromise = isEditMode\n ? updateProspectContact(prospectID, formValues, contact?.contact_id || 0)\n : updateProspectContact(prospectID, formValues);\n\n reqPromise\n .then(resp => {\n showNotification(\n 'success',\n isEditMode\n ? 'Selected contact data has been updated.'\n : 'New additional contact has been added.'\n );\n reloadSubTabData();\n setIsModalVisible(false);\n })\n .finally(() => {\n setSubmittingData(false);\n });\n };\n\n const _setFormFieldsValue = () => {\n if (isEditMode) {\n form.setFieldsValue(contact);\n } else {\n form.resetFields();\n }\n };\n\n const _resetModalStates = () => {\n setSubmittingData(false);\n };\n\n const _onAddNewRole = () => {\n reloadSubTabData();\n };\n\n useEffect(() => {\n if (isModalVisible) {\n _resetModalStates();\n _setFormFieldsValue();\n } else {\n _resetModalStates();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isModalVisible]);\n\n return (\n <>\n <Modal\n title={`${isEditMode ? 'Edit Contact' : 'Add New Contact'}`}\n visible={isModalVisible}\n onOk={() => form.submit()}\n onCancel={() => setIsModalVisible(false)}\n okText=\"Save Changes\"\n confirmLoading={submittingData}\n width={700}\n style={{ top: 40 }}\n bodyStyle={{ overflowY: 'auto', height: '600px' }}\n >\n <Form layout=\"vertical\" form={form} onFinish={_onSubmitForm} requiredMark={false}>\n <Row gutter={20}>\n <Col span={12}>\n <Form.Item label=\"Role\" name=\"role_id\">\n <EZSelectContactRole\n options={contactRoles.map(role => ({\n label: role.role,\n value: role.role_id,\n }))}\n onAddNewRole={_onAddNewRole}\n />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item\n label=\"Name\"\n name=\"fullname\"\n rules={[{ required: true, message: \"Name can't be empty\" }]}\n >\n <Input placeholder=\"Enter the name\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Main Email\" name=\"email\" rules={[{ type: 'email' }]}>\n <Input placeholder=\"Enter the main email\" type=\"email\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Main Phone\" name=\"telephone\">\n <Input placeholder=\"Enter the main phone number\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Phone 2\" name=\"telephone2\">\n <Input placeholder=\"Enter the secondary phone\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Company\" name=\"company\">\n <Input placeholder=\"Enter the company name\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Fax\" name=\"fax\">\n <Input placeholder=\"Enter the fax\" />\n </Form.Item>\n </Col>\n </Row>\n <Row gutter={20}>\n <Col span={24}>\n <Form.Item label=\"Address\" name=\"address\">\n <Input placeholder=\"Enter the address\" />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"City\" name=\"city\">\n <EZAutocompleteCity />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"State\" name=\"state\">\n <EZSelectUSState />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item label=\"ZIP\" name=\"zip\">\n <Input placeholder=\"Enter the ZIP\" />\n </Form.Item>\n </Col>\n </Row>\n {/* <Divider orientation=\"left\">\n <b>Contact's Notes</b>\n </Divider> */}\n <Row gutter={20}>\n <Col span={24}>\n <Form.Item label=\"Notes\" name=\"notes\">\n <Input.TextArea placeholder=\"Enter the notes\" rows={2} />\n </Form.Item>\n </Col>\n </Row>\n </Form>\n </Modal>\n </>\n );\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Space, Button, Popconfirm, Modal } from 'antd';\nimport { EditOutlined, DeleteOutlined, PlusOutlined } from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport {\n deleteProspectContact,\n getProspectContacts,\n} from 'utils/ez_api/prospect/prospectContactAPIs';\nimport { getContactRoles } from 'utils/ez_api/contactAPIs';\n// EZ web-app types import\nimport { ContactRoleType } from 'types/transaction';\nimport { ProspectDetailTabProps } from 'types/prospect';\nimport { ProspectContactType } from 'types/prospectContact';\n// EZ web-app components import\nimport { EZCopyable, EZTable, EZDateFormat } from 'components';\nimport { ITableQueryParams } from 'components/table/EZProTable';\nimport { showNotification } from 'utils/notificationUtil';\nimport { ModalEditAdditionalProspectContact } from '../modal/Modal_showEditAdditionalContact';\n\n// EZ web-app styles and assets import\n\nconst defaultTableParam = {\n searchKeyword: '',\n orderParams: [],\n whereParams: {},\n whereFilterParams: {},\n};\n\nexport const ProspectSubTab_Contacts: React.FC<ProspectDetailTabProps> = ({\n prospectID,\n manualReloadCount,\n reloadProspectStat,\n}) => {\n const [queryParams, setQueryParams] = useState<ITableQueryParams>(defaultTableParam);\n const [selectedContact, setSelectedContact] = useState<ProspectContactType>();\n const [contactRoles, setContactRoles] = useState<ContactRoleType[]>([]);\n\n const [isModalEditContactVisible, setIsModalEditContactVisible] = useState(false);\n\n async function _fetchData(EZTableQueryParams: string): Promise<any> {\n return getProspectContacts(prospectID, EZTableQueryParams).then(result => result);\n }\n\n const _reloadContactRoles = () => {\n getContactRoles().then(response => {\n setContactRoles(response.data || []);\n });\n };\n\n const _reloadSubTabData = () => {\n setQueryParams({ ...defaultTableParam });\n\n _reloadContactRoles();\n };\n\n const _showAddContactModal = () => {\n setIsModalEditContactVisible(true);\n };\n\n const _editSelectedContact = (contact: ProspectContactType) => {\n setIsModalEditContactVisible(true);\n setSelectedContact(contact);\n };\n const _deleteSelectedContact = (contact: ProspectContactType) => {\n deleteProspectContact(prospectID, contact.contact_id || 0).then(() => {\n showNotification('success', 'You have successfully deleted the selected contact.');\n _reloadSubTabData();\n });\n };\n\n const _columns: ProColumns<ProspectContactType>[] = [\n {\n title: 'Name',\n dataIndex: 'fullname',\n width: '200px',\n fixed: 'left',\n sorter: true,\n render: (_, record) => (\n <div>\n {record.fullname ? (\n <>\n {record.fullname} <EZCopyable text={record.fullname} />\n </>\n ) : (\n '-'\n )}\n </div>\n ),\n },\n {\n title: 'Role',\n dataIndex: 'role_id',\n width: '200px',\n render: (_, record) => <div>{record.contact_role?.role || '-'}</div>,\n },\n {\n title: 'Email #1',\n dataIndex: 'email',\n width: '250px',\n render: (_, record) => (\n <div>\n {record.email ? (\n <>\n {record.email} <EZCopyable text={record.email} />\n </>\n ) : (\n '-'\n )}\n </div>\n ),\n sorter: true,\n },\n {\n title: 'Telephone #1',\n dataIndex: 'telephone',\n width: '200px',\n render: (_, record) => (\n <div>\n {record.telephone ? (\n <>\n {record.telephone} <EZCopyable text={record.telephone} />\n </>\n ) : (\n '-'\n )}{' '}\n </div>\n ),\n sorter: true,\n },\n {\n title: 'Company',\n dataIndex: 'company',\n width: '200px',\n render: (_, record) => (\n <div>{record.company || record.contact_company?.company || '-'}</div>\n ),\n sorter: true,\n },\n {\n title: 'Fax',\n dataIndex: 'fax',\n width: '200px',\n render: (_, record) => <div>{record.telephone || '-'}</div>,\n sorter: true,\n },\n {\n title: 'Address',\n dataIndex: 'address',\n width: '300px',\n render: (_, record) => (\n <div>\n <div>{record.address || <i>Address isn't set</i>}</div>\n <div>\n {record.city || <i>City isn't set</i>},{' '}\n {record.state || <i>State isn't set</i>},{' '}\n {record.zip || <i>ZIP isn't set</i>}\n </div>\n </div>\n ),\n },\n {\n title: 'Telephone #2',\n dataIndex: 'telephone2',\n width: '200px',\n render: (_, record) => <div>{record.telephone2 || '-'}</div>,\n sorter: true,\n },\n {\n title: 'Notes',\n dataIndex: 'notes',\n width: '300px',\n render: (_, record) => <div>{record.notes || '-'}</div>,\n sorter: false,\n },\n {\n title: 'Action',\n dataIndex: 'action',\n width: '160px',\n render: (_, record) => (\n <Space size=\"small\" className=\"pl-1\">\n <Button\n className=\"p-0 mr-2\"\n type=\"link\"\n icon={<EditOutlined />}\n title=\"Edit this contact\"\n onClick={() => _editSelectedContact(record)}\n >\n Edit\n </Button>\n <Popconfirm\n placement=\"bottomRight\"\n title={`Delete ${record.fullname || 'this contact'}?`}\n okText=\"Yes\"\n cancelText=\"Cancel\"\n onConfirm={() => _deleteSelectedContact(record)}\n >\n <Button\n className=\"p-0\"\n type=\"link\"\n style={{ color: 'red' }}\n icon={<DeleteOutlined />}\n >\n Delete\n </Button>\n </Popconfirm>\n </Space>\n ),\n fixed: 'right',\n },\n ];\n\n useEffect(() => {\n _reloadSubTabData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [manualReloadCount]);\n\n useEffect(() => {\n if (!isModalEditContactVisible) {\n setSelectedContact(undefined);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isModalEditContactVisible]);\n\n return (\n <div className=\"ez_detail_contacts\">\n <Row gutter={[0, 0]}>\n <Col>\n <ModalEditAdditionalProspectContact\n prospectID={prospectID}\n contact={selectedContact}\n contactRoles={contactRoles}\n isModalVisible={isModalEditContactVisible}\n setIsModalVisible={setIsModalEditContactVisible}\n reloadSubTabData={_reloadSubTabData}\n />\n </Col>\n </Row>\n <Row gutter={[0, 0]}>\n <Col span={24}>\n <EZTable\n pagination={{\n pageSize: 20,\n }}\n queryParams={queryParams}\n columns={_columns}\n rowKey=\"contact_id\"\n fetchData={_fetchData}\n scroll={{ x: 1600 }}\n toolBarComponents={[\n <Button\n className=\"ez-action-btn ml-2\"\n onClick={() => _showAddContactModal()}\n >\n <PlusOutlined />\n Add New Contact\n </Button>,\n ]}\n />\n </Col>\n </Row>\n </div>\n );\n};\n","import { apiUrl } from '../../envUtil';\nimport { APIRequest } from '../../apiUtil';\nimport { DocType } from 'components/appPage/documents';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nexport const getProspectDocs = (prospect_id: number, params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `prospect/${prospect_id}/documents` + (params ? `?${params}` : ''),\n });\n};\n\nexport const getPresignedURLProspectDocUpload = (\n prospect_id: number,\n filePayload: {\n original_name: string;\n mime_type: string;\n size: number;\n }\n) => {\n return APIRequest({\n method: 'post',\n url: apiUrl + `prospect/${prospect_id}/file-upload/presign-url`,\n data: {\n ...filePayload,\n doc_type: 'prospect_document',\n },\n });\n};\n\n// TODO: port this API to prospect's document\nexport const getPresignedURLDocsRead = (\n doc_type: DocType,\n doc_list: { prospect_id?: number; file_id: number }[]\n) => {\n return APIRequest({\n method: 'post',\n url: apiUrl + `documents/presign-urls`,\n data: {\n doc_type,\n doc_list,\n },\n });\n};\n\nexport const addNewProspectDoc = (\n prospect_id: number,\n docPayload: {\n folder_id?: number;\n filename?: string;\n u_filename?: string;\n bucket?: string;\n key?: string;\n content_type?: string;\n size?: number;\n }\n) => {\n Mixpanel.track('app.add_prospect_doc', {\n prospect_id,\n ...docPayload,\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `prospect/${prospect_id}/documents`,\n data: docPayload,\n });\n};\n\nexport const deleteProspectDocument = (prospect_id: number, doc_id: number) => {\n Mixpanel.track('app.delete_prospect_doc', {\n prospect_id,\n doc_id: doc_id,\n bulk: false,\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `prospect/${prospect_id}/document/${doc_id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateProspectDocument = (\n prospect_id: number,\n id: number,\n payload: any,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n) => {\n Mixpanel.track('app.edit_prospect_doc', {\n prospect_id,\n doc_id: id,\n action: 'edit',\n ...payload,\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `prospect/${prospect_id}/document/${id}?formType=${formType}`,\n data: {\n ...payload,\n },\n useDefaultErrorNotif: true,\n });\n};\n","// Core React libraries import\nimport React, { useContext, useEffect, useRef, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Row,\n Col,\n Space,\n Menu,\n Button,\n Tabs,\n Typography,\n Dropdown,\n Divider,\n Select,\n UploadProps,\n UploadFile,\n Collapse,\n Modal,\n} from 'antd';\nimport { ProColumns } from '@ant-design/pro-components';\nimport { RenderExpandIcon } from 'rc-table/lib/interface';\nimport {\n DeleteOutlined,\n DownOutlined,\n FieldTimeOutlined,\n InboxOutlined,\n CheckCircleOutlined,\n CheckCircleFilled,\n RightOutlined,\n CloseOutlined,\n EllipsisOutlined,\n SaveFilled,\n DownloadOutlined,\n FileSearchOutlined,\n} from '@ant-design/icons';\nimport fileDownload from 'js-file-download';\n\n// EZ web-app utils import\nimport { downloadFileRequest } from 'utils/apiUtil';\n// EZ web-app APIs import\nimport { downloadLegacyDocument, getPresignedURLDoc } from 'utils/ez_api/documentAPIs';\nimport {\n addNewProspectDoc,\n deleteProspectDocument,\n getPresignedURLProspectDocUpload,\n getProspectDocs,\n updateProspectDocument,\n} from 'utils/ez_api/prospect/prospectDocumentAPIs';\n// EZ web-app types import\n// EZ web-app components import\nimport { EZDateFormat, EZTable, EZUpload, UploadProgress } from 'components';\nimport {\n forwardRefEZTableProps,\n IOnChangeCallbackProps,\n ITableQueryParams,\n} from 'components/table/EZProTable';\nimport { EZUploadProps } from 'components/upload/upload';\nimport { showMessage, showNotification } from 'utils/notificationUtil';\nimport { previewDoc } from 'components/appPage/documents';\nimport { ProspectDetailTabProps } from 'types/prospect';\nimport { ProspectDocumentType } from 'types/prospectDocument';\n\n// EZ web-app styles and assets import\n\nconst { Text, Paragraph } = Typography;\nconst { Option } = Select;\nconst { TabPane } = Tabs;\nconst { Panel } = Collapse;\n\nconst defaultTableParam: ITableQueryParams = {\n searchKeyword: '',\n orderParams: [],\n // orderParams: [['$doc_folder.rank$', 'desc']],\n whereParams: {},\n whereFilterParams: {},\n};\n\nexport const ProspectSubTab_Documents: React.FC<ProspectDetailTabProps> = ({\n prospectID,\n manualReloadCount,\n reloadProspectStat,\n}) => {\n const EZTableRef = useRef<forwardRefEZTableProps>();\n\n const [fileUploadList, setFileUploadList] = useState<UploadFile[]>([]);\n\n const [queryParams, setQueryParams] = useState<ITableQueryParams>(defaultTableParam);\n\n async function _fetchData(EZTableQueryParams: string): Promise<any> {\n return getProspectDocs(prospectID, EZTableQueryParams).then(result => result);\n }\n\n const _handleFileUploadChange: UploadProps['onChange'] = ({ file, fileList }) => {\n // TODO: Find the alternative solution as the setState for array will trigger re-rendering the table, which is bad for user experience due to unresponsive scroll\n setFileUploadList([...fileList]);\n\n if (file.status === 'done') {\n if (prospectID) {\n addNewProspectDoc(prospectID, {\n folder_id: 1,\n filename: file.name,\n u_filename: file.response?.newFilename,\n bucket: file.response?.Bucket,\n key: file.response?.Key,\n size: file.size,\n content_type: file.type,\n }).then(() => {\n setQueryParams({\n ...queryParams,\n resetPagination: false,\n });\n });\n setFileUploadList(fileList.filter(f => f.uid !== file.uid));\n\n reloadProspectStat?.(prospectID);\n }\n }\n };\n\n async function _fetchPresignURL(payload: any): Promise<any> {\n return getPresignedURLProspectDocUpload(prospectID, payload);\n }\n\n const _onChangeCallback: IOnChangeCallbackProps = () => {};\n\n const _reloadSubTabData = (resetPagination?: boolean, silentLoading?: boolean) => {\n setQueryParams({\n ...queryParams,\n resetPagination,\n silentLoading: silentLoading || undefined,\n });\n };\n\n const _downloadDocument = (doc: ProspectDocumentType) => {\n showMessage('success', 'Download has been initiated. Please wait...');\n\n // if bucket and doc property has value, the doc will be downloaded from AWS S3\n if (doc.bucket && doc.key) {\n getPresignedURLDoc('prospect_document', doc.doc_id, 'download').then(resp => {\n downloadFileRequest(resp.data?.presignedURL, doc.filename || 'untitled');\n });\n } else {\n downloadLegacyDocument('prospect_document', doc.doc_id).then((resp: any) => {\n fileDownload(resp, doc.filename || 'untitled');\n });\n }\n };\n\n const _saveDocumentRecord = async (\n newData: ProspectDocumentType,\n oldData: ProspectDocumentType,\n formType: 'FULL' | 'PARTIAL' = 'PARTIAL'\n ) => {\n // setDocIDsEdit([...docIDsEdit, { docID: newData.doc_id }]);\n\n if (newData.filename === '' || newData.filename === null) {\n newData.filename = oldData.filename;\n }\n\n if (newData.doc_id) EZTableRef.current?.modifyData(newData, newData.doc_id);\n\n return updateProspectDocument(\n oldData.prospect_id,\n newData.doc_id,\n {\n ...newData,\n },\n formType\n )\n .then(() => {\n if (prospectID) {\n reloadProspectStat?.(prospectID);\n }\n\n if (newData.status === 1 && oldData.status === 0) {\n showNotification(\n 'success',\n `Document: \"${newData.filename}\" has been marked as checked.`\n );\n } else if (newData.status === 0 && oldData.status === 1) {\n showNotification(\n 'success',\n `Document: \"${newData.filename}\" has been marked as unchecked.`\n );\n } else {\n showNotification(\n 'success',\n `Document: \"${newData.filename}\" has been successfully updated.`\n );\n }\n\n if (oldData.folder_id !== newData.folder_id) {\n _reloadSubTabData(false, true);\n }\n\n return newData;\n })\n .catch(err => {\n throw err;\n });\n };\n\n const _columns: ProColumns<ProspectDocumentType>[] = [\n {\n title: 'Checked?',\n dataIndex: 'status',\n width: '35px',\n sorter: false,\n editable: false,\n align: 'center',\n render: (_, record) => (\n <>\n <Button\n className=\"mr-1\"\n size=\"small\"\n type=\"default\"\n onClick={e => {\n _saveDocumentRecord(\n { ...record, status: record.status === 1 ? 0 : 1 },\n record\n );\n }}\n >\n {record.status === 1 ? (\n <CheckCircleFilled style={{ color: 'green' }} />\n ) : (\n <CheckCircleOutlined />\n )}\n </Button>\n </>\n ),\n },\n {\n title: 'Document Name',\n dataIndex: 'filename',\n width: '160px',\n sorter: true,\n ellipsis: true,\n // fixed: 'left',\n render: (_, record) => (\n <>\n <Text\n type={record.status === 1 ? 'secondary' : undefined}\n title={record.filename}\n >\n {record.filename || '-'}\n </Text>\n </>\n ),\n },\n {\n title: 'Description',\n dataIndex: 'description',\n width: '160px',\n sorter: true,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text\n type={record.status === 1 ? 'secondary' : undefined}\n title={record.description}\n >\n {record.description || '-'}\n </Text>\n </>\n ),\n },\n {\n title: 'Uploaded By',\n dataIndex: 'account.fullname',\n width: '70px',\n editable: false,\n sorter: false,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text\n type={record.status === 1 ? 'secondary' : undefined}\n title={record.uploadedby_account?.fullname}\n >\n {record.uploadedby_account?.fullname || '-'}\n </Text>\n </>\n ),\n },\n {\n title: 'Uploaded On',\n dataIndex: 'posted_date',\n width: '80px',\n editable: false,\n sorter: false,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text type={record.status === 1 ? 'secondary' : undefined}>\n <EZDateFormat value={record.date_uploaded} format=\"MMM Do, YYYY hh:mma\" />\n </Text>\n </>\n ),\n },\n {\n title: 'Action',\n dataIndex: 'action',\n width: '85px',\n valueType: 'option',\n render: (_, record, index, action) => (\n <Space size=\"small\" className=\"pl-1\">\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<FieldTimeOutlined />}\n title=\"Quick-edit this document\"\n onClick={() => {\n action?.startEditable(record.doc_id);\n }}\n >\n Quick Edit\n </Button>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 mr-1\"\n size=\"small\"\n type=\"link\"\n icon={<FileSearchOutlined />}\n title=\"Preview\"\n onClick={() => {\n previewDoc('prospect_document', [\n {\n file_id: record.doc_id,\n prospect_id: prospectID,\n },\n ]);\n }}\n ></Button>\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu>\n <Menu.Item key=\"0\" onClick={() => _downloadDocument(record)}>\n <DownloadOutlined className=\"mr-3\" />\n <span className=\"\">Download</span>\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item key=\"2\" danger onClick={() => _deleteDocument(record)}>\n <DeleteOutlined className=\"mr-3\" />\n Delete Document\n </Menu.Item>\n </Menu>\n }\n placement=\"bottomRight\"\n >\n <span onClick={e => e.preventDefault()}>\n <Button size=\"small\" type=\"link\" icon={<EllipsisOutlined />} />\n </span>\n </Dropdown>\n </Space>\n ),\n fixed: 'right',\n },\n ];\n\n const _expandIcon: RenderExpandIcon<ProspectDocumentType> = ({\n expanded,\n onExpand,\n record,\n }) => {\n return expanded ? (\n <DownOutlined\n id={`ez-tr-icon-expandable-c_${prospectID}-doc_${record.doc_id}`}\n onClick={(e: any) => onExpand(record, e)}\n />\n ) : (\n <RightOutlined\n id={`ez-tr-icon-expandable-c_${prospectID}-doc_${record.doc_id}`}\n onClick={(e: any) => onExpand(record, e)}\n />\n );\n };\n\n const _deleteDocument = (record: ProspectDocumentType) => {\n const deleteConfirmationModal = Modal.confirm({\n title: `Delete confirmation`,\n content: (\n <>\n Are you sure to delete document/file: <b>{record.filename}</b>?\n </>\n ),\n onOk: () => {\n deleteConfirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Deleting...',\n });\n deleteProspectDocument(record.prospect_id, record.doc_id).then(() => {\n deleteConfirmationModal.destroy();\n if (reloadProspectStat && prospectID) {\n reloadProspectStat(prospectID);\n }\n\n showNotification(\n 'success',\n `Document/file: \"${record.filename}\" has been successfully deleted.`\n );\n _reloadSubTabData(false, true);\n });\n return true;\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const uploadProps: EZUploadProps = {\n fileList: fileUploadList,\n onChange: _handleFileUploadChange,\n getPresignedURL: _fetchPresignURL,\n };\n\n useEffect(() => {\n _reloadSubTabData();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [manualReloadCount]);\n\n return (\n <div className=\"ez-component-documents\">\n <Row className=\"row-wrapper\">\n <Col span={24} className=\"mb-3\">\n <div>\n <UploadProgress\n fileUploadList={fileUploadList}\n setFileUploadList={setFileUploadList}\n />\n </div>\n <EZUpload dragger {...uploadProps}>\n <p className=\"ant-upload-drag-icon\">\n <InboxOutlined />\n </p>\n <p className=\"ant-upload-text\">Click or drag file to this area to upload</p>\n <p className=\"ant-upload-hint\">Support for a single or bulk upload.</p>\n </EZUpload>\n </Col>\n <Col span={24}>\n <EZTable\n ref={EZTableRef}\n className=\"eztable-hide-delete-editable\"\n pagination={{\n pageSize: 50,\n pageSizeOptions: [20, 50, 100],\n position: ['bottomLeft', 'topLeft'],\n }}\n queryParams={queryParams}\n columns={_columns}\n size=\"small\"\n rowKey=\"doc_id\"\n fetchData={_fetchData}\n scroll={{ x: 1400 }}\n tableAlertRender={false}\n editable={{\n actionRender: (_, __, defaultDom) => [\n defaultDom.save,\n defaultDom.cancel,\n ],\n type: 'multiple',\n onSave: async (_, data: ProspectDocumentType, oldData) => {\n return _saveDocumentRecord(\n {\n ...data,\n },\n oldData\n );\n },\n saveText: (\n <>\n <Button\n className=\"p-0 pl-1\"\n type=\"link\"\n icon={<SaveFilled />}\n title=\"Edit this doc\"\n >\n Save\n </Button>\n </>\n ),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n onChangeCallback={_onChangeCallback}\n />\n </Col>\n </Row>\n </div>\n );\n};\n","// Core React libs import\nimport React, { useState, useEffect, useContext } from 'react';\n\n// Core ANTD and other libs import\nimport moment from 'moment';\nimport {\n Typography,\n Row,\n Col,\n Descriptions,\n Button,\n Dropdown,\n Menu,\n Space,\n BackTop,\n Tabs,\n Select,\n Collapse,\n Modal,\n Tag,\n} from 'antd';\nimport { Gutter } from 'antd/lib/grid/row';\nimport {\n EditOutlined,\n DownOutlined,\n DeleteOutlined,\n MailOutlined,\n CaretRightOutlined,\n InfoCircleOutlined,\n ReloadOutlined,\n FlagTwoTone,\n} from '@ant-design/icons';\n\n// EZ web-app APIs import\nimport {\n archiveProspect,\n getProspectDetail,\n getProspectQuickStats,\n} from 'utils/ez_api/prospect/prospectAPIs';\n// Core EZ app level import\nimport { HomeContext } from 'context/EZContext';\nimport { ITabContentProps } from 'types/webAppTab';\nimport { EZCopyable, EZDateFormat, EZOverlaySpinner } from 'components';\nimport { showNotification } from 'utils/notificationUtil';\nimport {\n ProspectDataType,\n ProspectDetailTabPane,\n ProspectDetailType,\n ProspectQuickStat,\n} from 'types/prospect';\nimport {\n generateDocBadge,\n generateNoteBadge,\n generateTaskBadge,\n} from '../transaction/ViewDetailTransaction';\nimport { ProspectSubTab_Notes } from './subTabs/SubTab_Notes';\nimport { ProspectSubTab_ProfilePreference } from './subTabs/SubTab_ProfilePreference';\nimport { ProspectSubTab_Tasks } from './subTabs/SubTab_Tasks';\nimport { ProspectSubTab_Contacts } from './subTabs/SubTab_Contacts';\nimport { ProspectSubTab_Documents } from './subTabs/SubTab_Documents';\nimport { isProspectABuyer } from 'utils/webAppUtil';\nimport { ModalEditProspectInfo } from './modal/Modal_editProspectInfo';\n\nimport './ProspectDetail.scss';\n\nconst { Text, Title } = Typography;\nconst { Option } = Select;\nconst { TabPane } = Tabs;\nconst { Panel } = Collapse;\n\nconst _subTabs: ProspectDetailTabPane[] = [\n {\n key: 'ez_prospect_household_profile',\n label: 'Preference and Household Profile',\n tabContent: ProspectSubTab_ProfilePreference,\n },\n {\n key: 'ez_prospect_tasks',\n label: <span>Tasks</span>,\n tabContent: ProspectSubTab_Tasks,\n },\n {\n key: 'ez_prospect_documents',\n label: <span>Documents</span>,\n tabContent: ProspectSubTab_Documents,\n },\n {\n key: 'ez_prospect_notes',\n label: 'Notes',\n tabContent: ProspectSubTab_Notes,\n },\n {\n key: 'ez_prospect_contacts',\n label: 'Additional Contacts',\n tabContent: ProspectSubTab_Contacts,\n },\n];\n\nconst DefaultTransactionQuickStat = {\n taskStatInfo: {\n incomplete: 0,\n complete: 0,\n total: 0,\n },\n documentStatInfo: {\n incomplete: 0,\n complete: 0,\n total: 0,\n },\n noteStatInfo: {\n total: 0,\n },\n};\n\nconst colLabelSpan = 6;\nconst colValueSpan = 18;\nconst rowFormViewGutter: [Gutter, Gutter] = [12, 12];\n\nconst ChangeSubTabLayoutElm: React.FC<{\n subTabLayout: string;\n setSubTabLayout: React.Dispatch<React.SetStateAction<string>>;\n}> = ({ subTabLayout, setSubTabLayout }) => {\n return (\n <Select\n defaultValue={subTabLayout}\n style={{ width: 200 }}\n onChange={val => setSubTabLayout(val)}\n >\n <Option value=\"tabs\">\n <span>\n <Text>View Layout: </Text>\n <Text strong>Tabs</Text>\n </span>\n </Option>\n <Option value=\"collapsible\">\n <span>\n <Text>View Layout: </Text>\n <Text strong>Collapsible</Text>\n </span>\n </Option>\n </Select>\n );\n};\n\nconst ProspectDetail: React.FC<ITabContentProps> = ({ tabKey, data }) => {\n const HomeCtx = useContext(HomeContext);\n\n const [isBuyer, setIsBuyer] = useState<boolean>(false);\n\n // custom reload counter to force the sub tab to re-load the data\n const [manualReloadCount, setManualReloadCount] = useState<number>(0);\n\n const subTabs = [..._subTabs];\n const [subTabLayout, setSubTabLayout] = useState<string>('tabs');\n // const [activeTabKey, setActiveTabKey] = useState(_subTabs[0].key);\n\n const [isLoadingProspectDetail, setIsLoadingProspectDetail] = useState<boolean>(false);\n const [isLoadingSubTabData, setIsLoadingSubTabData] = useState<boolean>(false);\n const [prospectData, setProspectData] = useState<ProspectDataType>(data as ProspectDataType);\n const [prospectQuickStat, setProspectQuickStat] = useState<ProspectQuickStat>(\n DefaultTransactionQuickStat\n );\n\n const [isModalEditProspectInfoVisible, setIsModalEditProspectInfoVisible] = useState(false);\n\n const _reloadProspectDetail = async (\n showLoadingProgress: boolean = false,\n detailType: ProspectDetailType = 'basic_info'\n ) => {\n if (showLoadingProgress) {\n setIsLoadingProspectDetail(true);\n }\n return getProspectDetail(prospectData.prospect_id, detailType)\n .then(resp => {\n if (resp.data) {\n setProspectData({ ...prospectData, ...resp.data });\n setIsBuyer(isProspectABuyer(resp.data.inquirytype_id));\n }\n })\n .catch(() => {\n showNotification('error', 'Error happened while reloading the transaction data.');\n })\n .finally(() => {\n if (showLoadingProgress) {\n setIsLoadingProspectDetail(false);\n }\n });\n };\n\n const _reloadProspectStat = (prospect_id?: number) => {\n if (!prospect_id) return;\n\n getProspectQuickStats(prospect_id).then(resp => {\n if (resp.data) {\n setProspectQuickStat({\n taskStatInfo: {\n incomplete: resp.data?.incomplete_task_count || 0,\n complete: resp.data?.complete_task_count || 0,\n total:\n resp.data?.complete_task_count + resp.data?.incomplete_task_count || 0,\n },\n documentStatInfo: {\n incomplete: resp.data?.incomplete_doc_count || 0,\n complete: resp.data?.complete_doc_count || 0,\n total: resp.data?.complete_doc_count + resp.data?.incomplete_doc_count || 0,\n },\n noteStatInfo: {\n total: resp.data?.prospect_note_count || 0,\n },\n });\n }\n });\n };\n\n const _doActionDetailMenu = (menuKey: string) => {\n switch (menuKey) {\n case 'delete_prospect':\n const deleteConfirmationModal = Modal.confirm({\n title: `Delete confirmation`,\n content: (\n <>\n Are you sure to delete the prospect: <b>{prospectData.fullname}</b>?\n </>\n ),\n onOk: () => {\n deleteConfirmationModal.update({\n closable: true,\n maskClosable: true,\n okButtonProps: {\n disabled: true,\n },\n okText: 'Deleting...',\n });\n return archiveProspect(prospectData.prospect_id).then(() => {\n HomeCtx.closeTab?.(tabKey);\n showNotification(\n 'success',\n `You have successfully deleted the prospect: ${prospectData.fullname}`\n );\n return true;\n });\n },\n closable: true,\n maskClosable: true,\n });\n break;\n default:\n break;\n }\n };\n\n useEffect(() => {\n _reloadProspectDetail(true, 'basic_info');\n _reloadProspectStat(prospectData.prospect_id);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div\n className=\"ez-tab-transaction-detail\"\n id={`ez-tab-transaction-detail-${prospectData.prospect_id}`}\n >\n <>\n <ModalEditProspectInfo\n prospectData={prospectData}\n setProspectData={setProspectData}\n isModalVisible={isModalEditProspectInfoVisible}\n setIsModalVisible={setIsModalEditProspectInfoVisible}\n reloadProspectDetail={_reloadProspectDetail}\n />\n </>\n\n <div>\n <div\n className=\"mb-4 ez-sub-content-wrapper ez-sub-content-header-section\"\n style={{ position: 'relative' }}\n >\n <div>\n <div>{isLoadingProspectDetail && <EZOverlaySpinner />}</div>\n <Row>\n <Col span={24}>\n <Descriptions\n title={\n <>\n {prospectData.fullname ? (\n prospectData.fullname\n ) : (\n <Text type=\"secondary\" italic>\n Fullname is empty\n </Text>\n )}\n {prospectData.inquirytype_id ? (\n prospectData.inquirytype_id === 1 ? (\n <Tag className=\"tag-rounded ml-2\">Buyer</Tag>\n ) : (\n <Tag className=\"tag-rounded ml-2\">Seller</Tag>\n )\n ) : (\n <></>\n )}\n </>\n }\n bordered={true}\n column={1}\n size=\"small\"\n layout=\"horizontal\"\n extra={\n <>\n <Button\n className=\"mr-3 ez-action-btn\"\n icon={<ReloadOutlined />}\n loading={isLoadingProspectDetail}\n onClick={() => {\n _reloadProspectDetail(true, 'basic_info');\n setManualReloadCount(manualReloadCount + 1);\n }}\n >\n Reload\n </Button>\n <Button\n className=\"mr-3 ez-action-btn\"\n icon={<EditOutlined />}\n onClick={() =>\n setIsModalEditProspectInfoVisible(true)\n }\n >\n Edit\n </Button>\n <Dropdown\n trigger={['click']}\n className=\"ez-action-btn\"\n placement=\"bottomRight\"\n overlay={\n <Menu\n onClick={({ key }) =>\n _doActionDetailMenu(key)\n }\n items={[\n {\n label: 'Delete Prospect',\n key: 'delete_prospect',\n danger: true,\n icon: (\n <DeleteOutlined\n style={{ color: 'red' }}\n />\n ),\n },\n ]}\n />\n }\n >\n <Button>\n <Space>\n More actions\n <DownOutlined />\n </Space>\n </Button>\n </Dropdown>\n </>\n }\n ></Descriptions>\n </Col>\n </Row>\n <Row gutter={24} className=\"mt-2 mb-2\">\n <Col span={12} sm={24} md={24} lg={12} xl={12}>\n <Row gutter={rowFormViewGutter}>\n <Col span={colLabelSpan}>\n <Text strong>Email Address:</Text>\n </Col>\n <Col span={colValueSpan}>\n {prospectData.email ? (\n <>\n {prospectData.email}\n <EZCopyable\n text={prospectData.email}\n className=\"ml-1\"\n />\n </>\n ) : (\n '-'\n )}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Phone:</Text>\n </Col>\n <Col span={colValueSpan}>\n {prospectData.prospects_phones?.length ? (\n <ul className=\"pl-4 mb-0\">\n {prospectData.prospects_phones.map(phone => (\n <li>\n {phone.category ? (\n <Text code>{phone.category}</Text>\n ) : (\n ''\n )}\n \n {phone.phone}\n </li>\n ))}\n </ul>\n ) : (\n '-'\n )}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Address:</Text>\n </Col>\n <Col span={colValueSpan}>\n <div className=\"\">\n {prospectData.address || (\n <Text type=\"secondary\" italic>\n Address is empty\n </Text>\n )}\n </div>\n <div className=\"\">\n {prospectData.city || (\n <Text type=\"secondary\" italic>\n City is empty\n </Text>\n )}\n ,{' '}\n {prospectData.state || (\n <Text type=\"secondary\" italic>\n State is empty\n </Text>\n )}\n ,{' '}\n {prospectData.zip || (\n <Text type=\"secondary\" italic>\n ZIP is empty\n </Text>\n )}\n <EZCopyable\n text={`${\n prospectData.address || 'Address is empty'\n }\\n${prospectData.city || 'City is empty'}, ${\n prospectData.state || 'State is empty'\n }, ${prospectData.zip || 'ZIP is empty'}`}\n className=\"ml-1\"\n />\n </div>\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Country:</Text>\n </Col>\n <Col span={colValueSpan}>{prospectData.country || '-'}</Col>\n </Row>\n </Col>\n <Col span={12} sm={24} md={24} lg={12} xl={12}>\n <Row gutter={rowFormViewGutter}>\n <Col span={colLabelSpan}>\n <Text strong>Registration Date:</Text>\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat value={prospectData.registration_date} />\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Last Contacted Date:</Text>\n </Col>\n <Col span={colValueSpan}>\n <EZDateFormat\n value={prospectData.prospects_last_visit_date_id}\n />\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Follow-up Code:</Text>\n </Col>\n <Col span={colValueSpan}>\n {prospectData.prospects_followupcode?.code || '-'}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Flag:</Text>\n </Col>\n <Col span={colValueSpan}>\n {prospectData.flag_id ? (\n <>\n <FlagTwoTone\n twoToneColor={\n prospectData.prospects_default_flag\n ?.flag_color\n }\n />\n <span className=\"ml-2 text-capitalize\">\n {\n prospectData.prospects_default_flag\n ?.flag_color\n }\n </span>\n </>\n ) : (\n '-'\n )}\n </Col>\n <Col span={colLabelSpan}>\n <Text strong>Group:</Text>\n </Col>\n <Col span={colValueSpan}>\n {prospectData.prospects_group?.group_name || '-'}\n </Col>\n </Row>\n </Col>\n </Row>\n </div>\n </div>\n </div>\n\n <div className=\"mb-4 ez-sub-content-wrapper ez-sub-content-section\">\n <Row>\n <Col span={24}>\n {isLoadingSubTabData && <EZOverlaySpinner />}\n {subTabLayout === 'tabs' && (\n <Tabs\n id=\"ez-tab-transaction-detail-tab-wrapper-id\"\n className=\"ez-tab-transaction-detail-tab-wrapper\"\n style={{ marginBottom: 32 }}\n defaultActiveKey={data?.subTabKey || subTabs[0].key}\n tabBarExtraContent={\n <Row\n style={{\n paddingRight: '24px',\n paddingBottom: '2px',\n }}\n >\n <ChangeSubTabLayoutElm\n subTabLayout={subTabLayout}\n setSubTabLayout={setSubTabLayout}\n />\n </Row>\n }\n onChange={activeKey => {\n // setActiveTabKey(activeKey);\n if (window.scrollY >= 400) window.scrollTo(0, 387);\n }}\n >\n {subTabs.map(subTab => (\n <TabPane\n tab={\n <>\n {subTab.label}\n <span>\n {subTab.key === 'ez_prospect_tasks'\n ? generateTaskBadge(prospectQuickStat)\n : subTab.key === 'ez_prospect_documents'\n ? generateDocBadge(prospectQuickStat)\n : subTab.key === 'ez_prospect_notes'\n ? generateNoteBadge(prospectQuickStat)\n : ''}\n </span>\n </>\n }\n key={subTab.key}\n >\n <subTab.tabContent\n subTabs={subTabs}\n currentTab={subTab}\n prospectID={prospectData.prospect_id}\n isBuyer={isBuyer}\n manualReloadCount={manualReloadCount}\n isLoadingSubTabData={isLoadingSubTabData}\n setIsLoadingSubTabData={setIsLoadingSubTabData}\n reloadProspectStat={_reloadProspectStat}\n />\n </TabPane>\n ))}\n </Tabs>\n )}\n {subTabLayout === 'collapsible' && (\n <>\n <Row\n style={{\n position: 'absolute',\n right: '24px',\n paddingTop: '4px',\n zIndex: 80,\n }}\n >\n <Col span={24}>\n <ChangeSubTabLayoutElm\n subTabLayout={subTabLayout}\n setSubTabLayout={setSubTabLayout}\n />\n </Col>\n </Row>{' '}\n <Collapse\n defaultActiveKey={subTabs[0].key}\n ghost\n expandIcon={({ isActive }) => (\n <CaretRightOutlined rotate={isActive ? 90 : 0} />\n )}\n onChange={activeKey => {}}\n >\n {subTabs.map(subTab => (\n <Panel\n header={<Title level={5}>{subTab.label}</Title>}\n key={subTab.key}\n >\n <subTab.tabContent\n subTabs={subTabs}\n currentTab={subTab}\n prospectID={prospectData.prospect_id}\n isBuyer={isBuyer}\n manualReloadCount={manualReloadCount}\n isLoadingSubTabData={isLoadingSubTabData}\n setIsLoadingSubTabData={setIsLoadingSubTabData}\n reloadProspectStat={_reloadProspectStat}\n />\n </Panel>\n ))}\n </Collapse>\n </>\n )}\n </Col>\n <BackTop />\n </Row>\n </div>\n </div>\n );\n};\n\nexport default ProspectDetail;\n","import { apiUrl } from '../../envUtil';\nimport { APIRequest } from '../../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nexport const getProspectNotes = (prospect_id: number, params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `prospect/${prospect_id}/notes` + (params ? `?${params}` : ''),\n });\n};\n\nexport const updateProspectNote = (prospect_id: number, notes: string, note_id?: number) => {\n if (note_id) {\n Mixpanel.track('app.edit_prospect', {\n prospect_id,\n sub_tab: 'notes',\n action: 'edit',\n });\n } else {\n Mixpanel.track('app.edit_prospect', {\n prospect_id,\n sub_tab: 'notes',\n action: 'add',\n });\n }\n\n return APIRequest({\n method: note_id ? 'put' : 'post',\n url:\n apiUrl +\n (note_id ? `prospect/${prospect_id}/note/${note_id}` : `prospect/${prospect_id}/notes`),\n data: {\n notes: notes,\n },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteProspectNote = (prospect_id: number, note_id: number) => {\n Mixpanel.track('app.edit_prospect', {\n prospect_id,\n sub_tab: 'notes',\n action: 'delete',\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `prospect/${prospect_id}/note/${note_id}`,\n useDefaultErrorNotif: true,\n });\n};\n","// Core React libs import\nimport React, { useState } from 'react';\n\n// Core ANTD and 3rd party libs import\nimport { Button, Col, Row, Typography, Tabs, Progress, Divider } from 'antd';\nimport { CheckCircleTwoTone, RightOutlined } from '@ant-design/icons';\nimport { OnboardingStepType } from 'types/onboarding';\n\n// EZ level libs import\nconst { Text, Title } = Typography;\n\nexport const EZOnboardingListContent: React.FC<{\n onboardingList: object;\n onSelectOnboading: (item: OnboardingStepType) => void;\n onClose: () => void;\n}> = ({ onboardingList = {}, onSelectOnboading, onClose }) => {\n const [tabKey, setTabKey] = useState('learner');\n\n const generateOnboardingCompletedContent = (type: string) => {\n switch (type) {\n case 'learner': {\n return {\n title: 'You’re really a Learner!',\n description:\n 'This is just a beginning, in order to make your work more efficient with EZCoordinator, you can continue to become a master.',\n leftButton: { label: 'Continue to Master', onClick: () => setTabKey('master') },\n rightButton: { label: '', onClick: () => {} },\n };\n }\n case 'master': {\n return {\n title: 'Congrats, You’ve become Master!',\n description:\n 'You have the opportunity to make this work more efficient. Interested in using EZCoordinator for long term?',\n leftButton: { label: '', onClick: () => {} },\n rightButton: { label: 'Finish and Hide', onClick: () => onClose() },\n };\n }\n\n default:\n break;\n }\n };\n\n return (\n <Row\n style={{\n minWidth: '19em',\n }}\n >\n <Tabs\n type=\"line\"\n style={{ width: '100%' }}\n activeKey={tabKey}\n onChange={_key => setTabKey(_key)}\n >\n {Object.entries(onboardingList).map(\n ([key, stepList]: [any, any], index: number) => {\n const countStepCompleted = stepList?.filter(\n ({ onboarding_step_completed }: OnboardingStepType) =>\n Boolean(onboarding_step_completed)\n ).length;\n const countSteps = stepList.length;\n const stepProgress = (countStepCompleted / countSteps) * 100;\n const allStepComplated = stepList.every(\n ({ onboarding_step_completed }: OnboardingStepType) =>\n Boolean(onboarding_step_completed)\n );\n const completedContent = generateOnboardingCompletedContent(key);\n\n const [, prevStepList] = Object.entries(onboardingList)[index - 1] || [];\n const prevStepCompleted = prevStepList\n ? prevStepList.every(\n ({ onboarding_step_completed }: OnboardingStepType) =>\n Boolean(onboarding_step_completed)\n )\n : true;\n\n return (\n <Tabs.TabPane\n disabled={!prevStepCompleted}\n tab={\n <div\n style={{\n textTransform: 'capitalize',\n display: 'flex',\n flexDirection: 'row',\n }}\n >\n <div\n style={{\n padding: '5px',\n width: '1.7em',\n height: '1.7em',\n marginRight: '.5em',\n borderRadius: '50%',\n border: '1px solid',\n borderColor: 'inherit',\n alignItems: 'center',\n justifyContent: 'center',\n display: 'flex',\n }}\n >\n {index + 1}\n </div>\n {key}\n </div>\n }\n key={key}\n closable={false}\n >\n <div\n style={{ gap: '1em', display: 'flex', flexDirection: 'column' }}\n >\n <Row justify=\"space-between\" style={{ padding: '0px 0.5em' }}>\n <Text\n style={{ color: 'gray' }}\n >{`${countStepCompleted} of ${countSteps}`}</Text>\n <Col style={{ width: '75%' }}>\n <Progress percent={stepProgress} showInfo={false} />\n </Col>\n </Row>\n {allStepComplated && (\n <>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n padding: '0em .5em',\n maxWidth: '18em',\n gap: '.5em',\n }}\n >\n <Title level={5}>{completedContent?.title}</Title>\n <Text>{completedContent?.description}</Text>\n <Row align=\"middle\" style={{ gap: '.5em' }}>\n {completedContent?.leftButton?.label && (\n <Button\n type=\"primary\"\n onClick={\n completedContent?.leftButton\n ?.onClick\n }\n >\n {completedContent?.leftButton?.label}\n </Button>\n )}\n\n {completedContent?.rightButton?.label && (\n <Button\n type={\n completedContent?.leftButton?.label\n ? 'link'\n : 'primary'\n }\n onClick={\n completedContent?.rightButton\n ?.onClick\n }\n >\n {completedContent?.rightButton?.label}\n </Button>\n )}\n </Row>\n </div>\n <Divider style={{ margin: '.5em' }} />\n </>\n )}\n {stepList?.map((step: OnboardingStepType) => {\n const { title, onboarding_step_completed } = step;\n const stepCompleted = Boolean(onboarding_step_completed);\n return (\n <Button\n type=\"text\"\n onClick={() => onSelectOnboading(step)}\n >\n <Row\n gutter={16}\n justify=\"space-between\"\n align=\"middle\"\n >\n <Row align=\"middle\">\n {stepCompleted ? (\n <CheckCircleTwoTone twoToneColor=\"#597EF7\" />\n ) : (\n <div\n style={{\n width: '13.5px',\n height: '13.5px',\n borderRadius: '50%',\n border: '1px solid #BFBFBF',\n }}\n />\n )}\n <Text\n style={{ marginLeft: '1em' }}\n delete={stepCompleted}\n >\n {title}\n </Text>\n </Row>\n <RightOutlined />\n </Row>\n </Button>\n );\n })}\n </div>\n </Tabs.TabPane>\n );\n }\n )}\n </Tabs>\n </Row>\n );\n};\n","import { Image } from 'antd';\nimport React from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport rehypeRaw from 'rehype-raw';\n\ninterface MDXProps {\n content: string;\n}\ninterface CustomImageProps {\n alt: string;\n src: string;\n}\n\nconst CustomImage: React.FC<CustomImageProps> = ({ alt, src }) => {\n return <Image alt={alt} src={src} />; // Use Ant Design's Image component\n};\nexport const MarkdownRenderer: React.FC<MDXProps> = ({ content }) => {\n return (\n <ReactMarkdown components={{ img: CustomImage as any }} rehypePlugins={[rehypeRaw as any]}>\n {content}\n </ReactMarkdown>\n );\n};\n","// Core React libs import\nimport React from 'react';\n\n// Core ANTD and 3rd party libs import\nimport { Modal } from 'antd';\nimport { MarkdownRenderer } from 'components/markdown/MarkdownRenderer';\n\n// EZ level libs import\n\nexport const EZOnboardingDetailModal: React.FC<{\n isOpen: boolean;\n onClose: () => void;\n title: string;\n content: string;\n}> = ({ isOpen, onClose, title, content = '' }) => {\n return (\n <Modal\n width=\"fit-content\"\n closable\n maskClosable\n title={title}\n visible={isOpen}\n okButtonProps={{\n style: {\n display: 'none',\n },\n }}\n cancelText=\"Close\"\n onCancel={onClose}\n destroyOnClose\n zIndex={1001}\n >\n <div style={{ width: 800, overflow: 'auto' }}>\n <MarkdownRenderer content={content} />\n </div>\n </Modal>\n );\n};\n","// Core React libs import\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\n\n// Core ANTD and 3rd party libs import\nimport { Button, Popover, Row } from 'antd';\nimport { DownOutlined } from '@ant-design/icons';\nimport { EZOnboardingListContent } from './OnboardingListContent';\nimport { OnboardingStepType } from 'types/onboarding';\nimport { EZOnboardingDetailModal } from './OnboardingDetailModal';\nimport { getObjectFromLocalStorage } from 'utils/cacheUtil';\nimport isEmpty from 'lodash/isEmpty';\nimport { HomeContext } from 'context/EZContext';\nimport { differenceInWeeks } from 'date-fns';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\n// EZ level libs import\n\nconst defaultOnboardingDetail: OnboardingStepType = {\n id: 0,\n user_type_id: 0,\n code: '',\n title: '',\n type: '',\n description: '',\n content: '',\n onboarding_step_completed: false,\n is_admin_area: false,\n is_team_only: false,\n};\n\nexport const EZOnboardingButton: React.FC<{}> = () => {\n const [isPopoverOpen, setPopoverOpen] = useState(false);\n const [selectedOnboarding, setSelectedOnboarding] =\n useState<OnboardingStepType>(defaultOnboardingDetail);\n\n const accountCreatedDate = localStorage.getItem('date_posted') || '';\n const accountCreatedDurationByWeeks = differenceInWeeks(\n new Date(),\n new Date(accountCreatedDate)\n );\n // popover always open for New users, when Date posted ≤ 2 weeks\n const isAlwaysOpenPopover = accountCreatedDurationByWeeks <= 2;\n\n const HomeCtx = useContext(HomeContext);\n const { refetchOnboardingList, isOnboadingLoading } = HomeCtx;\n\n const handlePopoverToogle = () => {\n setPopoverOpen(!isPopoverOpen);\n };\n\n const handleSelectedOnboading = (item: OnboardingStepType) => {\n setSelectedOnboarding(item);\n\n Mixpanel.track('app.onboarding', {\n action: item.code,\n });\n };\n\n const isModalOpen = Boolean(selectedOnboarding.code);\n const _onboardingList = getObjectFromLocalStorage('onboarding_list');\n\n const onboardingList = useMemo(() => {\n if (isEmpty(_onboardingList) && !isOnboadingLoading) {\n refetchOnboardingList();\n return [];\n }\n return _onboardingList;\n }, [refetchOnboardingList, _onboardingList, isOnboadingLoading]);\n\n useEffect(() => {\n setPopoverOpen(isAlwaysOpenPopover);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div\n style={{\n display: 'flex',\n position: 'fixed',\n bottom: '1.85em',\n right: '8em',\n zIndex: 1000,\n }}\n >\n <EZOnboardingDetailModal\n isOpen={isModalOpen}\n onClose={() => setSelectedOnboarding(defaultOnboardingDetail)}\n title={selectedOnboarding.title}\n content={selectedOnboarding.content ? selectedOnboarding.content : ''}\n />\n <Popover\n content={\n <EZOnboardingListContent\n onboardingList={onboardingList}\n onSelectOnboading={handleSelectedOnboading}\n onClose={handlePopoverToogle}\n />\n }\n title={\n <Row justify=\"space-between\" align=\"middle\">\n Getting Started <DownOutlined onClick={handlePopoverToogle} />\n </Row>\n }\n overlayStyle={{\n position: 'fixed',\n zIndex: 1000,\n }}\n trigger=\"click\"\n showArrow={false}\n placement=\"topRight\"\n visible={isPopoverOpen}\n >\n <Button\n type=\"primary\"\n style={{\n backgroundColor: '#25517d',\n borderColor: '#25517d',\n borderRadius: '2em',\n }}\n onClick={handlePopoverToogle}\n >\n Get Started\n </Button>\n </Popover>\n </div>\n );\n};\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\\\nimport { Row, Col, Typography, List, Avatar } from 'antd';\nimport { SnippetsOutlined } from '@ant-design/icons';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport { getLogs } from 'utils/ez_api/notificationAPIs';\n// EZ web-app types import\nimport { AppLogItemType, AppLogTransactionData } from 'types/notification';\n// EZ web-app components import\nimport { EZDateFormat, EZList } from 'components';\nimport { IListQueryParams } from 'components/list/EZList';\nimport { HomeContext } from 'context/EZContext';\n\n// EZ web-app styles and assets import\n\nconst { Text, Paragraph } = Typography;\n\nconst defaultQueryParams: IListQueryParams = {\n searchKeyword: '',\n orderParams: [['note_id', 'desc']],\n whereParams: {\n category: 'log',\n },\n whereFilterParams: {},\n};\n\nexport const AppActivities: React.FC<{}> = ({}) => {\n const HomeCtx = useContext(HomeContext);\n\n const [queryParams, setQueryParams] = useState<IListQueryParams>(defaultQueryParams);\n\n const _fetchNotes: (EZQueryParams: string) => Promise<any> = async EZQueryParams => {\n const result = await getLogs(EZQueryParams);\n return result;\n };\n\n const _openTransactionDetailTab = (contract?: AppLogTransactionData) => {\n if (contract) {\n HomeCtx.openTransactionDetailTab(\n contract.contract_id,\n contract.address,\n {\n ...contract,\n },\n 'Notification_menu'\n );\n }\n };\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"ez_detail_changelogs\">\n <Row gutter={[0, 0]}>\n <Col span={24} className=\"mb-3\">\n <EZList\n rowKey=\"note_id\"\n paginationConfig={{\n pageSize: 5,\n size: 'small',\n }}\n queryParams={queryParams}\n fetchData={_fetchNotes}\n disableNativeSearch\n renderItem={(record: AppLogItemType) => (\n <List.Item>\n <List.Item.Meta\n avatar={\n <Avatar\n style={{ backgroundColor: '#E6F7FF' }}\n icon={<SnippetsOutlined style={{ color: '#096DD9' }} />}\n size={32}\n />\n }\n title={\n <span>\n <Text strong className=\"mr-1\">\n {record.posted_account?.fullname}\n </Text>\n <Text\n type=\"secondary\"\n className=\"mr-2\"\n style={{ fontSize: '90%' }}\n >\n On{' '}\n <EZDateFormat\n value={record.date_posted}\n format=\"MMM DD, YYYY - hh:mma\"\n />\n </Text>\n </span>\n }\n description={\n <>\n <div>\n <Paragraph\n style={{ whiteSpace: 'pre-wrap' }}\n ellipsis={{\n rows: 3,\n expandable: true,\n }}\n title={`${record.notes}`}\n >\n {record.notes}\n </Paragraph>\n </div>\n <div style={{ fontSize: '90%' }}>\n Transaction ●{' '}\n <Text\n className=\"cursor-pointer\"\n type=\"secondary\"\n strong\n onClick={() =>\n _openTransactionDetailTab(record.contract)\n }\n >\n ${record.contract?.address}\n </Text>\n </div>\n </>\n }\n />\n </List.Item>\n )}\n />\n </Col>\n </Row>\n </div>\n );\n};\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Typography, List, Avatar, Alert } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\nimport { AppMyAlertItemType, NotificationInfoType } from 'types/notification';\nimport { DocReviewTabIcon, TAB_CATEGORY } from 'types/webAppTab';\n// EZ web-app components import\nimport { HomeContext } from 'context/EZContext';\n\n// EZ web-app styles and assets import\n\nconst { Text, Paragraph } = Typography;\n\nexport const AppMyInbox: React.FC<{ notificationInfo?: NotificationInfoType }> = ({\n notificationInfo,\n}) => {\n const HomeCtx = useContext(HomeContext);\n\n const [data, setData] = useState<AppMyAlertItemType[]>([]);\n\n const _openDocReviewTab = () => {\n HomeCtx.openMainTab(TAB_CATEGORY.DOC_REVIEW, true);\n };\n\n useEffect(() => {\n if (notificationInfo?.docReview) {\n setData([\n {\n key: 1,\n category: 'DOC_REVIEW',\n title: (\n <>\n <b>{notificationInfo?.docReview} transaction(s)</b> have documents for\n your review.\n </>\n ),\n description: (\n <>\n Click{' '}\n <Text\n onClick={() => _openDocReviewTab()}\n className=\"cursor-pointer\"\n type=\"secondary\"\n underline\n strong\n >\n here\n </Text>{' '}\n to start the review process.\n </>\n ),\n },\n ]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [notificationInfo]);\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"ez_detail_myinbox\">\n <Row gutter={[0, 0]}>\n <Col span={24} className=\"mb-3\">\n {data.length ? (\n <List\n dataSource={data}\n renderItem={item => (\n <List.Item>\n <List.Item.Meta\n avatar={\n <Avatar\n style={{ backgroundColor: '#E6F7FF' }}\n icon={\n <DocReviewTabIcon\n style={{ color: '#096DD9' }}\n />\n }\n size={32}\n />\n }\n title={item.title}\n description={item.description}\n ></List.Item.Meta>\n </List.Item>\n )}\n />\n ) : (\n <>\n <Alert description=\"No notification at the moment\" />\n </>\n )}\n </Col>\n </Row>\n </div>\n );\n};\n","// Core React libraries import\nimport React, { useContext, useEffect, useRef, useState } from 'react';\n\n// Core ANTD and other libs import\nimport { Badge, Col, Popover, Row, Select, Tabs, Typography } from 'antd';\nimport { BellOutlined } from '@ant-design/icons';\n\n// EZ web-app types import\nimport { NotificationInfoType } from 'types/notification';\n\n// EZ web-app APIs import\nimport { getNotificationInfo } from 'utils/ez_api/notificationAPIs';\n\n// Core EZ app level import\nimport { HomeContext } from 'context/EZContext';\nimport { IListQueryParams } from 'components/list/EZList';\nimport { AppActivities } from './activities';\nimport { AppMyInbox } from './myinbox';\n\nconst { Text, Paragraph } = Typography;\nconst { Option } = Select;\n\nconst defaultQueryParams: IListQueryParams = {\n searchKeyword: '',\n orderParams: [],\n whereParams: {},\n whereFilterParams: {},\n};\n\nconst NotificationPopOver: React.FC<{ notificationInfo?: NotificationInfoType }> = ({\n notificationInfo,\n}) => {\n return (\n <Row style={{ width: '400px', minHeight: '500px' }}>\n <Col span={24}>\n <Tabs defaultActiveKey=\"1\" className=\"home-notification-tabs\">\n <Tabs.TabPane tab=\"My Notification\" key=\"1\">\n <AppMyInbox notificationInfo={notificationInfo} />\n </Tabs.TabPane>\n <Tabs.TabPane tab=\"Logs\" key=\"2\">\n <AppActivities />\n </Tabs.TabPane>\n </Tabs>\n </Col>\n </Row>\n );\n};\n\nexport const HomeNotification: React.FC<{}> = () => {\n const HomeCtx = useContext(HomeContext);\n\n const [notificationInfo, setNotificationInfo] = useState<NotificationInfoType>();\n\n const _fetchNotificationInfo = () => {\n getNotificationInfo()\n .then(({ data }) => {\n setNotificationInfo(data);\n })\n .catch(err => {});\n };\n\n useEffect(() => {\n _fetchNotificationInfo();\n\n let intervalId = setInterval(_fetchNotificationInfo, 30000);\n return () => {\n clearInterval(intervalId);\n };\n }, []);\n\n return (\n <div className=\"\">\n <Popover\n content={<NotificationPopOver notificationInfo={notificationInfo} />}\n arrowPointAtCenter\n showArrow={false}\n title=\"\"\n placement=\"bottomLeft\"\n // visible={true}\n trigger={['click']}\n className=\"\"\n overlayClassName=\"home-notification-overlay-popover\"\n >\n <Badge count={notificationInfo?.docReview || undefined} size=\"small\">\n <BellOutlined style={{ fontSize: '18px' }} />\n </Badge>\n </Popover>\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { Alert, Col, Row, Typography } from 'antd';\nimport { DocusignCredentialType } from 'types/docusign';\nimport { getDocusignAccountInformation } from 'utils/ez_api/docusignAPI';\n\nexport const DocusignIntegrationIndicator: React.FC<{}> = ({ ...props }) => {\n const [docusignCredential, setDocusignCredential] = useState<DocusignCredentialType>();\n\n const _fetchCredentials = async () => {\n getDocusignAccountInformation().then(resp => {\n setDocusignCredential(resp.data);\n });\n };\n\n useEffect(() => {\n _fetchCredentials();\n }, []);\n\n return (\n <>\n <Row gutter={[16, 0]}>\n {docusignCredential && docusignCredential.docusign_email ? (\n <Col span={24} className=\"pull-left text-left\">\n <Alert\n message={\n <>\n You currently use \n <b>{docusignCredential?.docusign_email}</b> for sending\n your DocuSign Envelope(s).\n </>\n }\n type=\"info\"\n showIcon\n className=\"mb-3\"\n />\n </Col>\n ) : docusignCredential && docusignCredential.parent_account_id ? (\n <Col span={24} className=\"pull-left text-left\">\n <Alert\n message={\n <>\n Your 3rd-party DocuSign integration has expired. <br />\n Please go to the <b>Admin Area</b>, click{' '}\n <b>3rd-Party Integration</b> menu, and navigate to the{' '}\n <b>DocuSign</b> tab to reconnect the selected sender profile.\n </>\n }\n type=\"error\"\n showIcon\n className=\"mb-3\"\n />\n </Col>\n ) : (\n <Col span={24} className=\"pull-left text-left\">\n <Alert\n message={\n <>\n Your document will be securely sent through EZCoordinator's\n DocuSign account. You can integrate your own DocuSign account at\n any time in your settings.\n </>\n }\n type=\"info\"\n showIcon\n className=\"mb-3\"\n />\n </Col>\n )}\n </Row>\n </>\n );\n};\n","// Core React libraries import\nimport React, { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Input, Form, Col, Divider, Button, Popconfirm, Steps, Skeleton, Alert } from 'antd';\nimport moment from 'moment';\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\nimport { TransactionDocItemType } from 'types/transaction';\nimport { EZAutocompleteParty } from 'components';\nimport { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';\nimport { showMessage } from 'utils/notificationUtil';\nimport { generateDocuSignEnvelope } from 'utils/ez_api/documentAPIs';\nimport { DocusignIntegrationIndicator } from 'components/partials/docusignIntegrationIndicator';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\ntype STEPS = 'SET_RECIPIENTS' | 'REQUESTING_ENVELOPE' | 'SENDING_ENVELOPE';\n\nconst { Step } = Steps;\n\nconst steps = [\n {\n title: 'Add the recipient(s)',\n description: 'Fill out all the fields.',\n },\n {\n title: 'Preparing the envelope',\n description: 'Our system communicates with the DocuSign APIs.',\n },\n {\n title: 'Set up your docs and send',\n description: 'Arrange the signature field.',\n },\n];\n\nexport const EsignatureModalContent: React.FC<{\n contractID: number;\n doc: TransactionDocItemType;\n}> = ({ doc, contractID }) => {\n const [form] = Form.useForm();\n const [currentStep, setCurrentStep] = useState(0);\n const [viewerURL, setViewerURL] = useState('');\n\n const _getDetail = () => {};\n\n const _onSelectName = (_: any, opt: any, index: number) => {\n form.setFieldValue(['recipients', index, 'fullname'], opt.fullname);\n form.setFieldValue(['recipients', index, 'email'], opt.email);\n };\n\n const _setFieldValues = () => {\n form.resetFields();\n\n form.setFieldValue('recipients', [{}]);\n };\n\n const _processForm = () => {\n const recipients: { email?: string; fullname?: string }[] =\n form.getFieldValue('recipients');\n\n if (!recipients || !recipients.length) {\n return showMessage('error', \"Recipient's fields can't be empty\");\n }\n\n for (let index = 0; index < recipients.length; index++) {\n const recipient = recipients[index];\n\n if (!recipient || !recipient.email || !recipient.fullname) {\n return showMessage('error', \"Recipient's fields can't be empty\");\n }\n }\n\n form.validateFields()\n .then(formValues => {\n console.log(\n '🚀 ~ file: esignatureModal.tsx ~ line 101 ~ .then ~ formValues',\n formValues\n );\n setCurrentStep(1);\n _generateDocuSignViewerURL(formValues);\n })\n .catch(err => {\n console.log('🚀 ~ file: esignatureModal.tsx ~ line 77 ~ err', err);\n showMessage('error', 'Invalid data is found. Please double-check your form.');\n });\n };\n\n const _generateDocuSignViewerURL = (formValuesParam: any) => {\n const formValues: {\n emailSubject: string;\n emailBlurb: string;\n recipients: { email: string; fullname: string }[];\n } = formValuesParam;\n\n generateDocuSignEnvelope(\n doc.contract_id,\n doc.doc_id,\n formValues.emailSubject,\n formValues.emailBlurb,\n formValues.recipients\n )\n .then(resp => {\n if (resp.data?.viewerURL) {\n setViewerURL(resp.data.viewerURL);\n setCurrentStep(2);\n }\n })\n .catch(err => {\n console.log(\n '🚀 ~ file: esignatureModal.tsx ~ line 116 ~ generateDocuSignEnvelope ~ err',\n err\n );\n showMessage(\n 'error',\n 'Failed to create the DocuSign Envelope. Please try again later.'\n );\n _prevStep(0);\n });\n };\n\n const _prevStep = (currentStep: number) => {\n switch (currentStep) {\n case 0:\n setCurrentStep(0);\n setViewerURL('');\n break;\n case 1:\n setCurrentStep(currentStep - 1);\n break;\n case 2:\n setCurrentStep(0);\n setViewerURL('');\n break;\n\n default:\n break;\n }\n };\n\n const _nextStep = (currentStep: number) => {\n switch (currentStep) {\n case 0:\n _processForm();\n break;\n\n default:\n break;\n }\n };\n\n useEffect(() => {\n _setFieldValues();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Form layout=\"vertical\" form={form} requiredMark={false} className=\"mt-5\">\n <DocusignIntegrationIndicator />\n <Steps className=\"mt-5 mb-5\" current={currentStep}>\n {steps.map(item => (\n <Step key={item.title} title={item.title} description={item.description} />\n ))}\n </Steps>\n {currentStep === 0 ? (\n <>\n <Row gutter={[16, 0]} className=\"mt-3\">\n <Col span={24}>\n <Form.Item\n label=\"Email Subject\"\n name=\"emailSubject\"\n initialValue={'Please sign this document'}\n rules={[{ required: true, message: \"Subject can't be empty\" }]}\n >\n <Input placeholder=\"Enter the subject\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Email Content\" name=\"emailBlurb\">\n <Input.TextArea rows={4} placeholder=\"Enter the email content\" />\n </Form.Item>\n </Col>\n </Row>\n <Divider orientation=\"left\">\n <b>Recipients</b>\n </Divider>\n <Row>\n <Col span={24}>\n <Form.List name=\"recipients\">\n {(fields, { add, remove }) => (\n <Row gutter={[12, 12]}>\n {fields.map(({ key, name, ...restField }, index) => (\n <React.Fragment key={`docusign_recipient_${index}`}>\n <Col span={10} className=\"ez-form-label\">\n <Form.Item\n {...restField}\n name={[name, 'fullname']}\n noStyle\n >\n <EZAutocompleteParty\n placeholder=\"Enter or search the name\"\n style={{ width: '100%' }}\n onSelect={(value: any, option: any) => {\n _onSelectName(value, option, index);\n }}\n />\n </Form.Item>\n </Col>\n <Col span={14}>\n <Form.Item\n {...restField}\n name={[name, 'email']}\n rules={[{ required: true, type: 'email' }]}\n noStyle\n >\n <Input\n style={{ width: '80%' }}\n placeholder=\"Email address\"\n type=\"email\"\n />\n </Form.Item>\n\n <Popconfirm\n placement=\"bottomRight\"\n title={`Delete this recipient?`}\n okText=\"Yes\"\n cancelText=\"Cancel\"\n onConfirm={() => remove(name)}\n overlayClassName=\"custom-contingency-remover-popup\"\n // showArrow={false}\n >\n <MinusCircleOutlined className=\"ml-3\" />\n </Popconfirm>\n </Col>\n </React.Fragment>\n ))}\n <Col span={24}>\n {' '}\n <Form.Item>\n <Button\n type=\"dashed\"\n onClick={() => add()}\n block\n icon={<PlusOutlined />}\n >\n Add new recipient\n </Button>\n </Form.Item>\n </Col>\n </Row>\n )}\n </Form.List>\n </Col>\n </Row>\n </>\n ) : currentStep === 1 ? (\n <Row>\n <Col span={24}>\n <Alert\n message=\"We are currently processing the selected document/file. And very important that:\"\n description={\n <>\n <div>\n <span>- Bigger file requires more time to process</span>\n <br />\n <span>\n - Non-PDF or Docx file also requires longer time to\n process and load\n </span>\n </div>\n </>\n }\n type=\"info\"\n showIcon\n />\n <Skeleton className=\"mt-4 mb-5\" active />\n </Col>\n </Row>\n ) : currentStep === 2 ? (\n <Row>\n <Col span={24}>\n {viewerURL ? (\n <iframe\n width={'100%'}\n height={'700px'}\n style={{ border: 'none' }}\n src={viewerURL}\n title=\"my-iframe\"\n ></iframe>\n ) : (\n ''\n )}\n </Col>\n </Row>\n ) : (\n ''\n )}\n\n <Row gutter={[16, 0]} className=\"mt-3\">\n <Col span={24} style={{ textAlign: 'right' }}>\n <Button\n type=\"default\"\n className=\"mr-3\"\n disabled={\n currentStep === 0 || currentStep === 1\n // ||\n // currentStep === steps.length - 1\n }\n onClick={() => _prevStep(currentStep)}\n >\n Back\n </Button>\n <Button\n disabled={currentStep === 1 || currentStep === steps.length - 1}\n type=\"primary\"\n onClick={() => _nextStep(currentStep)}\n >\n Next\n </Button>\n </Col>\n </Row>\n </Form>\n );\n};\n","import axios from 'axios';\nimport { getData } from '../apiUtil';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nlet notificationMessage: string | null = null;\n\nexport enum InterfacePort {\n 'google',\n 'microsoft',\n 'facebook',\n}\n\ninterface JWTData {\n jwt: string;\n}\nexport interface LoginResponse {\n status: number;\n success: boolean;\n message: string;\n data: JWTData;\n errors: string[];\n}\n\nexport const loginUser = (email: string, password: string, remember: boolean) => {\n return APIRequest({\n method: 'post',\n url: apiUrl + 'login',\n auth: getAuth(),\n data: {\n email,\n password,\n remember,\n },\n });\n};\n\nexport const loginInterface = (port: InterfacePort, token: string) => {\n return axios({\n method: 'post',\n url: `${apiUrl}login/${portToString(port)}`,\n auth: getAuth(),\n data: {\n access_token: token,\n },\n });\n};\n\nexport const getUserInfo = () => {\n return getData('me');\n // axios({\n // method: 'get',\n // url: `${apiUrl}me`,\n // headers: {\n // Authorization: 'Bearer ' + localStorage.getItem('jwt'),\n // },\n // });\n};\n\nexport const getAllRoles = () => {\n return axios({\n method: 'get',\n url: `${apiUrl}roles`,\n headers: {\n Authorization: 'Bearer ' + localStorage.getItem('jwt'),\n },\n });\n};\n\nexport const addRole = (role: string) => {\n return axios({\n method: 'post',\n url: `${apiUrl}me/assign-roles`,\n headers: {\n Authorization: 'Bearer ' + localStorage.getItem('jwt'),\n },\n data: {\n role_id: 4,\n role_name: role,\n },\n });\n};\n\nexport const signUpUser = (fullname: string, email: string, password: string) => {\n return axios({\n method: 'post',\n url: apiUrl + 'signup',\n auth: getAuth(),\n data: {\n fullname,\n email,\n password,\n },\n });\n};\n\nexport const signupInterface = (port: InterfacePort, token: string) => {\n return axios({\n method: 'post',\n url: `${apiUrl}signup/${portToString(port)}`,\n auth: getAuth(),\n data: {\n access_token: token,\n },\n });\n};\n\nexport const verifyEmail = (code: number) => {\n return axios({\n method: 'post',\n url: `${apiUrl}verify-email/`,\n headers: {\n Authorization: 'Bearer ' + localStorage.getItem('jwt'),\n },\n data: {\n code,\n },\n });\n};\n\nexport const resendVerifyEmail = () => {\n return axios({\n method: 'post',\n url: `${apiUrl}verify-email/`,\n auth: getAuth(),\n headers: {\n Authorization: 'Bearer ' + localStorage.getItem('jwt'),\n },\n });\n};\n\nexport const forgotPassword = (email: string) => {\n return APIRequest({\n method: 'post',\n url: `${apiUrl}forgot-password/`,\n auth: getAuth(),\n data: {\n email,\n },\n });\n};\n\nexport const resetPassword = (code: string, password: string) => {\n Mixpanel.track('auth.reset_password', {});\n\n return axios({\n method: 'post',\n url: `${apiUrl}reset-password/`,\n auth: getAuth(),\n data: {\n code,\n password,\n },\n });\n};\n\nexport const verifyResetPasswordCode = (code: string) => {\n return APIRequest({\n method: 'post',\n url: `${apiUrl}verify-reset-password-code/`,\n auth: getAuth(),\n data: {\n code,\n },\n });\n};\n\nexport const updatePassword = (formData: any) => {\n return axios({\n method: 'put',\n url: `${apiUrl}me/update-password/`,\n headers: {\n Authorization: 'Bearer ' + localStorage.getItem('jwt'),\n },\n data: formData,\n });\n};\n\nconst getAuth = () => {\n return {\n username: 'Ezcoordinator-Backend',\n password: '$2b$10$4MqmIdh9kwWJZP87AsmfUOBJXOYA7XBEPeD1S9yo1inw2DQTIjqB6',\n };\n};\n\nexport const portToString = (port: InterfacePort) => {\n switch (port) {\n case InterfacePort.google:\n return 'google';\n case InterfacePort.facebook:\n return 'facebook';\n case InterfacePort.microsoft:\n return 'microsoft';\n }\n};\n\nexport const getNotification = () => {\n setTimeout(() => (notificationMessage = null));\n return notificationMessage;\n};\n\nexport const setNotification = (msg: string) => {\n notificationMessage = msg;\n};\n\nexport const storeLoginPayload = (jwt: string, loginPayload: any) => {\n localStorage.setItem('jwt', jwt);\n\n if (loginPayload && loginPayload.account_id) {\n localStorage.setItem('account_id', loginPayload.account_id);\n localStorage.setItem('email', loginPayload.email);\n localStorage.setItem('parent_account_id', loginPayload.parent_account_id);\n localStorage.setItem('account_type', loginPayload.account_type);\n localStorage.setItem('user_type_id', loginPayload.user_type_id);\n localStorage.setItem('status', loginPayload.status);\n localStorage.setItem('date_posted', loginPayload.date_posted);\n }\n};\n\nexport const clearLocalStoragePayload = () => {\n localStorage.removeItem('jwt');\n localStorage.removeItem('account_id');\n localStorage.removeItem('email');\n localStorage.removeItem('parent_account_id');\n localStorage.removeItem('account_type');\n localStorage.removeItem('user_type_id');\n localStorage.removeItem('status');\n localStorage.removeItem('date_posted');\n localStorage.removeItem('onboarding_list');\n\n localStorage.removeItem('loginType');\n localStorage.removeItem('loginToken');\n};\n\nexport const fetchFileNames = (searchKey: string) => {\n return axios({\n method: 'get',\n url: `${apiUrl}filename?search=${searchKey}`,\n headers: {\n Authorization: 'Bearer ' + localStorage.getItem('jwt'),\n },\n });\n};\n\nexport const fetchAllTeamMembers = () => {\n return axios({\n method: 'get',\n url: `${apiUrl}members`,\n headers: {\n Authorization: 'Bearer ' + localStorage.getItem('jwt'),\n },\n });\n};\n\nexport const addTeamMember = (data: any) => {\n return axios({\n method: 'post',\n url: `${apiUrl}member/add`,\n headers: {\n Authorization: 'Bearer ' + localStorage.getItem('jwt'),\n },\n data,\n });\n};\n\nexport const updateTeamMember = (data: any) => {\n return axios({\n method: 'put',\n url: `${apiUrl}member/add`,\n headers: {\n Authorization: 'Bearer ' + localStorage.getItem('jwt'),\n },\n data,\n });\n};\n\nexport const deleteTeamMember = (id: number) => {\n return axios({\n method: 'delete',\n url: `${apiUrl}member/${id}`,\n headers: {\n Authorization: 'Bearer ' + localStorage.getItem('jwt'),\n },\n });\n};\n\nexport const updateUserProfile = (data: any) => {\n return axios({\n method: 'put',\n url: `${apiUrl}me/update-profile`,\n headers: {\n Authorization: 'Bearer ' + localStorage.getItem('jwt'),\n },\n data,\n });\n};\n\nexport const registerNewAccount = (payload: any) => {\n return axios({\n method: 'post',\n url: apiUrl + `signup`,\n auth: getAuth(),\n data: payload,\n }).then(resp => {\n Mixpanel.track('app.register_new_account', {\n email: payload.email,\n user_type_id: payload.user_type_id,\n promo_code: payload.promo_code,\n organization_size: payload.organization_size,\n posted_date: new Date(),\n });\n\n return resp;\n });\n};\n\nexport const checkAccountEmail = (email: string) => {\n return axios({\n method: 'post',\n url: apiUrl + `check-account-email`,\n auth: getAuth(),\n data: { email },\n });\n};\n\nexport const resendVerificationEmail = (email: string) => {\n return axios({\n method: 'post',\n url: apiUrl + `resend-verify-email`,\n auth: getAuth(),\n data: { email },\n });\n};\n\nexport const verifyConfirmationCode = (email: string, code: string) => {\n return axios({\n method: 'post',\n url: apiUrl + `verify-email`,\n auth: getAuth(),\n data: { email, code },\n });\n};\n\nexport const getMSOauthLoginURL = () => {\n Mixpanel.track('app.login_with_microsoft_is_clicked', {});\n\n return APIRequest(\n {\n method: 'post',\n url: apiUrl + `ms-oauth/login-url`,\n },\n false\n );\n};\n\nexport const exchangeMSOauthCodeForLogin = (code: string, state: string) => {\n return APIRequest(\n {\n method: 'post',\n url: apiUrl + `ms-oauth/authorize`,\n data: { code, state },\n },\n false\n );\n};\n\nexport const exchangeGoogleOauthCodeForLogin = (code: string) => {\n Mixpanel.track('app.swap_google_code_with_token_for_login', {});\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `google-oauth/authorize`,\n data: { code },\n });\n};\n","import qs from 'qs';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nexport const getSummaryData = (\n summaryType: string = 'by-transactions',\n date_start: string | undefined,\n date_end: string | undefined,\n browser_ts: number\n) => {\n if (date_start) {\n Mixpanel.track('app.summary_custom_date', {\n date_start,\n date_end,\n });\n }\n\n const params: string = qs.stringify({\n date_start,\n date_end,\n browser_ts: browser_ts || Date.now(), // browser timestamp for filtering the transaction by date\n });\n\n return APIRequest({\n method: 'get',\n url: apiUrl + `summary/${summaryType}?` + params,\n });\n};\n","// Core React libraries import\nimport React, { useEffect, useMemo, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport moment from 'moment';\nimport { Row, Col, Typography, Badge, DatePicker, Button } from 'antd';\nimport { ReloadOutlined } from '@ant-design/icons';\nimport { Gutter } from 'antd/lib/grid/row';\nimport { RangeValue } from 'rc-picker/es/interface';\n\n// EZ web-app types import\nimport { ITabContentProps } from 'types/webAppTab';\n// EZ web-app components import;\nimport { EZCurrencyFormat, EZOverlaySpinner } from 'components';\n// EZ web-app utils import\nimport { getSummaryData } from 'utils/ez_api/summaryAPIs';\n// EZ web-app pages import\n\n// Page level styles\nimport './Summary.scss';\nimport { STATUS_CATEGORY } from 'static/consts';\n\nconst { Title, Text } = Typography;\nconst { RangePicker } = DatePicker;\n\nconst rowGutter: [Gutter, Gutter] = [16, 16];\nconst rowGutterChild: [Gutter, Gutter] = [16, 16];\n\ntype SummaryStatItem = {\n category_id?: number;\n label: string;\n value: string;\n color?: string;\n};\n\ntype SummaryResponseData = {\n transactionStatsByStatus?: SummaryStatItem[];\n comissionStats?: SummaryStatItem[][];\n listingPrices?: SummaryStatItem[];\n closingTransactions?: SummaryStatItem[];\n expiringTransactions?: SummaryStatItem[];\n dueTasksStat?: SummaryStatItem[];\n};\n\nconst defaultTransactionSummaryData: SummaryResponseData = {\n transactionStatsByStatus: [],\n comissionStats: [\n [\n {\n label: 'Buyer(s)',\n value: '0',\n },\n {\n label: 'Commission',\n value: '0',\n },\n ],\n [\n {\n label: 'Listing(s)',\n value: '0',\n },\n {\n label: 'Commission',\n value: '0',\n },\n ],\n ],\n listingPrices: [\n {\n label: 'Avg. List Price',\n value: '0',\n },\n {\n label: 'Avg. Sales Price',\n value: '0',\n },\n ],\n closingTransactions: [\n {\n label: 'Closing This Month',\n value: '0',\n },\n {\n label: 'Closing in 30 Days',\n value: '0',\n },\n {\n label: 'Closing in 60 Days',\n value: '0',\n },\n {\n label: 'Closing in 90 Days',\n value: '0',\n },\n ],\n expiringTransactions: [\n {\n label: 'Expiring This Month',\n value: '0',\n },\n {\n label: 'Expiring in 30 Days',\n value: '0',\n },\n {\n label: 'Expiring in 60 Days',\n value: '0',\n },\n {\n label: 'Expiring in 90 Days',\n value: '0',\n },\n ],\n};\nconst defaultDueTasksSummaryData: SummaryResponseData = {\n dueTasksStat: [\n {\n label: `Due within Last 7 Days`,\n value: '0',\n },\n {\n label: 'Due Today',\n value: '0',\n },\n {\n label: 'Due This Week',\n value: '0',\n },\n {\n label: 'Due in Next 14 Days',\n value: '0',\n },\n ],\n};\n\nexport const SummaryTab: React.FC<ITabContentProps> = () => {\n const activeDate = moment();\n\n const [loadingTransactionStats, setLoadingTransactionStats] = useState<boolean>(false);\n const [loadingDuetasksStats, setLoadingDuetasksStats] = useState<boolean>(false);\n const [filterRangeDate, setFilterRangeDate] = useState<RangeValue<moment.Moment>>();\n const [summaryData, setSummaryData] = useState<SummaryResponseData>(\n defaultTransactionSummaryData\n );\n const [summaryDueTasksData, setSummaryDueTasksData] = useState<SummaryResponseData>(\n defaultDueTasksSummaryData\n );\n\n const _reloadSummaryData = (date_start?: string, date_end?: string) => {\n setLoadingTransactionStats(true);\n setLoadingDuetasksStats(true);\n getSummaryData('by-transactions', date_start, date_end, activeDate.unix())\n .then(resp => {\n const data = resp?.data as SummaryResponseData;\n\n const _summaryResponseData = {\n transactionStatsByStatus: data?.transactionStatsByStatus?.length\n ? data.transactionStatsByStatus\n : defaultTransactionSummaryData.transactionStatsByStatus,\n comissionStats: data?.comissionStats?.length\n ? data.comissionStats\n : defaultTransactionSummaryData.comissionStats,\n listingPrices: data?.listingPrices?.length\n ? data.listingPrices\n : defaultTransactionSummaryData.listingPrices,\n closingTransactions: data?.closingTransactions?.length\n ? data.closingTransactions\n : defaultTransactionSummaryData.closingTransactions,\n expiringTransactions: data?.expiringTransactions?.length\n ? data.expiringTransactions\n : defaultTransactionSummaryData.expiringTransactions,\n };\n\n setSummaryData({ ...summaryData, ..._summaryResponseData });\n })\n .finally(() => {\n setLoadingTransactionStats(false);\n });\n\n getSummaryData('by-duetasks', date_start, date_end, activeDate.unix())\n .then(resp => {\n const data = resp?.data as SummaryResponseData;\n\n const _summaryResponseData = {\n dueTasksStat: data?.dueTasksStat?.length\n ? data.dueTasksStat\n : defaultDueTasksSummaryData.dueTasksStat,\n };\n\n setSummaryDueTasksData({ ...summaryDueTasksData, ..._summaryResponseData });\n })\n .finally(() => {\n setLoadingDuetasksStats(false);\n });\n };\n\n const _changeDateRangeFilter = (newRange: RangeValue<moment.Moment>) => {\n setFilterRangeDate(newRange);\n\n _reloadSummaryData(\n newRange?.[0]?.format('YYYY-MM-DD'),\n newRange?.[1]?.format('YYYY-MM-DD')\n );\n };\n //Transaction Stats by Status Category\n const summaryBuyerCategory = useMemo(() => {\n return summaryData?.transactionStatsByStatus?.filter(\n tempData => tempData.category_id === 1\n );\n }, [summaryData]);\n\n const summaryListingsCategory = useMemo(() => {\n return summaryData?.transactionStatsByStatus?.filter(\n tempData => tempData.category_id === 2\n );\n }, [summaryData]);\n\n const summaryRentalCategory = useMemo(() => {\n return summaryData?.transactionStatsByStatus?.filter(\n tempData => tempData.category_id === 3\n );\n }, [summaryData]);\n\n useEffect(() => {\n _reloadSummaryData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <Row gutter={rowGutter} className=\"ez-tab-summary\">\n <Col span={24}>\n <Row className=\"\" justify=\"center\">\n <Col\n span={12}\n className=\"\"\n style={{ textAlign: 'left', paddingTop: '5px' }}\n ></Col>\n <Col span={12} className=\"\" style={{ textAlign: 'right' }}>\n <div>\n <Button\n className=\"ml-2 ez-action-btn\"\n icon={<ReloadOutlined />}\n size=\"small\"\n onClick={() => _reloadSummaryData()}\n >\n Reload\n </Button>\n </div>\n </Col>\n </Row>\n </Col>\n <Col span={24}>\n <Row className=\"ez-sub-content-wrapper\" gutter={[0, 16]}>\n {loadingTransactionStats && <EZOverlaySpinner />}\n <Col span={24}>\n <Row className=\"\" justify=\"center\">\n <Col\n span={12}\n className=\"\"\n style={{ textAlign: 'left', paddingTop: '5px' }}\n >\n <Text type=\"secondary\">\n <span>Showing summary for: </span>\n <span>\n {filterRangeDate\n ? `${filterRangeDate[0]?.format(\n 'MMM DD, YYYY'\n )} to ${filterRangeDate[1]?.format(\n 'MMM DD, YYYY'\n )}`\n : 'All Time'}\n </span>\n </Text>\n </Col>\n <Col span={12} className=\"\" style={{ textAlign: 'right' }}>\n <div>\n <RangePicker\n format=\"MMM DD, YYYY\"\n onChange={newRange => _changeDateRangeFilter(newRange)}\n />\n </div>\n </Col>\n </Row>\n </Col>\n <Col span={24} className=\"\">\n <Title level={5} underline>\n <span>Summary by Transaction Status</span>\n </Title>\n </Col>\n <Col span={24}>\n <Row gutter={rowGutterChild} className=\"\">\n {STATUS_CATEGORY.map((val: string, idx: number) => {\n const summaryBasedCategory =\n idx === 0\n ? summaryListingsCategory\n : idx === 1\n ? summaryBuyerCategory\n : summaryRentalCategory;\n return (\n <Col xl={8} lg={8} md={12} sm={24} className=\"\">\n <span className=\"summary-category-title\">{val}</span>\n <Row gutter={rowGutterChild} className=\"\">\n {summaryBasedCategory?.map((status, idx) => (\n <Col\n key={`status-stats-${idx}`}\n span={8}\n className=\" \"\n style={{ textAlign: 'center' }}\n >\n <div className=\"bg-grey summary-status-wrapper\">\n <div className=\"summary-status-number\">\n {status.value}\n </div>\n <div className=\"summary-status-label\">\n <Badge\n color={status.color}\n text={status.label}\n />\n </div>\n </div>\n </Col>\n ))}\n </Row>\n </Col>\n );\n })}\n </Row>\n </Col>\n <Col span={24}>\n <Row gutter={rowGutterChild}>\n <Col span={12}>\n <Row gutter={rowGutterChild} className=\"mt-3\">\n <Col span={24} className=\"\">\n <Title level={5} underline>\n Listing and Rental Prices\n </Title>\n </Col>\n <Col span={24} className=\"\">\n <Row gutter={rowGutterChild}>\n {summaryData?.listingPrices?.length\n ? summaryData.listingPrices.map(\n (listingPriceItem, idx) => (\n <Col\n span={12}\n className=\" \"\n style={{\n textAlign: 'center',\n }}\n key={`listingPrices-${idx}`}\n >\n <div className=\"bg-grey bg-rounded\">\n <Row\n gutter={rowGutterChild}\n justify=\"space-between\"\n >\n <Col span={24}>\n <div className=\" summary-status-wrapper\">\n <div className=\"summary-status-number\">\n <EZCurrencyFormat\n ifEmptyText={\n '$ 0'\n }\n value={\n listingPriceItem?.value\n }\n thousandSeparator={\n true\n }\n prefix={\n '$ '\n }\n displayType={\n 'text'\n }\n />\n </div>\n <div className=\"summary-status-label\">\n {\n listingPriceItem?.label\n }\n </div>\n </div>\n </Col>\n </Row>\n </div>\n </Col>\n )\n )\n : ''}\n </Row>\n </Col>\n </Row>\n </Col>\n <Col span={12}>\n <Row gutter={rowGutterChild} className=\"mt-3\">\n <Col span={24} className=\"\">\n <Title level={5} underline>\n Commission\n </Title>\n </Col>\n <Col span={24} className=\"\">\n <Row gutter={rowGutterChild}>\n {summaryData?.comissionStats?.length\n ? summaryData.comissionStats.map(\n (comissionItem, idx) => (\n <Col\n span={12}\n className=\" \"\n style={{\n textAlign: 'center',\n }}\n key={`comissionStats-${idx}`}\n >\n <div className=\"bg-grey bg-rounded\">\n <Row\n gutter={rowGutterChild}\n justify=\"space-between\"\n >\n <Col span={9}>\n <div className=\" summary-status-wrapper\">\n <div className=\"summary-status-number\">\n {\n comissionItem?.[0]\n .value\n }\n </div>\n <div className=\"summary-status-label\">\n {\n comissionItem?.[0]\n .label\n }\n </div>\n </div>\n </Col>\n <Col span={15}>\n <div className=\" summary-status-wrapper\">\n <div className=\"summary-status-number\">\n <EZCurrencyFormat\n ifEmptyText={\n '$ 0'\n }\n value={\n comissionItem?.[1]\n .value\n }\n thousandSeparator={\n true\n }\n prefix={\n '$ '\n }\n displayType={\n 'text'\n }\n />\n </div>\n <div className=\"summary-status-label\">\n {\n comissionItem?.[1]\n .label\n }\n </div>\n </div>\n </Col>\n </Row>\n </div>\n </Col>\n )\n )\n : ''}\n </Row>\n </Col>\n </Row>\n </Col>\n </Row>\n </Col>\n </Row>\n </Col>\n <Col span={24}>\n <Row gutter={rowGutter}>\n <Col span={24}>\n <Row gutter={rowGutter} className=\"\">\n <Col span={8}>\n <div className=\"ez-sub-content-wrapper\">\n <Row gutter={rowGutterChild} className=\"\">\n <Col span={24} className=\"\">\n <div className=\"\">\n <Title level={5} underline>\n Closing Transactions\n </Title>\n </div>\n </Col>\n <Col span={24} className=\"\">\n {loadingTransactionStats && <EZOverlaySpinner />}\n <Row gutter={rowGutterChild} justify=\"center\">\n {summaryData?.closingTransactions?.length\n ? summaryData.closingTransactions.map(\n (closingTransactionItem, idx) => (\n <Col\n span={24}\n key={`ClosingTransactions-${idx}`}\n >\n <div className=\"bg-grey bg-rounded\">\n <Row\n gutter={\n rowGutterChild\n }\n justify=\"center\"\n >\n <Col\n span={9}\n style={{\n textAlign:\n 'right',\n }}\n >\n <div className=\" summary-status-wrapper\">\n <div className=\"summary-status-number\">\n {\n closingTransactionItem.value\n }\n </div>\n </div>\n </Col>\n <Col span={15}>\n <div className=\" summary-status-wrapper\">\n <div\n className=\"summary-status-label\"\n style={{\n marginTop:\n '4px',\n textAlign:\n 'left',\n }}\n >\n {\n closingTransactionItem.label\n }\n </div>\n </div>\n </Col>\n </Row>\n </div>\n </Col>\n )\n )\n : ''}\n </Row>\n </Col>\n </Row>\n </div>\n </Col>\n <Col span={8}>\n <div className=\"ez-sub-content-wrapper\">\n <Row gutter={rowGutterChild} className=\"\">\n <Col span={24} className=\"\">\n <div className=\"\">\n <Title level={5} underline>\n Expiring Transactions\n </Title>\n </div>\n </Col>\n <Col span={24} className=\"\">\n {loadingTransactionStats && <EZOverlaySpinner />}\n <Row gutter={rowGutterChild} justify=\"center\">\n {summaryData?.expiringTransactions?.length\n ? summaryData.expiringTransactions.map(\n (expiringTransactionItem, idx) => (\n <Col\n span={24}\n key={`expiringTransactions-${idx}`}\n >\n <div className=\"bg-grey bg-rounded\">\n <Row\n gutter={\n rowGutterChild\n }\n justify=\"center\"\n >\n <Col\n span={9}\n style={{\n textAlign:\n 'right',\n }}\n >\n <div className=\" summary-status-wrapper\">\n <div className=\"summary-status-number\">\n {\n expiringTransactionItem.value\n }\n </div>\n </div>\n </Col>\n <Col span={15}>\n <div className=\" summary-status-wrapper\">\n <div\n className=\"summary-status-label\"\n style={{\n marginTop:\n '4px',\n textAlign:\n 'left',\n }}\n >\n {\n expiringTransactionItem.label\n }\n </div>\n </div>\n </Col>\n </Row>\n </div>\n </Col>\n )\n )\n : ''}\n </Row>\n </Col>\n </Row>\n </div>\n </Col>\n <Col span={8}>\n <div className=\"ez-sub-content-wrapper\">\n <Row gutter={rowGutterChild}>\n <Col span={24} className=\"\">\n <div className=\"\">\n <Title level={5} underline>\n Due Tasks\n </Title>\n </div>\n </Col>\n <Col span={24} className=\"\">\n {loadingDuetasksStats && <EZOverlaySpinner />}\n <Row gutter={rowGutterChild} justify=\"center\">\n {summaryDueTasksData?.dueTasksStat?.length\n ? summaryDueTasksData.dueTasksStat.map(\n (dueTaskStatItem, idx) => (\n <Col\n span={24}\n key={`dueTasksStat-${idx}`}\n >\n <div className=\"bg-grey bg-rounded\">\n <Row\n gutter={\n rowGutterChild\n }\n justify=\"center\"\n >\n <Col\n span={9}\n style={{\n textAlign:\n 'right',\n }}\n >\n <div className=\" summary-status-wrapper\">\n <div className=\"summary-status-number\">\n {\n dueTaskStatItem.value\n }\n </div>\n </div>\n </Col>\n <Col span={15}>\n <div className=\" summary-status-wrapper\">\n <div\n className=\"summary-status-label\"\n style={{\n marginTop:\n '4px',\n textAlign:\n 'left',\n }}\n >\n {\n dueTaskStatItem.label\n }\n </div>\n </div>\n </Col>\n </Row>\n </div>\n </Col>\n )\n )\n : ''}\n </Row>\n </Col>\n </Row>\n </div>\n </Col>\n </Row>\n </Col>\n </Row>\n </Col>\n </Row>\n </>\n );\n};\n\nexport default SummaryTab;\n","import React from 'react';\n\nimport { AppPageTasks, TASK_EMBEDDED_TYPE } from 'components/appPage/tasks';\nimport { ITabContentProps } from 'types/webAppTab';\n\nimport './Task.scss';\n\nconst TaskListTab: React.FC<ITabContentProps> = () => {\n return (\n <>\n <div className=\"ez-tab-tasks\">\n <AppPageTasks manualReloadCount={1} pageType={TASK_EMBEDDED_TYPE.MAIN_MENU} />\n </div>\n </>\n );\n};\n\nexport default TaskListTab;\n","// Core React libraries import\nimport React, { useContext, useEffect, useRef, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n CheckCircleOutlined,\n CloudServerOutlined,\n ContainerOutlined,\n EyeInvisibleOutlined,\n EyeOutlined,\n FlagTwoTone,\n UndoOutlined,\n} from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\nimport {\n BackTop,\n Badge,\n Button,\n Col,\n DatePicker,\n Divider,\n Form,\n Input,\n InputRef,\n Row,\n Select,\n Tabs,\n Tag,\n Tooltip,\n Typography,\n} from 'antd';\nimport { debounce, toNumber } from 'lodash';\nimport moment from 'moment';\nimport { RangeValue } from 'rc-picker/es/interface';\n\n// EZ web-app types import\nimport { DEBOUNCE_DURATION, ITablePaginationConfig } from 'types/base';\nimport {\n ACTIVE_STATUS_IDS,\n ITransactionListDataType,\n TransactionListQuickStatType,\n} from 'types/transaction';\nimport { ITabContentProps, TAB_CATEGORY, TransactionTabIcon } from 'types/webAppTab';\n// EZ web-app components import\nimport {\n EZCurrencyFormat,\n EZDateFormat,\n EZInputNumber,\n EZPopupable,\n EZSelectFlag,\n EZSelectParty,\n EZSelectPropertyType,\n EZSelectSaleType,\n EZSelectStatus,\n EZTable,\n} from 'components';\nimport { IOnChangeCallbackProps, ITableQueryParams } from 'components/table/EZProTable';\n// EZ web-app utils import\nimport {\n getAllTransactions,\n getQuickStatByContractIDs,\n getTransactionQuickStats,\n} from 'utils/ez_api/transactionAPIs';\n// EZ web-app pages import\nimport ViewDetailTransaction from './ViewDetailTransaction';\n\nimport { AppPageNotes, NOTE_EMBEDDED_TYPE } from 'components/appPage/notes';\nimport { AppPageTasks, TASK_EMBEDDED_TYPE } from 'components/appPage/tasks';\nimport { HomeContext } from 'context/EZContext';\nimport { Mixpanel } from 'utils/mixPanelUtil';\nimport { showMessage } from 'utils/notificationUtil';\nimport { updateOnboardingStep } from 'utils/onboardingUtil';\nimport { getTransactionStatusCategory, isRentalProperty } from 'utils/webAppUtil';\nimport './Transaction.scss';\n\nconst { Text, Title } = Typography;\nconst { Search } = Input;\nconst { Option, OptGroup } = Select;\nconst { TabPane } = Tabs;\n\nlet LastScrollYPosition = 0;\n\nconst transactionDateTypes = [\n { label: 'Closing Date', value: 'close_date' },\n { label: 'Contract Date', value: 'contract_date' },\n { label: 'Contract Effective Date', value: 'effective_date' },\n { label: 'Inspection Contingency', value: 'inspection_contingency_date' },\n { label: 'Financing Contingency', value: 'financing_contingency_date' },\n\n { label: 'Application Date', value: 'application_date' },\n { label: 'Lease Signed Date', value: 'lease_signed_date' },\n { label: 'Lease Start Date', value: 'lease_start_date' },\n { label: 'Lease End Date', value: 'lease_end_date' },\n { label: 'Move In Date', value: 'move_in_date' },\n];\n\nconst _initialQueryFormValue = {\n searchKeyword: '',\n status_id: [],\n order_by: 'contract_id',\n order_direction: 'desc',\n\n transaction_date_type: 'contract_date',\n transaction_date_range: null,\n property_types: [],\n sale_types: [],\n\n price_type: 'salesprice',\n price_type_minimum: '',\n price_type_maximum: '',\n flag_types: [],\n\n buyers: [],\n sellers: [],\n buyer_agents: [],\n seller_agents: [],\n};\n\nasync function _fetchData(EZTableQueryParams: string): Promise<any> {\n return getAllTransactions('full', EZTableQueryParams).then(result => result);\n}\n\nconst TransactionList: React.FC<ITabContentProps> = ({\n appTabs,\n addTab,\n setActiveTabKey,\n isCurrentTabActive,\n data,\n}) => {\n const [form] = Form.useForm();\n const searchKeywordElement = useRef<InputRef>(null);\n const [isShiftKeyPressed, setIsShiftKeyPressed] = useState<boolean>(false);\n const [toggleAdvanceFilter, setToggleAdvanceFilter] = useState<boolean>(false);\n const HomeCtx = useContext(HomeContext);\n\n // const [toggleAllRows, setToggleAllRows] = useState<boolean>(false);\n // const [transactionIDs, setTransactionIDs] = useState<number[]>([]);\n const [expandedRecordIDs, setExpandedRecordIDs] = useState<React.Key[]>([]);\n\n const [pagination, setPagination] = useState<ITablePaginationConfig>({});\n const [queryParams, setQueryParams] = useState<ITableQueryParams>({\n searchKeyword: '',\n orderParams: [],\n whereParams: {},\n whereFilterParams: {},\n });\n\n const [transactionByPriceMin, setTransactionByPriceMin] = useState<number>(0);\n\n const _onChangeCallback: IOnChangeCallbackProps = (\n data: ITransactionListDataType[],\n pagination\n ) => {\n if (data?.length) {\n } else {\n setExpandedRecordIDs([]);\n }\n\n if (data?.length) {\n const tempData = [...data];\n\n getQuickStatByContractIDs(data.map(item => item.contract_id)).then(\n respQuickStatRecords => {\n const quickStatRecords: TransactionListQuickStatType[] =\n respQuickStatRecords.data;\n if (quickStatRecords?.length) {\n // for (let index = 0; index < quickStatRecords.length; index++) {\n quickStatRecords.forEach(record => {\n const contract_id = record.contract_id;\n // const record = quickStatRecords[index];\n\n // const originalRecord = tempData.find(\n // i => i.contract_id === record.contract_id\n // );\n\n // if (originalRecord) {\n // originalRecord.complete_task_count = record.complete_task_count;\n // originalRecord.total_task_count =\n // record.complete_task_count + record.incomplete_task_count;\n // originalRecord.complete_doc_count = record.complete_doc_count;\n // originalRecord.total_doc_count =\n // record.complete_doc_count + record.incomplete_doc_count;\n // originalRecord.total_note_count =\n // record.email_msg_count + record.contract_note_count;\n // }\n\n const completeTaskCount = document.getElementById(\n `tList-contact_id-complete-task-count-${contract_id}`\n );\n const totalTaskCount = document.getElementById(\n `tList-contact_id-total-task-count-${contract_id}`\n );\n\n if (completeTaskCount) {\n completeTaskCount.innerHTML = record.complete_task_count.toString();\n }\n\n if (totalTaskCount) {\n totalTaskCount.innerHTML = (\n record.complete_task_count + record.incomplete_task_count\n ).toString();\n }\n\n const completeDocCount = document.getElementById(\n `tList-contact_id-complete-doc-count-${contract_id}`\n );\n const totalDocCount = document.getElementById(\n `tList-contact_id-total-doc-count-${contract_id}`\n );\n if (completeDocCount) {\n completeDocCount.innerHTML = record.complete_doc_count.toString();\n }\n\n if (totalDocCount) {\n totalDocCount.innerHTML = (\n record.complete_doc_count + record.incomplete_doc_count\n ).toString();\n }\n\n const totalNoteCount = document.getElementById(\n `tList-contact_id-total-note-count-${contract_id}`\n );\n if (totalNoteCount) {\n totalNoteCount.innerHTML = (\n record.email_msg_count + record.contract_note_count\n ).toString();\n }\n });\n // }\n }\n }\n );\n }\n\n setPagination(pagination);\n };\n\n const _onClick = (record: ITransactionListDataType, subTabKey?: string) => {\n HomeCtx.setActiveTabByButton(true);\n const tabTitle = record.address || \"Address isn't set\";\n\n const activeTransactionRecordTab = appTabs.find(\n tab =>\n tab.recordId === record.contract_id && tab.tabCategory === TAB_CATEGORY.TRANSACTION\n );\n\n //check whether the selected record has already an active tab\n if (activeTransactionRecordTab) {\n if (isShiftKeyPressed === false) setActiveTabKey(activeTransactionRecordTab.key);\n if (isShiftKeyPressed) {\n showMessage('info', `You have already opened a tab for this address: ${tabTitle}!`);\n }\n } else {\n addTab(\n {\n title: tabTitle,\n key: '-', // this will be overridden by the key generator function inside this addTab function\n tabIcon: <TransactionTabIcon />,\n content: ViewDetailTransaction,\n closeable: true,\n tooltip: record.address,\n\n tabCategory: TAB_CATEGORY.TRANSACTION,\n isMainMenu: false,\n recordId: record.contract_id,\n\n data: { ...record, subTabKey },\n },\n isShiftKeyPressed ? false : true\n );\n if (isShiftKeyPressed) {\n showMessage('success', `New tab has been created for address: ${tabTitle}!`);\n }\n }\n };\n\n const _columns: ProColumns<ITransactionListDataType>[] = [\n {\n title: 'Property',\n dataIndex: 'address',\n width: '300px',\n fixed: 'left',\n render: (_, record) => (\n <Row justify=\"space-between\" align=\"middle\">\n <Col span={24} style={{ paddingLeft: '6px' }}>\n <div>\n <div className=\"action\" onClick={() => _onClick(record)}>\n <Title underline level={5}>\n {record.address || <i>Address isn't set</i>}\n </Title>\n </div>\n <div>\n {record.city || <i>City isn't set</i>},{' '}\n {record.state || <i>State isn't set</i>},{' '}\n {record.zip || <i>ZIP isn't set</i>}\n </div>\n <div>ESCROW #: {record.escrow || '-'}</div>\n <div className=\"mt-1\">\n {getTransactionStatusCategory(record.status_id)}\n <Badge className=\"mr-1 ml-2\" color={'black'} />\n <Button\n className={`ez-btn-contract-status mr-1 ez-tr-status-${record.status_id}`}\n type=\"text\"\n shape=\"round\"\n style={{\n backgroundColor: `${record.contract_status?.color}`,\n color: 'white',\n }}\n size=\"small\"\n onClick={() => _onClick(record)}\n >{`${record.contract_status?.status}`}</Button>\n </div>\n <div className=\"mt-2\">\n <Tooltip title={`Number of tasks completed`} placement=\"bottomLeft\">\n <Tag\n className={`mr-2 tag-rounded cursor-pointer ${\n !record.total_task_count ? 'has-no-record' : ''\n }`}\n onClick={() => _onClick(record, 'ez_detail_tasks')}\n id={`tag-tList-contact_id-task-count-${record.contract_id}`}\n >\n <CheckCircleOutlined className=\"\" />\n <span\n id={`tList-contact_id-complete-task-count-${record.contract_id}`}\n >\n {record.complete_task_count || 0}\n </span>\n / \n <span\n id={`tList-contact_id-total-task-count-${record.contract_id}`}\n >\n {record.total_task_count || 0}\n </span>\n </Tag>\n </Tooltip>\n <Tooltip\n title={`Number of documents marked as complete`}\n placement=\"bottomLeft\"\n >\n <Tag\n className={`mr-2 tag-rounded cursor-pointer ${\n !record.total_doc_count ? 'has-no-record' : ''\n }`}\n onClick={() => _onClick(record, 'ez_detail_documents')}\n id={`tag-tList-contact_id-doc-count-${record.contract_id}`}\n >\n <CloudServerOutlined />\n <span\n id={`tList-contact_id-complete-doc-count-${record.contract_id}`}\n >\n {record.complete_doc_count || 0}\n </span>\n / \n <span\n id={`tList-contact_id-total-doc-count-${record.contract_id}`}\n >\n {record.total_doc_count || 0}\n </span>\n </Tag>\n </Tooltip>\n <Tooltip title={`Number of notes`} placement=\"bottomLeft\">\n <Tag\n className={`mr-2 tag-rounded cursor-pointer ${\n !record.total_note_count ? 'has-no-record' : ''\n }`}\n onClick={() => _onClick(record, 'ez_detail_notes')}\n id={`tag-tList-contact_id-total-note-count-${record.contract_id}`}\n >\n <ContainerOutlined />\n <span\n id={`tList-contact_id-total-note-count-${record.contract_id}`}\n >\n {record.total_note_count || 0}\n </span>\n </Tag>\n </Tooltip>\n {record.flag_id !== 1 && record.contract_flag?.flag_color ? (\n <Tooltip\n placement=\"right\"\n title={record.contract_flag.flag}\n color={record.contract_flag.flag_color}\n >\n <Button\n type=\"text\"\n className=\" \"\n icon={\n <FlagTwoTone\n twoToneColor={record.contract_flag.flag_color}\n />\n }\n size=\"middle\"\n onClick={() => _onClick(record)}\n />\n </Tooltip>\n ) : (\n ''\n )}\n </div>\n </div>\n </Col>\n </Row>\n ),\n },\n {\n title: 'Added By',\n dataIndex: 'added_by',\n width: '210px',\n render: (_, record) => (\n <Row justify=\"space-between\" align=\"middle\">\n <Col span={24}>\n <div>{record.account?.fullname || '-'}</div>\n <div>\n On{' '}\n {record.date_posted\n ? moment(record.date_posted).format('MMM Do, YYYY hh:mma')\n : '-'}\n </div>\n </Col>\n </Row>\n ),\n },\n {\n title: 'Dates',\n dataIndex: 'dates',\n width: '300px',\n render: (_, record) =>\n !isRentalProperty(record.status_id) ? (\n <Row justify=\"space-between\" align=\"middle\">\n <Col span={14}>Closing Date</Col>\n <Col span={10}>\n : \n <EZDateFormat noTimezone value={record.contract_date?.close_date} />\n </Col>\n <Col span={14}>Contract Date</Col>\n <Col span={10}>\n : \n <EZDateFormat noTimezone value={record.contract_date?.contract_date} />\n </Col>\n <Col span={14}>Contract Effective Date</Col>\n <Col span={10}>\n : \n <EZDateFormat noTimezone value={record.contract_date?.effective_date} />\n </Col>\n <Col span={14}>Inspection Contingency</Col>\n <Col span={10}>\n : \n <EZDateFormat\n noTimezone\n value={record.contract_date?.inspection_contingency_date}\n />\n </Col>\n <Col span={14}>Financing Contingency</Col>\n <Col span={10}>\n : \n <EZDateFormat\n noTimezone\n value={record.contract_date?.financing_contingency_date}\n />\n </Col>\n </Row>\n ) : (\n <Row justify=\"space-between\" align=\"middle\">\n <Col span={14}>Application Date</Col>\n <Col span={10}>\n : \n <EZDateFormat\n noTimezone\n value={record.contract_date?.application_date}\n />\n </Col>\n <Col span={14}>Lease Signed Date</Col>\n <Col span={10}>\n : \n <EZDateFormat\n noTimezone\n value={record.contract_date?.lease_signed_date}\n />\n </Col>\n <Col span={14}>Lease Start</Col>\n <Col span={10}>\n : \n <EZDateFormat\n noTimezone\n value={record.contract_date?.lease_start_date}\n />\n </Col>\n <Col span={14}>Lease End</Col>\n <Col span={10}>\n : \n <EZDateFormat noTimezone value={record.contract_date?.lease_end_date} />\n </Col>\n <Col span={14}>Move In Date</Col>\n <Col span={10}>\n : \n <EZDateFormat noTimezone value={record.contract_date?.move_in_date} />\n </Col>\n </Row>\n ),\n },\n {\n title: 'Prices',\n dataIndex: 'prices',\n width: '250px',\n render: (_, record) =>\n !isRentalProperty(record.status_id) ? (\n <Row justify=\"space-between\" align=\"middle\">\n <Col span={14}>List price</Col>\n <Col span={10}>\n : \n <EZCurrencyFormat\n value={record.contract_price?.listprice}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={14}>Sale price</Col>\n <Col span={10}>\n : \n <EZCurrencyFormat\n value={record.contract_price?.salesprice}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={14}>Closing Cost Credit</Col>\n <Col span={10}>\n : \n <EZCurrencyFormat\n value={record.contract_price?.cccredit}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={14}>Deposit</Col>\n <Col span={10}>\n : \n <EZCurrencyFormat\n value={record.contract_price?.deposits}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n </Row>\n ) : (\n <Row justify=\"space-between\" align=\"middle\">\n <Col span={14}>Marketed price</Col>\n <Col span={10}>\n : \n <EZCurrencyFormat\n value={record.contract_price?.marketedprice}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={14}>Rental price</Col>\n <Col span={10}>\n : \n <EZCurrencyFormat\n value={record.contract_price?.rentalprice}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n <Col span={14}>Credit</Col>\n <Col span={10}>\n : \n <EZCurrencyFormat\n value={record.contract_price?.credits}\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n </Col>\n </Row>\n ),\n },\n {\n title: 'Parties',\n dataIndex: 'parties',\n width: '600px',\n render: (_, record) =>\n !isRentalProperty(record.status_id) ? (\n <Row justify=\"start\" align=\"top\" gutter={[16, 8]}>\n <Col span={4}>Buyer(s) :</Col>\n <Col span={8}>\n {record.contract_buyers && record.contract_buyers.length ? (\n <ol>\n <>\n {record.contract_buyers.map((party, idx) => (\n <li key={`contract_buyers-${idx}`}>\n <EZPopupable\n emptyLabel=\"Name\"\n data={{\n title: party.buyer_name,\n\n fullname: party.buyer_name,\n phone: party.telephone,\n email: party.email,\n }}\n />\n </li>\n ))}\n </>\n </ol>\n ) : (\n <span>-</span>\n )}\n </Col>\n <Col span={4}>Seller(s) :</Col>\n <Col span={8}>\n {record.contract_sellers && record.contract_sellers.length ? (\n <ol>\n <>\n {record.contract_sellers.map((party, idx) => (\n <li key={`contract_sellers-${idx}`}>\n <EZPopupable\n emptyLabel=\"Name\"\n data={{\n title: party.seller_name,\n\n fullname: party.seller_name,\n phone: party.telephone,\n email: party.email,\n }}\n />\n </li>\n ))}\n </>\n </ol>\n ) : (\n <span>-</span>\n )}\n </Col>\n </Row>\n ) : (\n <Row justify=\"start\" align=\"top\" gutter={[16, 8]}>\n <Col span={4}>Tenant(s) :</Col>\n <Col span={8}>\n {record.contract_tenants?.length ? (\n <ol>\n <>\n {record.contract_tenants.map((party, idx) => (\n <li key={`contract_tenants-${idx}`}>\n <EZPopupable\n emptyLabel=\"Name\"\n data={{\n title: party.tenant_name,\n\n fullname: party.tenant_name,\n phone: party.telephone,\n email: party.email,\n }}\n />\n </li>\n ))}\n </>\n </ol>\n ) : (\n <span>-</span>\n )}\n </Col>\n <Col span={4}>Landlord(s) :</Col>\n <Col span={8}>\n {record.contract_landlords?.length ? (\n <ol>\n <>\n {record.contract_landlords.map((party, idx) => (\n <li key={`contract_landlords-${idx}`}>\n <EZPopupable\n emptyLabel=\"Name\"\n data={{\n title: party.landlord_name,\n\n fullname: party.landlord_name,\n phone: party.telephone,\n email: party.email,\n }}\n />\n </li>\n ))}\n </>\n </ol>\n ) : (\n <span>-</span>\n )}\n </Col>\n </Row>\n ),\n },\n {\n title: 'Agents',\n dataIndex: 'agents',\n width: '600px',\n render: (_, record) =>\n !isRentalProperty(record.status_id) ? (\n <Row justify=\"start\" align=\"top\">\n <Col span={4}>Buyer's agent(s) :</Col>\n <Col span={8}>\n {record.contract_buyer_agents && record.contract_buyer_agents.length ? (\n <ol>\n <>\n {record.contract_buyer_agents.map((party, idx) => (\n <li key={`contract_buyer_agents-${idx}`}>\n <EZPopupable\n showCommission\n emptyLabel=\"Name\"\n data={{\n title: party.agent_name,\n\n fullname: party.agent_name,\n phone: party.telephone,\n email: party.email,\n\n commission_base:\n record.contract_price?.salesprice,\n commission_rate: party.commission_rate,\n commission_amount: party.commission_amount,\n }}\n />\n </li>\n ))}\n </>\n </ol>\n ) : (\n <span>-</span>\n )}\n </Col>\n <Col span={4}>Seller's agent(s) :</Col>\n <Col span={8}>\n {record.contract_seller_agents &&\n record.contract_seller_agents.length ? (\n <ol>\n <>\n {record.contract_seller_agents.map((party, idx) => (\n <li key={`contract_seller_agents-${idx}`}>\n <EZPopupable\n showCommission\n emptyLabel=\"Name\"\n data={{\n title: party.broker_name,\n\n fullname: party.broker_name,\n phone: party.telephone,\n email: party.email,\n\n commission_base:\n record.contract_price?.salesprice,\n commission_rate: party.commission_rate,\n commission_amount: party.commission_amount,\n }}\n />\n </li>\n ))}\n </>\n </ol>\n ) : (\n <span>-</span>\n )}\n </Col>\n </Row>\n ) : (\n <Row justify=\"start\" align=\"top\">\n <Col span={4}>\n Referral <br />\n Source :\n </Col>\n <Col span={8}>\n {record.contract_referral_sources?.length ? (\n <ol>\n <>\n {record.contract_referral_sources.map((party, idx) => (\n <li key={`contract_referral_sources-${idx}`}>\n <EZPopupable\n showCommission\n emptyLabel=\"Name\"\n data={{\n title: party.referral_source_name,\n\n fullname: party.referral_source_name,\n phone: party.telephone,\n email: party.email,\n\n commission_base:\n record.contract_price?.marketedprice,\n commission_rate: party.commission_rate,\n commission_amount: party.commission_amount,\n }}\n />\n </li>\n ))}\n </>\n </ol>\n ) : (\n <span>-</span>\n )}\n </Col>\n <Col span={4}>Leasing agent(s) :</Col>\n <Col span={8}>\n {record.contract_leasing_agents?.length ? (\n <ol>\n <>\n {record.contract_leasing_agents.map((party, idx) => (\n <li key={`contract_leasing_agents-${idx}`}>\n <EZPopupable\n emptyLabel=\"Name\"\n showCommission\n data={{\n title: party.leasing_agent_name,\n\n fullname: party.leasing_agent_name,\n phone: party.telephone,\n email: party.email,\n\n commission_base:\n record.contract_price?.marketedprice,\n commission_rate: party.commission_rate,\n commission_amount: party.commission_amount,\n }}\n />\n </li>\n ))}\n </>\n </ol>\n ) : (\n <span>-</span>\n )}\n </Col>\n </Row>\n ),\n },\n ];\n\n const _setTransactionDateFilterParam = () => {\n const currentWhereFilterParams = { ...queryParams.whereFilterParams };\n const transaction_date_type =\n form.getFieldValue('transaction_date_type') ||\n _initialQueryFormValue.transaction_date_type;\n const transaction_date_range: RangeValue<moment.Moment> =\n form.getFieldValue('transaction_date_range') ||\n _initialQueryFormValue.transaction_date_range;\n\n transactionDateTypes.forEach(element => {\n delete currentWhereFilterParams[`>::<$contract_date.${element.value}$`];\n });\n\n if (transaction_date_range && transaction_date_range[0]) {\n currentWhereFilterParams[`>::<$contract_date.${transaction_date_type}$`] = [\n transaction_date_range[0]?.format('YYYY-MM-DD'),\n transaction_date_range[1]?.format('YYYY-MM-DD'),\n ];\n }\n setQueryParams({\n ...queryParams,\n whereFilterParams: currentWhereFilterParams,\n });\n };\n\n const _setTransactionPriceFilterParam = () => {\n const currentWhereFilterParams = { ...queryParams.whereFilterParams };\n const price_type = form.getFieldValue('price_type') || _initialQueryFormValue.price_type;\n const price_type_maximum = toNumber(form.getFieldValue('price_type_maximum')) || 0;\n const price_type_minimum = toNumber(form.getFieldValue('price_type_minimum')) || 0;\n\n const _removeExistingParams = () => {\n if (\n currentWhereFilterParams &&\n currentWhereFilterParams['>::<$contract_price.salesprice$']\n ) {\n delete currentWhereFilterParams['>::<$contract_price.salesprice$'];\n }\n if (\n currentWhereFilterParams &&\n currentWhereFilterParams['>::<$contract_price.listprice$']\n ) {\n delete currentWhereFilterParams['>::<$contract_price.listprice$'];\n }\n };\n\n if (price_type_maximum > price_type_minimum) {\n _removeExistingParams();\n\n currentWhereFilterParams[`>::<$contract_price.${price_type}$`] = [\n price_type_minimum,\n price_type_maximum,\n ];\n setQueryParams({\n ...queryParams,\n whereFilterParams: currentWhereFilterParams,\n });\n } else {\n _removeExistingParams();\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: currentWhereFilterParams,\n });\n }\n };\n\n const _updateTableQuery = (elmName: string, value: string | number | any[]) => {\n let useAdvanceFilterOptions = false;\n\n switch (elmName) {\n case 'filter.keyword':\n setQueryParams({ ...queryParams, searchKeyword: value.toString() });\n break;\n\n case 'order.column':\n setQueryParams({\n ...queryParams,\n orderParams: [\n [\n value?.toString() || 'contract_id',\n queryParams.orderParams[0]?.[1] || 'desc',\n ],\n ],\n });\n break;\n\n case 'order.direction':\n setQueryParams({\n ...queryParams,\n orderParams: [\n [\n queryParams.orderParams[0]?.[0] || 'contract_id',\n value?.toString() || 'desc',\n ],\n ],\n });\n break;\n\n case 'filter.status_id':\n const values = value as any[];\n const whereFilterParams = { ...queryParams.whereFilterParams };\n const filter: Record<string, any> = {\n status_id: [],\n };\n\n for (const val of values) {\n switch (val) {\n case 'all_active_statuses':\n filter.status_id.push(...ACTIVE_STATUS_IDS);\n break;\n case 'archived_transaction':\n filter.is_archived = true;\n break;\n case 'deleted_transaction':\n filter.active = false;\n break;\n default:\n filter.status_id.push(val);\n break;\n }\n }\n\n if (!values.includes('archived_transaction')) {\n delete whereFilterParams.is_archived;\n }\n\n if (!values.includes('deleted_transaction')) {\n delete whereFilterParams.active;\n }\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: {\n ...whereFilterParams,\n ...filter,\n },\n });\n break;\n\n case 'filter.transaction_date_type': // form.getFieldValue('transaction_date_type')\n useAdvanceFilterOptions = true;\n\n _setTransactionDateFilterParam();\n break;\n case 'filter.transaction_date_range': // form.getFieldValue('transaction_date_range')\n useAdvanceFilterOptions = true;\n\n _setTransactionDateFilterParam();\n break;\n case 'filter.property_types':\n useAdvanceFilterOptions = true;\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: { ...queryParams.whereFilterParams, type_id: value },\n });\n break;\n case 'filter.sale_types':\n useAdvanceFilterOptions = true;\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: { ...queryParams.whereFilterParams, sale_types_id: value },\n });\n break;\n\n case 'filter.price_type': // form.getFieldValue('price_type')\n useAdvanceFilterOptions = true;\n\n _setTransactionPriceFilterParam();\n break;\n case 'filter.price_type_minimum': // form.getFieldValue('price_type_minimum')\n useAdvanceFilterOptions = true;\n\n if (value === null) {\n form.setFieldValue('price_type_maximum', null);\n } else {\n setTransactionByPriceMin(toNumber(value));\n }\n _setTransactionPriceFilterParam();\n\n break;\n case 'filter.price_type_maximum': // form.getFieldValue('price_type_maximum')\n useAdvanceFilterOptions = true;\n\n _setTransactionPriceFilterParam();\n break;\n case 'filter.flag_types':\n useAdvanceFilterOptions = true;\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: { ...queryParams.whereFilterParams, flag_id: value },\n });\n break;\n\n case 'filter.seller_agents':\n useAdvanceFilterOptions = true;\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: {\n ...queryParams.whereFilterParams,\n '$contract_seller_agents.broker_name$': value,\n },\n });\n break;\n case 'filter.buyer_agents':\n useAdvanceFilterOptions = true;\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: {\n ...queryParams.whereFilterParams,\n '$contract_buyer_agents.agent_name$': value,\n },\n });\n break;\n case 'filter.sellers':\n useAdvanceFilterOptions = true;\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: {\n ...queryParams.whereFilterParams,\n '$contract_sellers.seller_name$': value,\n },\n });\n break;\n case 'filter.buyers':\n useAdvanceFilterOptions = true;\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: {\n ...queryParams.whereFilterParams,\n '$contract_buyers.buyer_name$': value,\n },\n });\n break;\n\n //////\n\n case 'filter.tenants':\n useAdvanceFilterOptions = true;\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: {\n ...queryParams.whereFilterParams,\n '$contract_tenants.tenant_name$': value,\n },\n });\n break;\n case 'filter.landlords':\n useAdvanceFilterOptions = true;\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: {\n ...queryParams.whereFilterParams,\n '$contract_landlords.landlord_name$': value,\n },\n });\n break;\n case 'filter.leasing_agents':\n useAdvanceFilterOptions = true;\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: {\n ...queryParams.whereFilterParams,\n '$contract_leasing_agents.leasing_agent_name$': value,\n },\n });\n break;\n case 'filter.referral_sources':\n useAdvanceFilterOptions = true;\n\n setQueryParams({\n ...queryParams,\n whereFilterParams: {\n ...queryParams.whereFilterParams,\n '$contract_referral_sources.referral_source_name$': value,\n },\n });\n break;\n\n default:\n break;\n }\n\n // update onboarding step to completed\n updateOnboardingStep('use_advanced_search', HomeCtx.refetchOnboardingList);\n Mixpanel.track('app.search_transaction_list', { elmName, value, useAdvanceFilterOptions });\n };\n\n const _triggerUpdateTableQueryDelayed = debounce((elmName, value) => {\n _updateTableQuery(elmName, value);\n }, DEBOUNCE_DURATION);\n\n const _generatePaginationLabel = () => {\n const current = pagination?.current || 0;\n const pageSize = pagination?.pageSize || 0;\n const total = pagination?.total || 0;\n\n const filteredFrom = pagination.totalFiltered\n ? `(filtered from ${pagination.totalFiltered} total entries)`\n : '';\n\n if (!total) {\n return `0 item ${filteredFrom}`;\n }\n\n if (current === 1 && total < current * pageSize) {\n return `${total} items ${filteredFrom}`;\n }\n\n return pagination\n ? `${1 + (current - 1) * pageSize}-${Math.min(\n total,\n current * pageSize\n )} of ${total} items ${filteredFrom}`\n : '';\n };\n\n const _resetFilterOptions = () => {\n form.resetFields();\n setQueryParams({\n searchKeyword: '',\n orderParams: [],\n whereParams: {},\n whereFilterParams: {},\n });\n };\n\n const _checkShiftKeyIsPressed: React.KeyboardEventHandler<HTMLDivElement> = e => {\n if (e.altKey || e.metaKey) setIsShiftKeyPressed(true);\n };\n\n const ExpandedRowElement: React.FC<{ contract_id: number }> = ({ contract_id }) => {\n const _reloadTransactionStat = (contract_id: number) => {\n getTransactionQuickStats(contract_id).then(resp => {\n if (resp.data) {\n const completeTaskCount = document.getElementById(\n `tList-contact_id-complete-task-count-${contract_id}`\n );\n const totalTaskCount = document.getElementById(\n `tList-contact_id-total-task-count-${contract_id}`\n );\n\n if (completeTaskCount) {\n completeTaskCount.innerHTML = resp.data?.complete_task_count;\n }\n\n if (totalTaskCount) {\n totalTaskCount.innerHTML =\n resp.data?.complete_task_count + resp.data?.incomplete_task_count || 0;\n }\n }\n });\n };\n\n useEffect(() => {\n _reloadTransactionStat(contract_id);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [contract_id]);\n\n return (\n <div>\n <Tabs type=\"card\">\n <TabPane\n // tab={<>Tasks List {generateTaskBadge(transactionQuickStat)}</>}\n tab={<>Tasks List</>}\n key=\"1\"\n >\n <AppPageTasks\n pageType={TASK_EMBEDDED_TYPE.TRANSACTION_LIST}\n contractID={contract_id}\n manualReloadCount={1}\n reloadTransactionStat={_reloadTransactionStat}\n />\n </TabPane>\n <TabPane tab=\"Notes\" key=\"2\" className=\"p-3\">\n <AppPageNotes\n pageType={NOTE_EMBEDDED_TYPE.TRANSACTION_LIST}\n contractID={contract_id}\n manualReloadCount={1}\n />\n </TabPane>\n </Tabs>\n </div>\n );\n };\n\n useEffect(() => {\n if (isCurrentTabActive === false) {\n LastScrollYPosition = window.scrollY;\n } else {\n window.scrollTo(0, LastScrollYPosition);\n }\n\n if (isCurrentTabActive && data?.autoFocusEnabled) {\n searchKeywordElement?.current?.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isCurrentTabActive]);\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"ez-tab-transaction-list\">\n <div className=\"mb-5 ez-sub-content-wrapper\">\n <Form form={form} initialValues={_initialQueryFormValue}>\n <Row justify=\"space-between\" align=\"middle\" gutter={[16, 12]}>\n <Col\n span={10}\n xs={24}\n md={24}\n lg={10}\n xl={12}\n style={{ textAlign: 'left' }}\n >\n <span className=\"mr-2\">\n <Text strong>Shows </Text>\n </span>\n <span>\n <Text>{_generatePaginationLabel()}</Text>\n </span>\n </Col>\n <Col\n span={14}\n xs={24}\n md={24}\n lg={14}\n xl={12}\n style={{ textAlign: 'right' }}\n >\n <Button\n className=\"mr-3 ez-action-btn\"\n icon={<UndoOutlined />}\n // size=\"small\"\n onClick={() => _resetFilterOptions()}\n >\n Reset filter\n </Button>\n <Button\n className=\"ez-action-btn\"\n icon={\n toggleAdvanceFilter ? <EyeInvisibleOutlined /> : <EyeOutlined />\n }\n // size=\"small\"\n onClick={() => {\n setToggleAdvanceFilter(!toggleAdvanceFilter);\n }}\n >\n {toggleAdvanceFilter ? 'Hide' : 'Show'} advance filter options\n </Button>\n </Col>\n <Col span={10}>\n <Form.Item name=\"searchKeyword\" noStyle>\n <Search\n allowClear\n autoFocus\n placeholder=\"Enter the keyword(s)\"\n style={{ width: '100%' }}\n size=\"middle\"\n onChange={e =>\n _triggerUpdateTableQueryDelayed(\n 'filter.keyword',\n e.target.value\n )\n }\n ref={searchKeywordElement}\n />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item name=\"status_id\" noStyle>\n <EZSelectStatus\n showAllActiveStatusesOpt\n showArchivedFilterOpt\n showDeletedFilterOpt\n maxTagCount={'responsive'}\n mode=\"multiple\"\n optionFilterProp=\"label\"\n className=\"mr-3\"\n placeholder={\n <span>\n <Text>Transaction Status: </Text>\n <Text strong>All Statuses</Text>\n </span>\n }\n onChange={value =>\n _triggerUpdateTableQueryDelayed('filter.status_id', value)\n }\n />\n </Form.Item>\n </Col>\n <Col span={8}>\n <Input.Group compact>\n <Form.Item name=\"order_by\" noStyle>\n <Select\n style={{ width: '65%' }}\n listHeight={400}\n // defaultValue={'contract_id'}\n onChange={value => _updateTableQuery('order.column', value)}\n >\n <Option value=\"contract_id\">\n <span>\n <Text>Sort By: </Text>\n <Text strong>Added Date</Text>\n </span>\n </Option>\n <OptGroup label=\"Important Dates\">\n <Option value=\"close_date\">\n <span>\n <Text>Sort By: </Text>\n <Text strong>Closing Date</Text>\n </span>\n </Option>\n <Option value=\"contract_date\">\n <span>\n <Text>Sort By: </Text>\n <Text strong>Contract Date</Text>\n </span>\n </Option>\n <Option value=\"inspection_contingency_date\">\n <span>\n <Text>Sort By: </Text>\n <Text strong>Inspection Contingency</Text>\n </span>\n </Option>\n <Option value=\"financing_contingency_date\">\n <span>\n <Text>Sort By: </Text>\n <Text strong>Financing Contingency</Text>\n </span>\n </Option>\n </OptGroup>\n <OptGroup label=\"Property Information and Status\">\n <Option value=\"address\">\n <span>\n <Text>Sort By: </Text>\n <Text strong>Address</Text>\n </span>\n </Option>\n <Option value=\"city\">\n <span>\n <Text>Sort By: </Text>\n <Text strong>City</Text>\n </span>\n </Option>\n <Option value=\"state\">\n <span>\n <Text>Sort By: </Text>\n <Text strong>State</Text>\n </span>\n </Option>\n <Option value=\"status_id\">\n <span>\n <Text>Sort By: </Text>\n <Text strong>Transaction Status</Text>\n </span>\n </Option>\n <Option value=\"flag_id\">\n <span>\n <Text>Sort By: </Text>\n <Text strong>Transaction Flag</Text>\n </span>\n </Option>\n </OptGroup>\n <OptGroup label=\"Property Price\">\n <Option value=\"salesprice\">\n <span>\n <Text>Sort By: </Text>\n <Text strong>Sale Price</Text>\n </span>\n </Option>\n <Option value=\"listprice\">\n <span>\n <Text>Sort By: </Text>\n <Text strong>Listing Price</Text>\n </span>\n </Option>\n <Option value=\"marketedprice\">\n <span>\n <Text>Sort By: </Text>\n <Text strong>Marketed Price</Text>\n </span>\n </Option>\n <Option value=\"rentalprice\">\n <span>\n <Text>Sort By: </Text>\n <Text strong>Rental Price</Text>\n </span>\n </Option>\n </OptGroup>\n </Select>\n </Form.Item>\n <Form.Item name=\"order_direction\" noStyle>\n <Select\n style={{ width: '35%' }}\n // defaultValue={'desc'}\n onChange={value =>\n _updateTableQuery('order.direction', value)\n }\n >\n <Option value=\"asc\">Ascending</Option>\n <Option value=\"desc\">Descending</Option>\n </Select>\n </Form.Item>\n </Input.Group>\n </Col>\n </Row>\n <Divider\n style={{ display: `${toggleAdvanceFilter ? 'block' : 'none'}` }}\n orientation=\"left\"\n ></Divider>\n <Row\n style={toggleAdvanceFilter === false ? { display: 'none' } : undefined}\n justify=\"space-between\"\n align=\"middle\"\n gutter={[16, 12]}\n >\n <Col span={10}>\n <Input.Group compact>\n <Form.Item name=\"transaction_date_type\" noStyle>\n <Select\n style={{ width: '41%' }}\n placeholder=\"Choose Transaction Date\"\n onChange={value =>\n _updateTableQuery('filter.transaction_date_type', value)\n }\n options={transactionDateTypes}\n ></Select>\n </Form.Item>\n <Form.Item name=\"transaction_date_range\" noStyle>\n <DatePicker.RangePicker\n style={{ width: '59%' }}\n format=\"MMM DD, YYYY\"\n onChange={value =>\n _updateTableQuery('filter.transaction_date_range', [\n value?.[0]?.toString(),\n value?.[1]?.toString(),\n ])\n }\n />\n </Form.Item>\n </Input.Group>\n </Col>\n <Col span={6}>\n <Form.Item name=\"property_types\" noStyle>\n <EZSelectPropertyType\n maxTagCount={'responsive'}\n mode=\"multiple\"\n placeholder={\n <span>\n <Text>Property Type: </Text>\n <Text strong>All Types</Text>\n </span>\n }\n onChange={(value: string) =>\n _triggerUpdateTableQueryDelayed(\n 'filter.property_types',\n value\n )\n }\n />\n </Form.Item>\n </Col>\n <Col span={8}>\n <Form.Item name=\"sale_types\" noStyle>\n <EZSelectSaleType\n maxTagCount=\"responsive\"\n mode=\"multiple\"\n placeholder={\n <span>\n <Text>Sale Type: </Text>\n <Text strong>All Types</Text>\n </span>\n }\n onChange={(value: string) =>\n _triggerUpdateTableQueryDelayed('filter.sale_types', value)\n }\n />\n </Form.Item>\n </Col>\n <Col span={10}>\n <Input.Group compact>\n <Form.Item name=\"price_type\" noStyle>\n <Select\n style={{ width: '41%' }}\n // defaultValue=\"salesprice\"\n placeholder=\"Filter By Price\"\n onChange={value =>\n _updateTableQuery('filter.price_type', value)\n }\n >\n <Option value=\"salesprice\">Sale Price</Option>\n <Option value=\"listprice\">List Price</Option>\n <Option value=\"marketedprice\">Marketed Price</Option>\n <Option value=\"rentalprice\">Rental Price</Option>\n </Select>\n </Form.Item>\n <Form.Item name=\"price_type_minimum\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n style={{ width: '26%', textAlign: 'center' }}\n placeholder=\"Minimum\"\n value={transactionByPriceMin}\n onChange={value =>\n _triggerUpdateTableQueryDelayed(\n 'filter.price_type_minimum',\n value\n )\n }\n />\n </Form.Item>\n <Input\n className=\"site-input-split\"\n style={{\n width: '7%',\n borderLeft: 0,\n borderRight: 0,\n pointerEvents: 'none',\n }}\n placeholder=\"~\"\n disabled\n />\n <Form.Item name=\"price_type_maximum\" noStyle>\n <EZInputNumber\n numberType=\"currency\"\n className=\"site-input-right\"\n style={{ width: '26%', textAlign: 'center' }}\n placeholder=\"Maximum\"\n min={transactionByPriceMin}\n onChange={value =>\n _triggerUpdateTableQueryDelayed(\n 'filter.price_type_maximum',\n value\n )\n }\n />\n </Form.Item>\n </Input.Group>\n </Col>\n <Col span={14}>\n <Form.Item name=\"flag_types\" noStyle>\n <EZSelectFlag\n maxTagCount=\"responsive\"\n mode=\"multiple\"\n className=\"mr-3\"\n placeholder={\n <span>\n <Text>Flag: </Text>\n <Text strong>All Flags</Text>\n </span>\n }\n onChange={value =>\n _triggerUpdateTableQueryDelayed('filter.flag_types', value)\n }\n />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item name=\"buyers\" noStyle>\n <EZSelectParty\n style={{ width: '100%' }}\n maxTagCount={'responsive'}\n mode=\"multiple\"\n partyType=\"contract_buyers\"\n optionFilterProp=\"label\"\n className=\"mr-3\"\n showSearch\n showArrow\n allowClear\n placeholderOnFocus={\n <span>\n <Text>Search by name or email </Text>\n </span>\n }\n defaultPlaceholder={\n <span>\n <Text>Buyer: </Text>\n <Text strong>All Buyers</Text>\n </span>\n }\n optionLabelProp=\"selectedLabel\"\n onChange={value =>\n _triggerUpdateTableQueryDelayed('filter.buyers', value)\n }\n />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item name=\"buyer_agents\" noStyle>\n <EZSelectParty\n style={{ width: '100%' }}\n maxTagCount={'responsive'}\n mode=\"multiple\"\n partyType=\"contract_buyer_agents\"\n optionFilterProp=\"label\"\n className=\"mr-3\"\n showSearch\n showArrow\n allowClear\n placeholderOnFocus={\n <span>\n <Text>Search by name or email </Text>\n </span>\n }\n defaultPlaceholder={\n <span>\n <Text>Buyer's Agent: </Text>\n <Text strong>All Agents</Text>\n </span>\n }\n optionLabelProp=\"selectedLabel\"\n onChange={value =>\n _triggerUpdateTableQueryDelayed(\n 'filter.buyer_agents',\n value\n )\n }\n />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item name=\"sellers\" noStyle>\n <EZSelectParty\n style={{ width: '100%' }}\n maxTagCount={'responsive'}\n mode=\"multiple\"\n partyType=\"contract_sellers\"\n optionFilterProp=\"label\"\n className=\"mr-3\"\n showSearch\n showArrow\n allowClear\n placeholderOnFocus={\n <span>\n <Text>Search by name or email </Text>\n </span>\n }\n defaultPlaceholder={\n <span>\n <Text>Seller: </Text>\n <Text strong>All Sellers</Text>\n </span>\n }\n optionLabelProp=\"selectedLabel\"\n onChange={value =>\n _triggerUpdateTableQueryDelayed('filter.sellers', value)\n }\n />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item name=\"seller_agents\" noStyle>\n <EZSelectParty\n style={{ width: '100%' }}\n maxTagCount={'responsive'}\n mode=\"multiple\"\n partyType=\"contract_seller_agents\"\n optionFilterProp=\"label\"\n className=\"mr-3\"\n showSearch\n showArrow\n allowClear\n placeholderOnFocus={\n <span>\n <Text>Search by name or email </Text>\n </span>\n }\n defaultPlaceholder={\n <span>\n <Text>Seller's Agent: </Text>\n <Text strong>All Agents</Text>\n </span>\n }\n optionLabelProp=\"selectedLabel\"\n onChange={value =>\n _triggerUpdateTableQueryDelayed(\n 'filter.seller_agents',\n value\n )\n }\n />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item name=\"tenants\" noStyle>\n <EZSelectParty\n style={{ width: '100%' }}\n maxTagCount={'responsive'}\n mode=\"multiple\"\n partyType=\"contract_tenants\"\n optionFilterProp=\"label\"\n className=\"mr-3\"\n showSearch\n showArrow\n allowClear\n placeholderOnFocus={\n <span>\n <Text>Search by name or email </Text>\n </span>\n }\n defaultPlaceholder={\n <span>\n <Text>Tenant: </Text>\n <Text strong>All Tenants</Text>\n </span>\n }\n optionLabelProp=\"selectedLabel\"\n onChange={value =>\n _triggerUpdateTableQueryDelayed('filter.tenants', value)\n }\n />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item name=\"referral_sources\" noStyle>\n <EZSelectParty\n style={{ width: '100%' }}\n maxTagCount={'responsive'}\n mode=\"multiple\"\n partyType=\"contract_referral_sources\"\n optionFilterProp=\"label\"\n className=\"mr-3\"\n showSearch\n showArrow\n allowClear\n placeholderOnFocus={\n <span>\n <Text>Search by name or email </Text>\n </span>\n }\n defaultPlaceholder={\n <span>\n <Text>Referral Source: </Text>\n <Text strong>All Sources</Text>\n </span>\n }\n optionLabelProp=\"selectedLabel\"\n onChange={value =>\n _triggerUpdateTableQueryDelayed(\n 'filter.referral_sources',\n value\n )\n }\n />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item name=\"landlords\" noStyle>\n <EZSelectParty\n style={{ width: '100%' }}\n maxTagCount={'responsive'}\n mode=\"multiple\"\n partyType=\"contract_landlords\"\n optionFilterProp=\"label\"\n className=\"mr-3\"\n showSearch\n showArrow\n allowClear\n placeholderOnFocus={\n <span>\n <Text>Search by name or email </Text>\n </span>\n }\n defaultPlaceholder={\n <span>\n <Text>Landlord: </Text>\n <Text strong>All Landlords</Text>\n </span>\n }\n optionLabelProp=\"selectedLabel\"\n onChange={value =>\n _triggerUpdateTableQueryDelayed('filter.landlords', value)\n }\n />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item name=\"leasing_agents\" noStyle>\n <EZSelectParty\n style={{ width: '100%' }}\n maxTagCount={'responsive'}\n mode=\"multiple\"\n partyType=\"contract_leasing_agents\"\n optionFilterProp=\"label\"\n className=\"mr-3\"\n showSearch\n showArrow\n allowClear\n placeholderOnFocus={\n <span>\n <Text>Search by name or email </Text>\n </span>\n }\n defaultPlaceholder={\n <span>\n <Text>Leasing Agent: </Text>\n <Text strong>All Agents</Text>\n </span>\n }\n optionLabelProp=\"selectedLabel\"\n onChange={value =>\n _triggerUpdateTableQueryDelayed(\n 'filter.leasing_agents',\n value\n )\n }\n />\n </Form.Item>\n </Col>\n </Row>\n </Form>\n </div>\n <div\n tabIndex={-1}\n onKeyUp={() => setIsShiftKeyPressed(false)}\n onKeyDown={e => _checkShiftKeyIsPressed(e)}\n >\n <EZTable\n // expandable={{\n // expandedRowRender: (record: ITransactionListDataType, _, __, expand) => {\n // return expand ? (\n // <ExpandedRowElement contract_id={record.contract_id} />\n // ) : (\n // <></>\n // );\n // },\n // defaultExpandedRowKeys: expandedRecordIDs,\n // expandedRowKeys: expandedRecordIDs,\n // onExpand: (expanded, record: ITransactionListDataType) => {\n // if (expanded) {\n // setExpandedRecordIDs([record.contract_id]);\n // } else {\n // setExpandedRecordIDs([\n // ...expandedRecordIDs.filter(id => id !== record.contract_id),\n // ]);\n // }\n // },\n // }}\n pagination={{\n pageSize: 20,\n }}\n columns={_columns}\n rowKey=\"contract_id\"\n fetchData={_fetchData}\n onChangeCallback={_onChangeCallback}\n size=\"large\"\n scroll={{ x: 1300 }}\n queryParams={queryParams}\n // toolBarComponents={[\n // <Button\n // key={`toolBarComponents-1-trans-list`}\n // className=\"mr-1 ez-action-btn\"\n // icon={toggleAllRows ? <MinusSquareOutlined /> : <PlusSquareOutlined />}\n // // size=\"small\"\n // onClick={() => _toggleAllRows(!toggleAllRows)}\n // >\n // {toggleAllRows ? 'Collapse' : 'Expand'} all rows\n // </Button>,\n // ]}\n disableNativeSearch\n />\n </div>\n <BackTop />\n </div>\n );\n};\n\nexport default TransactionList;\n","import type { TablePaginationConfig } from 'antd/es/table';\nimport { PaginationProps } from 'antd';\nimport { RouteProps } from 'react-router-dom';\n\nexport interface ISelectOption {\n label: string;\n value: string;\n}\n\nexport interface ISelectOptionGroup {\n label: string;\n options?: ISelectOption[];\n}\n\nexport type ITablePaginationConfig = TablePaginationConfig & {\n totalFiltered?: number;\n};\n\nexport type IPaginationConfig = PaginationProps & {\n totalFiltered?: number;\n};\n\nexport const DEBOUNCE_DURATION = 1000; // 1000 ms\n\nexport type DataTableQueryType = {\n page?: number;\n pageSize?: number;\n keyword?: string;\n order?: any;\n where?: any;\n whereFilter?: any;\n};\n\nexport type EZRoute = {\n isPublic: boolean;\n} & RouteProps;\n","// Core React libraries import\nimport React, { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Form, Select, Popover, Typography, Alert, Button } from 'antd';\nimport { CloseOutlined } from '@ant-design/icons';\nimport FullCalendar, {\n EventApi,\n EventClickArg,\n EventContentArg,\n EventInput,\n} from '@fullcalendar/react';\nimport dayGridPlugin from '@fullcalendar/daygrid';\nimport timeGridPlugin from '@fullcalendar/timegrid';\nimport interactionPlugin from '@fullcalendar/interaction';\nimport debounce from 'lodash/debounce';\n\n// EZ web-app import\n\n// EZ web-app utils import\nimport { getCalendarEvents } from 'utils/ez_api/calendarAPIs';\nimport { EZDateFormat, EZOverlaySpinner, EZSelectTransaction } from 'components';\nimport { HomeContext } from 'context/EZContext';\n\n// Page level styles\nimport './Calendar.scss';\nimport { TAB_CATEGORY } from 'types/webAppTab';\n\ntype SelectedEventType = EventApi & {\n eventTitle?: string;\n address?: string;\n contract_id?: string;\n};\n\nconst { Option, OptGroup } = Select;\nconst { Text } = Typography;\n\nexport default function CalendarTab(props: any) {\n const HomeCtx = useContext(HomeContext);\n\n const CalendarState = {\n weekendsVisible: true,\n currentEvents: [],\n };\n\n const [SelectedEvent, setSelectedEvent] = useState<SelectedEventType>();\n const [Events, setEvents] = useState<EventInput[]>([]);\n const [CalendarDuration, setCalendarDuration] = useState<{\n start_date: string;\n end_date: string;\n }>();\n const [TransactionFilter, setTransactionFilter] = useState<number[]>([]);\n const [ColumnTypeFilter, setColumnTypeFilter] = useState<string>('');\n\n const [IsLoadingCalendarEvents, setIsLoadingCalendarEvents] = useState<boolean>(false);\n // const [IsLoadingEventDetail, setIsLoadingEventDetail] = useState<boolean>(false);\n\n const handleEventClick = (clickInfo: EventClickArg) => {\n const event = clickInfo.event;\n const payload: SelectedEventType = clickInfo.event;\n\n const titleSplit = event.title.split(':');\n\n payload.eventTitle = titleSplit.length ? titleSplit[1] : event.title;\n payload.contract_id = event.extendedProps?.contract_id;\n payload.address = titleSplit.length ? titleSplit[0] : event.title;\n\n setSelectedEvent(payload);\n };\n\n const _openTransactionDetailTab = (event: EventApi, contract_id?: string, address?: string) => {\n if (HomeCtx.openTransactionDetailTab) {\n HomeCtx.setActiveTabByButton(true);\n HomeCtx.openTransactionDetailTab(\n contract_id || -1,\n address,\n {\n subTabKey: String(SelectedEvent?.extendedProps?.ez_table).includes('todolist')\n ? 'ez_detail_tasks'\n : undefined,\n },\n TAB_CATEGORY.CALENDAR\n );\n }\n };\n\n const _reloadCalendarEvents = (start_date: string, end_date: string) => {\n const events: any[] = [];\n\n setIsLoadingCalendarEvents(true);\n\n Promise.all([\n getCalendarEvents({\n where: {\n '>::<StartTime': [start_date, end_date],\n contract_id: TransactionFilter.length ? TransactionFilter : undefined,\n ez_table_column_name: ColumnTypeFilter\n ? ColumnTypeFilter.replace('task.', '').replace('date.', '')\n : undefined,\n },\n pageSize: 5000,\n }),\n ])\n .then(respArray => {\n respArray.forEach(resp => {\n if (resp && resp.data) {\n events.push(...resp.data);\n }\n });\n })\n .finally(() => {\n setEvents(events);\n setIsLoadingCalendarEvents(false);\n });\n };\n\n const _triggerUpdateCalendarEventsDelayed = debounce(\n (filterType: string, value: string | number | number[]) => {\n switch (filterType) {\n case 'filter.transaction':\n setTransactionFilter(value as number[]);\n break;\n case 'filter.column_type':\n setColumnTypeFilter(value as string);\n break;\n\n default:\n break;\n }\n },\n 500\n );\n\n const EventPopover: React.FC<{\n event: EventApi;\n SetPopoverVisible: React.Dispatch<React.SetStateAction<boolean>>;\n }> = ({ event, SetPopoverVisible }) => {\n const titleSplit = event.title.split(':');\n\n const eventTitle = titleSplit.length ? titleSplit[1] : event.title;\n const contract_id = event.extendedProps?.contract_id;\n const address = titleSplit.length ? titleSplit[0] : event.title;\n\n return (\n <div>\n <Row>\n <Col span={24}>\n {/* {IsLoadingEventDetail && <EZOverlaySpinner />} */}\n <Form layout=\"vertical\">\n <Form.Item label=\"Title:\">{eventTitle || '-'}</Form.Item>\n <Form.Item label=\"Listing Address:\">\n <span>\n {address || '-'} \n <Button\n title=\"Open in a new tab\"\n // icon={<ArrowsAltOutlined />}\n size=\"small\"\n className=\"ml-2 ez-action-btn\"\n onClick={() => {\n SetPopoverVisible(true);\n _openTransactionDetailTab(event, contract_id, address);\n return false;\n }}\n >\n Open\n </Button>\n </span>\n </Form.Item>\n <Form.Item\n label={\n String(event.extendedProps?.ez_table).includes('todolist')\n ? 'Due Date:'\n : 'Date'\n }\n >\n <EZDateFormat\n value={event.start?.toString()}\n format=\"MMM Do, YYYY\"\n />\n </Form.Item>\n </Form>\n </Col>\n </Row>\n </div>\n );\n };\n\n const CalendarEvent: React.FC<{\n event: EventApi;\n }> = ({ event }) => {\n // const [PopoverVisible, SetPopoverVisible] = useState<boolean>(false);\n\n return <div>{event.title}</div>;\n // return (\n // <Popover\n // trigger={['click']}\n // content={<EventPopover event={event} SetPopoverVisible={SetPopoverVisible} />}\n // title=\"Event Detail\"\n // placement=\"left\"\n // // getPopupContainer={node =>\n // // node.parentElement?.parentElement?.parentElement || document.body\n // // }\n // visible={PopoverVisible}\n // onVisibleChange={visible => {\n // SetPopoverVisible(visible);\n // }}\n // overlayClassName=\"ez-calendar-popover\"\n // >\n // <div>{event.title}</div>\n // </Popover>\n // );\n };\n\n const renderEventContent = function (eventContent: EventContentArg) {\n return (\n <>\n {/* <CalendarEvent event={eventContent.event} /> */}\n <div>{eventContent.event.title}</div>\n </>\n );\n };\n\n useEffect(() => {\n if (CalendarDuration && CalendarDuration.start_date) {\n _reloadCalendarEvents(CalendarDuration.start_date, CalendarDuration.end_date);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [CalendarDuration, TransactionFilter, ColumnTypeFilter]);\n\n return (\n <div className=\"ez-tab-calendar\">\n <div className=\"mb-5 ez-sub-content-wrapper\">\n <Form>\n <Row gutter={16}>\n <Col span={12}>\n <Form.Item name=\"transaction_filter\" noStyle>\n <EZSelectTransaction\n onChange={value =>\n _triggerUpdateCalendarEventsDelayed(\n 'filter.transaction',\n value\n )\n }\n />\n </Form.Item>\n </Col>\n {/* <Col span={6}>\n <Form.Item name=\"status_id\" noStyle>\n <EZSelectStatus\n maxTagCount={'responsive'}\n mode=\"multiple\"\n optionFilterProp=\"label\"\n className=\"mr-3\"\n placeholder={\n <span>\n <Text>Transaction Status: </Text>\n <Text strong>All Statuses</Text>\n </span>\n }\n // onChange={value =>\n // _triggerUpdateTableQueryDelayed('filter.status_id', value)\n // }\n />\n </Form.Item>\n </Col> */}\n <Col span={12}>\n <Form.Item name=\"filter_by\" noStyle>\n <Select\n style={{ width: '100%' }}\n listHeight={400}\n placeholder={\n <span>\n <Text>Filter By: </Text>\n <Text strong>None</Text>\n </span>\n }\n allowClear\n // onChange={(value, option) => _setFilterBy(value)}\n onChange={value =>\n _triggerUpdateCalendarEventsDelayed(\n 'filter.column_type',\n value\n )\n }\n >\n <OptGroup label=\"Task\">\n <Option value=\"task.duedate\">\n <span>\n <Text>Filter By: </Text>\n <Text strong>Task Due Date</Text>\n </span>\n </Option>\n </OptGroup>\n <OptGroup label=\"Important Dates\">\n <Option value=\"date.close_date\">\n <span>\n <Text>Filter By: </Text>\n <Text strong>Closing Date</Text>\n </span>\n </Option>\n <Option value=\"date.contract_date\">\n <span>\n <Text>Filter By: </Text>\n <Text strong>Contract Date</Text>\n </span>\n </Option>\n <Option value=\"date.effective_date\">\n <span>\n <Text>Filter By: </Text>\n <Text strong>Contract Effective Date</Text>\n </span>\n </Option>\n <Option value=\"date.listing_date\">\n <span>\n <Text>Filter By: </Text>\n <Text strong>Listing Date</Text>\n </span>\n </Option>\n <Option value=\"date.expiration_date\">\n <span>\n <Text>Filter By: </Text>\n <Text strong>Listing Expiration Date</Text>\n </span>\n </Option>\n <Option value=\"date.inspection_contingency_date\">\n <span>\n <Text>Filter By: </Text>\n <Text strong>Inspection Contingency Date</Text>\n </span>\n </Option>\n <Option value=\"date.financing_contingency_date\">\n <span>\n <Text>Filter By: </Text>\n <Text strong>Financing Contingency Date</Text>\n </span>\n </Option>\n <Option value=\"date.appraisal_contingency_date\">\n <span>\n <Text>Filter By: </Text>\n <Text strong>Appraisal Contingency Date</Text>\n </span>\n </Option>\n <Option value=\"date.val_date\">\n <span>\n <Text>Filter By: </Text>\n <Text strong>Custom Contingency Dates</Text>\n </span>\n </Option>\n </OptGroup>\n </Select>\n </Form.Item>\n </Col>\n </Row>\n </Form>\n </div>\n <div>\n <div className=\"\">\n <Row gutter={16}>\n <Col span={SelectedEvent ? 18 : 24}>\n {/* <Col span={SelectedEvent ? 18 : 24}> */}\n <div className=\"ez-sub-content-wrapper\" style={{ minHeight: '1100px' }}>\n <Row>\n <Col span={24}>\n {IsLoadingCalendarEvents && <EZOverlaySpinner />}\n <FullCalendar\n // contentHeight={'150px'}\n customButtons={{\n refreshButton: {\n text: 'Reload',\n click: () => {\n if (\n CalendarDuration &&\n CalendarDuration.start_date\n ) {\n _reloadCalendarEvents(\n CalendarDuration.start_date,\n CalendarDuration.end_date\n );\n }\n },\n },\n }}\n dayMaxEventRows={true}\n views={{\n dayGrdayGridMonthid: {\n dayMaxEventRows: 3,\n },\n }}\n plugins={[\n dayGridPlugin,\n timeGridPlugin,\n interactionPlugin,\n ]}\n headerToolbar={{\n left: 'prev,next today',\n center: 'title',\n right: 'dayGridMonth,dayGridWeek,timeGridDay refreshButton',\n }}\n initialView=\"dayGridMonth\"\n editable={false}\n selectable={false}\n selectMirror={true}\n dayMaxEvents={true}\n weekends={CalendarState.weekendsVisible}\n events={Events}\n eventContent={renderEventContent} // custom render function\n eventClick={handleEventClick}\n datesSet={arg => {\n setCalendarDuration({\n start_date: arg.startStr,\n end_date: arg.endStr,\n });\n }}\n />\n </Col>\n </Row>\n </div>\n </Col>\n {SelectedEvent && (\n <Col span={6}>\n <div\n className=\"ez-sub-content-wrapper\"\n style={{ height: '100%', paddingTop: '20px' }}\n >\n <Row className=\"mb-4\" align=\"middle\" justify=\"space-between\">\n <Col span={12}>\n <Typography.Title level={4} className=\"mb-0\">\n Event Detail\n </Typography.Title>\n </Col>\n <Col span={12} style={{ textAlign: 'right' }}>\n <CloseOutlined\n className=\"cursor-pointer\"\n onClick={() => setSelectedEvent(undefined)}\n />\n </Col>\n </Row>\n {SelectedEvent ? (\n <Row\n style={{\n position: 'sticky',\n top: '60px',\n zIndex: 50,\n }}\n >\n <Col span={24}>\n {/* {IsLoadingEventDetail && <EZOverlaySpinner />} */}\n <Form layout=\"vertical\">\n <Form.Item label=\"Title:\">\n {SelectedEvent?.eventTitle || '-'}\n </Form.Item>\n <Form.Item label=\"Listing Address:\">\n <span>\n {SelectedEvent?.address || '-'}\n <br />\n <Button\n title=\"Open in a new tab\"\n // icon={<ArrowsAltOutlined />}\n size=\"small\"\n className=\"ez-action-btn\"\n onClick={() =>\n _openTransactionDetailTab(\n SelectedEvent,\n SelectedEvent.contract_id,\n SelectedEvent.address\n )\n }\n >\n Open\n </Button>\n </span>\n </Form.Item>\n <Form.Item\n label={\n String(\n SelectedEvent?.extendedProps\n ?.ez_table\n ).includes('todolist')\n ? 'Due Date:'\n : 'Date'\n }\n >\n <EZDateFormat\n value={SelectedEvent?.start?.toString()}\n format=\"MMM Do, YYYY\"\n />\n </Form.Item>\n </Form>\n </Col>\n </Row>\n ) : (\n <Alert\n message=\"No event is selected\"\n type=\"info\"\n showIcon\n />\n )}\n </div>\n </Col>\n )}\n </Row>\n </div>\n </div>\n </div>\n );\n}\n","// Core React libraries import\nimport React, { useContext, useEffect, useRef, useState } from 'react';\n\n// Core ANTD and other libs import\nimport { Avatar, Button, Col, Divider, Form, List, Row, Select, Tag, Typography } from 'antd';\nimport {\n CheckCircleOutlined,\n CloudServerOutlined,\n FlagTwoTone,\n MailOutlined,\n PhoneOutlined,\n PicLeftOutlined,\n PlusOutlined,\n SolutionOutlined,\n StopOutlined,\n} from '@ant-design/icons';\n\n// EZ web-app types import\nimport { ITabContentProps } from 'types/webAppTab';\nimport { EZList, forwardRefEZListProps, IListQueryParams } from 'components/list/EZList';\nimport {\n ProspectDataType,\n ProspectFlagType,\n ProspectFollowupCodeType,\n ProspectGroupType,\n} from 'types/prospect';\n\n// EZ web-app APIs importutils/ez_api/prospectAPIs/prospectAPIs\nimport {\n generateDefaultQuestions,\n getAllProspects,\n getProspectMetaOptions,\n getProspectQuickStatsByIDs,\n} from 'utils/ez_api/prospect/prospectAPIs';\n\n// Core EZ app level import\nimport { HomeContext } from 'context/EZContext';\nimport { EZDateFormat } from 'components';\nimport { getInitialFromFullname } from 'utils/commonUtil';\n\nimport './Prospect.scss';\nimport { AddNewProspectModal } from './modal/Modal_addNewProspectModal';\n\nconst { Text, Paragraph } = Typography;\nconst { Option } = Select;\n\nconst defaultQueryParams: IListQueryParams = {\n searchKeyword: '',\n orderParams: [['prospect_id', 'desc']],\n whereParams: {},\n whereFilterParams: {},\n};\n\nconst ProspectTab: React.FC<ITabContentProps> = () => {\n const HomeCtx = useContext(HomeContext);\n\n const listRef = useRef<forwardRefEZListProps>();\n\n const [form] = Form.useForm();\n\n const [queryParams, setQueryParams] = useState<IListQueryParams>(defaultQueryParams);\n\n const [groups, setGroups] = useState<ProspectGroupType[]>([]);\n const [flags, setFlags] = useState<ProspectFlagType[]>([]);\n const [followupCodes, setFollowupCodes] = useState<ProspectFollowupCodeType[]>([]);\n\n const [isModalAddProspectOpen, setIsModalAddProspectOpen] = useState(false);\n\n const _fetchProspects: (EZQueryParams: string) => Promise<any> = async EZQueryParams => {\n const result = await getAllProspects(EZQueryParams);\n return result;\n };\n\n const _viewProspectDetail = (record: ProspectDataType) => {\n HomeCtx.openProspectDetailTab?.(record.prospect_id, record.fullname, { ...record });\n };\n\n const _fetchMetaOptions = () => {\n Promise.all([\n getProspectMetaOptions('groups', true).then(({ data }) => data),\n getProspectMetaOptions('flags', true).then(({ data }) => data),\n getProspectMetaOptions('followup_codes', true).then(({ data }) => data),\n ]).then(resolveValues => {\n setGroups(resolveValues?.[0] || []);\n setFlags(resolveValues?.[1] || []);\n setFollowupCodes(resolveValues?.[2] || []);\n });\n };\n\n const _resetFilter = () => {\n setQueryParams(defaultQueryParams);\n form.resetFields();\n };\n\n const _onValuesChange = (changedValues: any, values: any) => {\n const fieldName = Object.keys(changedValues)?.[0];\n const fieldValue = changedValues[fieldName];\n\n if (fieldName) {\n setQueryParams({\n ...queryParams,\n whereFilterParams: {\n ...queryParams.whereFilterParams,\n [fieldName]: fieldValue,\n },\n });\n }\n };\n\n const _onChangeCallback = (records: ProspectDataType[]) => {\n if (records.length) {\n getProspectQuickStatsByIDs(records.map(item => item.prospect_id)).then(resp => {\n const respQuickStats = resp.data as {\n complete_doc_count: number;\n complete_task_count: number;\n incomplete_doc_count: number;\n incomplete_task_count: number;\n prospect_id: number;\n prospect_note_count: number;\n }[];\n\n if (respQuickStats && respQuickStats.length) {\n respQuickStats.forEach(stat => {\n const correspondingRecord = records.find(\n r => r.prospect_id === stat.prospect_id\n );\n\n if (correspondingRecord) {\n correspondingRecord.quickStat = {\n taskStatInfo: {\n incomplete: stat.incomplete_task_count,\n complete: stat.complete_task_count,\n total: stat.incomplete_task_count + stat.complete_task_count,\n },\n documentStatInfo: {\n incomplete: stat.incomplete_doc_count,\n complete: stat.complete_doc_count,\n total: stat.incomplete_doc_count + stat.complete_doc_count,\n },\n noteStatInfo: {\n total: stat.prospect_note_count,\n },\n\n priceRange: '',\n };\n }\n });\n listRef.current?.replaceAllData(records);\n }\n });\n }\n };\n\n const _generateDefaultQuestions = () => {\n generateDefaultQuestions();\n };\n\n const _showAddProspectModal = () => {\n setIsModalAddProspectOpen(true);\n };\n\n const _onSuccess = () => {\n listRef.current?.reload();\n };\n\n useEffect(() => {\n _fetchMetaOptions();\n _generateDefaultQuestions();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"ez-tab-prospects\">\n <>\n <AddNewProspectModal\n isModalVisible={isModalAddProspectOpen}\n setIsModalVisible={setIsModalAddProspectOpen}\n onSuccess={_onSuccess}\n />\n </>\n <div className=\"mb-4 ez-sub-content-wrapper ez-sub-content-header-section\">\n <Form form={form} onValuesChange={_onValuesChange}>\n <Row gutter={16}>\n <Col span={24} className=\"text-right\">\n <Button type=\"link\" onClick={_resetFilter}>\n <Text underline>Reset Filter</Text>\n </Button>\n </Col>\n <Col span={6}>\n <Form.Item name=\"inquirytype_id\" noStyle>\n <Select\n style={{ width: '100%' }}\n listHeight={400}\n placeholder={\n <span>\n <Text>Client Type: </Text>\n <Text strong>All</Text>\n </span>\n }\n allowClear\n >\n <Option value=\"1\">\n <span>\n <Text>Buyer</Text>\n </span>\n </Option>\n <Option value=\"2\">\n <span>\n <Text>Seller</Text>\n </span>\n </Option>\n </Select>\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item name=\"followup_id\" noStyle>\n <Select\n style={{ width: '100%' }}\n listHeight={400}\n placeholder={\n <span>\n <Text>Follow-up Code: </Text>\n <Text strong>All</Text>\n </span>\n }\n options={followupCodes}\n fieldNames={{\n value: 'followup_id',\n label: 'code',\n }}\n allowClear\n ></Select>\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item name=\"group_id\" noStyle>\n <Select\n style={{ width: '100%' }}\n listHeight={400}\n placeholder={\n <span>\n <Text>Group: </Text>\n <Text strong>All</Text>\n </span>\n }\n options={groups}\n fieldNames={{\n value: 'group_id',\n label: 'group_name',\n }}\n allowClear\n ></Select>\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item name=\"flag_id\" noStyle>\n <Select\n style={{ width: '100%' }}\n listHeight={400}\n placeholder={\n <span>\n <Text>Flag: </Text>\n <Text strong>All</Text>\n </span>\n }\n allowClear\n >\n {flags?.map(flag => (\n <Select.Option value={flag.flag_id}>\n {flag.flag_id !== 0 ? (\n <FlagTwoTone\n twoToneColor={\n flag.prospects_default_flag?.flag_color\n }\n />\n ) : (\n <StopOutlined />\n )}\n <span className=\"ml-2 text-capitalize\">\n {flag.prospects_default_flag?.flag_color}\n </span>\n </Select.Option>\n ))}\n </Select>\n </Form.Item>\n </Col>\n {/* <Col span={8}>\n <Input.Group compact>\n <Form.Item name=\"filter_date_type\" noStyle>\n <Select\n style={{ width: '41%' }}\n placeholder=\"Choose Date Filter\"\n defaultActiveFirstOption\n allowClear\n >\n <Option value=\"1\">\n <span>\n <Text>Date Added</Text>\n </span>\n </Option>\n <Option value=\"2\">\n <span>\n <Text>Last Contacted Date</Text>\n </span>\n </Option>\n </Select>\n </Form.Item>\n <Form.Item name=\"transaction_date_range\" noStyle>\n <DatePicker.RangePicker\n style={{ width: '59%' }}\n format=\"MMM DD, YYYY\"\n />\n </Form.Item>\n </Input.Group>\n </Col> */}\n </Row>\n </Form>\n </div>\n <div className=\"ez-sub-content-wrapper ez-sub-content-section\">\n <Row>\n <Col span={24}>\n <EZList\n ref={listRef}\n onChangeCallback={_onChangeCallback}\n itemLayout=\"vertical\"\n rowKey=\"prospect_id\"\n paginationConfig={{\n pageSize: 20,\n }}\n queryParams={queryParams}\n fetchData={_fetchProspects}\n toolBarComponents={[\n <Button\n className=\"ez-action-btn ml-3\"\n onClick={() => _showAddProspectModal()}\n >\n <PlusOutlined />\n Add New Prospect\n </Button>,\n // <AddNewProspect />,\n ]}\n renderItem={(record: ProspectDataType) => (\n <List.Item\n actions={[\n <Button\n className=\"p-0 mr-2\"\n type=\"link\"\n icon={<PicLeftOutlined />}\n title=\"View detail this prospect\"\n onClick={() => _viewProspectDetail(record)}\n >\n View Detail\n </Button>,\n ]}\n >\n <List.Item.Meta\n avatar={\n <Avatar size={42}>\n {record.fullname\n ? getInitialFromFullname(record.fullname)\n : 'N/A'}\n </Avatar>\n }\n title={\n <span>\n <Text\n strong\n className=\"mr-2 cursor-pointer\"\n underline\n onClick={() => _viewProspectDetail(record)}\n >\n {record.fullname || '-'}\n </Text>\n {record.inquirytype_id ? (\n <Tag>\n {record.inquirytype_id === 1\n ? 'Buyer'\n : 'Seller'}\n </Tag>\n ) : (\n ''\n )}\n </span>\n }\n description={\n <div>\n <Row>\n <Col span={8}>\n <Row gutter={[0, 4]}>\n <Col span={24}>\n <Text className=\"mr-2\">\n <MailOutlined className=\"mr-2\" />\n {record.email ? (\n <Text copyable>\n {record.email}\n </Text>\n ) : (\n <Text\n type=\"secondary\"\n italic\n >\n Email is empty\n </Text>\n )}\n </Text>\n </Col>\n <Col span={24}>\n <Text className=\"mr-2\">\n {record.prospects_phones\n ?.length ? (\n <span className=\"\">\n {record.prospects_phones.map(\n phone => (\n <>\n <span>\n <PhoneOutlined className=\"mr-2\" />\n {phone.category ? (\n <Text\n code\n >\n {\n phone.category\n }\n </Text>\n ) : (\n ''\n )}\n \n {\n phone.phone\n }\n </span>\n <br />\n </>\n )\n )}\n </span>\n ) : (\n <>\n <PhoneOutlined className=\"mr-2\" />\n <Text\n type=\"secondary\"\n italic\n >\n Phone is empty\n </Text>\n </>\n )}\n </Text>\n </Col>\n <Col span={24}>\n <div className=\"mt-1\">\n <Text\n className=\"mr-2\"\n type=\"secondary\"\n >\n <span className=\"mr-2\">\n Registration Date:\n </span>\n <EZDateFormat\n value={\n record.registration_date\n }\n format=\"MMM DD, YYYY\"\n />\n </Text>\n </div>\n <div className=\"mt-1\">\n <Text\n className=\"mr-2\"\n type=\"secondary\"\n >\n <span className=\"mr-2\">\n Last Contacted:\n </span>\n <EZDateFormat\n value={\n record.prospects_last_visit_date_id\n }\n format=\"MMM DD, YYYY\"\n />\n </Text>\n </div>\n </Col>\n </Row>\n </Col>\n <Divider\n type=\"vertical\"\n style={{ height: 'auto' }}\n ></Divider>\n <Col span={8}>\n <div>\n <Tag className={`tag-rounded mr-1 `}>\n <Text\n type={\n record.quickStat\n ?.taskStatInfo.total\n ? undefined\n : 'secondary'\n }\n >\n <CheckCircleOutlined className=\"mr-2\" />\n {`${\n record.quickStat\n ?.taskStatInfo\n .complete || 0\n } / ${\n record.quickStat\n ?.taskStatInfo.total ||\n 0\n } `}\n tasks are completed\n </Text>\n </Tag>\n </div>\n {/* <div>\n <Tag\n className={`tag-rounded mr-1 mt-2`}\n >\n <HomeOutlined className=\"mr-2\" />3\n Listing(s)\n </Tag>\n </div> */}\n {/* <div>\n <Tag\n className={`tag-rounded mr-1 mt-2`}\n >\n <Text\n type={\n record.quickStat?.priceRange\n ? undefined\n : 'secondary'\n }\n >\n <DollarCircleOutlined className=\"mr-2\" />\n {`${\n record.quickStat\n ?.priceRange || '-'\n } `}\n Price Range\n </Text>\n </Tag>\n </div> */}\n <div>\n <Tag\n className={`tag-rounded mr-1 mt-2`}\n >\n <Text\n type={\n record.quickStat\n ?.documentStatInfo\n ?.total\n ? undefined\n : 'secondary'\n }\n >\n <CloudServerOutlined className=\"mr-2\" />\n {`${\n record.quickStat\n ?.documentStatInfo\n ?.total || 0\n } `}\n Document(s)\n </Text>\n </Tag>\n </div>\n <div>\n <Tag\n className={`tag-rounded mr-1 mt-2`}\n >\n <Text\n type={\n record.quickStat\n ?.noteStatInfo?.total\n ? undefined\n : 'secondary'\n }\n >\n <SolutionOutlined className=\"mr-2\" />\n {`${\n record.quickStat\n ?.noteStatInfo?.total ||\n 0\n } `}\n Note(s)\n </Text>\n </Tag>\n </div>\n </Col>\n <Divider\n type=\"vertical\"\n style={{ height: 'auto' }}\n ></Divider>\n <Col span={6}>\n <div>\n <Paragraph>\n {record.address ? (\n [record.address, record.city]\n .filter(item => item)\n .join(', ')\n ) : (\n <Text type=\"secondary\" italic>\n Address is empty\n </Text>\n )}\n </Paragraph>\n </div>\n </Col>\n </Row>\n </div>\n }\n />\n </List.Item>\n )}\n />\n </Col>\n </Row>\n </div>\n </div>\n );\n};\n\nexport default ProspectTab;\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Modal, Form, Input } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app types import\nimport { ContactRoleType } from 'types/transaction';\nimport { AddressbookType } from 'types/contact';\n// EZ web-app components import\nimport { EZAutocompleteCity, EZSelectUSState, EZSelectContactRole } from 'components';\nimport { showNotification } from 'utils/notificationUtil';\nimport { addNewAddressbookContact, updateAddressbookContact } from 'utils/ez_api/contactAPIs';\n\n// EZ web-app styles and assets import\n\nexport const ModalEditAddressBook: React.FC<{\n contact?: AddressbookType;\n roles?: ContactRoleType[];\n isModalVisible?: boolean;\n setIsModalVisible?: React.Dispatch<React.SetStateAction<boolean>>;\n reloadSubTabData: () => void;\n}> = ({\n contact,\n roles = [],\n isModalVisible = false,\n setIsModalVisible = () => {},\n reloadSubTabData,\n}) => {\n const isEditMode: boolean = contact && contact.addressbook_id ? true : false;\n\n const [form] = Form.useForm();\n\n const [submittingData, setSubmittingData] = useState(false);\n\n const _onSubmitForm = (formValues?: any) => {\n setSubmittingData(true);\n if (formValues.role_id) {\n formValues.role =\n roles.find(role => role.role_id.toString() === formValues.role_id.toString())\n ?.role || '';\n }\n\n const reqPromise = isEditMode\n ? updateAddressbookContact(contact?.addressbook_id || 0, formValues)\n : addNewAddressbookContact(formValues);\n\n reqPromise\n .then(resp => {\n showNotification(\n 'success',\n isEditMode\n ? 'Selected contact data has been updated.'\n : 'New contact has been added.'\n );\n reloadSubTabData();\n setIsModalVisible(false);\n })\n .finally(() => {\n setSubmittingData(false);\n });\n };\n\n const _setFormFieldsValue = () => {\n if (isEditMode) {\n form.setFieldsValue(contact);\n } else {\n form.resetFields();\n }\n };\n\n const _resetModalStates = () => {\n setSubmittingData(false);\n };\n\n const _onAddNewRole = () => {\n reloadSubTabData();\n };\n\n useEffect(() => {\n if (isModalVisible) {\n _resetModalStates();\n _setFormFieldsValue();\n } else {\n _resetModalStates();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isModalVisible]);\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <Modal\n title={`${isEditMode ? 'Edit Contact' : 'Add New Contact'}`}\n visible={isModalVisible}\n onOk={() => form.submit()}\n onCancel={() => setIsModalVisible(false)}\n okText=\"Save Changes\"\n confirmLoading={submittingData}\n width={700}\n style={{ top: 40 }}\n bodyStyle={{ overflowY: 'auto', height: '600px' }}\n >\n <Form layout=\"vertical\" form={form} onFinish={_onSubmitForm} requiredMark={false}>\n <Row gutter={20}>\n <Col span={12}>\n <Form.Item label=\"Role\" name=\"role_id\">\n <EZSelectContactRole\n options={roles.map(role => ({\n label: role.role,\n value: role.role_id,\n }))}\n onAddNewRole={_onAddNewRole}\n />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item\n label=\"Name\"\n name=\"fullname\"\n rules={[{ required: true, message: \"Name can't be empty\" }]}\n >\n <Input placeholder=\"Enter the name\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Main Email\" name=\"email\" rules={[{ type: 'email' }]}>\n <Input placeholder=\"Enter the main email\" type=\"email\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Email 2\" name=\"email2\" rules={[{ type: 'email' }]}>\n <Input placeholder=\"Enter the secondary email\" type=\"email\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Main Phone\" name=\"telephone\">\n <Input placeholder=\"Enter the main phone number\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Phone 2\" name=\"telephone2\">\n <Input placeholder=\"Enter the secondary phone\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Company\" name=\"company\">\n <Input placeholder=\"Enter the company name\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Fax\" name=\"fax\">\n <Input placeholder=\"Enter the fax\" />\n </Form.Item>\n </Col>\n </Row>\n <Row gutter={20}>\n <Col span={24}>\n <Form.Item label=\"Address\" name=\"address\">\n <Input placeholder=\"Enter the address\" />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"City\" name=\"city\">\n <EZAutocompleteCity />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"State\" name=\"state\">\n <EZSelectUSState />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item label=\"ZIP\" name=\"zip\">\n <Input placeholder=\"Enter the ZIP\" />\n </Form.Item>\n </Col>\n </Row>\n <Row gutter={20}>\n <Col span={24}>\n <Form.Item label=\"Notes\" name=\"notes\">\n <Input.TextArea placeholder=\"Enter the notes\" rows={2} />\n </Form.Item>\n </Col>\n </Row>\n </Form>\n </Modal>\n </>\n );\n};\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Space, Button, Popconfirm, Modal } from 'antd';\nimport { EditOutlined, DeleteOutlined, PlusOutlined } from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport {\n deleteAddressbookContact,\n getAddressbookRoles,\n getAllAddressBooks,\n} from 'utils/ez_api/contactAPIs';\n// EZ web-app types import\nimport { ContactRoleType } from 'types/transaction';\nimport { AddressbookType } from 'types/contact';\n// EZ web-app components import\nimport { EZCopyable, EZTable } from 'components';\nimport { ITableQueryParams } from 'components/table/EZProTable';\nimport { ModalEditAddressBook } from './addressBook/Modal_showEditAddressBook';\nimport { showNotification } from 'utils/notificationUtil';\nimport { HomeContext } from 'context/EZContext';\n\n// EZ web-app styles and assets import\n\nconst defaultTableParam = {\n searchKeyword: '',\n orderParams: [],\n whereParams: {},\n whereFilterParams: {},\n};\n\nconst AddressbookTab: React.FC<{}> = ({}) => {\n const HomeCtx = useContext(HomeContext);\n\n const UserPermission = HomeCtx.userPermission;\n\n const [queryParams, setQueryParams] = useState<ITableQueryParams>(defaultTableParam);\n const [selectedContact, setSelectedContact] = useState<AddressbookType>();\n const [roles, setRoles] = useState<ContactRoleType[]>([]);\n\n const [isModalEditContactVisible, setIsModalEditContactVisible] = useState(false);\n\n async function _fetchData(EZTableQueryParams: string): Promise<any> {\n return getAllAddressBooks(EZTableQueryParams).then(result => result);\n }\n\n const _reloadContactRoles = () => {\n getAddressbookRoles().then(response => {\n setRoles(response.data || []);\n });\n };\n\n const _reloadSubTabData = () => {\n setQueryParams({ ...defaultTableParam });\n\n _reloadContactRoles();\n };\n\n const _showAddContactModal = () => {\n setIsModalEditContactVisible(true);\n };\n\n const _editSelectedContact = (contact: AddressbookType) => {\n setIsModalEditContactVisible(true);\n setSelectedContact(contact);\n };\n const _deleteSelectedContact = (contact: AddressbookType) => {\n deleteAddressbookContact(contact.addressbook_id).then(() => {\n showNotification('success', 'You have successfully deleted the selected contact.');\n _reloadSubTabData();\n });\n };\n\n const _columns: ProColumns<AddressbookType>[] = [\n {\n title: 'Name',\n dataIndex: 'fullname',\n width: '200px',\n fixed: 'left',\n sorter: true,\n render: (_, record) => (\n <div>\n {record.fullname ? (\n <>\n {record.fullname} <EZCopyable text={record.fullname} />\n </>\n ) : (\n '-'\n )}\n </div>\n ),\n },\n {\n title: 'Role',\n dataIndex: 'role_id',\n width: '200px',\n render: (_, record) => <div>{record.role?.role || record.role || '-'}</div>,\n },\n {\n title: 'Email #1',\n dataIndex: 'email',\n width: '250px',\n render: (_, record) => (\n <div>\n {record.email ? (\n <>\n {record.email} <EZCopyable text={record.email} />\n </>\n ) : (\n '-'\n )}\n </div>\n ),\n sorter: true,\n },\n {\n title: 'Telephone #1',\n dataIndex: 'telephone',\n width: '200px',\n render: (_, record) => (\n <div>\n {record.telephone ? (\n <>\n {record.telephone} <EZCopyable text={record.telephone} />\n </>\n ) : (\n '-'\n )}{' '}\n </div>\n ),\n sorter: true,\n },\n {\n title: 'Company',\n dataIndex: 'company',\n width: '200px',\n render: (_, record) => <div>{record.company || '-'}</div>,\n sorter: true,\n },\n {\n title: 'Fax',\n dataIndex: 'fax',\n width: '200px',\n render: (_, record) => <div>{record.telephone || '-'}</div>,\n sorter: true,\n },\n {\n title: 'Address',\n dataIndex: 'address',\n width: '300px',\n render: (_, record) => (\n <div>\n <div>{record.address || <i>Address isn't set</i>}</div>\n <div>\n {record.city || <i>City isn't set</i>},{' '}\n {record.state || <i>State isn't set</i>},{' '}\n {record.zip || <i>ZIP isn't set</i>}\n </div>\n </div>\n ),\n },\n {\n title: 'Email #2',\n dataIndex: 'email2',\n width: '200px',\n render: (_, record) => <div>{record.email2 || '-'}</div>,\n sorter: true,\n },\n {\n title: 'Telephone #2',\n dataIndex: 'telephone2',\n width: '200px',\n render: (_, record) => <div>{record.telephone2 || '-'}</div>,\n sorter: true,\n },\n {\n title: 'Notes',\n dataIndex: 'notes',\n width: '300px',\n render: (_, record) => <div>{record.notes || '-'}</div>,\n sorter: false,\n },\n {\n title: 'Action',\n dataIndex: 'action',\n width: '160px',\n hideInTable: UserPermission?.contacts_toggle !== 2,\n render: (_, record) => (\n <Space size=\"small\" className=\"pl-1\">\n <Button\n className=\"p-0 mr-2\"\n type=\"link\"\n icon={<EditOutlined />}\n title=\"Edit this contact\"\n onClick={() => _editSelectedContact(record)}\n >\n Edit\n </Button>\n <Popconfirm\n placement=\"bottomRight\"\n title={`Delete ${record.fullname || 'this contact'}?`}\n okText=\"Yes\"\n cancelText=\"Cancel\"\n onConfirm={() => _deleteSelectedContact(record)}\n >\n <Button\n className=\"p-0\"\n type=\"link\"\n style={{ color: 'red' }}\n icon={<DeleteOutlined />}\n >\n Delete\n </Button>\n </Popconfirm>\n </Space>\n ),\n fixed: 'right',\n },\n ];\n\n useEffect(() => {\n if (!isModalEditContactVisible) {\n setSelectedContact(undefined);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isModalEditContactVisible]);\n\n useEffect(() => {\n _reloadSubTabData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"ez_detail_contacts\">\n <div className=\"mb-5 pl-0 pr-1 ez-sub-content-wrapper\">\n <Row gutter={[0, 0]}>\n <Col>\n <ModalEditAddressBook\n contact={selectedContact}\n roles={roles}\n isModalVisible={isModalEditContactVisible}\n setIsModalVisible={setIsModalEditContactVisible}\n reloadSubTabData={_reloadSubTabData}\n />\n </Col>\n </Row>\n <Row gutter={[0, 0]}>\n <Col span={24}>\n <EZTable\n pagination={{\n pageSize: 20,\n pageSizeOptions: [10, 20, 50, 100],\n }}\n queryParams={queryParams}\n columns={_columns}\n rowKey=\"contact_id\"\n fetchData={_fetchData}\n scroll={{ x: 1600 }}\n toolBarComponents={\n UserPermission?.contacts_toggle === 2\n ? [\n <Button\n className=\"ez-action-btn ml-2\"\n onClick={() => _showAddContactModal()}\n >\n <PlusOutlined />\n Add New Contact\n </Button>,\n ]\n : []\n }\n />\n </Col>\n </Row>\n </div>\n </div>\n );\n};\n\nexport default AddressbookTab;\n","// Core React libraries import\nimport React, { Key, useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Row,\n Col,\n Form,\n Select,\n Typography,\n Alert,\n Button,\n Tree,\n Tag,\n Skeleton,\n Divider,\n Drawer,\n List,\n Avatar,\n Tooltip,\n Input,\n Modal,\n} from 'antd';\nimport { FileDoneOutlined, FlagTwoTone, MessageOutlined, SendOutlined } from '@ant-design/icons';\nimport { DataNode, TreeProps } from 'antd/es/tree';\nimport qs from 'qs';\n\n// EZ web-app import\n\n// EZ web-app utils import\nimport {\n DocFolderType,\n DocNotesType,\n TransactionDetailType,\n TransactionDocItemType,\n TRANSACTION_FLAGS,\n} from 'types/transaction';\nimport { EZDateFormat, EZList, EZSelectFlag } from 'components';\n\n// Page level styles\nimport './DocReview.scss';\nimport {\n addNewNote,\n getDocNotes,\n getPresignedURLDocsRead,\n getTransactionDocs,\n getTransactionFolders,\n updateDocument,\n} from 'utils/ez_api/documentAPIs';\nimport { getAllTransactions, updateTransactionDetail } from 'utils/ez_api/transactionAPIs';\nimport { ALLOWED_CONTENT_TYPES, SIMPLE_EMAIL_REGEX } from 'static/consts';\nimport DocViewer, { DocViewerRenderers } from 'react-doc-viewer';\nimport { DocViewerType } from 'types/document';\nimport { getInitialFromFullname } from 'utils/commonUtil';\nimport { IListQueryParams } from 'components/list/EZList';\nimport { showMessage, showNotification } from 'utils/notificationUtil';\nimport { EmailPayloadType } from 'types/notification';\nimport { HomeContext } from 'context/EZContext';\nimport { SelectProps } from 'antd/es/select';\nimport { sendEmail } from 'utils/ez_api/notificationAPIs';\n\nconst { Text } = Typography;\nconst { DirectoryTree } = Tree;\n\nconst defaultQueryParams: IListQueryParams = {\n searchKeyword: '',\n orderParams: [['doc_note_id', 'desc']],\n whereParams: {},\n whereFilterParams: {},\n};\n\nconst REVIEW_STATUS = [\n { review_label: 'N/A', tag_color: 'grey', status_id: 1 },\n { review_label: 'Approved', tag_color: 'green', status_id: 2 },\n { review_label: 'Needs Attention', tag_color: 'red', status_id: 3 },\n];\n\nconst BROKER_FLAG = TRANSACTION_FLAGS.find(f => f.flag_id === 3);\n\nconst createRevewStatusTag = (review_status: number, applyTagColor: boolean = false) => {\n const config: any = {};\n\n if (applyTagColor) {\n config.color = REVIEW_STATUS[review_status - 1]?.tag_color || 'grey';\n }\n\n return (\n <Tag\n className=\"ml-0 mr-0\"\n // style={{ lineHeight: '22px' }}\n {...config}\n >\n {REVIEW_STATUS[review_status - 1]?.review_label || 'N/A'}\n </Tag>\n );\n};\n\nconst DocNotesDrawer: React.FC<{ selectedDoc?: TransactionDocItemType }> = ({ selectedDoc }) => {\n const [notesCount, setNotesCount] = useState(selectedDoc?.doc_notes?.length || 0);\n const [isDrawerOpen, setIsDrawerOpen] = useState(false);\n const [queryParams, setQueryParams] = useState<IListQueryParams>(defaultQueryParams);\n const [noteContent, setNoteContent] = useState('');\n\n const _fetchDocNotes: (EZQueryParams: string) => Promise<any> = async EZQueryParams => {\n const result = await getDocNotes(selectedDoc?.doc_id || 0, EZQueryParams);\n return result;\n };\n\n const _openNotesDrawer = () => {\n setIsDrawerOpen(true);\n };\n\n const _onDrawerClose = () => {\n setIsDrawerOpen(false);\n };\n\n const _addNewNote = () => {\n const trimmedNote = noteContent.trim();\n if (selectedDoc?.doc_id && trimmedNote.length > 0) {\n addNewNote(selectedDoc.contract_id, selectedDoc.doc_id, trimmedNote).then(resp => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const newNote = resp.data as DocNotesType;\n setQueryParams({ ...defaultQueryParams });\n setNoteContent('');\n setNotesCount(notesCount + 1);\n });\n }\n };\n\n return (\n <>\n <Tooltip\n title={`This doc has ${\n selectedDoc?.doc_notes?.length || 0\n } note(s). Click to see the notes.`}\n placement=\"topRight\"\n >\n <Button\n className=\"ml-2\"\n icon={<MessageOutlined />}\n onClick={() => _openNotesDrawer()}\n >\n {`${notesCount}`}\n </Button>\n </Tooltip>\n <Drawer\n title={`Notes for Document/File: ${selectedDoc?.filename}`}\n placement=\"right\"\n width={600}\n onClose={_onDrawerClose}\n visible={isDrawerOpen}\n >\n <Row gutter={[16, 12]}>\n <Col span={24}>\n <Input.TextArea\n rows={3}\n value={noteContent}\n onChange={e => setNoteContent(e?.currentTarget?.value)}\n />\n </Col>\n <Col span={24} style={{ textAlign: 'right' }}>\n <Button type=\"primary\" onClick={() => _addNewNote()}>\n Add New Note\n </Button>\n </Col>\n <Divider className=\"mt-2 mb-2\" />\n <Col span={24}>\n <EZList\n rowKey=\"note_id\"\n paginationConfig={{\n pageSize: 5,\n }}\n queryParams={queryParams}\n fetchData={_fetchDocNotes}\n renderItem={(record: DocNotesType) => (\n <List.Item>\n <List.Item.Meta\n avatar={\n <Avatar size={42}>\n {record.account && record.account.fullname\n ? getInitialFromFullname(\n record.account.fullname\n )\n : 'N/A'}\n </Avatar>\n }\n title={\n <span>\n <Text strong className=\"mr-1\">\n {record.account?.fullname}\n </Text>\n <Text className=\"mr-1\">\n {record.account?.email\n ? `(${record.account.email})`\n : ``}\n </Text>\n <Text type=\"secondary\" className=\"mr-2\">\n On{' '}\n <EZDateFormat\n value={record.date_posted}\n format=\"MM/DD/YYYY - hh:mma\"\n />\n </Text>\n </span>\n }\n description={\n <Typography.Paragraph\n style={{ whiteSpace: 'pre-wrap' }}\n ellipsis={{\n rows: 2,\n expandable: true,\n }}\n title={`${record.notes}`}\n >\n {record.notes}\n </Typography.Paragraph>\n }\n />\n </List.Item>\n )}\n />\n </Col>\n </Row>\n </Drawer>\n </>\n );\n};\n\nconst DocPreview: React.FC<{ selectedDocToPreview?: DocViewerType }> = ({\n selectedDocToPreview,\n}) => {\n return (\n <DocViewer\n config={{\n header: {\n disableHeader: true,\n },\n }}\n documents={selectedDocToPreview ? [selectedDocToPreview] : []}\n pluginRenderers={DocViewerRenderers}\n style={{ minHeight: '620px' }}\n />\n );\n};\n\nconst SendEmailForm: React.FC<{\n meta?: {\n contractAddress: string;\n };\n emailPayload?: Partial<EmailPayloadType>;\n onFormFinish?: (formValues: any) => void;\n}> = ({ emailPayload, onFormFinish }) => {\n const [form] = Form.useForm();\n\n const _onSelectRecipient: SelectProps['onSelect'] = (value: string, option: any) => {\n const recipientEmails: string[] = form.getFieldValue('recipients');\n form.setFieldValue(\n 'recipients',\n recipientEmails.filter(email => SIMPLE_EMAIL_REGEX.test(email))\n );\n };\n\n const _onFinish = (values: any) => {\n onFormFinish?.(values);\n };\n\n useEffect(() => {\n if (emailPayload) {\n form.setFieldsValue({\n ...emailPayload,\n recipients: emailPayload?.recipients?.map(r => r.email),\n });\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [emailPayload]);\n\n return (\n <Form form={form} onFinish={_onFinish} layout=\"vertical\" requiredMark={false}>\n <Row gutter={20}>\n <Col span={24}>\n <Form.Item\n label=\"Recipients\"\n name=\"recipients\"\n rules={[\n {\n required: true,\n message: \"Recipient(s) can't be empty\",\n },\n ]}\n extra={`Tip: Hit enter after writing down an email address.`}\n >\n <Select\n mode=\"tags\"\n style={{ width: '100%' }}\n placeholder=\"Enter the email address(es)\"\n onSelect={_onSelectRecipient}\n notFoundContent={''}\n />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n label=\"Subject\"\n name=\"subject\"\n rules={[\n {\n required: true,\n message: \"Subject can't be empty\",\n },\n ]}\n >\n <Input placeholder=\"Enter your the subject\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n label=\"Message\"\n name=\"text\"\n rules={[\n {\n required: true,\n message: \"Message can't be empty\",\n },\n ]}\n >\n <Input.TextArea rows={5} placeholder=\"Enter your the message\" />\n </Form.Item>\n </Col>\n <Col span={24} className=\"text-right\">\n <Form.Item noStyle>\n <Button type=\"primary\" htmlType=\"submit\">\n Send\n </Button>\n </Form.Item>\n </Col>\n </Row>\n </Form>\n );\n};\n\nconst MemoizedDocPreview = React.memo(DocPreview);\n\nconst DocumentReviewTab: React.FC = () => {\n const HomeCtx = useContext(HomeContext);\n\n const UserInfo = HomeCtx.userInfo;\n\n const [form] = Form.useForm();\n\n const [isFetchingContracts, setIsFetchingContracts] = useState(false);\n const [isFetchingDirNodes, setIsFetchingDirNodes] = useState(false);\n const [isFetchingSelectedFile, setIsFetchingSelectedFile] = useState(false);\n\n const [currentContract, setCurrentContract] = useState<TransactionDetailType>();\n const [contractsToReview, setContractsToReview] = useState<TransactionDetailType[]>([]);\n\n const [docTreeNodes, setDocTreeNodes] = useState<DataNode[]>([]);\n const [docs, setDocs] = useState<TransactionDocItemType[]>([]);\n const [selectedDoc, setSelectedDoc] = useState<TransactionDocItemType>();\n const [selectedDocToPreview, setSelectedDocToPreview] = useState<DocViewerType>();\n\n const _docOnSelect: TreeProps['onSelect'] = (_, info) => {\n const doc_id = info.node.key.toString().includes('doc_id-')\n ? info.node.key.toString().replace('doc_id-', '')\n : null;\n\n if (selectedDoc?.doc_id.toString() === doc_id) return;\n\n if (doc_id) {\n const doc = docs.find(d => d.doc_id.toString() === doc_id);\n\n if (doc) {\n setSelectedDoc(doc);\n setIsFetchingSelectedFile(true);\n getPresignedURLDocsRead('contract_document', [\n { contract_id: currentContract?.contract_id, file_id: doc.doc_id },\n ])\n .then(({ data }) => {\n const docList = (data as DocViewerType[]).map(doc => {\n doc.uri = doc.presignedURL;\n doc.fileType = doc.content_type;\n\n return doc;\n });\n if (docList.length) {\n setSelectedDocToPreview(docList[0]);\n }\n })\n .finally(() => {\n setIsFetchingSelectedFile(false);\n });\n } else {\n setSelectedDoc(undefined);\n }\n } else {\n setSelectedDoc(undefined);\n }\n };\n\n const _fetchAllDocs = () => {\n if (!currentContract || !currentContract.contract_id) return;\n setIsFetchingDirNodes(true);\n getTransactionDocs(\n currentContract.contract_id,\n qs.stringify({\n pageSize: 500,\n })\n )\n .then(async response => {\n const docs = response.data as TransactionDocItemType[];\n\n const resp = await getTransactionFolders(currentContract.contract_id);\n if (resp.data) {\n const treeNodes: DataNode[] =\n resp.data?.map((folder: DocFolderType) => ({\n title: folder.folder_name,\n key: folder.folder_id,\n children: docs\n .filter(doc => doc.folder_id === folder.folder_id)\n .map((doc_1: TransactionDocItemType) => ({\n title: (\n <>\n <Text\n title={doc_1.filename}\n ellipsis\n style={{ maxWidth: '200px' }}\n >\n {doc_1.filename}\n </Text>\n <span className=\"ml-2\" style={{ float: 'right' }}>\n {createRevewStatusTag(doc_1.review_status, true)}\n </span>\n </>\n ),\n key: `doc_id-${doc_1.doc_id}`,\n isLeaf: true,\n icon: <FileDoneOutlined />,\n })),\n })) || [];\n\n setDocTreeNodes(treeNodes);\n setDocs(docs || []);\n } else {\n setDocTreeNodes([]);\n setDocs([]);\n }\n })\n .finally(() => {\n setIsFetchingDirNodes(false);\n });\n };\n\n const _fetchContractsToReview = () => {\n setIsFetchingContracts(true);\n getAllTransactions(\n 'compact',\n qs.stringify({\n where: {\n flag_id: 3,\n },\n })\n )\n .then(response => {\n const contractsToReviewResp = response.data as TransactionDetailType[];\n if (contractsToReviewResp && contractsToReviewResp.length) {\n setContractsToReview(contractsToReviewResp);\n setCurrentContract(contractsToReviewResp[0]);\n // setContractsToReview([]);\n // setCurrentContract(undefined);\n } else {\n setContractsToReview([]);\n setCurrentContract(undefined);\n }\n })\n .finally(() => {\n setIsFetchingContracts(false);\n });\n };\n\n const _changeCurrentContract = (contract_id: number) => {\n const selectedContract = contractsToReview.find(c => c.contract_id === contract_id);\n\n if (selectedContract) {\n setCurrentContract(selectedContract);\n }\n };\n\n const _changeReviewStatus = (newReviewStatus: number) => {\n if (!selectedDoc) return;\n\n const reviewStatusNote: string = form.getFieldValue('notes');\n if (selectedDoc.doc_id && reviewStatusNote && reviewStatusNote.length > 0) {\n addNewNote(selectedDoc.contract_id, selectedDoc.doc_id, reviewStatusNote);\n }\n\n return updateDocument(\n selectedDoc?.contract_id || -1,\n selectedDoc?.doc_id || -1,\n {\n review_status: newReviewStatus,\n },\n 'PARTIAL'\n ).then(() => {\n showNotification('success', 'You have successfully changed the review status.');\n\n setSelectedDoc({ ...selectedDoc, review_status: newReviewStatus });\n\n _updateDirTreeNode(selectedDoc?.doc_id || -1, {\n review_status: newReviewStatus,\n });\n\n return true;\n });\n };\n\n const _updateDirTreeNode = (doc_id: number, docPayload: Partial<TransactionDocItemType>) => {\n for (let index = 0; index < docTreeNodes.length; index++) {\n const parentNode = docTreeNodes[index];\n const docNode = parentNode.children?.find(child => child.key === `doc_id-${doc_id}`);\n if (docNode) {\n const doc = docs.find(d => d.doc_id === doc_id);\n if (doc) {\n docNode.title = (\n <>\n <Text title={doc.filename} ellipsis style={{ maxWidth: '200px' }}>\n {doc.filename}\n </Text>\n <span className=\"ml-2\" style={{ float: 'right' }}>\n {createRevewStatusTag(docPayload.review_status || 1, true)}\n </span>\n </>\n );\n Object.assign(doc, { ...docPayload });\n\n setDocTreeNodes([...docTreeNodes]);\n setDocs([...docs]);\n break;\n }\n }\n }\n };\n\n const _onReviewStatusChange = (newReviewStatus: number) => {\n form.resetFields();\n Modal.confirm({\n closable: true,\n title: <>Review Status Change Confirmation</>,\n width: 600,\n content: (\n <Form form={form}>\n <Row gutter={[12, 12]}>\n <Col span={24}>\n You are about to change the status:{' '}\n <span>\n {createRevewStatusTag(selectedDoc?.review_status || 1, true)}\n </span>\n <span className=\"mr-2 ml-2\">to</span>\n <span>{createRevewStatusTag(newReviewStatus, true)}</span>\n </Col>\n <Col span={24}>\n <Form.Item noStyle name=\"notes\">\n <Input.TextArea\n placeholder=\"Write down your note for this change here\"\n rows={3}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form>\n ),\n onOk: close => {\n return _changeReviewStatus(newReviewStatus);\n },\n });\n };\n\n const _confirmContractStatusChange = (new_flag_id: number) => {\n const flag = TRANSACTION_FLAGS.find(f => f.flag_id === new_flag_id);\n\n Modal.confirm({\n closable: true,\n title: <>Transaction Status Change Confirmation</>,\n width: 600,\n content: (\n <Form form={form}>\n <Row gutter={[12, 12]}>\n <Col span={24}>\n You are about to change the transaction's status: <br />\n <span>\n <FlagTwoTone\n twoToneColor={currentContract?.contract_flag?.flag_color}\n />\n <span className=\"ml-2\">{currentContract?.contract_flag?.flag}</span>\n </span>\n <span className=\"mr-2 ml-2\">to</span>\n <span>\n <FlagTwoTone twoToneColor={flag?.flag_color} />\n <span className=\"ml-2\">{flag?.flag}</span>\n </span>\n </Col>\n </Row>\n </Form>\n ),\n onOk: () => {\n if (currentContract) {\n return updateTransactionDetail(currentContract?.contract_id, {\n flag_id: new_flag_id,\n }).then(res => {\n if (res.data) {\n showNotification(\n 'success',\n `Flag type for contract with address: ${currentContract.address} has been successfully updated.`\n );\n }\n currentContract.flag_id = new_flag_id;\n setCurrentContract({ ...currentContract });\n return true;\n });\n } else {\n return Promise.resolve(true);\n }\n },\n });\n };\n\n const _showSendEmailForm = () => {\n const contractAddress = `${currentContract?.address}, ${currentContract?.city}, ${currentContract?.state}, ${currentContract?.zip}`;\n\n const emailPayload: Partial<EmailPayloadType> = {\n sender: {\n email: UserInfo!.email,\n name: UserInfo?.fullname,\n },\n recipients: currentContract?.assigned_accounts?.map(account => ({\n email: account.email,\n })),\n subject: `Broker Review: ${contractAddress}`,\n };\n\n const _onEmailFormFinish = (values: any) => {\n const payload = {\n ...emailPayload,\n ...values,\n recipients: values?.recipients?.map((r: string) => ({ email: r })),\n text: `Hi,<br><br>Your transaction at ${contractAddress} has been reviewed by ${\n UserInfo!.email\n }. Below are their comments: <br><br>${values.text}`,\n };\n\n sendEmail(payload).then(({ data }) => {\n if (data === false) {\n showMessage('error', 'Error happened. Please check again your form.');\n return;\n }\n emailModalInstance?.destroy();\n });\n };\n\n const emailModalInstance = Modal.info({\n icon: <SendOutlined />,\n closable: true,\n maskClosable: true,\n title: <>Send Email Form</>,\n width: 700,\n content: (\n <SendEmailForm emailPayload={emailPayload} onFormFinish={_onEmailFormFinish} />\n ),\n okButtonProps: {\n style: {\n display: 'none',\n },\n },\n });\n };\n\n useEffect(() => {\n if (currentContract?.contract_id) {\n setSelectedDoc(undefined);\n setSelectedDocToPreview(undefined);\n _fetchAllDocs();\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentContract]);\n\n useEffect(() => {\n _fetchContractsToReview();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"ez-tab-doc-review\">\n <div\n className=\"mb-4 ez-sub-content-wrapper\"\n data-testid=\"document-review-header-section\"\n >\n <Row gutter={64} align=\"middle\">\n <Col span={24}>\n {!isFetchingContracts && !contractsToReview.length ? (\n <Alert\n description={\n <div>\n <span>No transaction flagged with </span>\n <span>\n <FlagTwoTone twoToneColor={BROKER_FLAG?.flag_color} />\n <span className=\"ml-2\">{BROKER_FLAG?.flag}</span>\n </span>\n </div>\n }\n className=\"mb-3\"\n showIcon\n type=\"info\"\n />\n ) : (\n ''\n )}\n </Col>\n <Col span={8} data-testid=\"document-review-contract-selector\">\n <Select\n showSearch\n optionFilterProp=\"label\"\n style={{ width: '100%' }}\n placeholder=\"Select a transaction\"\n options={\n contractsToReview?.map(contract => ({\n label: contract.address,\n value: contract.contract_id,\n })) || []\n }\n value={currentContract?.contract_id}\n onChange={value => _changeCurrentContract(value as number)}\n ></Select>\n </Col>\n <Col span={16} data-testid=\"document-review-flag-status\">\n <Row justify=\"space-between\" align=\"middle\" wrap={false} gutter={16}>\n <span\n className=\"ml-2\"\n style={{ display: 'inline-block', textAlign: 'left' }}\n >\n - All transactions flagged{' '}\n <span>\n <FlagTwoTone twoToneColor={BROKER_FLAG?.flag_color} />\n <span className=\"ml-2\">{BROKER_FLAG?.flag}</span>\n </span>{' '}\n will be displayed here.\n <br /> - Change the Flag to Missing Documents or Signatures to alert\n the assigned agents.\n </span>\n <EZSelectFlag\n style={{ textAlign: 'left', width: '250px' }}\n allowClear={false}\n value={currentContract?.flag_id}\n onSelect={(value: number) => _confirmContractStatusChange(value)}\n disabled={!isFetchingContracts && !currentContract}\n />\n </Row>\n </Col>\n </Row>\n </div>\n <div>\n <Row gutter={16}>\n <Col span={8}>\n {currentContract ? (\n <div\n className=\"mb-4 ez-sub-content-wrapper\"\n data-testid=\"document-review-email-section\"\n >\n <div>\n <Button\n className=\"ez-action-btn\"\n style={{ width: '100%' }}\n onClick={() => _showSendEmailForm()}\n >\n Send Email To Agent(s)\n </Button>\n </div>\n </div>\n ) : (\n ''\n )}\n <div\n className=\"mb-5 ez-sub-content-wrapper\"\n style={{ minHeight: '200px' }}\n data-testid=\"document-review-directory-section\"\n >\n {isFetchingDirNodes && <Skeleton active />}\n {!isFetchingDirNodes && (\n <div>\n <div>\n {docTreeNodes.length ? (\n <DirectoryTree\n multiple={false}\n autoExpandParent={true}\n defaultExpandedKeys={[\n `doc_id-${selectedDoc?.doc_id}` as Key,\n ]}\n defaultCheckedKeys={[\n `doc_id-${selectedDoc?.doc_id}` as Key,\n ]}\n onSelect={_docOnSelect}\n treeData={docTreeNodes}\n />\n ) : (\n ''\n )}\n </div>\n </div>\n )}\n {!isFetchingContracts && !contractsToReview.length ? (\n <Alert\n description=\"No transaction is selected.\"\n showIcon\n type=\"info\"\n />\n ) : (\n ''\n )}\n </div>\n </Col>\n <Col span={16} data-testid=\"document-review-preview-section\">\n <div className=\"mb-5 ez-sub-content-wrapper\" style={{ minHeight: '720px' }}>\n <Row>\n <Col span={24}>\n {!isFetchingSelectedFile &&\n selectedDocToPreview &&\n ALLOWED_CONTENT_TYPES.includes(\n selectedDocToPreview?.content_type || ''\n ) ? (\n <Row gutter={16}>\n <Col span={24}>\n <Row>\n <Col span={16}>\n <Typography.Title level={5}>\n {selectedDocToPreview.filename}\n </Typography.Title>\n </Col>\n <Col span={8} style={{ textAlign: 'right' }}>\n <Select\n bordered={false}\n optionFilterProp=\"label\"\n style={{\n width: '150px',\n textAlign: 'left',\n }}\n value={selectedDoc?.review_status}\n onChange={value =>\n _onReviewStatusChange(value)\n }\n >\n {REVIEW_STATUS.map((elm, idx) => (\n <Select.Option value={idx + 1}>\n <Tag\n className=\"ml-0 mr-0\"\n color={elm.tag_color}\n style={{\n lineHeight: '22px',\n }}\n >\n {elm.review_label}\n </Tag>\n </Select.Option>\n ))}\n </Select>\n <DocNotesDrawer selectedDoc={selectedDoc} />\n </Col>\n </Row>\n </Col>\n <Col span={24}>\n <Typography.Text>\n Uploaded on{' '}\n <EZDateFormat\n value={selectedDoc?.date_uploaded}\n format=\"MM/DD/YYYY hh:mma\"\n />{' '}\n By {selectedDoc?.account?.fullname || '-'}\n </Typography.Text>\n <br />\n <Typography.Text>\n Description: {selectedDoc?.description || '-'}\n </Typography.Text>\n </Col>\n <Divider className=\"mt-2 mb-4\" />\n <Col span={24}>\n <MemoizedDocPreview\n selectedDocToPreview={selectedDocToPreview}\n />\n </Col>\n </Row>\n ) : (\n ''\n )}\n {!isFetchingSelectedFile &&\n selectedDoc &&\n !ALLOWED_CONTENT_TYPES.includes(\n selectedDocToPreview?.content_type || ''\n ) ? (\n <Alert\n description=\"Preview is unavailable for the selected document(s).\"\n showIcon\n type=\"info\"\n />\n ) : (\n ''\n )}\n {!isFetchingSelectedFile && !selectedDoc ? (\n <Alert\n description=\"No document is selected.\"\n showIcon\n type=\"info\"\n />\n ) : (\n ''\n )}\n {isFetchingSelectedFile && <Skeleton active />}\n </Col>\n </Row>\n </div>\n </Col>\n <Col></Col>\n </Row>\n </div>\n </div>\n );\n};\n\nexport default DocumentReviewTab;\n","// Core React libraries import\nimport React, { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Alert,\n Avatar,\n Button,\n Col,\n Divider,\n Form,\n Input,\n Modal,\n Row,\n Select,\n Space,\n Tag,\n Typography,\n} from 'antd';\nimport {\n EditOutlined,\n LockOutlined,\n MailOutlined,\n SafetyOutlined,\n SaveOutlined,\n} from '@ant-design/icons';\nimport { Gutter } from 'antd/lib/grid/row';\n\n// EZ web-app utils import\nimport { getInitialFromFullname } from 'utils/commonUtil';\nimport { showNotification } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport { getAddressbookRoles } from 'utils/ez_api/contactAPIs';\nimport {\n changePassword,\n getLoggedAccountData,\n updateMyAccountData,\n} from 'utils/ez_api/accountAPIs';\n// EZ web-app types import\nimport { ITabContentProps } from 'types/webAppTab';\nimport { AccountDataType, PASSWORD_REGEX } from 'types/account';\nimport { ContactRoleType } from 'types/transaction';\n// EZ web-app components import\nimport {\n EZAutocompleteCity,\n EZDateFormat,\n EZInputMasked,\n EZOverlaySpinner,\n EZSelectContactRole,\n EZSelectUSState,\n} from 'components';\n\n// EZ web-app styles and assets import\nimport './Account.scss';\nimport { getSubscriptionList } from 'utils/paymentUtil';\n\nconst colLabelSpan = 14;\nconst colValueSpan = 10;\nconst rowFormViewGutter: [Gutter, Gutter] = [12, 6];\n\nconst ChangePasswordComponent: React.FC<{}> = ({}) => {\n const [form] = Form.useForm();\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isSavingPassword, setIsSavingPassword] = useState(false);\n\n const [hint, setHint] = useState('');\n\n const showModal = () => {\n setIsModalOpen(true);\n };\n\n const handleOk = () => {\n setIsModalOpen(false);\n };\n\n const handleCancel = () => {\n setIsModalOpen(false);\n };\n\n const _onFinish = (values: any) => {\n setIsSavingPassword(true);\n changePassword({\n password: values.current_password,\n new_password: values.new_password,\n hint: values.hint,\n })\n .then(() => {\n showNotification('success', 'Your new password has been successfully saved.');\n setIsModalOpen(false);\n })\n .finally(() => {\n setIsSavingPassword(false);\n });\n };\n\n const _fetchMyProfile = () => {\n getLoggedAccountData().then(({ data }) => {\n if (data) {\n const hintResp = data.hint;\n form.setFieldValue('hint', hintResp);\n }\n });\n };\n\n useEffect(() => {\n if (!isModalOpen) form.resetFields();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isModalOpen]);\n\n useEffect(() => {\n form.resetFields();\n _fetchMyProfile();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <Button\n className=\"ez-action-btn\"\n size=\"small\"\n icon={<LockOutlined />}\n onClick={showModal}\n >\n Change Password\n </Button>\n <Modal\n title=\"Change Password\"\n visible={isModalOpen}\n onOk={() => form.submit()}\n onCancel={handleCancel}\n width={400}\n okText={isSavingPassword ? 'Submitting...' : 'Submit'}\n okButtonProps={{\n disabled: isSavingPassword,\n }}\n >\n <Form form={form} layout=\"vertical\" onFinish={_onFinish}>\n <Row gutter={[0, 0]}>\n <Col span={24}>\n <Form.Item\n label=\"New Password\"\n name=\"new_password\"\n rules={[\n {\n required: true,\n },\n {\n pattern: PASSWORD_REGEX,\n message:\n 'Password is not complex enough. Click the question mark icon for more detail.',\n },\n ]}\n tooltip={\n <span>\n <span>Password must:</span>\n <br />\n <span>- have at least one letter</span>\n <br />\n <span>- have at least one capital letter</span>\n <br />\n <span>- have at least one number</span>\n <br />\n <span>\n - have at least one special symbol that is #?!@$%^&*-\n </span>\n <br />\n <span>- be at least 8 characters</span>\n <br />\n </span>\n }\n >\n <Input.Password placeholder=\"Enter your new password\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n label=\"Confirm Password\"\n name=\"confirm_password\"\n rules={[\n // {\n // required: true,\n // message: 'Please confirm your password!',\n // },\n ({ getFieldValue }) => ({\n validator(_, value) {\n if (!value || getFieldValue('new_password') === value) {\n return Promise.resolve();\n }\n return Promise.reject(\n new Error(\n 'The two passwords that you entered do not match!'\n )\n );\n },\n }),\n ]}\n >\n <Input.Password placeholder=\"Enter the confirm password\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Hint\" name=\"hint\">\n <Input type=\"text\" placeholder=\"Enter the hint on the login page\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Divider orientation=\"left\">\n <b>\n <SafetyOutlined /> Authentication\n </b>\n </Divider>\n </Col>\n <Col span={24}>\n <Form.Item\n label=\"Current Password\"\n name=\"current_password\"\n rules={[{ required: true }]}\n >\n <Input.Password placeholder=\"Enter your current password\" />\n </Form.Item>\n </Col>\n </Row>\n </Form>\n </Modal>\n </>\n );\n};\n\nconst MyProfileTab: React.FC<ITabContentProps> = () => {\n const [form] = Form.useForm();\n\n const [isSavingProfile, setIsSavingProfile] = useState(false);\n const [isFetchingAccountData, setIsFetchingAccountData] = useState(false);\n\n const [roles, setRoles] = useState<ContactRoleType[]>([]);\n const [userData, setUserData] = useState<AccountDataType>();\n\n const subscriptionList = getSubscriptionList();\n\n const _reloadContactRoles = () => {\n getAddressbookRoles().then(response => {\n setRoles(response.data || []);\n });\n };\n\n const _fetchMyProfile = () => {\n setIsFetchingAccountData(true);\n getLoggedAccountData()\n .then(({ data }) => {\n if (data) {\n const respUserData = data as AccountDataType;\n setUserData(respUserData);\n\n if (respUserData.role_id === 0) {\n delete respUserData.role_id;\n }\n\n form.setFieldsValue({ ...respUserData });\n }\n })\n .finally(() => {\n setIsFetchingAccountData(false);\n });\n };\n\n const _onFormFinish = (values: any) => {\n setIsSavingProfile(true);\n updateMyAccountData({ ...values, role_id: values.role_id || 0 })\n .then(() => {\n showNotification('success', 'Your profile has been successfully updated.');\n })\n .finally(() => {\n setIsSavingProfile(false);\n });\n };\n\n const _onAddNewRole = () => {\n _reloadContactRoles();\n };\n\n useEffect(() => {\n _fetchMyProfile();\n _reloadContactRoles();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"ez-component-my-profile\">\n <div className=\"mb-5 ez-sub-content-wrapper\">\n <Row align=\"middle\">\n <Col span={12}>\n <Space align=\"center\">\n <Avatar size={48} className=\"mr-3\">\n {userData?.fullname\n ? getInitialFromFullname(userData.fullname)\n : 'USER'}\n </Avatar>\n <span>\n <Typography.Text strong>{userData?.fullname}</Typography.Text>\n <br />\n <Typography.Text>{userData?.email}</Typography.Text>\n </span>\n </Space>\n </Col>\n <Col span={12} style={{ textAlign: 'right' }}>\n <Space align=\"center\">\n <Tag>\n <Typography.Text strong>\n {\n subscriptionList.find(\n sub => sub.user_type_id === userData?.user_type_id\n )?.plan_name\n }\n </Typography.Text>\n </Tag>\n </Space>\n </Col>\n <Col span={24}>\n <Alert\n className=\"mt-3\"\n message={\n <>\n We are currently improving our payment experience. Therefore, we\n are sorry that{' '}\n <b>\n payment information changes and cancellation can only be\n done by contacting our support\n </b>\n .\n </>\n }\n showIcon\n />\n </Col>\n </Row>\n </div>\n <div className=\"ez-sub-content-wrapper \" style={{ position: 'relative' }}>\n {isFetchingAccountData && <EZOverlaySpinner />}\n <Row gutter={72}>\n <Col span={12}>\n <Form layout=\"vertical\" form={form} onFinish={_onFormFinish}>\n <Row>\n <Col span={24} className=\"\">\n <Row className=\"\">\n <Col span={12} className=\"\">\n <Typography.Title level={5}>\n General Information\n </Typography.Title>\n </Col>\n <Col span={12} style={{ textAlign: 'right' }}>\n {userData?.account_id ? (\n <Button\n // className=\"ez-action-btn\"\n size=\"small\"\n type=\"primary\"\n icon={<SaveOutlined />}\n onClick={() => form.submit()}\n loading={isSavingProfile}\n disabled={isSavingProfile}\n >\n {isSavingProfile ? 'Saving...' : 'Save'}\n </Button>\n ) : (\n <></>\n )}\n </Col>\n </Row>\n </Col>\n <Divider className=\"mb-4\" style={{ margin: '8px 0' }} />\n <Col span={24}>\n <Row gutter={20}>\n <Col span={24}>\n <Form.Item\n label=\"Name\"\n name=\"fullname\"\n rules={[\n {\n required: true,\n message: \"Name can't be empty\",\n },\n ]}\n >\n <Input placeholder=\"Enter your name\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Role\" name=\"role_id\">\n <EZSelectContactRole\n options={roles.map(role => ({\n label: role.role,\n value: role.role_id,\n }))}\n onAddNewRole={_onAddNewRole}\n />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Company\" name=\"company\">\n <Input placeholder=\"Enter the company name\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Cell Phone\" name=\"cellphone\">\n {/* <EZInputMasked /> */}\n <Input placeholder=\"Enter the cell phone number\" />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item label=\"Work Phone\" name=\"workphone\">\n <Input placeholder=\"Enter the work phone number\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Fax Phone\" name=\"faxphone\">\n <Input placeholder=\"Enter the fax phone number\" />\n </Form.Item>\n </Col>\n </Row>\n <Row gutter={20}>\n <Col span={24}>\n <Form.Item label=\"Street\" name=\"street\">\n <Input placeholder=\"Enter the street detail\" />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"City\" name=\"city\">\n <EZAutocompleteCity placement=\"topRight\" />\n </Form.Item>\n </Col>\n <Col span={9}>\n <Form.Item label=\"State\" name=\"state\">\n <EZSelectUSState placement=\"topRight\" />\n </Form.Item>\n </Col>\n <Col span={6}>\n <Form.Item label=\"ZIP\" name=\"zip\">\n <Input placeholder=\"Enter the ZIP\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Timezone\" name=\"timezone\">\n <Select\n placeholder=\"Select the timezone\"\n style={{ width: '100%' }}\n placement=\"topRight\"\n >\n <Select.Option value=\"AST\">\n America/Puerto_Rico\n </Select.Option>\n <Select.Option value=\"EDT\">\n America/New_York\n </Select.Option>\n <Select.Option value=\"CDT\">\n America/Chicago\n </Select.Option>\n <Select.Option value=\"MDT\">\n America/Boise\n </Select.Option>\n <Select.Option value=\"MST\">\n America/Phoenix\n </Select.Option>\n <Select.Option value=\"PDT\">\n America/Los_Angeles\n </Select.Option>\n <Select.Option value=\"AKDT\">\n America/Juneau\n </Select.Option>\n <Select.Option value=\"HST\">\n Pacific/Honolulu\n </Select.Option>\n <Select.Option value=\"ChST\">\n Pacific/Guam\n </Select.Option>\n <Select.Option value=\"SST\">\n Pacific/Samoa\n </Select.Option>\n <Select.Option value=\"WAKT\">\n Pacific/Wake\n </Select.Option>\n </Select>\n </Form.Item>\n </Col>\n </Row>\n <Row gutter={20}>\n <Col span={24}>\n <Form.Item label=\"Notes\" name=\"notes\">\n <Input.TextArea\n placeholder=\"Enter the notes\"\n rows={3}\n />\n </Form.Item>\n </Col>\n </Row>\n </Col>\n </Row>\n </Form>\n </Col>\n <Col span={12}>\n <Form layout=\"vertical\">\n <Row>\n <Col span={24} className=\"\">\n <Row className=\"\">\n <Col span={10} className=\"\">\n <Typography.Title level={5}>\n Credential and Login History\n </Typography.Title>\n </Col>\n <Col span={14} style={{ textAlign: 'right' }}>\n <ChangePasswordComponent />\n {/* <Button\n disabled\n className=\"ml-2\"\n // className=\"ml-2 ez-action-btn\"\n size=\"small\"\n icon={<MailOutlined />}\n >\n Change Email\n </Button> */}\n </Col>\n </Row>\n </Col>\n <Divider className=\"mb-4\" style={{ margin: '8px 0' }} />\n <Col span={24}>\n <Form.Item label=\"Registered On\">\n <EZDateFormat\n value={userData?.date_posted}\n format={'MM/DD/YYYY hh:mma'}\n />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Last Modified On\">\n <EZDateFormat\n value={userData?.date_modified}\n format={'MM/DD/YYYY hh:mma'}\n />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item label=\"Last Logged-In On\">-</Form.Item>\n </Col>\n </Row>\n </Form>\n </Col>\n </Row>\n </div>\n </div>\n );\n};\n\nexport default MyProfileTab;\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Alert,\n Button,\n Col,\n Collapse,\n Divider,\n Form,\n Input,\n Popconfirm,\n Popover,\n Row,\n Select,\n Space,\n Switch,\n Tag,\n Typography,\n} from 'antd';\nimport {\n CheckSquareOutlined,\n CloseOutlined,\n CodeOutlined,\n DeleteFilled,\n DeleteOutlined,\n DownOutlined,\n EditFilled,\n EyeInvisibleOutlined,\n EyeOutlined,\n InfoCircleOutlined,\n PlusOutlined,\n SaveFilled,\n UpOutlined,\n} from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\nimport { ProTable } from '@ant-design/pro-components';\nimport debounce from 'lodash/debounce';\n\n// EZ web-app utils import\nimport { showMessage } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport {\n addNewContractCustomField,\n addNewContractCustomSection,\n addNewDropdownOption,\n bulkUpdateCustomFieldPositions,\n deleteContractCustomField,\n deleteContractCustomSection,\n deleteDropdownOption,\n getContractCustomFields,\n updateContractCustomField,\n updateContractCustomSection,\n updateDropdownOption,\n} from 'utils/ez_api/AdminAPIs';\n// EZ web-app types import\nimport {\n AdditionalInfoFieldType,\n contractAdditionalInfoCategoryType,\n ContractAdditionalInfoOption,\n} from 'types/transaction';\nimport { updateOnboardingStep } from 'utils/onboardingUtil';\nimport { HomeContext } from 'context/EZContext';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nconst toggleDropdownElementByCustomFieldID = (fieldID: number, show: boolean) => {\n const dropdownElementDiv = document.getElementById(`dropdown-custom-field-${fieldID}`);\n if (dropdownElementDiv) {\n dropdownElementDiv.style.display = show ? 'block' : 'none';\n }\n};\n\nexport const CustomFieldSetting: React.FC<{}> = ({}) => {\n const [isFetchingSections, setIsFetchingSections] = useState(false);\n const [sections, setSections] = useState<contractAdditionalInfoCategoryType[]>([]);\n\n const [expandedRecordIDs, setExpandedRecordIDs] = useState<React.Key[]>([]);\n const HomeCtx = useContext(HomeContext);\n\n const _fetchCustomSections = () => {\n setIsFetchingSections(true);\n getContractCustomFields()\n .then(({ data }) => {\n setSections(data || []);\n })\n .finally(() => {\n setIsFetchingSections(false);\n });\n };\n\n const columns: ProColumns<contractAdditionalInfoCategoryType>[] = [\n {\n title: 'Section Name',\n dataIndex: 'category',\n key: 'category',\n width: '320px',\n formItemProps: (form, config) => {\n return {\n rules: [\n {\n required: true,\n },\n ],\n };\n },\n render: (_, record) => (\n <Typography.Text\n onClick={() => {\n if (!expandedRecordIDs.includes(record.additional_info_fields_category_id))\n setExpandedRecordIDs([record.additional_info_fields_category_id]);\n }}\n strong\n underline\n >\n {record.category}\n </Typography.Text>\n ),\n },\n {\n title: 'Fields Information',\n dataIndex: '',\n key: 'x',\n editable: false,\n render: (_, record) => (\n <Tag\n onClick={() => {\n if (!expandedRecordIDs.includes(record.additional_info_fields_category_id))\n setExpandedRecordIDs([record.additional_info_fields_category_id]);\n }}\n className=\"tag-rounded cursor-pointer\"\n >\n {record.contract_additional_info_preferences?.length} Field(s)\n </Tag>\n ),\n },\n {\n title: 'Action',\n dataIndex: '',\n width: '220px',\n key: 'x',\n valueType: 'option',\n render: (_, record, index, action) => (\n <span>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EditFilled />}\n title=\"Delete this section?\"\n size=\"small\"\n disabled={record.additional_info_fields_category_id === 1}\n onClick={() => {\n action?.startEditable(record.additional_info_fields_category_id);\n }}\n >\n Edit Section Name\n </Button>\n <Divider type=\"vertical\" />\n <Popconfirm\n placement=\"bottomLeft\"\n title={\n <>\n Delete <b>{record.category}</b>?\n </>\n }\n disabled={record.additional_info_fields_category_id === 1}\n onConfirm={() => _deleteSection(record.additional_info_fields_category_id)}\n >\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<DeleteOutlined />}\n title=\"Delete this section?\"\n size=\"small\"\n disabled={record.additional_info_fields_category_id === 1}\n danger\n ></Button>\n </Popconfirm>\n </span>\n ),\n },\n ];\n\n const modifySectionData = (sectionID: number, newRecordData: any) => {\n try {\n const section = sections.find(t => t.additional_info_fields_category_id === sectionID);\n\n if (section) {\n if (newRecordData.category) {\n section.category = newRecordData.category;\n setSections([...sections]);\n }\n }\n } catch (error) {\n console.log(\n '🚀 ~ file: customFieldsetting.tsx ~ line 210 ~ modifySectionData ~ error',\n error\n );\n }\n };\n\n const deleteSection = (categoryID: number) => {\n try {\n const categoryIndex = sections.findIndex(\n t => t.additional_info_fields_category_id === categoryID\n );\n\n if (categoryIndex !== undefined && categoryIndex >= 0) {\n sections.splice(categoryIndex, 1);\n setSections([...sections]);\n }\n } catch (error) {\n console.log(\n '🚀 ~ file: customFieldsetting.tsx ~ line 240 ~ deleteSection ~ error',\n error\n );\n }\n };\n\n const addNewSection = (section: contractAdditionalInfoCategoryType) => {\n try {\n sections.unshift(section);\n setSections([...sections]);\n } catch (error) {\n console.log(\n '🚀 ~ file: customFieldsetting.tsx ~ line 274 ~ addNewSection ~ error',\n error\n );\n }\n };\n\n const _saveSectionData = (section: contractAdditionalInfoCategoryType, newRecordData: any) => {\n return updateContractCustomSection(\n section.additional_info_fields_category_id,\n newRecordData\n ).then(() => {\n showMessage('success', 'Selected section data has been updated.');\n setTimeout(() => {\n modifySectionData(section.additional_info_fields_category_id, {\n ...section,\n ...newRecordData,\n });\n }, 0);\n return true;\n });\n };\n\n const _deleteSection = (sectionID: number) => {\n return deleteContractCustomSection(sectionID).then(({ data }) => {\n showMessage('success', 'Selected section has been deleted.');\n deleteSection(sectionID);\n });\n };\n\n const _saveNewSection = () => {\n const payload: any = {\n category: 'Untitled',\n };\n\n return addNewContractCustomSection(payload).then(({ data }) => {\n showMessage('success', `New section: \"Untitled\" has been added.`);\n addNewSection(data);\n // update onboarding step to completed\n updateOnboardingStep('add_new_custom_section', HomeCtx.refetchOnboardingList);\n });\n };\n\n const _dropdownValueHandler = debounce(\n (\n additional_info_fields_category_id: number,\n additional_info_field_id: number,\n additional_info_fields_option_id: number,\n option_value: string\n ) => {\n return updateDropdownOption(\n additional_info_fields_category_id,\n additional_info_field_id,\n additional_info_fields_option_id,\n option_value\n );\n },\n 5000\n );\n\n const DropdownFieldComponent: React.FC<{\n section: contractAdditionalInfoCategoryType;\n field: AdditionalInfoFieldType;\n isEditing: boolean;\n }> = ({ section, field, isEditing = false }) => {\n const [form] = Form.useForm();\n\n field.contract_additional_info_options_temp = field.contract_additional_info_options.length\n ? field.contract_additional_info_options.map(obj => ({ ...obj }))\n : [];\n\n useEffect(() => {\n if (isEditing) {\n form.setFieldsValue({\n dropdown_options: field.contract_additional_info_options,\n });\n } else {\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isEditing]);\n\n return (\n <Form form={form}>\n <Collapse ghost>\n <Collapse.Panel\n header=\"Click to toggle droprown options\"\n key={`field_${field.additional_info_field_id}`}\n >\n <Row>\n <Col>\n {!isEditing &&\n field.contract_additional_info_options.length === 0 ? (\n <>\n No options added. Click \"Edit\" to start adding the\n Dropdown's options.\n </>\n ) : (\n <></>\n )}\n\n {!isEditing ? (\n <ul>\n {field.contract_additional_info_options.map(opt => (\n <li>{opt.option_value}</li>\n ))}\n </ul>\n ) : (\n <></>\n )}\n\n {isEditing && field.contract_additional_info_options.length > 0 ? (\n <Col>\n <Alert\n type=\"warning\"\n message=\"Avoid deleting the option(s) that is used by active transactions.\"\n className=\"mb-2\"\n showIcon\n />\n </Col>\n ) : (\n <></>\n )}\n\n {isEditing && (\n <Form.List name=\"dropdown_options\">\n {(fields, { add, remove }) => (\n <>\n {fields.map(\n ({ key, name, ...restField }, index) => (\n <Col\n span={24}\n className=\"mb-2\"\n style={{ textAlign: 'left' }}\n >\n <>\n <Form.Item\n rules={[\n {\n required: true,\n },\n ]}\n name={[\n name,\n 'additional_info_fields_option_id',\n ]}\n {...field}\n noStyle\n hidden\n >\n <Input hidden />\n </Form.Item>\n <Form.Item\n rules={[\n {\n required: true,\n },\n ]}\n name={[name, 'option_value']}\n {...field}\n noStyle\n >\n <Input\n placeholder=\"Enter the option\"\n style={{ width: '200px' }}\n allowClear\n onChange={evt => {\n const val =\n evt.target.value?.trim();\n if (\n val &&\n field\n .contract_additional_info_options_temp?.[\n name\n ]\n ) {\n field.contract_additional_info_options_temp[\n name\n ].option_value =\n val;\n }\n }}\n />\n </Form.Item>\n <Popconfirm\n title=\"Delete this option?\"\n onConfirm={() => {\n if (\n field\n .contract_additional_info_options_temp?.[\n name\n ]\n ) {\n field.contract_additional_info_options_temp.splice(\n name,\n 1\n );\n remove(name);\n }\n }}\n >\n <Button\n className=\"p-0 ml-1\"\n type=\"link\"\n icon={<DeleteOutlined />}\n title=\"Delete this option?\"\n size=\"small\"\n danger\n ></Button>\n </Popconfirm>\n </>\n </Col>\n )\n )}\n <Col span={24} style={{ textAlign: 'left' }}>\n <Form.Item noStyle>\n <Button\n type=\"dashed\"\n onClick={() => {\n const newOption: ContractAdditionalInfoOption =\n {\n additional_info_fields_option_id:\n -1 * Date.now(),\n additional_info_field_id:\n field.additional_info_field_id,\n option_value: 'Untitled',\n account_id: -1,\n parent_account_id: -1,\n };\n\n add(newOption);\n\n if (\n field.contract_additional_info_options_temp\n ) {\n field.contract_additional_info_options_temp.push(\n newOption\n );\n } else {\n field.contract_additional_info_options_temp =\n [];\n field.contract_additional_info_options_temp.push(\n newOption\n );\n }\n }}\n block\n icon={<PlusOutlined />}\n style={{ width: '200px' }}\n >\n Add option\n </Button>\n </Form.Item>\n </Col>\n </>\n )}\n </Form.List>\n )}\n </Col>\n </Row>\n </Collapse.Panel>\n </Collapse>\n </Form>\n );\n };\n\n const DataTypeFieldComponent: React.FC<{\n section: contractAdditionalInfoCategoryType;\n field: AdditionalInfoFieldType;\n isEditing: boolean;\n }> = ({ section, field, isEditing = false }) => {\n useEffect(() => {\n if (isEditing) {\n if (field.contract_additional_info_field.class === 'dropdown') {\n toggleDropdownElementByCustomFieldID(field.additional_info_field_id, true);\n } else {\n toggleDropdownElementByCustomFieldID(field.additional_info_field_id, false);\n }\n } else {\n if (field.contract_additional_info_field.class !== 'dropdown') {\n toggleDropdownElementByCustomFieldID(field.additional_info_field_id, false);\n } else {\n toggleDropdownElementByCustomFieldID(field.additional_info_field_id, true);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isEditing]);\n\n return (\n <Row align=\"middle\">\n <Col span={8}>\n {!isEditing && (\n <span style={{ textTransform: 'capitalize' }}>\n {field.contract_additional_info_field.class}\n </span>\n )}\n {isEditing && (\n <div>\n <Select\n style={{ width: '180px' }}\n defaultValue={field.contract_additional_info_field.class}\n onChange={val => {\n field.contract_additional_info_field.tempFieldType = val;\n // field.contract_additional_info_field.class = val;\n\n if (val === 'dropdown') {\n toggleDropdownElementByCustomFieldID(\n field.additional_info_field_id,\n true\n );\n } else {\n toggleDropdownElementByCustomFieldID(\n field.additional_info_field_id,\n false\n );\n }\n }}\n >\n <Select.Option value=\"text\">Text</Select.Option>\n <Select.Option value=\"numeric\">Numeric</Select.Option>\n <Select.Option value=\"money\">Money</Select.Option>\n <Select.Option value=\"date\">Date</Select.Option>\n <Select.Option value=\"dropdown\">Dropdown</Select.Option>\n </Select>\n </div>\n )}\n </Col>\n <Col span={16}>\n <div\n style={{\n display:\n field.contract_additional_info_field.class === 'dropdown'\n ? 'block'\n : 'none',\n }}\n id={`dropdown-custom-field-${field.additional_info_field_id}`}\n >\n <DropdownFieldComponent\n section={section}\n field={field}\n isEditing={isEditing}\n />\n </div>\n </Col>\n </Row>\n );\n };\n\n const NewFieldForm: React.FC<{\n section: contractAdditionalInfoCategoryType;\n sectionFields: AdditionalInfoFieldType[];\n setSectionFields: React.Dispatch<React.SetStateAction<AdditionalInfoFieldType[]>>;\n }> = ({ section, sectionFields, setSectionFields }) => {\n const [visible, setVisible] = useState(false);\n const [form] = Form.useForm();\n\n const _saveNewField = (payload: {\n newname: string;\n class: string;\n\n toggle: number;\n rank: number;\n }) => {\n return addNewContractCustomField(\n section.additional_info_fields_category_id,\n payload\n ).then(({ data }) => {\n sectionFields.unshift(data);\n setSectionFields([...sectionFields]);\n\n setTimeout(() => {\n showMessage(\n 'success',\n `New field: \"Untitled\" has been added to section: \"${section.category}\".`\n );\n }, 0);\n });\n };\n\n const _onFinish = (values: any) => {\n _saveNewField({\n newname: values.newname,\n class: values.class,\n toggle: 1,\n rank: sectionFields.length ? (sectionFields[0].rank || 0) - 1 : -1,\n }).then(() => {\n setVisible(false);\n });\n };\n\n useEffect(() => {\n if (!visible) {\n form.resetFields();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [visible]);\n\n return (\n <Popover\n content={\n <Form form={form} layout=\"vertical\" onFinish={_onFinish} requiredMark={false}>\n <Row gutter={20} className=\"mr-1 ml-1\" style={{ width: '400px' }}>\n <Col span={24}>\n <Form.Item\n label=\"Field Name\"\n name=\"newname\"\n rules={[{ required: true, message: \"Name can't be empty\" }]}\n >\n <Input placeholder=\"Enter the Field Name\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n label=\"Type\"\n name=\"class\"\n rules={[{ required: true, message: \"Type can't be empty\" }]}\n >\n <Select\n placeholder=\"Select Field Type\"\n style={{ width: '100%' }}\n >\n <Select.Option value=\"text\">Text</Select.Option>\n <Select.Option value=\"numeric\">Numeric</Select.Option>\n <Select.Option value=\"money\">Money</Select.Option>\n <Select.Option value=\"date\">Date</Select.Option>\n <Select.Option value=\"dropdown\">Dropdown</Select.Option>\n </Select>\n </Form.Item>\n </Col>\n <Divider />\n <Col span={24} className=\"mb-2 text-right\">\n <Button\n type=\"default\"\n className=\"mr-3\"\n onClick={() => setVisible(false)}\n >\n Close\n </Button>\n <Button type=\"primary\" onClick={() => form.submit()}>\n Add\n </Button>\n </Col>\n </Row>\n </Form>\n }\n visible={visible}\n title={\n <>\n Add New Field within Section: <b>{section.category}</b>\n </>\n }\n trigger=\"click\"\n placement=\"left\"\n >\n <Button size=\"small\" key=\"3\" type=\"primary\" onClick={() => setVisible(true)}>\n <CodeOutlined />\n New Field\n </Button>\n </Popover>\n );\n };\n\n const ExpandedRowComponent: React.FC<{ section: contractAdditionalInfoCategoryType }> = ({\n section,\n }) => {\n const [editableKeysField, setEditableKeysField] = useState<React.Key[]>([]);\n const [sectionFields, setSectionFields] = useState<AdditionalInfoFieldType[]>(\n section.contract_additional_info_preferences || []\n );\n\n const modifyFieldData = (fieldID: number, newRecordData: any) => {\n try {\n const fieldIndex = sectionFields?.findIndex(\n t => t.additional_info_field_id === fieldID\n );\n\n if (fieldIndex >= 0 && sectionFields[fieldIndex]) {\n sectionFields![fieldIndex] = {\n ...sectionFields[fieldIndex],\n ...newRecordData,\n };\n\n if (sectionFields[fieldIndex].contract_additional_info_field.tempFieldType) {\n sectionFields[fieldIndex].contract_additional_info_field.tempFieldType =\n undefined;\n }\n\n if (\n sectionFields[fieldIndex].contract_additional_info_options_temp !==\n undefined\n ) {\n sectionFields[fieldIndex].contract_additional_info_options_temp = undefined;\n }\n\n setSectionFields([...sectionFields]);\n }\n } catch (error) {\n console.log('🚀 ~ file: customFieldsetting.tsx ~ line 195 ~ error', error);\n }\n };\n\n const _saveFieldData = (field: AdditionalInfoFieldType, newRecordData: any) => {\n return updateContractCustomField(\n section.additional_info_fields_category_id,\n field.additional_info_field_id,\n newRecordData\n ).then(({ data }) => {\n const updatedFieldResult = data;\n\n modifyFieldData(field.additional_info_field_id, {\n ...field,\n ...newRecordData,\n ...updatedFieldResult,\n });\n showMessage('success', 'Selected field information has been updated.');\n return true;\n });\n };\n\n const _moveUp = (index: number, taskRecord: AdditionalInfoFieldType) => {\n let tempTaskRecord = taskRecord;\n sectionFields[index] = sectionFields[index - 1];\n sectionFields[index - 1] = tempTaskRecord;\n setSectionFields([...sectionFields]);\n\n // update the corresponding order positions\n bulkUpdateCustomFieldPositions(section.additional_info_fields_category_id, [\n {\n additional_info_field_id: sectionFields[index].additional_info_field_id,\n rank: sectionFields[index - 1].rank || index,\n },\n {\n additional_info_field_id: sectionFields[index - 1].additional_info_field_id,\n rank: sectionFields[index].rank || index,\n },\n ]);\n };\n\n const _moveDown = (index: number, taskRecord: AdditionalInfoFieldType) => {\n let tempTaskRecord = taskRecord;\n sectionFields[index] = sectionFields[index + 1];\n sectionFields[index + 1] = tempTaskRecord;\n setSectionFields([...sectionFields]);\n\n // update the corresponding order positions\n bulkUpdateCustomFieldPositions(section.additional_info_fields_category_id, [\n {\n additional_info_field_id: sectionFields[index].additional_info_field_id,\n rank: sectionFields[index + 1].rank || index,\n },\n {\n additional_info_field_id: sectionFields[index + 1].additional_info_field_id,\n rank: sectionFields[index].rank || index,\n },\n ]);\n };\n\n const deleteField = (section: contractAdditionalInfoCategoryType, fieldID: number) => {\n try {\n const fieldIndex = sectionFields?.findIndex(\n t => t.additional_info_field_id === fieldID\n );\n\n if (fieldIndex !== undefined && fieldIndex >= 0) {\n sectionFields.splice(fieldIndex, 1);\n setSectionFields([...sectionFields]);\n }\n } catch (error) {\n console.log('🚀 ~ file: customFieldsetting.tsx:666 ~ deleteField ~ error:', error);\n }\n };\n\n const _deleteSelectedField = (\n section: contractAdditionalInfoCategoryType,\n fieldID: number\n ) => {\n return deleteContractCustomField(\n section.additional_info_fields_category_id,\n fieldID\n ).then(() => {\n showMessage('success', 'Selected field has been deleted.');\n\n deleteField(section, fieldID);\n });\n };\n\n const expandedTableColumns: ProColumns<AdditionalInfoFieldType>[] = [\n {\n title: 'Order',\n dataIndex: 'rank',\n key: 'rank',\n width: '68px',\n editable: false,\n render(dom, entity, index, action, schema) {\n return (\n <Space>\n <Button\n icon={<DownOutlined />}\n size=\"small\"\n disabled={index === sectionFields.length - 1}\n onClick={() => {\n _moveDown(index, entity);\n }}\n />\n <Button\n icon={<UpOutlined />}\n size=\"small\"\n disabled={index === 0}\n onClick={() => {\n _moveUp(index, entity);\n }}\n />\n </Space>\n );\n },\n },\n {\n title: 'On/Off',\n dataIndex: 'toggle',\n key: 'toggle',\n width: '50px',\n\n editable: false,\n render(dom, entity, index, action, schema) {\n return (\n <Switch\n size=\"small\"\n checkedChildren={<EyeOutlined />}\n unCheckedChildren={<EyeInvisibleOutlined />}\n defaultChecked={entity.toggle ? true : false}\n onChange={(val: boolean) => {\n setTimeout(() => {\n _saveFieldData(entity, {\n toggle: val,\n });\n }, 500);\n }}\n />\n );\n },\n },\n {\n title: 'Field Name',\n dataIndex: 'newname',\n key: 'newname',\n width: '400px',\n fieldProps: (_, config) => {\n return {\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {},\n };\n },\n formItemProps: () => {\n return {\n rules: [\n {\n required: true,\n },\n ],\n };\n },\n },\n {\n title: 'Type',\n dataIndex: 'fieldType',\n key: 'fieldType',\n editable: false,\n width: '500px',\n render: (_, record) => {\n return (\n <>\n <DataTypeFieldComponent\n section={section}\n field={record}\n isEditing={\n editableKeysField.find(\n k => k === record.additional_info_field_id\n )\n ? true\n : false\n }\n />\n </>\n );\n },\n align: 'left',\n valueType: 'select',\n formItemProps: (_, config) => {\n return {\n initialValue: config.entity.contract_additional_info_field.class,\n };\n },\n fieldProps: (_, config) => {\n return {\n style: {\n width: 110,\n },\n allowClear: false,\n placeholder: 'Select',\n options: [\n {\n label: 'Text',\n value: 'text',\n },\n {\n label: 'Numeric',\n value: 'numeric',\n },\n {\n label: 'Money',\n value: 'money',\n },\n {\n label: 'Date',\n value: 'date',\n },\n {\n label: 'Dropdown',\n value: 'dropdown',\n },\n ],\n onChange: (val: string) => {},\n };\n },\n },\n {\n title: 'Action',\n width: '150px',\n dataIndex: '',\n valueType: 'option',\n fixed: 'right',\n render: (_, record, index, action) => (\n <span>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EditFilled />}\n title=\"Edit this row\"\n size=\"small\"\n onClick={() => {\n setEditableKeysField([\n // ...editableKeysField,\n record.additional_info_field_id,\n ]);\n }}\n >\n Edit\n </Button>\n </span>\n ),\n },\n ];\n\n return (\n <div className=\"expanded-row-with-table\">\n <ProTable\n size=\"small\"\n rowKey=\"additional_info_field_id\"\n pagination={{ pageSize: 100 }}\n showSorterTooltip={false}\n search={false}\n columns={expandedTableColumns}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n scroll={{ x: 1500 }}\n dataSource={sectionFields}\n editable={{\n // editableKeys: section.contract_additional_info_preferences?.map(\n // t => t.additional_info_field_id\n // ),\n editableKeys: editableKeysField,\n // actionRender: (_, __, defaultDom) => [defaultDom.delete],\n type: 'multiple',\n onSave: async (key, newData: any, oldData) => {\n if (newData?.contract_additional_info_field?.tempFieldType) {\n newData.class =\n newData?.contract_additional_info_field?.tempFieldType;\n } else {\n newData.class = newData?.contract_additional_info_field?.class;\n }\n if (newData?.contract_additional_info_options_temp) {\n newData.contract_additional_info_options =\n newData.contract_additional_info_options_temp;\n }\n return _saveFieldData(oldData, newData).then(() => {\n setEditableKeysField([\n ...editableKeysField.filter(keyItem => keyItem !== key),\n ]);\n return true;\n });\n },\n onDelete: (_, row) => {\n return _deleteSelectedField(section, row.additional_info_field_id);\n },\n onCancel: (key, record, originRow, newLineConfig) => {\n setEditableKeysField([\n ...editableKeysField.filter(keyItem => keyItem !== key),\n ]);\n return Promise.resolve(true);\n },\n saveText: (\n <>\n <Button className=\"p-0 pl-1\" type=\"link\" icon={<SaveFilled />}>\n Save\n </Button>\n </>\n ),\n deleteText: (\n <>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<DeleteFilled />}\n title=\"Delete this field?\"\n size=\"small\"\n danger\n ></Button>\n </>\n ),\n deletePopconfirmMessage: 'Delete this field?',\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n toolBarRender={() => [\n <NewFieldForm\n section={section}\n sectionFields={sectionFields}\n setSectionFields={setSectionFields}\n />,\n ]}\n />\n </div>\n );\n };\n\n useEffect(() => {\n _fetchCustomSections();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row>\n <Col span={18} style={{ textAlign: 'left' }} className=\"text-help\">\n <InfoCircleOutlined /> Tip: Add custom sections, and custom fields to those section.\n Track all this info on <b>\"Contract Information\"</b> tab on your\n transaction/contract detail.\n </Col>\n <Col span={6} style={{ textAlign: 'right' }}>\n <Button key=\"3\" type=\"primary\" onClick={() => _saveNewSection()}>\n <PlusOutlined />\n New Section\n </Button>\n </Col>\n <Col span={24} className=\"mt-3\">\n <ProTable\n rowKey=\"additional_info_fields_category_id\"\n showSorterTooltip={false}\n search={false}\n tableLayout=\"fixed\"\n loading={isFetchingSections}\n columns={columns}\n expandable={{\n expandedRowRender: (record: contractAdditionalInfoCategoryType) => {\n return <ExpandedRowComponent section={record} />;\n },\n expandedRowKeys: expandedRecordIDs,\n onExpand: (expanded, record: contractAdditionalInfoCategoryType) => {\n if (expanded) {\n setExpandedRecordIDs([record.additional_info_fields_category_id]);\n } else {\n setExpandedRecordIDs([]);\n }\n },\n }}\n editable={{\n actionRender: (_, __, defaultDom) => [defaultDom.save, defaultDom.cancel],\n type: 'multiple',\n onSave: async (_, newData: contractAdditionalInfoCategoryType, oldData) => {\n return _saveSectionData(oldData, {\n category: newData.category,\n });\n },\n onDelete: (key, row) => {\n return _deleteSection(row.additional_info_fields_category_id);\n },\n saveText: (\n <>\n <Button className=\"p-0 pl-1\" type=\"link\" icon={<SaveFilled />}>\n Save\n </Button>\n </>\n ),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n dataSource={sections}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n />\n </Col>\n </Row>\n );\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Alert,\n Button,\n Checkbox,\n Col,\n Divider,\n Form,\n InputNumber,\n Row,\n Space,\n Tabs,\n Typography,\n} from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport { getAlertSetting, updateAlertSetting } from 'utils/ez_api/AdminAPIs';\n// EZ web-app types import\nimport { AlertSettingType } from 'types/admin';\nimport { showMessage, showNotification } from 'utils/notificationUtil';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nexport const AlertSetting: React.FC<{}> = ({}) => {\n const [form] = Form.useForm();\n\n const [alertBeforeDates, setAlertBeforeDates] = useState<{\n close_date: boolean;\n expired_date: boolean;\n contingency_date: boolean;\n }>({\n close_date: true,\n expired_date: true,\n contingency_date: true,\n });\n\n const [isAlertEditMode, setIsAlertEditMode] = useState(true);\n\n const _fetchAlertSetting = () => {\n getAlertSetting().then(({ data }) => {\n if (data) {\n const alertSetting = data as AlertSettingType;\n\n form.setFieldsValue({\n close_days: alertSetting.close_days || null,\n expiration_days: alertSetting.expiration_days || null,\n contingency_days: alertSetting.contingency_days || null,\n\n alert_before_close_date: alertSetting.close_days ? true : false,\n alert_before_expired_date: alertSetting.expiration_days ? true : false,\n alert_before_contingency_date: alertSetting.contingency_days ? true : false,\n\n past_close: alertSetting.past_close ? true : false,\n past_expiration: alertSetting.past_expiration ? true : false,\n past_contingency: alertSetting.past_contingency ? true : false,\n\n tasks: alertSetting.tasks ? true : false,\n newtransactions: alertSetting.newtransactions ? true : false,\n newdocuments: alertSetting.newdocuments ? true : false,\n newquedocuments: alertSetting.newquedocuments ? true : false,\n activestatus: alertSetting.activestatus ? true : false,\n });\n setAlertBeforeDates({\n close_date: alertSetting.close_days ? true : false,\n expired_date: alertSetting.expiration_days ? true : false,\n contingency_date: alertSetting.contingency_days ? true : false,\n });\n }\n });\n };\n\n const _onFinishForm = (values: any) => {\n const payload = {\n close_days: values.close_days || 0,\n expiration_days: values.expiration_days || 0,\n contingency_days: values.contingency_days || 0,\n\n past_close: values.past_close ? 1 : 0,\n past_expiration: values.past_expiration ? 1 : 0,\n past_contingency: values.past_contingency ? 1 : 0,\n\n tasks: values.tasks ? 1 : 0,\n newtransactions: values.newtransactions ? 1 : 0,\n newdocuments: values.newdocuments ? 1 : 0,\n newquedocuments: values.newquedocuments ? 1 : 0,\n activestatus: values.activestatus ? 1 : 0,\n };\n updateAlertSetting(payload).then(() => {\n showNotification('success', 'Alert setting has been successfully updated.');\n });\n };\n\n useEffect(() => {\n _fetchAlertSetting();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Form form={form} onFinish={_onFinishForm}>\n <Row>\n <Col span={24} className=\"mb-5\">\n <Alert\n message={`You need to hit the button \"Save Changes\" to save all the changes you have made.`}\n type=\"info\"\n showIcon\n action={\n <Space>\n <Button type=\"primary\" onClick={() => form.submit()}>\n Save Changes\n </Button>\n </Space>\n }\n />\n </Col>\n <Col span={24}>\n <Row gutter={[64, 64]}>\n <Col span={12}>\n <Row gutter={[0, 8]}>\n <Col span={24} className=\"text-title-secondary\">\n Send Alerts on Active Statuses Only:\n </Col>\n <Divider className=\"mt-2 mb-3\" />\n <Col span={24}>\n <Form.Item name=\"activestatus\" noStyle valuePropName=\"checked\">\n <Checkbox disabled={!isAlertEditMode}>\n Active Status Only\n </Checkbox>\n </Form.Item>\n </Col>\n </Row>\n </Col>\n <Col span={12}>\n <Row gutter={[0, 8]}>\n <Col span={24} className=\"text-title-secondary\">\n Alerts (On/Off):\n </Col>\n <Divider className=\"mt-2 mb-3\" />\n <Col span={24}>\n <Form.Item name=\"tasks\" noStyle valuePropName=\"checked\">\n <Checkbox disabled={!isAlertEditMode}>Tasks</Checkbox>\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n name=\"newtransactions\"\n noStyle\n valuePropName=\"checked\"\n >\n <Checkbox disabled={!isAlertEditMode}>\n New Transactions (Daily)\n </Checkbox>\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item name=\"newdocuments\" noStyle valuePropName=\"checked\">\n <Checkbox disabled={!isAlertEditMode}>\n New Documents (Daily)\n </Checkbox>\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n name=\"newquedocuments\"\n noStyle\n valuePropName=\"checked\"\n >\n <Checkbox disabled={!isAlertEditMode}>\n New Queue Documents (Daily)\n </Checkbox>\n </Form.Item>\n </Col>\n </Row>\n </Col>\n <Col span={12}>\n <Row gutter={[0, 8]}>\n <Col span={24} className=\"text-title-secondary\">\n Alerts before the dates occur:\n </Col>\n <Divider className=\"mt-2 mb-0\" />\n <Col span={24}>\n <Row>\n <Col span={12}></Col>\n <Col span={12} className=\"mb-2\">\n No. of Days\n </Col>\n </Row>\n <Row>\n <Col span={12}>\n {/* <Form.Item\n name=\"alert_before_close_date\"\n noStyle\n valuePropName=\"checked\"\n >\n <Checkbox\n onChange={e =>\n setAlertBeforeDates({\n ...alertBeforeDates,\n close_date: e.target.checked,\n })\n }\n >\n Close Date\n </Checkbox>\n </Form.Item> */}\n Close Date\n </Col>\n <Col span={12}>\n <Form.Item name=\"close_days\" noStyle>\n <InputNumber\n style={{ width: '70px' }}\n size=\"small\"\n min={0}\n // disabled={!alertBeforeDates.close_date}\n />\n </Form.Item>\n </Col>\n </Row>\n </Col>\n <Col span={24}>\n <Row>\n <Col span={12}>\n {/* <Form.Item\n name=\"alert_before_expired_date\"\n noStyle\n valuePropName=\"checked\"\n >\n <Checkbox\n onChange={e =>\n setAlertBeforeDates({\n ...alertBeforeDates,\n expired_date: e.target.checked,\n })\n }\n >\n Listing Expiration Date\n </Checkbox>\n </Form.Item> */}\n Listing Expiration Date\n </Col>\n <Col span={12}>\n <Form.Item name=\"expiration_days\" noStyle>\n <InputNumber\n style={{ width: '70px' }}\n size=\"small\"\n min={0}\n // disabled={!alertBeforeDates.expired_date}\n />\n </Form.Item>\n </Col>\n </Row>\n </Col>\n <Col span={24}>\n <Row>\n <Col span={12}>\n {/* <Form.Item\n name=\"alert_before_contingency_date\"\n noStyle\n valuePropName=\"checked\"\n >\n <Checkbox\n onChange={e =>\n setAlertBeforeDates({\n ...alertBeforeDates,\n contingency_date: e.target.checked,\n })\n }\n >\n Contingency Date\n </Checkbox>\n </Form.Item> */}\n Contingency Date\n </Col>\n <Col span={12}>\n <Form.Item name=\"contingency_days\" noStyle>\n <InputNumber\n style={{ width: '70px' }}\n size=\"small\"\n min={0}\n // addonAfter=\"Day(s) before\"\n // disabled={!alertBeforeDates.contingency_date}\n />\n </Form.Item>\n </Col>\n </Row>\n </Col>\n </Row>\n </Col>\n <Col span={12}>\n <Row gutter={[0, 8]}>\n <Col span={24} className=\"text-title-secondary\">\n Alerts after the dates occur:\n </Col>\n <Divider className=\"mt-2 mb-3\" />\n <Col span={24}>\n <Form.Item name=\"past_close\" noStyle valuePropName=\"checked\">\n <Checkbox disabled={!isAlertEditMode}>Close Date</Checkbox>\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n name=\"past_expiration\"\n noStyle\n valuePropName=\"checked\"\n >\n <Checkbox disabled={!isAlertEditMode}>\n Listing Expiration Date\n </Checkbox>\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n name=\"past_contingency\"\n noStyle\n valuePropName=\"checked\"\n >\n <Checkbox disabled={!isAlertEditMode}>\n Contingency Date\n </Checkbox>\n </Form.Item>\n </Col>\n </Row>\n </Col>\n </Row>\n </Col>\n {/* <Col span={24} className=\"mt-5 mb-0\">\n <Divider />\n </Col>\n <Col span={24} style={{ textAlign: 'left' }}>\n <Button type=\"primary\" onClick={() => form.submit()}>\n Save Changes\n </Button>\n </Col> */}\n </Row>\n </Form>\n );\n};\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Alert,\n Button,\n Col,\n Divider,\n Form,\n Input,\n Menu,\n Popconfirm,\n Row,\n Space,\n Switch,\n Tag,\n Typography,\n Dropdown,\n Modal,\n} from 'antd';\nimport {\n CheckSquareOutlined,\n CloseOutlined,\n CopyOutlined,\n DeleteFilled,\n DeleteOutlined,\n DownOutlined,\n EditFilled,\n EllipsisOutlined,\n EyeInvisibleOutlined,\n EyeOutlined,\n InfoCircleOutlined,\n PlusOutlined,\n ReloadOutlined,\n SaveFilled,\n UpOutlined,\n} from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\nimport { ProTable } from '@ant-design/pro-components';\nimport debounce from 'lodash/debounce';\n\n// EZ web-app utils import\nimport { showMessage, showNotification } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport {\n addNewDefaultTaskData,\n addNewDefaultTaskTab,\n bulkUpdateDefaultTaskPositions,\n deleteDefaultTask,\n deleteDefaultTaskTab,\n duplicateTaskTemplate,\n getContractCustomFields,\n getTaskTabsDetail,\n updateDefaultTaskData,\n updateDefaultTaskTabData,\n} from 'utils/ez_api/AdminAPIs';\n// EZ web-app types import\nimport { DefaultTaskTabType, DefaultTaskType } from 'types/admin';\nimport { AccountCompactDataType } from 'types/account';\nimport { getAllTeamMembers } from 'utils/ez_api/memberAPIs';\nimport { getFoldersWithEmailTemplates } from 'utils/ez_api/emailTemplateAPIs';\nimport { EmailTemplateFolderType } from 'types/emailTemplate';\nimport { HomeContext } from 'context/EZContext';\nimport { EZTable } from 'components';\nimport { contractAdditionalInfoCategoryType } from 'types/transaction';\nimport { flatten, pickBy } from 'lodash';\nimport { SELECT_OPTGROUP_FILTEROPT } from 'utils/commonUtil';\nimport { updateOnboardingStep } from 'utils/onboardingUtil';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\n\nexport const AUTO_DUEDATE_NAMES_BASIC = [\n {\n label: 'Contract Date',\n value: 'contract_date',\n },\n {\n label: 'Close Date',\n value: 'close_date',\n },\n {\n label: 'Expiration Date',\n value: 'expiration_date',\n },\n {\n label: 'Inspection Contingency Date',\n value: 'inspection_contingency_date',\n },\n {\n label: 'Appraisal Contingency Date',\n value: 'appraisal_contingency_date',\n },\n {\n label: 'Financing Contingency Date',\n value: 'financing_contingency_date',\n },\n {\n label: 'Listing Date',\n value: 'listing_date',\n },\n {\n label: 'Effective Date',\n value: 'effective_date',\n },\n {\n label: 'Listing Live Date',\n value: 'listing_live_date',\n },\n {\n label: 'Application Date',\n value: 'application_date',\n },\n {\n label: 'Lease Signed Date',\n value: 'lease_signed_date',\n },\n {\n label: 'Lease Start',\n value: 'lease_start',\n },\n {\n label: 'Lease End',\n value: 'lease_end',\n },\n {\n label: 'Lease Term',\n value: 'lease_term',\n },\n {\n label: 'Move In Date',\n value: 'move_in_date',\n },\n];\n\ntype DateAlertOption = {\n label: string;\n value: string;\n};\n\ntype DateAlertGroupOption = {\n label: string;\n options: DateAlertOption[];\n};\n\nconst CUSTOM_FIELD_DATE_REGEX = /FIELD-ID_(\\d+)_(\\d+)/;\n\nconst generateCustomFieldDateValue = (fieldCategoryID: number, fieldID: number) => {\n return `FIELD-ID_${fieldCategoryID}_${fieldID}`;\n};\n\nconst parseCustomFieldDateValue = (customFieldDateValue: string) => {\n const result = customFieldDateValue.match(CUSTOM_FIELD_DATE_REGEX);\n if (result && result.length === 3) {\n return {\n fieldCategoryID: result?.[1],\n fieldID: result?.[2],\n };\n } else\n return {\n fieldCategoryID: null,\n fieldID: null,\n };\n};\n\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nexport const TaskSetting: React.FC<{}> = ({}) => {\n const HomeCtx = useContext(HomeContext);\n const UserInfo = HomeCtx.userInfo;\n\n const [form] = Form.useForm();\n\n const [isFetchingTaskTabs, setIsFetchingTaskTabs] = useState(false);\n const [taskTabs, setTaskTabs] = useState<DefaultTaskTabType[]>([]);\n const [taskTabsBuffer, setTaskTabsBuffer] = useState<DefaultTaskTabType[]>([]);\n\n const [expandedRecordIDs, setExpandedRecordIDs] = useState<React.Key[]>([]);\n const [editableKeys, setEditableKeys] = useState<React.Key[]>([]);\n\n const [teamMembers, setTeamMembers] = useState<AccountCompactDataType[]>([]);\n const [emailTemplateFolders, setEmailTemplateFolders] = useState<EmailTemplateFolderType[]>([]);\n\n const [isFetchingSections, setIsFetchingSections] = useState(false);\n const [dateAlertGroupOptions, setDateAlertGroupOptions] = useState<DateAlertGroupOption[]>([]);\n const [dateAlertOptionsFlatten, setDateAlertOptionsFlatten] = useState<DateAlertOption[]>([]);\n\n const moreActions: ItemType[] = [\n {\n label: 'Duplicate',\n key: 'duplicate_task_template',\n icon: <CopyOutlined />,\n },\n ];\n\n const _fetchTaskTabsDetail = () => {\n setIsFetchingTaskTabs(true);\n getTaskTabsDetail()\n .then(({ data }) => {\n const respData = data as DefaultTaskTabType[];\n setTaskTabs(respData || []);\n setTaskTabsBuffer(respData || []);\n })\n .finally(() => {\n setIsFetchingTaskTabs(false);\n });\n };\n\n const _fetchCustomSections = () => {\n setIsFetchingSections(true);\n getContractCustomFields()\n .then(({ data }) => {\n const customSections: contractAdditionalInfoCategoryType[] = data;\n const customSectionsGroupOpts: DateAlertGroupOption[] = [];\n for (let index = 0; index < customSections.length; index++) {\n const customSection = customSections[index];\n\n const customSectionOpts: DateAlertOption[] = [];\n for (\n let ii = 0;\n ii < customSection.contract_additional_info_preferences.length;\n ii++\n ) {\n const field = customSection.contract_additional_info_preferences[ii];\n if (field.contract_additional_info_field.class === 'date') {\n customSectionOpts.push({\n label: `${field.newname}`,\n value: generateCustomFieldDateValue(\n field.additional_info_fields_category_id,\n field.additional_info_field_id\n ),\n });\n }\n }\n if (customSectionOpts.length) {\n customSectionsGroupOpts.push({\n label: `${customSection.category}`,\n options: customSectionOpts,\n });\n }\n }\n setDateAlertOptionsFlatten([\n ...AUTO_DUEDATE_NAMES_BASIC,\n ...customSectionsGroupOpts\n .map(gOpts => {\n return gOpts.options;\n })\n .flat(),\n ]);\n setDateAlertGroupOptions([\n { label: 'Common Dates', options: AUTO_DUEDATE_NAMES_BASIC },\n ...customSectionsGroupOpts,\n ]);\n })\n .finally(() => {\n setIsFetchingSections(false);\n });\n };\n\n const _doActionTaskMenu = (menuKey: string, record: DefaultTaskTabType) => {\n switch (menuKey) {\n case 'duplicate_task_template':\n const duplicateConfirmationModal = Modal.confirm({\n title: `Duplicate Confirmation`,\n width: 600,\n content: (\n <>\n <p>\n Are you sure to duplicate task template: <b>{record.name}</b>?\n </p>\n </>\n ),\n okText: 'Duplicate',\n onOk: () => {\n duplicateConfirmationModal.update({\n closable: false,\n maskClosable: false,\n okButtonProps: {\n disabled: true,\n },\n okText: 'Duplicating...',\n });\n\n return duplicateTaskTemplate(record.defaulttasktab_id).then((res: any) => {\n showNotification(\n 'success',\n `You have successfully duplicated task template: ${record.name}`\n );\n\n addNewTaskTab(res.data);\n\n return true;\n });\n },\n closable: true,\n maskClosable: true,\n });\n break;\n default:\n break;\n }\n };\n\n const columns: ProColumns<DefaultTaskTabType>[] = [\n {\n title: 'On/Off',\n dataIndex: 'toggle',\n key: 'toggle',\n width: '80px',\n editable: false,\n render: (_, record) => (\n <Form.Item\n name={[`${record.defaulttasktab_id}`, 'toggle']}\n noStyle\n valuePropName=\"checked\"\n initialValue={\n !record.defaulttasktab_preference ||\n record.defaulttasktab_preference?.toggle\n ? true\n : false\n }\n >\n <Switch\n checkedChildren={<EyeOutlined />}\n unCheckedChildren={<EyeInvisibleOutlined />}\n defaultChecked={false}\n onChange={(val: boolean) => {\n _saveTaskTabData(record, {\n toggle: val,\n });\n }}\n />\n </Form.Item>\n ),\n },\n {\n title: 'List Name',\n dataIndex: 'name',\n key: 'name',\n width: '280px',\n formItemProps: (form, config) => {\n return {\n rules: [\n {\n required: true,\n },\n ],\n };\n },\n render: (_, record) => (\n <Typography.Text\n onClick={() => {\n if (!expandedRecordIDs.includes(record.defaulttasktab_id))\n setExpandedRecordIDs([record.defaulttasktab_id]);\n }}\n strong\n underline\n >\n {record.name}\n </Typography.Text>\n ),\n },\n {\n title: 'Tasklist Information',\n dataIndex: '',\n key: 'x',\n editable: false,\n render: (_, record) => (\n <Tag\n onClick={() => {\n if (!expandedRecordIDs.includes(record.defaulttasktab_id))\n setExpandedRecordIDs([record.defaulttasktab_id]);\n }}\n className=\"tag-rounded\"\n >\n {record.defaulttasks?.length} Task(s)\n </Tag>\n ),\n },\n {\n title: 'Action',\n dataIndex: '',\n width: '250px',\n key: 'x',\n valueType: 'option',\n render: (_, record, index, action) => (\n <span>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EditFilled />}\n title=\"Edit list name\"\n size=\"small\"\n onClick={() => {\n action?.startEditable(record.defaulttasktab_id);\n }}\n >\n Edit List Name\n </Button>\n\n <Divider type=\"vertical\" />\n\n <Popconfirm\n placement=\"bottomLeft\"\n title={\n <>\n Delete <b>{record.name}</b>?\n </>\n }\n onConfirm={() => _deleteSelectedTaskTab(record.defaulttasktab_id)}\n >\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<DeleteOutlined />}\n title=\"Delete this list\"\n size=\"small\"\n danger\n ></Button>\n </Popconfirm>\n\n <Divider type=\"vertical\" />\n\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu\n items={moreActions}\n onClick={({ key }) => _doActionTaskMenu(key, record)}\n />\n }\n placement=\"bottomRight\"\n >\n <span onClick={e => e.preventDefault()}>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EllipsisOutlined />}\n title=\"More action\"\n ></Button>\n </span>\n </Dropdown>\n </span>\n ),\n },\n ];\n\n const modifyTaskTabData = (taskTabID: number, newRecordData: any) => {\n try {\n const taskTabIndex = taskTabs.findIndex(t => t.defaulttasktab_id === taskTabID);\n\n if (taskTabIndex !== undefined && taskTabIndex >= 0) {\n taskTabs[taskTabIndex] = { ...taskTabs[taskTabIndex], ...newRecordData };\n setTaskTabs([...taskTabs]);\n }\n } catch (error) {\n console.log('🚀 ~ file: taskSetting.tsx ~ line 288 ~ modifyTaskTabData ~ error', error);\n }\n };\n\n const deleteTaskList = (taskListID: number) => {\n try {\n const taskListIndex = taskTabs.findIndex(t => t.defaulttasktab_id === taskListID);\n\n if (taskListIndex !== undefined && taskListIndex >= 0) {\n taskTabs.splice(taskListIndex, 1);\n setTaskTabs([...taskTabs]);\n }\n } catch (error) {\n console.log('🚀 ~ file: taskSetting.tsx ~ line 292 ~ deleteTaskList ~ error', error);\n }\n };\n\n const addNewTaskTab = (taskTabData: DefaultTaskTabType) => {\n try {\n taskTabs.unshift(taskTabData);\n setTaskTabs([...taskTabs]);\n } catch (error) {\n console.log('🚀 ~ file: taskSetting.tsx ~ line 267 ~ deleteTask ~ error', error);\n }\n };\n\n const _saveTaskTabData = (TaskTab: DefaultTaskTabType, newRecordData: any) => {\n setTimeout(() => {\n modifyTaskTabData(TaskTab.defaulttasktab_id, { ...TaskTab, ...newRecordData });\n }, 0);\n return updateDefaultTaskTabData(TaskTab.defaulttasktab_id, newRecordData).then(() => {\n showMessage('success', 'Selected task list data has been updated.');\n return true;\n });\n };\n\n const _deleteSelectedTaskTab = (taskTabID: number) => {\n return deleteDefaultTaskTab(taskTabID)\n .then(() => {\n showMessage('success', 'Selected task list has been deleted.');\n deleteTaskList(taskTabID);\n })\n .catch(() => {});\n };\n\n const _saveNewTaskTab = () => {\n const payload = {\n name: 'Untitled',\n\n toggle: false,\n };\n\n return addNewDefaultTaskTab(payload)\n .then(({ data }) => {\n showMessage('success', `New task list: \"Untitled\" has been added.`);\n addNewTaskTab(data);\n // update onboarding step to completed\n updateOnboardingStep('add_new_task_template', HomeCtx.refetchOnboardingList);\n })\n .catch(() => {});\n };\n\n const ExpandedRowComponent: React.FC<{ TaskTab: DefaultTaskTabType }> = ({ TaskTab }) => {\n const [editableKeysTask, setEditableKeysTask] = useState<React.Key[]>([]);\n const [tabTasks, setTabTasks] = useState<DefaultTaskType[]>(TaskTab.defaulttasks || []);\n\n const deleteTask = (taskID: number) => {\n try {\n const taskIndex = tabTasks.findIndex(t => t.defaulttask_id === taskID);\n\n if (taskIndex !== undefined && taskIndex >= 0) {\n tabTasks.splice(taskIndex, 1);\n setTabTasks([...tabTasks]);\n }\n } catch (error) {\n console.log('🚀 ~ file: taskSetting.tsx:418 ~ deleteTask ~ error:', error);\n }\n };\n\n const _deleteSelectedTask = (TaskTab: DefaultTaskTabType, taskID: number) => {\n return deleteDefaultTask(TaskTab.defaulttasktab_id, taskID)\n .then(() => {\n showMessage('success', 'Selected task has been deleted.');\n\n deleteTask(taskID);\n })\n .catch(() => {});\n };\n\n const addNewTask = (taskData: DefaultTaskType) => {\n try {\n tabTasks.unshift(taskData);\n setTabTasks([...tabTasks]);\n\n setEditableKeysTask([...editableKeysTask, taskData.defaulttask_id]);\n } catch (error) {\n console.log('🚀 ~ file: taskSetting.tsx ~ line 267 ~ deleteTask ~ error', error);\n }\n };\n\n const _saveNewTask = () => {\n const defaulttask_id_dummy = Date.now();\n\n const payload = {\n title: 'Untitled',\n position_order: tabTasks.length ? (tabTasks[0].position_order || 0) - 1 : -1,\n\n toggle: true,\n };\n\n return addNewDefaultTaskData(TaskTab.defaulttasktab_id, payload)\n .then(({ data }) => {\n showMessage(\n 'success',\n `New task: \"Untitled\" has been added to task list: \"${TaskTab.name}\".`\n );\n\n addNewTask(data);\n })\n .catch(() => {\n deleteTask(defaulttask_id_dummy);\n });\n };\n\n const _saveTaskData = (\n TaskTab: DefaultTaskTabType,\n task: DefaultTaskType,\n newRecordData: any\n ) => {\n return updateDefaultTaskData(\n TaskTab.defaulttasktab_id,\n task.defaulttask_id,\n newRecordData\n ).then(() => {\n modifyTaskData(task.defaulttask_id, { ...task, ...newRecordData });\n\n showMessage('success', 'Selected task data has been updated.');\n return true;\n });\n };\n\n const modifyTaskData = (taskID: number, newRecordData: any) => {\n try {\n const taskIndex = tabTasks?.findIndex(t => t.defaulttask_id === taskID);\n\n if (taskIndex !== undefined && taskIndex >= 0 && tabTasks[taskIndex]) {\n tabTasks![taskIndex] = {\n ...tabTasks[taskIndex],\n ...newRecordData,\n };\n\n if (tabTasks[taskIndex]?.defaulttasksalert) {\n if ('num_days' in newRecordData) {\n tabTasks![taskIndex].defaulttasksalert!.num_days =\n typeof newRecordData.num_days === 'number'\n ? newRecordData.num_days\n : null;\n }\n if ('before_after' in newRecordData) {\n tabTasks![taskIndex].defaulttasksalert!.before_after =\n newRecordData.before_after || null;\n }\n if ('date' in newRecordData) {\n tabTasks![taskIndex].defaulttasksalert!.date =\n newRecordData.date || null;\n }\n } else if (newRecordData?.defaulttasksalert) {\n tabTasks[taskIndex].defaulttasksalert = newRecordData.defaulttasksalert;\n }\n\n if (newRecordData.toggle === false) {\n tabTasks![taskIndex].defaulttask_preference = {\n defaulttask_id: taskID.toString(),\n defaulttasks_preference_id:\n tabTasks![taskIndex].defaulttask_preference\n ?.defaulttasks_preference_id || -1,\n defaulttasktab_id: TaskTab.defaulttasktab_id,\n toggle: 0,\n parent_account_id: TaskTab.parent_account_id,\n };\n } else {\n tabTasks![taskIndex].defaulttask_preference = undefined;\n }\n\n setTabTasks([...tabTasks]);\n }\n } catch (error) {\n console.log('🚀 ~ file: taskSetting.tsx:400 ~ modifyTaskData ~ error:', error);\n }\n };\n\n const _moveUp = async (index: number, taskRecord: DefaultTaskType) => {\n let seen = new Set();\n // check if in tab there is any duplicated position order\n // will regroup the position order if found any\n const isPositionOrderDuplicate = tabTasks.some(function (currentObject) {\n return seen.size === seen.add(currentObject.position_order).size;\n });\n if (isPositionOrderDuplicate) {\n const payload = tabTasks.map((task: DefaultTaskType, idx: number) => {\n tabTasks[idx].position_order = idx;\n return {\n defaulttask_id: task.defaulttask_id,\n position_order: idx,\n };\n });\n await bulkUpdateDefaultTaskPositions(TaskTab.defaulttasktab_id, payload);\n }\n\n let tempTaskRecord = taskRecord;\n tabTasks[index] = tabTasks[index - 1];\n tabTasks[index - 1] = tempTaskRecord;\n\n const tempPositionOrder = tabTasks[index].position_order;\n tabTasks[index].position_order = tabTasks[index - 1].position_order;\n tabTasks[index - 1].position_order = tempPositionOrder;\n\n setTabTasks([...tabTasks]);\n\n // update the corresponding order positions\n await bulkUpdateDefaultTaskPositions(TaskTab.defaulttasktab_id, [\n {\n defaulttask_id: tabTasks[index].defaulttask_id,\n position_order: tabTasks[index].position_order ?? index,\n },\n {\n defaulttask_id: tabTasks[index - 1].defaulttask_id,\n position_order: tabTasks[index - 1].position_order ?? index - 1,\n },\n ]);\n };\n\n const _moveDown = async (index: number, taskRecord: DefaultTaskType) => {\n let seen = new Set();\n // check if in tab there is any duplicated position order\n // will regroup the position order if found any\n const isPositionOrderDuplicate = tabTasks.some(function (currentObject) {\n return seen.size === seen.add(currentObject.position_order).size;\n });\n if (isPositionOrderDuplicate) {\n const payload = tabTasks.map((task: DefaultTaskType, index: number) => {\n tabTasks[index].position_order = index;\n return {\n defaulttask_id: task.defaulttask_id,\n position_order: index,\n };\n });\n await bulkUpdateDefaultTaskPositions(TaskTab.defaulttasktab_id, payload);\n }\n let tempTaskRecord = taskRecord;\n tabTasks[index] = tabTasks[index + 1];\n tabTasks[index + 1] = tempTaskRecord;\n\n const tempPositionOrder = tabTasks[index].position_order;\n tabTasks[index].position_order = tabTasks[index + 1].position_order;\n tabTasks[index + 1].position_order = tempPositionOrder;\n\n setTabTasks([...tabTasks]);\n\n // update the corresponding order positions\n await bulkUpdateDefaultTaskPositions(TaskTab.defaulttasktab_id, [\n {\n defaulttask_id: tabTasks[index].defaulttask_id,\n position_order: tabTasks[index].position_order ?? index,\n },\n {\n defaulttask_id: tabTasks[index + 1].defaulttask_id,\n position_order: tabTasks[index + 1].position_order ?? index + 1,\n },\n ]);\n };\n\n const taskColumns: ProColumns<DefaultTaskType>[] = [\n {\n title: 'Order',\n dataIndex: 'position_order',\n key: 'position_order',\n width: '68px',\n editable: false,\n render(dom, entity, index, action, schema) {\n return (\n <Space>\n <Button\n icon={<DownOutlined />}\n size=\"small\"\n disabled={index === tabTasks.length - 1}\n onClick={() => {\n _moveDown(index, entity);\n }}\n />\n <Button\n icon={<UpOutlined />}\n size=\"small\"\n disabled={index === 0}\n onClick={() => {\n _moveUp(index, entity);\n }}\n />\n </Space>\n );\n },\n },\n {\n title: 'On/Off',\n dataIndex: 'toggle',\n key: 'toggle',\n width: '55px',\n editable: false,\n render(dom, entity, index, action, schema) {\n return (\n <Switch\n size=\"small\"\n checkedChildren={<EyeOutlined />}\n unCheckedChildren={<EyeInvisibleOutlined />}\n defaultChecked={\n !entity.defaulttask_preference ||\n entity.defaulttask_preference?.toggle\n ? true\n : false\n }\n onChange={(val: boolean) => {\n setTimeout(() => {\n _saveTaskData(TaskTab, entity, {\n toggle: val,\n });\n }, 500);\n }}\n />\n );\n },\n },\n {\n title: 'Task Title',\n dataIndex: 'title',\n key: 'title',\n width: '360px',\n fieldProps: (_, config) => {\n return {\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {},\n };\n },\n formItemProps: (form, config) => {\n return {\n rules: [\n {\n required: true,\n },\n ],\n };\n },\n },\n {\n title: 'Due Date',\n dataIndex: 'num_days',\n key: 'num_days',\n width: '140px',\n valueType: 'digit',\n formItemProps: (form, config) => {\n return {\n initialValue: config.entity.defaulttasksalert?.num_days,\n };\n },\n fieldProps: (_, config) => {\n return {\n placeholder: 'Day(s)',\n addonAfter: 'Day(s)',\n style: { width: '140px' },\n };\n },\n render: (_, record) => (\n <span>\n {typeof record.defaulttasksalert?.num_days === 'number' &&\n record.defaulttasksalert?.before_after &&\n record.defaulttasksalert?.date\n ? `${record.defaulttasksalert?.num_days} Day(s)`\n : '-'}\n </span>\n ),\n colSpan: 3,\n },\n {\n title: 'before_after',\n dataIndex: 'before_after',\n key: 'before_after',\n width: 94,\n valueType: 'select',\n formItemProps: (_, config) => {\n return {\n initialValue: config.entity.defaulttasksalert?.before_after,\n };\n },\n fieldProps: (_, config) => {\n return {\n style: {\n width: 86,\n },\n placeholder: 'Select',\n options: [\n {\n label: 'Before',\n value: 'before',\n },\n {\n label: 'After',\n value: 'after',\n },\n ],\n onChange: (val: string) => {},\n };\n },\n render: (_, record) => (\n <span>\n {typeof record.defaulttasksalert?.num_days === 'number' &&\n record.defaulttasksalert?.before_after &&\n record.defaulttasksalert?.date ? (\n <span style={{ textTransform: 'capitalize' }}>\n {record.defaulttasksalert.before_after}\n </span>\n ) : (\n '-'\n )}\n </span>\n ),\n colSpan: 0,\n },\n {\n title: 'date',\n dataIndex: 'date',\n key: 'date',\n width: 220,\n valueType: 'select',\n formItemProps: (_, config) => {\n return {\n initialValue: config.entity.defaulttasksalert?.date,\n };\n },\n fieldProps: (_, config) => {\n return {\n style: {\n width: 220,\n },\n placeholder: 'Select Date Type',\n options: dateAlertGroupOptions,\n showSearch: true,\n filterOption: SELECT_OPTGROUP_FILTEROPT,\n onChange: (val: string) => {},\n };\n },\n render: (_, record) => {\n let dateName = '-';\n if (\n typeof record.defaulttasksalert?.num_days === 'number' &&\n record.defaulttasksalert?.before_after &&\n record.defaulttasksalert?.date\n ) {\n if (record.defaulttasksalert?.date.includes('FIELD-ID')) {\n const optObj = dateAlertOptionsFlatten.find(\n opt => opt.value === record.defaulttasksalert?.date\n );\n if (optObj) {\n dateName = optObj.label;\n }\n } else {\n dateName = record.defaulttasksalert.date?.replaceAll('_', ' ');\n }\n }\n return <span style={{ textTransform: 'capitalize' }}>{dateName}</span>;\n },\n colSpan: 0,\n },\n {\n title: 'Assignee',\n dataIndex: 'assignee',\n key: 'assignee',\n width: '180px',\n valueType: 'select',\n fieldProps: (_, config) => {\n return {\n style: {\n maxWidth: '180px',\n width: '180px',\n },\n placeholder: 'Select Assignee',\n showSearch: true,\n options: teamMembers?.map(user => ({\n label: user.fullname,\n value: user.account_id,\n })),\n onChange: (val: string) => {},\n };\n },\n formItemProps: (form, config) => {\n return {\n initialValue: config.entity.assignee,\n };\n },\n },\n {\n title: 'Email Template',\n dataIndex: 'email_template_id',\n key: 'email_template_id',\n width: '220px',\n valueType: 'select',\n fieldProps: (_, config) => {\n return {\n style: {\n maxWidth: '220px',\n width: '220px',\n },\n placeholder: 'Select Template',\n options: emailTemplateFolders?.map(folder => ({\n label: `${folder.folder_name}${\n folder.is_shared && folder.account_id !== UserInfo?.account_id\n ? ` - Shared by ${folder?.account?.fullname}`\n : ``\n }`,\n options: folder.email_templates?.map(emailTemplate => ({\n label: emailTemplate.template_name,\n value: emailTemplate.email_template_id,\n })),\n })),\n showSearch: true,\n filterOption: SELECT_OPTGROUP_FILTEROPT,\n onChange: (val: string) => {},\n };\n },\n formItemProps: (form, config) => {\n return {\n initialValue: config.entity.email_template_id,\n };\n },\n },\n {\n title: 'Action',\n width: '140px',\n dataIndex: '',\n valueType: 'option',\n fixed: 'right',\n render: (_, record, index, action) => (\n <span>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EditFilled />}\n title=\"Edit this row\"\n size=\"small\"\n onClick={() => {\n setEditableKeysTask([...editableKeysTask, record.defaulttask_id]);\n }}\n >\n Edit\n </Button>\n </span>\n ),\n },\n ];\n\n return (\n <div className=\"expanded-row-with-table\">\n <div>\n <Alert\n message={\n <>\n Tip: Click the <b>Edit</b> button, and then hit the{' '}\n <SaveFilled style={{ color: '#1890ff' }} /> icon to save your\n changes when editing task's title, due date, assignee, and/or linked\n email template.\n </>\n }\n type=\"info\"\n showIcon\n className=\"mb-3\"\n />\n </div>\n <ProTable\n className=\"mt-3\"\n size=\"small\"\n rowKey=\"defaulttask_id\"\n pagination={{ pageSize: 100 }}\n showSorterTooltip={false}\n search={false}\n columns={taskColumns}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n scroll={{ x: 1800, y: 600 }}\n dataSource={tabTasks}\n editable={{\n editableKeys: editableKeysTask,\n type: 'multiple',\n onSave: async (key, newData: any, oldData) => {\n if ('num_days' in newData) {\n newData.num_days =\n typeof newData.num_days === 'number' ? newData.num_days : null;\n }\n if ('before_after' in newData) {\n newData.before_after = newData.before_after || null;\n }\n if ('date' in newData) {\n newData.date = newData.date || null;\n }\n if ('assignee' in newData) {\n newData.assignee = newData.assignee || null;\n }\n if ('email_template_id' in newData) {\n newData.email_template_id = newData.email_template_id || null;\n }\n return _saveTaskData(TaskTab, newData, newData).then(() => {\n setEditableKeysTask([\n ...editableKeysTask.filter(keyItem => keyItem !== key),\n ]);\n return true;\n });\n },\n onDelete: (_, row) => {\n return _deleteSelectedTask(TaskTab, row.defaulttask_id);\n },\n onCancel: (key, record, originRow, newLineConfig) => {\n setEditableKeysTask([\n ...editableKeysTask.filter(keyItem => keyItem !== key),\n ]);\n return Promise.resolve(true);\n },\n saveText: (\n <>\n <Button\n className=\"p-0 pl-1\"\n type=\"link\"\n icon={<SaveFilled />}\n ></Button>\n </>\n ),\n deleteText: (\n <>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<DeleteFilled />}\n title=\"Delete this task?\"\n size=\"small\"\n danger\n ></Button>\n </>\n ),\n deletePopconfirmMessage: 'Delete this task?',\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n toolBarRender={() => [\n <Button size=\"small\" key=\"3\" type=\"primary\" onClick={() => _saveNewTask()}>\n <CheckSquareOutlined />\n New Task\n </Button>,\n ]}\n />\n </div>\n );\n };\n\n const _fetchTeamMembers = () => {\n getAllTeamMembers().then(({ data }) => {\n setTeamMembers((data as AccountCompactDataType[]) || []);\n });\n };\n\n const _fetchEmailTemplates = () => {\n getFoldersWithEmailTemplates().then(({ data }) => {\n setEmailTemplateFolders(data);\n });\n };\n\n const _fetchData = () => {\n _fetchTaskTabsDetail();\n _fetchTeamMembers();\n _fetchEmailTemplates();\n\n _fetchCustomSections();\n };\n\n useEffect(() => {\n _fetchData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Form layout=\"vertical\" form={form} requiredMark={false}>\n <Row>\n <Col span={18} style={{ textAlign: 'left' }} className=\"text-help\">\n <InfoCircleOutlined /> Tip: Check the box in the On/Off column to have this task\n list automatically added to all <b>new transactions</b>.\n </Col>\n <Col span={6} style={{ textAlign: 'right' }}>\n <Button\n className=\"ez-action-btn mr-3\"\n icon={<ReloadOutlined />}\n onClick={() => {\n _fetchData();\n }}\n loading={isFetchingTaskTabs}\n disabled={isFetchingTaskTabs}\n >\n Reload\n </Button>\n <Button key=\"3\" type=\"primary\" onClick={() => _saveNewTaskTab()}>\n <PlusOutlined />\n New Task List\n </Button>\n </Col>\n <Col span={24} className=\"mt-3\">\n <ProTable\n rowKey=\"defaulttasktab_id\"\n showSorterTooltip={false}\n search={false}\n tableLayout=\"fixed\"\n // scroll={{ x: 1100 }}\n loading={isFetchingTaskTabs}\n columns={columns}\n expandable={{\n expandedRowRender: (record: DefaultTaskTabType) => {\n return <ExpandedRowComponent TaskTab={record} />;\n },\n expandedRowKeys: expandedRecordIDs,\n expandRowByClick: false,\n onExpand: (expanded, record: DefaultTaskTabType) => {\n if (\n expanded &&\n !expandedRecordIDs.includes(record.defaulttasktab_id)\n ) {\n setExpandedRecordIDs([record.defaulttasktab_id]);\n } else {\n setExpandedRecordIDs([]);\n }\n },\n }}\n editable={{\n actionRender: (_, __, defaultDom) => [\n defaultDom.save,\n defaultDom.cancel,\n ],\n type: 'multiple',\n onSave: async (_, newData: DefaultTaskTabType, oldData) => {\n return _saveTaskTabData(oldData, { name: newData.name });\n },\n onDelete: (key, row) => {\n _deleteSelectedTaskTab(row.defaulttasktab_id);\n return Promise.resolve(true);\n },\n saveText: (\n <>\n <Button className=\"p-0 pl-1\" type=\"link\" icon={<SaveFilled />}>\n Save\n </Button>\n </>\n ),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n // scroll={{ x: 2000 }}\n dataSource={taskTabs}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n />\n </Col>\n </Row>\n </Form>\n );\n};\n","import {\n CloseOutlined,\n DeleteFilled,\n EditFilled,\n EyeInvisibleOutlined,\n EyeOutlined,\n FileOutlined,\n LinkOutlined,\n PlusOutlined,\n SaveFilled,\n} from '@ant-design/icons';\nimport { ProColumns, ProTable } from '@ant-design/pro-components';\nimport { Alert, Button, Divider, Switch, Tag } from 'antd';\nimport { useState } from 'react';\nimport { DocFolderType, TemplateDocType } from 'types/transaction';\nimport {\n addNewDocumentTemplate,\n deleteDocumentTemplate,\n updateTemplateData,\n} from 'utils/ez_api/AdminAPIs';\nimport { showMessage } from 'utils/notificationUtil';\n\nexport const ExpandedRowComponent: React.FC<{ Folder: DocFolderType }> = ({ Folder }) => {\n const [editableKeysTask, setEditableKeysTask] = useState<React.Key[]>([]);\n const [folderDoc, setfolderDoc] = useState<TemplateDocType[]>(Folder.docs_templates || []);\n\n const deleteTemplate = (id: number) => {\n try {\n const templateDocIndex = folderDoc.findIndex(t => t.docs_template_id === id);\n\n if (templateDocIndex !== undefined && templateDocIndex >= 0) {\n folderDoc.splice(templateDocIndex, 1);\n setfolderDoc([...folderDoc]);\n }\n } catch (error) {\n console.log('🚀 ~ file: ExpandedRowTable.tsx:36 ~ deleteTemplate ~ error:', error);\n }\n };\n\n const _deleteSelectedTemplate = async (Folder: DocFolderType, docs_template_id: number) => {\n return deleteDocumentTemplate(Folder.folder_id, docs_template_id)\n .then(() => {\n showMessage('success', 'Selected Template has been deleted.');\n\n deleteTemplate(docs_template_id);\n })\n .catch(() => {});\n };\n\n const addNewTask = (taskData: TemplateDocType) => {\n try {\n folderDoc.unshift(taskData);\n setfolderDoc([...folderDoc]);\n\n setEditableKeysTask([...editableKeysTask, taskData.docs_template_id]);\n } catch (error) {\n console.log('🚀 ~ file: docfoldersetting.tsx ~ addnewtemplate ~ error', error);\n }\n };\n\n const _saveNewTask = async () => {\n const docs_template_iddummy = Date.now();\n\n const payload = {\n docs_template_name: 'Untitled',\n };\n\n return addNewDocumentTemplate(Folder.folder_id, payload)\n .then(({ data }) => {\n showMessage(\n 'success',\n `New task: \"Untitled\" has been added to Folder: \"${Folder.folder_name}\".`\n );\n\n addNewTask(data);\n })\n .catch(() => {\n deleteTemplate(docs_template_iddummy);\n });\n };\n\n const _saveTemplateData = async (\n Folder: DocFolderType,\n template: TemplateDocType,\n newRecordData: any\n ) => {\n return updateTemplateData(Folder.folder_id, template.docs_template_id, newRecordData).then(\n () => {\n modifyTaskData(template.docs_template_id, { ...template, ...newRecordData });\n\n showMessage('success', 'Selected template data has been updated.');\n return true;\n }\n );\n };\n\n const modifyTaskData = (taskID: number, newRecordData: any) => {\n try {\n const templateDocIndex = folderDoc?.findIndex(t => t.docs_template_id === taskID);\n\n if (\n templateDocIndex !== undefined &&\n templateDocIndex >= 0 &&\n folderDoc[templateDocIndex]\n ) {\n folderDoc![templateDocIndex] = {\n ...folderDoc[templateDocIndex],\n ...newRecordData,\n };\n\n if (newRecordData.toggle === false) {\n folderDoc![templateDocIndex] = {\n docs_template_id: Number(taskID.toString()),\n folder_id: Folder.folder_id,\n toggle: 1,\n type: folderDoc![templateDocIndex].type,\n docs_template_name: folderDoc![templateDocIndex].docs_template_name,\n account_id: Folder.parent_account_id,\n parent_account_id: Folder.parent_account_id,\n };\n }\n\n setfolderDoc([...folderDoc]);\n }\n } catch (error) {\n console.log('🚀 ~ file: taskSetting.tsx:400 ~ modifyTaskData ~ error:', error);\n }\n };\n const taskColumns: ProColumns<TemplateDocType>[] = [\n {\n title: 'Status',\n dataIndex: 'toggle',\n key: 'toggle',\n width: '55px',\n editable: false,\n render(dom, entity, index, action, schema) {\n return (\n <Switch\n size=\"small\"\n checkedChildren={<EyeOutlined />}\n unCheckedChildren={<EyeInvisibleOutlined />}\n defaultChecked={entity.toggle === 1 ? true : false}\n onChange={(val: boolean) => {\n setTimeout(() => {\n _saveTemplateData(Folder, entity, {\n toggle: val,\n });\n }, 500);\n }}\n />\n );\n },\n },\n {\n title: 'Document Title',\n dataIndex: 'docs_template_name',\n key: 'docs_template_name',\n width: '360px',\n fieldProps: (_, config) => {\n return {\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {},\n };\n },\n formItemProps: (form, config) => {\n return {\n rules: [\n {\n required: true,\n },\n ],\n };\n },\n },\n {\n title: 'Attachment Type',\n dataIndex: 'type',\n key: 'type',\n width: '360px',\n valueType: 'select',\n formItemProps: (_, config) => {\n return {\n initialValue: config.type,\n };\n },\n fieldProps: (_, config) => {\n return {\n style: {\n width: 86,\n },\n placeholder: 'Select',\n options: [\n {\n label: 'Weblink',\n value: 'Weblink',\n },\n {\n label: 'File',\n value: 'file',\n },\n ],\n onChange: (val: string) => {},\n };\n },\n render: (_, record) => (\n <Tag className={`mr-2 `}>\n {record.type === 'weblink' ? (\n <LinkOutlined className=\"\" />\n ) : (\n <FileOutlined className=\"\" />\n )}\n <span style={{ textTransform: 'capitalize' }}>{record.type}</span>\n </Tag>\n ),\n },\n {\n title: 'Action',\n width: '140px',\n dataIndex: '',\n valueType: 'option',\n fixed: 'right',\n render: (_, record, index, action) => (\n <span>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EditFilled />}\n title=\"Edit this row\"\n size=\"small\"\n onClick={() => {\n setEditableKeysTask([...editableKeysTask, record.docs_template_id]);\n }}\n >\n Edit\n </Button>\n </span>\n ),\n },\n ];\n\n return (\n <div className=\"expanded-row-with-table\">\n <div>\n <Alert\n message={\n <>\n Tip: Click the <b>Edit</b> button, and then hit the{' '}\n <SaveFilled style={{ color: '#1890ff' }} /> icon to save your changes\n when editing Document title and Attachment Type.\n </>\n }\n type=\"info\"\n showIcon\n className=\"mb-3\"\n />\n </div>\n <ProTable\n className=\"mt-3\"\n size=\"small\"\n rowKey=\"docs_template_id\"\n pagination={{ pageSize: 100 }}\n showSorterTooltip={false}\n search={false}\n columns={taskColumns}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n dataSource={folderDoc}\n editable={{\n editableKeys: editableKeysTask,\n type: 'multiple',\n onSave: async (key, newData: any, oldData) => {\n return _saveTemplateData(Folder, newData, newData).then(() => {\n setEditableKeysTask([\n ...editableKeysTask.filter(keyItem => keyItem !== key),\n ]);\n return true;\n });\n },\n onDelete: (_, row) => {\n return _deleteSelectedTemplate(Folder, row.docs_template_id);\n },\n onCancel: (key, record, originRow, newLineConfig) => {\n setEditableKeysTask([\n ...editableKeysTask.filter(keyItem => keyItem !== key),\n ]);\n return Promise.resolve(true);\n },\n saveText: (\n <>\n <Button className=\"p-0 pl-1\" type=\"link\" icon={<SaveFilled />}></Button>\n </>\n ),\n deleteText: (\n <>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<DeleteFilled />}\n title=\"Delete this task?\"\n size=\"small\"\n danger\n ></Button>\n </>\n ),\n deletePopconfirmMessage: 'Delete this task?',\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n toolBarRender={() => [\n <Button\n className=\"ez-action-btn\"\n size=\"large\"\n key=\"3\"\n onClick={() => _saveNewTask()}\n >\n <PlusOutlined />\n Add Document\n </Button>,\n ]}\n />\n </div>\n );\n};\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Button, Col, Divider, Form, Input, Popconfirm, Row, Switch, Typography } from 'antd';\nimport {\n CloseOutlined,\n DeleteOutlined,\n EditFilled,\n EyeInvisibleOutlined,\n EyeOutlined,\n InfoCircleOutlined,\n SaveFilled,\n} from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\nimport { ProTable } from '@ant-design/pro-components';\n\n// EZ web-app utils import\nimport { showMessage } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport {\n addNewDocumentFolder,\n deleteDocumentFolder,\n getDocumentFolders,\n updateDocumentFolder,\n} from 'utils/ez_api/AdminAPIs';\n// EZ web-app types import\nimport { DocFolderType } from 'types/transaction';\nimport { updateOnboardingStep } from 'utils/onboardingUtil';\nimport { HomeContext } from 'context/EZContext';\nimport { ExpandedRowComponent } from 'components/table/ExpandedRowTable';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nconst DOC_IDS_FIXED = [1, 4];\n\nexport const DocFolderSetting: React.FC<{}> = ({}) => {\n const [form] = Form.useForm();\n const HomeCtx = useContext(HomeContext);\n\n const [isFetchingDocFolders, setIsFetchingDocFolders] = useState(false);\n const [docFolders, setDocFolders] = useState<DocFolderType[]>([]);\n const [expandedRecordIDs, setExpandedRecordIDs] = useState<React.Key[]>([]);\n\n const _fetchDocFolders = () => {\n setIsFetchingDocFolders(true);\n getDocumentFolders()\n .then(({ data }) => {\n const respData = data as DocFolderType[];\n setDocFolders(respData || []);\n })\n .finally(() => {\n setIsFetchingDocFolders(false);\n });\n };\n\n const columns: ProColumns<DocFolderType>[] = [\n {\n title: 'Status',\n dataIndex: 'toggle',\n key: 'toggle',\n width: '80px',\n editable: false,\n render: (_, record) => (\n <Form.Item\n name={[`${record.folder_id}`, 'toggle']}\n noStyle\n valuePropName=\"checked\"\n initialValue={record.doc_folder_preference?.toggle === 0 ? false : true}\n >\n <Switch\n disabled={DOC_IDS_FIXED.includes(record.folder_id) ? true : false}\n checkedChildren={<EyeOutlined />}\n unCheckedChildren={<EyeInvisibleOutlined />}\n defaultChecked={false}\n onChange={(val: boolean) => {\n _toggleDoc(record, {\n toggle: val === true ? 1 : 0,\n });\n }}\n />\n </Form.Item>\n ),\n },\n\n {\n title: 'Name',\n dataIndex: 'new_folder_name',\n key: 'new_folder_name',\n render: (_, record) => (\n <span>{record.doc_folder_preference?.folder_name || record.folder_name}</span>\n ),\n formItemProps: (form, config) => {\n return {\n initialValue:\n config.entity.doc_folder_preference?.folder_name ||\n config.entity.folder_name,\n // rules: [{ required: true }],\n };\n },\n },\n {\n title: 'Files Information',\n dataIndex: 'files_information',\n key: 'files_information',\n render: (_, record) => (\n <span>{record.doc_folder_preference?.files_information || '-'}</span>\n ),\n formItemProps: (form, config) => {\n return {\n initialValue: config.entity.doc_folder_preference?.files_information || '-',\n };\n },\n },\n {\n title: 'Action',\n dataIndex: '',\n width: '180px',\n key: 'x',\n valueType: 'option',\n render: (_, record, index, action) =>\n !DOC_IDS_FIXED.includes(record.folder_id) ? (\n <span>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EditFilled />}\n title=\"Edit\"\n size=\"small\"\n onClick={() => {\n action?.startEditable(record.folder_id);\n }}\n >\n Edit\n </Button>\n {record.folder_id !== 2 ? (\n <>\n <Divider type=\"vertical\" />\n <Popconfirm\n placement=\"left\"\n title={\n <>\n Delete Folder <b>{record.folder_name}</b>? deleting a\n Folder will also delete the Templates within it\n </>\n }\n onConfirm={() => _deleteFolder(record)}\n >\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<DeleteOutlined />}\n title=\"Delete this list\"\n size=\"small\"\n danger\n ></Button>\n </Popconfirm>\n </>\n ) : (\n <></>\n )}\n </span>\n ) : (\n <span></span>\n ),\n },\n ];\n const onboardingCustomDocsFolder = () => {\n // update onboarding step to completed\n updateOnboardingStep('customize_document_folder', HomeCtx.refetchOnboardingList);\n };\n\n const _deleteFolder = async (folder: DocFolderType) => {\n await deleteDocumentFolder(folder.folder_id);\n _fetchDocFolders();\n setTimeout(() => {\n showMessage(\n 'success',\n `New Folder: ${folder.folder_name} has been successfully deleted.`\n );\n }, 100);\n onboardingCustomDocsFolder();\n return true;\n };\n\n const _toggleDoc = (folder: DocFolderType, newRecordData: any) => {\n setTimeout(() => {\n modifyFolderData(folder.folder_id, { ...folder, ...newRecordData });\n }, 0);\n return updateDocumentFolder(folder.folder_id, newRecordData).then(() => {\n showMessage('success', 'Selected task list data has been updated.');\n return true;\n });\n // return updateDocumentFolder(folder.folder_id, {\n // toggle: folder.doc_folder_preference?.toggle === 0 ? 1 : 0,\n // }).then(() => {\n // _fetchDocFolders();\n // return true;\n // });\n };\n\n const modifyFolderData = (folderId: number, newRecordData: any) => {\n try {\n const folderIndex = docFolders.findIndex(t => t.folder_id === folderId);\n\n if (folderIndex !== undefined && folderIndex >= 0) {\n docFolders[folderIndex] = { ...docFolders[folderIndex], ...newRecordData };\n setDocFolders([...docFolders]);\n }\n } catch (error) {\n console.log(\n '🚀 ~ file: newDocFolderSetting.tsx ~ line 210 ~ modifyFolderData ~ error',\n error\n );\n }\n };\n\n const _saveEditFolder = (folder: DocFolderType) => {\n return updateDocumentFolder(folder.folder_id, {\n folder_name: folder.folder_name,\n files_information: folder.files_information,\n }).then(() => {\n _fetchDocFolders();\n setTimeout(() => {\n showMessage(\n 'success',\n `New name: ${folder.folder_name} has been successfully saved.`\n );\n }, 100);\n onboardingCustomDocsFolder();\n return true;\n });\n };\n\n const _onFinish = () => {\n addNewDocumentFolder({\n folder_name: 'Untitled',\n }).then(() => {\n _fetchDocFolders();\n form.resetFields();\n setTimeout(() => {\n showMessage('success', `New Folder: Untitled has been successfully added.`);\n }, 100);\n onboardingCustomDocsFolder();\n });\n };\n\n useEffect(() => {\n _fetchDocFolders();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row>\n <Col span={24} className=\"mb-4 mt-4\">\n <Row gutter={[0, 12]}>\n <Col span={10} className=\"text-help pl-4\">\n <InfoCircleOutlined /> Tip: Your documents folders will be the same in all\n transactions. The Unassigned Documents and the Disclosure Doc folders cannot\n be renamed nor deleted.\n </Col>\n <Col span={14} className=\"pr-4\">\n <Form\n layout=\"inline\"\n style={{ float: 'right' }}\n form={form}\n onFinish={_onFinish}\n requiredMark={false}\n >\n <Button\n type=\"primary\"\n style={{ borderRadius: '0px' }}\n htmlType=\"submit\"\n >\n Add Folder\n </Button>\n </Form>\n </Col>\n </Row>\n </Col>\n <Col span={24} className=\"mt-3\">\n <ProTable\n rowKey=\"folder_id\"\n showSorterTooltip={false}\n search={false}\n loading={isFetchingDocFolders}\n columns={columns}\n pagination={{ pageSize: 100 }}\n expandable={{\n expandedRowRender: (record: DocFolderType) => {\n return <ExpandedRowComponent Folder={record} />;\n },\n expandedRowKeys: expandedRecordIDs,\n onExpand: (expanded, record: DocFolderType) => {\n if (expanded) {\n setExpandedRecordIDs([record.folder_id]);\n } else {\n setExpandedRecordIDs([]);\n }\n },\n }}\n editable={{\n actionRender: (_, __, defaultDom) => [defaultDom.save, defaultDom.cancel],\n type: 'multiple',\n onSave: async (_, newData: DocFolderType, oldData) => {\n return _saveEditFolder({\n ...newData,\n folder_name: newData.new_folder_name,\n });\n },\n saveText: (\n <>\n <Button className=\"p-0 pl-1\" type=\"link\" icon={<SaveFilled />}>\n Save\n </Button>\n </>\n ),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n dataSource={docFolders}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n />\n </Col>\n </Row>\n );\n};\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Alert, Button, Checkbox, Col, Divider, Form, Input, Row, Space } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport {\n getPropertyStatusSetting,\n getPropertyTypeSetting,\n getSaleTypeSetting,\n updateTransactionSetting,\n} from 'utils/ez_api/AdminAPIs';\n// EZ web-app types import\nimport { PropStatusPreference, PropTypePreference, SaleTypePreference } from 'types/admin';\nimport { showNotification } from 'utils/notificationUtil';\nimport { PROPERTY_TYPES, SALE_TYPES, TRANSACTION_STATUSES } from 'types/transaction';\nimport { InfoCircleOutlined } from '@ant-design/icons';\nimport { updateOnboardingStep } from 'utils/onboardingUtil';\nimport { HomeContext } from 'context/EZContext';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nexport const TransactionStatusSetting: React.FC<{}> = ({}) => {\n const [form] = Form.useForm();\n\n const HomeCtx = useContext(HomeContext);\n\n const _fetchTransactionSetting = () => {\n getPropertyStatusSetting().then(({ data }) => {\n if (data) {\n const propStatusPreference = data as PropStatusPreference[];\n propStatusPreference.forEach(preferenceObj => {\n form.setFieldValue([`property_status`, `${preferenceObj.status_id}`], false);\n });\n }\n });\n };\n\n const _onFinishForm = (values: any) => {\n updateTransactionSetting(values).then(() => {\n showNotification('success', 'New setting has been successfully applied.');\n\n // set trigger to refetch data by key\n HomeCtx.setTriggerRefetchDataList(prev => [...prev, 'property_status']);\n // update onboarding step to completed\n updateOnboardingStep('customize_transaction_status', HomeCtx.refetchOnboardingList);\n });\n };\n\n useEffect(() => {\n _fetchTransactionSetting();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Form form={form} onFinish={_onFinishForm}>\n <Row>\n <Col span={24} className=\"mb-5\">\n <Alert\n message={`You need to hit the button \"Save Changes\" to save all the changes you have made.`}\n type=\"info\"\n showIcon\n action={\n <Space>\n <Button type=\"primary\" onClick={() => form.submit()}>\n Save Changes\n </Button>\n </Space>\n }\n />\n </Col>\n <Col span={24}>\n <Row gutter={[64, 64]}>\n {TRANSACTION_STATUSES.map((statusCategory, idx) => (\n <Col span={8} key={`statusCategory_${idx}`}>\n <Row gutter={[0, 8]}>\n <Col span={24} className=\"text-title-secondary\">\n Status - {statusCategory.status_category_label}\n </Col>\n <Divider className=\"mt-2 mb-3\" />\n {statusCategory.status_list.map((status, sIdx) => (\n <Col span={24} key={`status_list-${sIdx}`}>\n <Form.Item\n name={[`property_status`, `${status.status_id}`]}\n noStyle\n valuePropName=\"checked\"\n initialValue={true}\n >\n <Checkbox>{status.status}</Checkbox>\n </Form.Item>\n </Col>\n ))}\n </Row>\n </Col>\n ))}\n </Row>\n </Col>\n </Row>\n </Form>\n );\n};\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Alert, Button, Checkbox, Col, Divider, Form, Row, Space } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport { getPropertyTypeSetting, updateTransactionSetting } from 'utils/ez_api/AdminAPIs';\n// EZ web-app types import\nimport { PropTypePreference } from 'types/admin';\nimport { showNotification } from 'utils/notificationUtil';\nimport { PROPERTY_TYPES } from 'types/transaction';\nimport { HomeContext } from 'context/EZContext';\nimport { updateOnboardingStep } from 'utils/onboardingUtil';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nexport const TransactionPropTypeSetting: React.FC<{}> = ({}) => {\n const [form] = Form.useForm();\n\n const HomeCtx = useContext(HomeContext);\n\n const _fetchTransactionSetting = () => {\n getPropertyTypeSetting().then(({ data }) => {\n if (data) {\n const propTypePreference = data as PropTypePreference[];\n propTypePreference.forEach(preferenceObj => {\n form.setFieldValue([`property_types`, `${preferenceObj.type_id}`], false);\n });\n }\n });\n };\n\n const _onFinishForm = (values: any) => {\n updateTransactionSetting(values).then(() => {\n showNotification('success', 'New setting has been successfully applied.');\n\n // set trigger to refetch data by key\n HomeCtx.setTriggerRefetchDataList(prev => [...prev, 'property_type']);\n // update onboarding step to completed\n updateOnboardingStep('customize_property_status', HomeCtx.refetchOnboardingList);\n });\n };\n\n useEffect(() => {\n _fetchTransactionSetting();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Form form={form} onFinish={_onFinishForm}>\n <Row>\n <Col span={12} className=\"mb-5\">\n <Alert\n message={`You need to hit the button \"Save Changes\" to save all the changes you have made.`}\n type=\"info\"\n showIcon\n action={\n <Space>\n <Button type=\"primary\" onClick={() => form.submit()}>\n Save Changes\n </Button>\n </Space>\n }\n />\n </Col>\n <Col span={24}>\n <Row gutter={[64, 64]}>\n <Col span={12}>\n <Row gutter={[0, 8]}>\n <Col span={24} className=\"text-title-secondary\">\n Property Type\n </Col>\n <Divider className=\"mt-2 mb-3\" />\n {PROPERTY_TYPES.map(pType => (\n <Col span={24}>\n <Form.Item\n name={[`property_types`, `${pType.type_id}`]}\n noStyle\n valuePropName=\"checked\"\n initialValue={true}\n >\n <Checkbox>{pType.type_name}</Checkbox>\n </Form.Item>\n </Col>\n ))}\n </Row>\n </Col>\n </Row>\n </Col>\n </Row>\n </Form>\n );\n};\n","// Core React libraries import\nimport { useEffect, useContext } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Alert, Button, Col, Divider, Form, Input, Row, Space } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\nimport { getSaleTypeSetting, updateTransactionSetting } from 'utils/ez_api/AdminAPIs';\n// EZ web-app types import\nimport { SaleTypePreference } from 'types/admin';\nimport { showNotification } from 'utils/notificationUtil';\nimport { SALE_TYPES } from 'types/transaction';\nimport { InfoCircleOutlined } from '@ant-design/icons';\nimport { HomeContext } from 'context/EZContext';\nimport { updateOnboardingStep } from 'utils/onboardingUtil';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nexport const TransactionSaleTypeSetting: React.FC<{}> = ({}) => {\n const [form] = Form.useForm();\n\n const HomeCtx = useContext(HomeContext);\n\n const _fetchTransactionSetting = () => {\n getSaleTypeSetting().then(({ data }) => {\n if (data) {\n const saleTypePreference = data as SaleTypePreference[];\n saleTypePreference.forEach(preferenceObj => {\n form.setFieldValue(\n [`sale_types`, `${preferenceObj.sale_type_id}`],\n preferenceObj.sale_type_name\n );\n });\n }\n });\n };\n\n const _onFinishForm = (values: any) => {\n updateTransactionSetting(values).then(() => {\n showNotification('success', 'New setting has been successfully applied.');\n\n // set trigger to refetch data by key\n HomeCtx.setTriggerRefetchDataList(prev => [...prev, 'sales_type']);\n // update onboarding step to completed\n updateOnboardingStep('customize_sales_type', HomeCtx.refetchOnboardingList);\n });\n };\n\n useEffect(() => {\n _fetchTransactionSetting();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Form form={form} onFinish={_onFinishForm}>\n <Row>\n <Col span={12} className=\"mb-5\">\n <Alert\n message={`You need to hit the button \"Save Changes\" to save all the changes you have made.`}\n type=\"info\"\n showIcon\n action={\n <Space>\n <Button type=\"primary\" onClick={() => form.submit()}>\n Save Changes\n </Button>\n </Space>\n }\n />\n </Col>\n <Col span={24}>\n <Row gutter={[64, 64]}>\n <Col span={12}>\n <Row gutter={[0, 8]}>\n <Col span={24} className=\"text-title-secondary\">\n Sale Type:\n </Col>\n <Divider className=\"mt-2 mb-0\" />\n\n <Col span={24}>\n <Row>\n <Col\n span={24}\n className=\"mb-2\"\n style={{ color: '#8C8C8C' }}\n >\n <InfoCircleOutlined /> You can customize the names of\n the Sale Types. Just select one below and type a new\n name.\n </Col>\n <Col\n span={10}\n style={{ color: '#8C8C8C', paddingLeft: '0' }}\n >\n Default Name\n </Col>\n <Col\n span={14}\n className=\"mb-2\"\n style={{ color: '#8C8C8C' }}\n >\n New Name\n </Col>\n <Col span={24} className=\"\">\n <Divider className=\"mb-1 mt-1\" />\n </Col>\n </Row>\n </Col>\n {SALE_TYPES.map(saleType => (\n <Col span={24}>\n <Row>\n <Col span={10}>\n <Form.Item noStyle valuePropName=\"checked\">\n {saleType.saletype_name.replace(\n '(customize in admin)',\n ''\n )}\n </Form.Item>\n </Col>\n <Col span={14}>\n <Form.Item\n name={[\n `sale_types`,\n `${saleType.sale_type_id}`,\n ]}\n noStyle\n >\n <Input\n style={{ width: '75%' }}\n size=\"middle\"\n placeholder=\"Default\"\n allowClear\n />\n </Form.Item>\n </Col>\n </Row>\n </Col>\n ))}\n </Row>\n </Col>\n </Row>\n </Col>\n </Row>\n </Form>\n );\n};\n","// Core React libraries import\nimport { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Col, Row, Tabs } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\n// EZ web-app components import\nimport { CustomFieldSetting } from './transaction/customFieldsetting';\nimport { AlertSetting } from './transaction/alertSetting';\nimport { TaskSetting } from './transaction/taskSetting';\nimport { DocFolderSetting } from './transaction/newDocFolderSetting';\nimport { TransactionStatusSetting } from './transaction/transactionStatus';\nimport { TransactionPropTypeSetting } from './transaction/transactionPropType';\nimport { TransactionSaleTypeSetting } from './transaction/transactionSaleType';\nimport { HomeContext } from 'context/EZContext';\nimport { ACCOUNT_ROLE_HAS_ACCESS_TO_DETAIL_ADMIN_AREA } from 'types/account';\n\n// EZ web-app styles and assets import\n\nexport const TransactionSetting: React.FC<{}> = ({}) => {\n const [activeTabKey, setActiveTabKey] = useState('admin-alert-setting');\n const HomeCtx = useContext(HomeContext);\n const accountrole_id = HomeCtx.userPermission?.accountrole_id;\n\n const hasAccessToDetailAdmin = accountrole_id\n ? ACCOUNT_ROLE_HAS_ACCESS_TO_DETAIL_ADMIN_AREA.includes(accountrole_id)\n : false;\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row>\n <Col span={24}>\n <Tabs\n className=\"tab-team-member-setting\"\n defaultActiveKey=\"admin-alert-setting\"\n type=\"card\"\n activeKey={activeTabKey}\n onChange={key => setActiveTabKey(key)}\n destroyInactiveTabPane\n >\n <Tabs.TabPane tab=\"Alerts\" key=\"admin-alert-setting\">\n <AlertSetting />\n </Tabs.TabPane>\n {hasAccessToDetailAdmin ? (\n <>\n <Tabs.TabPane tab=\"Transaction Status\" key=\"admin-transaction-status\">\n <TransactionStatusSetting />\n </Tabs.TabPane>\n <Tabs.TabPane tab=\"Property Types\" key=\"admin-transaction-prop-type\">\n <TransactionPropTypeSetting />\n </Tabs.TabPane>\n <Tabs.TabPane tab=\"Sales Types\" key=\"admin-transaction-sale-type\">\n <TransactionSaleTypeSetting />\n </Tabs.TabPane>\n <Tabs.TabPane\n tab=\"Custom Section and Fields\"\n key=\"admin-custom-field-setting\"\n >\n <CustomFieldSetting />\n </Tabs.TabPane>\n <Tabs.TabPane tab=\"Task Templates\" key=\"admin-task-setting\">\n <TaskSetting />\n </Tabs.TabPane>\n <Tabs.TabPane tab=\"Document Templates\" key=\"admin-doc-folder-setting\">\n <DocFolderSetting />\n </Tabs.TabPane>\n </>\n ) : (\n <></>\n )}\n </Tabs>\n </Col>\n </Row>\n );\n};\n","import qs from 'qs';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\n\nexport const getAllOffices = (keyword?: string) => {\n const params: string = qs.stringify({\n keyword: keyword,\n });\n\n return APIRequest({\n method: 'get',\n url: apiUrl + 'offices?' + params,\n });\n};\n","// Core React libraries import\nimport { useContext, useEffect, useRef, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Alert,\n Button,\n Checkbox,\n Col,\n Divider,\n Dropdown,\n Form,\n Input,\n Menu,\n Modal,\n Popover,\n Radio,\n Row,\n Select,\n Space,\n Typography,\n} from 'antd';\nimport {\n CloseOutlined,\n DeleteOutlined,\n EditFilled,\n EllipsisOutlined,\n SaveFilled,\n SendOutlined,\n UnlockOutlined,\n UserAddOutlined,\n} from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\n\n// EZ web-app utils import\nimport { showMessage, showNotification } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport {\n addNewSubUser,\n deleteSubUser,\n getMaxNumberOfSubUsers,\n getSubUserPermission,\n getSubUsers,\n resendInvitation,\n updateSubUser,\n updateSubUserPermission,\n} from 'utils/ez_api/AdminAPIs';\n// EZ web-app types import\nimport { ACCOUNT_ROLES, AccountDataType, OfficeType, SubUserDataType } from 'types/account';\nimport { EZDateFormat, EZTable } from 'components';\nimport { forwardRefEZTableProps } from 'components/table/EZProTable';\nimport { getAllOffices } from 'utils/ez_api/officeAPIs';\nimport { AccountRolePermission } from './accountRoleSetting';\nimport { FormProps } from 'antd/es/form/Form';\nimport { updateOnboardingStep } from 'utils/onboardingUtil';\nimport { HomeContext } from 'context/EZContext';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nconst AGENT_ACCOUNTROLE_ID = 4;\n\nasync function _fetchData(EZTableQueryParams: string): Promise<any> {\n return getSubUsers(EZTableQueryParams).then(result => result);\n}\n\nconst UserRolesInformation = () => {\n return (\n <Row gutter={[0, 12]} style={{ width: '500px' }}>\n <Col>\n <b>Manager</b> - Has access to all transactions in the system and has full\n administrative access.\n </Col>\n <Col>\n <b>Broker</b> - Has access to all transactions in the system. This is perfect for a\n broker, or office manager or even a transaction coordinator who works on all of your\n transactions.\n </Col>\n <Col>\n <b>Coordinator</b> - Has access to transactions that they create themselves, or\n transactions that they are assigned to. To assign a Coordinator to a transaction,\n click the pen icon to edit a transaction and look for the 'Assign To' field\n underneath the 'Year Built' field at the top of your transaction page.\n </Col>\n <Col>\n <b>Agent</b> - Has access to transactions that they create themselves, or\n transactions that they are assigned to. To assign an agent to a transaction, click\n the pen icon to edit a transaction and then start typing an agents name in the\n Buyer's or Seller's agent fields. The system will search for that sub-user account.\n When the system finds their name, select their name and they will be assigned to the\n transaction.\n </Col>\n </Row>\n );\n};\n\nconst AccountPermission: React.FC<{ subUser: SubUserDataType }> = ({ subUser }) => {\n const [form] = Form.useForm();\n\n const [isPermissionSettingActive, setIsPermissionSettingActive] = useState(false);\n const [mainToggleValue, setMainToggleValue] = useState<number>(-1);\n\n const _fetchPermissionSetting = () => {\n getSubUserPermission(subUser.account_id)\n .then(({ data }) => {\n form.setFieldsValue(data);\n\n setIsPermissionSettingActive(data.active ? true : false);\n setMainToggleValue(data.toggle || 0);\n })\n .finally(() => {});\n };\n\n const _onFieldsChange: FormProps['onFieldsChange'] = changedField => {\n const changedRoleField = changedField?.[0];\n\n if (changedRoleField) {\n const field_name = (changedRoleField.name as string[])?.[0];\n const field_value = changedRoleField.value;\n\n const payload: any = {};\n\n if (field_name !== 'active') {\n payload.toggle_name = field_name;\n payload.toggle_value = field_value;\n }\n\n if (field_name === 'active') {\n payload.active = field_value;\n }\n\n if (field_name === 'toggle') {\n setMainToggleValue(field_value);\n }\n\n updateSubUserPermission(subUser.account_id, payload).then(() => {\n _fetchPermissionSetting();\n setTimeout(() => {\n if (field_name !== 'active') {\n // showMessage(\n // 'success',\n // `Permission setting for: ${subUser.fullname} has been successfully saved.`\n // );\n }\n }, 100);\n });\n }\n };\n\n const _changeTogglePermission = (toggle: boolean) => {\n // setIsPermissionSettingActive(toggle);\n };\n\n useEffect(() => {\n _fetchPermissionSetting();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return (\n <Form form={form} onFieldsChange={_onFieldsChange}>\n <Row className=\"mt-2\" gutter={[24, 0]}>\n <Col span={24} className=\"\">\n <Form.Item label=\"\" name=\"active\" valuePropName=\"checked\" initialValue={false}>\n <Checkbox onChange={evt => _changeTogglePermission(evt?.target?.checked)}>\n Use account-level permission\n </Checkbox>\n </Form.Item>\n </Col>\n </Row>\n <Row className=\"mt-5\" gutter={[24, 0]}>\n <Col span={4} className=\"pb-2 border-left border-bottom\">\n <b>Edit</b>\n </Col>\n\n <Col span={3} className=\"pb-2 border-left border-bottom\">\n <b>Contacts</b>\n </Col>\n\n <Col span={4} className=\"pb-2 border-left border-bottom\">\n <b>Documents</b>\n </Col>\n\n <Col span={3} className=\"pb-2 border-left border-bottom\">\n <b>Task</b>\n </Col>\n\n <Col span={3} className=\"pb-2 border-left border-bottom\">\n <b>Notes</b>\n </Col>\n\n <Col span={3} className=\"pb-2 border-left border-bottom border-right\">\n <b>Assign Tasks</b>\n </Col>\n\n <Col span={4} className=\"pb-2 border-left border-bottom border-right\">\n <b>Email Function</b>\n </Col>\n </Row>\n <Row gutter={[24, 0]}>\n <Col span={4} className=\"border-left pt-3\">\n <Form.Item name=\"toggle\" noStyle>\n <Radio.Group disabled={!isPermissionSettingActive}>\n <Space direction=\"vertical\">\n <Radio value={0}>None</Radio>\n <Radio value={1}>View Only</Radio>\n <Radio value={2}>Full Access</Radio>\n </Space>\n </Radio.Group>\n </Form.Item>\n </Col>\n <Col span={3} className=\"border-left pt-3\">\n <Form.Item name=\"contacts_toggle\" noStyle>\n <Radio.Group disabled={!isPermissionSettingActive}>\n <Space direction=\"vertical\">\n <Radio value={0}>None</Radio>\n <Radio value={1} disabled={[0].includes(mainToggleValue)}>\n View Only\n </Radio>\n <Radio value={2} disabled={[0, 1].includes(mainToggleValue)}>\n Full Access\n </Radio>\n </Space>\n </Radio.Group>\n </Form.Item>\n </Col>\n <Col span={4} className=\"border-left pt-3\">\n <Form.Item name=\"documents_toggle\" noStyle>\n <Radio.Group disabled={!isPermissionSettingActive}>\n <Space direction=\"vertical\">\n <Radio value={0}>None</Radio>\n <Radio value={1} disabled={[0].includes(mainToggleValue)}>\n View Only\n </Radio>\n <Radio value={2} disabled={[0, 1].includes(mainToggleValue)}>\n Full Access\n </Radio>\n </Space>\n </Radio.Group>\n </Form.Item>\n </Col>\n <Col span={3} className=\"border-left pt-3\">\n <Form.Item name=\"tasks_toggle\" noStyle>\n <Radio.Group disabled={!isPermissionSettingActive}>\n <Space direction=\"vertical\">\n <Radio value={0}>None</Radio>\n <Radio value={1} disabled={[0].includes(mainToggleValue)}>\n View Only\n </Radio>\n <Radio value={2} disabled={[0, 1].includes(mainToggleValue)}>\n Full Access\n </Radio>\n </Space>\n </Radio.Group>\n </Form.Item>\n </Col>\n <Col span={3} className=\"border-left pt-3\">\n <Form.Item name=\"notes_toggle\" noStyle>\n <Radio.Group disabled={!isPermissionSettingActive}>\n <Space direction=\"vertical\">\n <Radio value={0}>None</Radio>\n <Radio value={1} disabled={[0].includes(mainToggleValue)}>\n View Only\n </Radio>\n <Radio value={2} disabled={[0, 1].includes(mainToggleValue)}>\n Full Access\n </Radio>\n </Space>\n </Radio.Group>\n </Form.Item>\n </Col>\n <Col span={3} className=\"border-left pt-3 \">\n <Form.Item name=\"assigntasks_toggle\" noStyle>\n <Radio.Group disabled={!isPermissionSettingActive}>\n <Space direction=\"vertical\">\n <Radio value={0}>No</Radio>\n <Radio value={1} disabled={[0, 1].includes(mainToggleValue)}>\n Yes\n </Radio>\n </Space>\n </Radio.Group>\n </Form.Item>\n </Col>\n <Col span={4} className=\"border-left pt-3 border-right\">\n <Form.Item name=\"emails_toggle\" noStyle>\n <Radio.Group disabled={!isPermissionSettingActive}>\n <Space direction=\"vertical\">\n <Radio value={0}>No</Radio>\n <Radio value={1} disabled={[0, 1].includes(mainToggleValue)}>\n Yes\n </Radio>\n </Space>\n </Radio.Group>\n </Form.Item>\n </Col>\n </Row>\n </Form>\n );\n};\n\nexport const SubUserSetting: React.FC<{ tabKey: string; activeTabKey: string }> = ({\n tabKey,\n activeTabKey,\n}) => {\n const accountRoles = ACCOUNT_ROLES.filter(role => role.accountrole_id !== 1);\n const [form] = Form.useForm();\n const EZTableRef = useRef<forwardRefEZTableProps>();\n const HomeCtx = useContext(HomeContext);\n\n const [showAddUserForm, setShowAddUserForm] = useState(false);\n const [isPermissionModalOpen, setIsPermissionModalOpen] = useState(false);\n const [maxNumberOfSubUsers, setMaxNumberOfSubUsers] = useState<number | null>(null);\n\n const [offices, setOffices] = useState<OfficeType[]>([]);\n\n const _doActionTaskMenu = (menuKey: string, record: SubUserDataType) => {\n switch (menuKey) {\n case 'account_permission':\n // setIsPermissionModalOpen(true);\n const accountPermissionModal = Modal.confirm({\n title: `Set Account-level Permission for ${record.fullname}`,\n content: <AccountPermission subUser={record} />,\n onOk: () => {\n return Promise.resolve(true);\n },\n closable: true,\n maskClosable: true,\n width: 1100,\n cancelText: 'Close',\n okButtonProps: {\n style: {\n display: 'none',\n },\n },\n style: {\n top: '40px',\n },\n });\n break;\n case 'resend_invitation':\n const resendInviteConfirmationModal = Modal.confirm({\n title: `Resend Invitation confirmation`,\n content: (\n <>\n Are you sure to resend the invitation for user: <b>{record.fullname}</b>\n ?\n </>\n ),\n onOk: () => {\n resendInviteConfirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Sending...',\n });\n resendInvitation(record.account_id).then(() => {\n showMessage('success', 'Invitation has been resent.');\n });\n return Promise.resolve(true);\n },\n closable: true,\n maskClosable: true,\n });\n break;\n\n case 'delete_user':\n const deleteConfirmationModal = Modal.confirm({\n title: `Delete confirmation`,\n content: (\n <>\n Are you sure to delete user: <b>{record.fullname}</b>?\n </>\n ),\n onOk: () => {\n deleteConfirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Deleting...',\n });\n deleteSubUser(record.account_id).then(() => {\n showNotification(\n 'success',\n `Sub User: ${record.fullname} has been successfully deleted.`\n );\n EZTableRef.current?.reload();\n _fetchMaxNumberOfSubUsers();\n });\n return Promise.resolve(true);\n },\n closable: true,\n maskClosable: true,\n });\n break;\n default:\n break;\n }\n };\n\n const columns: ProColumns<SubUserDataType>[] = [\n {\n title: '#',\n dataIndex: '',\n key: '',\n width: '50px',\n editable: false,\n render: (_, __, index) => index + 1,\n },\n {\n title: 'Email',\n dataIndex: 'email',\n key: 'email',\n width: '240px',\n editable: false,\n render: (_, record) => <Typography.Text strong>{record.email}</Typography.Text>,\n },\n {\n title: 'Fullname',\n dataIndex: 'fullname',\n key: 'fullname',\n width: '180px',\n formItemProps: (_, config) => {\n return {\n initialValue: config.entity.fullname,\n rules: [{ required: true }],\n };\n },\n },\n {\n title: 'Role',\n dataIndex: 'accountrole_id',\n key: 'accountrole_id',\n width: '150px',\n valueType: 'select',\n render: (_, record) => {\n return record.accountrole.accountrole;\n },\n fieldProps: {\n options: accountRoles,\n optionFilterProp: 'accountrole',\n fieldNames: {\n label: 'accountrole',\n value: 'accountrole_id',\n },\n placeholder: 'Role',\n },\n formItemProps: (_, config) => {\n return {\n initialValue: config.entity.accountrole_id,\n rules: [{ required: true }],\n };\n },\n },\n {\n title: 'Office',\n dataIndex: 'office_id',\n key: 'office_id',\n width: '160px',\n valueType: 'select',\n render: (_, record) => {\n return record.offices?.[0]?.office;\n },\n formItemProps: (_, config) => {\n return {\n initialValue: config.entity.offices?.[0]?.office_id,\n };\n },\n fieldProps: {\n options: offices,\n optionFilterProp: 'office',\n fieldNames: {\n label: 'office',\n value: 'office_id',\n },\n placeholder: 'Select Office',\n },\n },\n {\n title: 'Commission Split (Agent)',\n dataIndex: 'commission_split',\n key: 'commission_split',\n width: '120px',\n valueType: 'percent',\n render: (_, record) => {\n return record.accountrole_id === AGENT_ACCOUNTROLE_ID ? (\n record.agent_commission_rate?.rate ? (\n `${record.agent_commission_rate?.rate * 100} %`\n ) : (\n <i>Empty</i>\n )\n ) : (\n '-'\n );\n },\n formItemProps: (_, config) => {\n return {\n initialValue:\n config.entity.accountrole_id !== 4\n ? null\n : config.entity.agent_commission_rate?.rate\n ? config.entity.agent_commission_rate.rate * 100\n : null,\n };\n },\n fieldProps: (form, config) => {\n const new_accountrole_id =\n form?.getFieldValue([config.entity.account_id, 'accountrole_id']) ||\n config.entity.accountrole_id;\n\n return {\n placeholder: '',\n min: 0,\n addonAfter: '%',\n style: {\n display: new_accountrole_id === AGENT_ACCOUNTROLE_ID ? 'inherit' : 'none',\n },\n disabled:\n form?.getFieldValue([config.entity.account_id, 'accountrole_id']) !==\n AGENT_ACCOUNTROLE_ID,\n };\n },\n },\n {\n title: 'Date Added',\n dataIndex: 'date_posted',\n key: 'date_posted',\n width: '120px',\n editable: false,\n sorter: true,\n renderText: (_, record) => {\n return <EZDateFormat value={record.date_posted} format=\"MM/DD/YYYY hh:mma\" />;\n },\n },\n {\n title: 'Action',\n dataIndex: '',\n width: '140px',\n key: 'x',\n valueType: 'option',\n render: (_, record, index, action) => (\n <span>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EditFilled />}\n title=\"Edit user\"\n size=\"small\"\n onClick={() => {\n action?.startEditable(record.account_id);\n }}\n >\n Edit\n </Button>\n\n <Divider type=\"vertical\" />\n\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu\n items={[\n {\n icon: <UnlockOutlined className=\"mr-3\" />,\n label: 'Set Permission',\n key: 'account_permission',\n },\n { type: 'divider' },\n {\n icon: <SendOutlined className=\"mr-3\" />,\n label: 'Resend Invitation',\n key: 'resend_invitation',\n },\n { type: 'divider' },\n {\n icon: <DeleteOutlined className=\"mr-3\" />,\n label: 'Delete User',\n key: 'delete_user',\n danger: true,\n },\n ]}\n onClick={({ key }) => _doActionTaskMenu(key, record)}\n />\n }\n placement=\"bottomRight\"\n >\n <span onClick={e => e.preventDefault()}>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EllipsisOutlined />}\n title=\"More action\"\n ></Button>\n </span>\n </Dropdown>\n </span>\n ),\n },\n ];\n\n const _saveSubUser = (subUser: any) => {\n return updateSubUser(subUser.account_id, {\n fullname: subUser.fullname,\n\n office_id: subUser.office_id || null,\n\n accountrole_id: subUser.accountrole_id,\n\n commission_split: subUser.commission_split\n ? subUser.commission_split / 100\n : subUser.commission_split,\n }).then(() => {\n EZTableRef.current?.reload();\n _fetchMaxNumberOfSubUsers();\n setTimeout(() => {\n showMessage(\n 'success',\n `Sub User: ${subUser.fullname} has been successfully updated.`\n );\n }, 100);\n return true;\n });\n };\n\n const _onFinish = (value: any) => {\n return addNewSubUser({\n email: value.email,\n\n fullname: value.fullname,\n\n office_id: value.office_id || null,\n\n accountrole_id: value.accountrole_id,\n\n subject: value.subject,\n message: value.message,\n })\n .then(() => {\n EZTableRef.current?.reload();\n _fetchMaxNumberOfSubUsers();\n setTimeout(() => {\n showNotification(\n 'success',\n `New Sub User: ${value.fullname} has been successfully added.`\n );\n form.resetFields();\n form.setFieldValue('office_id', offices?.[0]?.office_id);\n }, 100);\n // update onboarding step to completed\n updateOnboardingStep('add_new_sub_account', HomeCtx.refetchOnboardingList);\n return true;\n })\n .catch(err => {\n const message = err?.response?.data?.message;\n showNotification('error', message, 'Error happened');\n });\n };\n\n const _fetchOffices = () => {\n getAllOffices().then(({ data }) => {\n setOffices(data || []);\n\n if (data) {\n form.setFieldValue('office_id', data[0]?.office_id);\n }\n });\n };\n\n const _fetchMaxNumberOfSubUsers = () => {\n getMaxNumberOfSubUsers().then(({ data }) => {\n setMaxNumberOfSubUsers(data?.max_no_of_subusers);\n });\n };\n\n const _handleCancelPermissionModal = () => {\n setIsPermissionModalOpen(false);\n };\n\n useEffect(() => {\n _fetchOffices();\n _fetchMaxNumberOfSubUsers();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row gutter={[48, 24]}>\n {showAddUserForm && (\n <Col span={24} className=\"mt-3 pt-3\">\n <Form layout=\"vertical\" form={form} onFinish={_onFinish} requiredMark={false}>\n <Row gutter={[12, 0]}>\n <Col span={8}>\n <Form.Item\n label=\"Email\"\n name=\"email\"\n rules={[{ required: true, message: \"Email can't be empty\" }]}\n >\n <Input\n allowClear\n placeholder=\"Enter the user's email address\"\n />\n </Form.Item>\n </Col>\n <Col span={8}>\n <Form.Item\n label=\"Fullname\"\n name=\"fullname\"\n rules={[{ required: true, message: \"Fullname can't be empty\" }]}\n >\n <Input allowClear placeholder=\"Enter the user's name\" />\n </Form.Item>\n </Col>\n <Col span={8}>\n <Form.Item\n label=\"Office\"\n name=\"office_id\"\n rules={[{ required: true, message: \"Office can't be empty\" }]}\n >\n <Select\n style={{ width: '100%' }}\n options={offices}\n optionFilterProp=\"office\"\n fieldNames={{\n label: 'office',\n value: 'office_id',\n }}\n defaultActiveFirstOption\n showArrow\n placeholder={'Select the office'}\n ></Select>\n </Form.Item>\n </Col>\n <Col span={8}>\n <Form.Item\n extra={\n <>\n Click{' '}\n <Popover\n content={<UserRolesInformation />}\n title=\"How do the Roles work?\"\n trigger=\"click\"\n placement=\"right\"\n >\n <a>here</a>\n </Popover>{' '}\n to see the detail on how do the Roles work.\n </>\n }\n label=\"Role\"\n name=\"accountrole_id\"\n rules={[{ required: true, message: \"Role can't be empty\" }]}\n >\n <Select\n style={{ width: '100%' }}\n options={accountRoles}\n optionFilterProp=\"accountrole\"\n fieldNames={{\n label: 'accountrole',\n value: 'accountrole_id',\n }}\n defaultActiveFirstOption\n showArrow\n placeholder={'Select the role'}\n ></Select>\n </Form.Item>\n </Col>\n <Col span={8}>\n <Form.Item\n initialValue={\n 'You have been setup with an EZCoordinator Account'\n }\n label=\"Invitation Subject\"\n name=\"subject\"\n >\n <Input allowClear placeholder=\"Enter the invitation subject\" />\n </Form.Item>\n </Col>\n <Col span={8}>\n <Form.Item label=\"Invitation Message (optional)\" name=\"message\">\n <Input.TextArea\n rows={3}\n placeholder=\"Enter the invitation message...\"\n />\n </Form.Item>\n </Col>\n <Col span={24} style={{ textAlign: 'right' }}>\n <Form.Item>\n <Button\n type=\"default\"\n className=\"mr-3\"\n onClick={() => setShowAddUserForm(false)}\n >\n Cancel\n </Button>\n <Button type=\"primary\" htmlType=\"submit\">\n Submit\n </Button>\n </Form.Item>\n </Col>\n <Col span={24}>\n <Divider />\n </Col>\n </Row>\n </Form>\n </Col>\n )}\n <Col span={24}>\n <Alert\n className=\"mt-3\"\n type=\"info\"\n message={\n <>\n Maximum number of sub-users under your account is:{' '}\n <b>{maxNumberOfSubUsers || 0}</b>. <br />\n Upgrade your account to increase this limit by contacting our support.\n See our pricing{' '}\n <a target=\"_blank\" href=\"https://www.ezcoordinator.com/pricing\">\n here\n </a>\n .\n </>\n }\n showIcon\n />\n </Col>\n <Col span={24}>\n <EZTable\n rowKey=\"account_id\"\n ref={EZTableRef}\n columns={columns}\n pagination={{\n pageSize: 20,\n pageSizeOptions: [20, 50, 100],\n }}\n editable={{\n actionRender: (_, __, defaultDom) => [defaultDom.save, defaultDom.cancel],\n type: 'multiple',\n onSave: async (_, newData: SubUserDataType, oldData) => {\n return _saveSubUser({\n ...newData,\n fullname: newData.fullname,\n });\n },\n saveText: (\n <>\n <Button className=\"p-0 pl-1\" type=\"link\" icon={<SaveFilled />}>\n Save\n </Button>\n </>\n ),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n fetchData={_fetchData}\n toolBarComponents={[\n <Button\n type=\"primary\"\n className=\"ml-3\"\n onClick={() => {\n setShowAddUserForm(true);\n form.resetFields();\n form.setFieldValue('office_id', offices?.[0]?.office_id);\n }}\n icon={<UserAddOutlined />}\n >\n Add New User\n </Button>,\n ]}\n />\n </Col>\n <>\n <Modal\n title={``}\n visible={isPermissionModalOpen}\n onCancel={_handleCancelPermissionModal}\n closable\n maskClosable\n width={1000}\n >\n {/* <AccountRolePermission /> */}\n </Modal>\n </>\n </Row>\n );\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Button, Col, Divider, Form, Input, Popconfirm, Row, Typography } from 'antd';\nimport {\n CloseOutlined,\n DeleteOutlined,\n EditFilled,\n InfoCircleOutlined,\n SaveFilled,\n} from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\nimport { ProTable } from '@ant-design/pro-components';\n\n// EZ web-app utils import\nimport { showMessage } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport {\n addNewDocumentFolder,\n addNewOffice,\n deleteDocumentFolder,\n deleteOffice,\n getDocumentFolders,\n updateDocumentFolder,\n updateOffice,\n} from 'utils/ez_api/AdminAPIs';\n// EZ web-app types import\nimport { DocFolderType } from 'types/transaction';\nimport { getAllOffices } from 'utils/ez_api/officeAPIs';\nimport { OfficeType } from 'types/account';\nimport { EZDateFormat } from 'components';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nexport const OfficeSetting: React.FC<{ tabKey: string; activeTabKey: string }> = ({}) => {\n const [form] = Form.useForm();\n\n const [isFetchingOffices, setIsFetchingOffices] = useState(false);\n\n const [offices, setOffices] = useState<OfficeType[]>([]);\n\n const columns: ProColumns<OfficeType>[] = [\n {\n title: 'Office Name',\n dataIndex: 'office',\n key: 'office',\n width: '220px',\n formItemProps: (form, config) => {\n return {\n rules: [\n {\n required: true,\n },\n ],\n };\n },\n render: (_, record) => <Typography.Text strong>{record.office}</Typography.Text>,\n },\n {\n title: 'Date Added',\n dataIndex: 'date_added',\n key: 'date_added',\n width: '220px',\n editable: false,\n sorter: true,\n renderText: (_, record) => {\n return <EZDateFormat value={record.date_added} format=\"MM/DD/YYYY hh:mma\" />;\n },\n },\n {\n title: 'Action',\n dataIndex: '',\n width: '180px',\n key: 'x',\n valueType: 'option',\n render: (_, record, index, action) => (\n <span>\n {record.isparent !== 1 ? (\n <>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EditFilled />}\n title=\"Delete this list\"\n size=\"small\"\n onClick={() => {\n action?.startEditable(record.office_id);\n }}\n >\n Edit Name\n </Button>\n <Divider type=\"vertical\" />\n <Popconfirm\n placement=\"left\"\n title={\n <>\n Delete <b>{record.office}</b>?\n </>\n }\n onConfirm={() => _deleteOffice(record)}\n >\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<DeleteOutlined />}\n title=\"Delete this office\"\n size=\"small\"\n danger\n ></Button>\n </Popconfirm>\n </>\n ) : (\n <></>\n )}\n </span>\n ),\n },\n ];\n\n const _deleteOffice = async (office: OfficeType) => {\n const resp = await deleteOffice(office.office_id);\n _fetchOffices();\n setTimeout(() => {\n showMessage('success', `Office: ${office.office} has been successfully deleted.`);\n }, 100);\n return resp;\n };\n\n const _saveNewName = async (office: OfficeType) => {\n const resp = await updateOffice(office.office_id, {\n office: office.office,\n });\n _fetchOffices();\n setTimeout(() => {\n showMessage(\n 'success',\n `New Office Name: ${office.office} has been successfully saved.`\n );\n }, 100);\n return resp;\n };\n\n const _onFinish = (value: any) => {\n const newOffice = value.office;\n\n addNewOffice({\n office: newOffice,\n }).then(() => {\n _fetchOffices();\n form.resetFields();\n setTimeout(() => {\n showMessage(\n 'success',\n `New Office Name: ${newOffice} has been successfully added.`\n );\n }, 100);\n });\n };\n\n const _fetchOffices = () => {\n setIsFetchingOffices(true);\n getAllOffices()\n .then(({ data }) => {\n setOffices(data || []);\n })\n .finally(() => {\n setIsFetchingOffices(false);\n });\n };\n\n useEffect(() => {\n _fetchOffices();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row>\n <Col span={10} className=\"mt-3 pt-3\">\n <Row gutter={[0, 12]}>\n <Col span={24}>\n <Form layout=\"inline\" form={form} onFinish={_onFinish} requiredMark={false}>\n <Form.Item\n name=\"office\"\n rules={[{ required: true, message: \"Office name can't be empty\" }]}\n >\n <Input\n style={{ width: '280px' }}\n allowClear\n placeholder=\"Enter the new office name\"\n />\n </Form.Item>\n <Form.Item>\n <Button type=\"primary\" htmlType=\"submit\">\n Add New Office\n </Button>\n </Form.Item>\n </Form>\n </Col>\n <Col span={18} style={{ textAlign: 'left' }} className=\"text-help\">\n <InfoCircleOutlined /> Tip: If you only have one office, we recommend using\n the Main office and not adding additional offices. You cannot delete the\n Main office.\n </Col>\n <Col span={6} style={{ textAlign: 'right' }}></Col>\n </Row>\n </Col>\n <Col span={14} className=\"mt-3\">\n <ProTable\n rowKey=\"office_id\"\n showSorterTooltip={false}\n search={false}\n loading={isFetchingOffices}\n columns={columns}\n pagination={{ pageSize: 100 }}\n editable={{\n actionRender: (_, __, defaultDom) => [defaultDom.save, defaultDom.cancel],\n type: 'multiple',\n onSave: async (_, newData: OfficeType, oldData) => {\n return _saveNewName({\n ...newData,\n office: newData.office,\n });\n },\n saveText: (\n <>\n <Button className=\"p-0 pl-1\" type=\"link\" icon={<SaveFilled />}>\n Save\n </Button>\n </>\n ),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n dataSource={offices}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n />\n </Col>\n </Row>\n );\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Alert, Col, Form, Input, Radio, Row, Space, Typography } from 'antd';\nimport { ProColumns } from '@ant-design/pro-components';\nimport { ProTable } from '@ant-design/pro-components';\nimport { FormProps } from 'antd/es/form/Form';\n\n// EZ web-app utils import\nimport { showMessage } from 'utils/notificationUtil';\n// EZ web-app APIs import\n// EZ web-app types import\nimport { AccountRoleType } from 'types/account';\nimport {\n getAccountRolePermission,\n updatePermissionByAccountRoleID,\n} from 'utils/ez_api/permissionAPIs';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nexport const AccountRolePermission: React.FC<{ tabKey: string; activeTabKey: string }> = ({}) => {\n const [form] = Form.useForm();\n\n const [accountRoles, setAccountRoles] = useState<AccountRoleType[]>([]);\n\n const [isFetchingPermission, setIsFetchingPermission] = useState(false);\n\n const columns: ProColumns<AccountRoleType>[] = [\n {\n title: 'Role',\n dataIndex: 'accountrole',\n key: 'accountrole',\n width: '120px',\n formItemProps: (form, config) => {\n return {\n rules: [\n {\n required: true,\n },\n ],\n };\n },\n render: (_, record) => (\n <Typography.Text strong>\n {record.accountrole}\n <Form.Item\n name={[record.accountrole_id, 'accountrole']}\n initialValue={record.accountrole}\n noStyle\n >\n <Input hidden />\n </Form.Item>\n </Typography.Text>\n ),\n },\n {\n title: 'Edit',\n dataIndex: 'toggle',\n key: 'toggle',\n width: '120px',\n renderText: (_, record) => {\n return (\n <Form.Item\n name={[record.accountrole_id, 'toggle']}\n initialValue={record.accountrole_permissions?.[0]?.toggle || 0}\n noStyle\n >\n <Radio.Group\n defaultValue={record.accountrole_permissions?.[0]?.toggle || 0}\n >\n <Space direction=\"vertical\">\n <Radio value={0}>None</Radio>\n <Radio value={1}>View Only</Radio>\n <Radio value={2}>Full Access</Radio>\n </Space>\n </Radio.Group>\n </Form.Item>\n );\n },\n },\n {\n title: 'Contacts',\n dataIndex: 'contacts_toggle',\n key: 'contacts_toggle',\n width: '120px',\n renderText: (_, record) => {\n return (\n <Form.Item\n name={[record.accountrole_id, 'contacts_toggle']}\n initialValue={record.accountrole_permissions?.[0]?.contacts_toggle || 0}\n noStyle\n >\n <Radio.Group\n defaultValue={record.accountrole_permissions?.[0]?.contacts_toggle || 0}\n disabled={record.accountrole_permissions?.[0]?.toggle === 0}\n >\n <Space direction=\"vertical\">\n <Radio value={0}>None</Radio>\n <Radio value={1}>View Only</Radio>\n <Radio value={2}>Full Access</Radio>\n </Space>\n </Radio.Group>\n </Form.Item>\n );\n },\n },\n {\n title: 'Documents',\n dataIndex: 'documents_toggle',\n key: 'documents_toggle',\n width: '120px',\n renderText: (_, record) => {\n return (\n <Form.Item\n name={[record.accountrole_id, 'documents_toggle']}\n initialValue={record.accountrole_permissions?.[0]?.documents_toggle || 0}\n noStyle\n >\n <Radio.Group\n defaultValue={\n record.accountrole_permissions?.[0]?.documents_toggle || 0\n }\n disabled={record.accountrole_permissions?.[0]?.toggle === 0}\n >\n <Space direction=\"vertical\">\n <Radio value={0}>None</Radio>\n <Radio value={1}>View Only</Radio>\n <Radio value={2}>Full Access</Radio>\n </Space>\n </Radio.Group>\n </Form.Item>\n );\n },\n },\n {\n title: 'Tasks',\n dataIndex: 'tasks_toggle',\n key: 'tasks_toggle',\n width: '120px',\n renderText: (_, record) => {\n return (\n <Form.Item\n name={[record.accountrole_id, 'tasks_toggle']}\n initialValue={record.accountrole_permissions?.[0]?.tasks_toggle || 0}\n noStyle\n >\n <Radio.Group\n defaultValue={record.accountrole_permissions?.[0]?.tasks_toggle || 0}\n disabled={record.accountrole_permissions?.[0]?.toggle === 0}\n >\n <Space direction=\"vertical\">\n <Radio value={0}>None</Radio>\n <Radio value={1}>View Only</Radio>\n <Radio value={2}>Full Access</Radio>\n </Space>\n </Radio.Group>\n </Form.Item>\n );\n },\n },\n {\n title: 'Notes',\n dataIndex: 'notes_toggle',\n key: 'notes_toggle',\n width: '120px',\n renderText: (_, record) => {\n return (\n <Form.Item\n name={[record.accountrole_id, 'notes_toggle']}\n initialValue={record.accountrole_permissions?.[0]?.notes_toggle || 0}\n noStyle\n >\n <Radio.Group\n defaultValue={record.accountrole_permissions?.[0]?.notes_toggle || 0}\n disabled={record.accountrole_permissions?.[0]?.toggle === 0}\n >\n <Space direction=\"vertical\">\n <Radio value={0}>None</Radio>\n <Radio value={1}>View Only</Radio>\n <Radio value={2}>Full Access</Radio>\n </Space>\n </Radio.Group>\n </Form.Item>\n );\n },\n },\n {\n title: 'Assign Tasks',\n dataIndex: 'assigntasks_toggle',\n key: 'assigntasks_toggle',\n width: '120px',\n renderText: (_, record) => {\n return (\n <Form.Item\n name={[record.accountrole_id, 'assigntasks_toggle']}\n initialValue={record.accountrole_permissions?.[0]?.assigntasks_toggle || 0}\n noStyle\n >\n <Radio.Group\n defaultValue={\n record.accountrole_permissions?.[0]?.assigntasks_toggle || 0\n }\n disabled={record.accountrole_permissions?.[0]?.toggle === 0}\n >\n <Space direction=\"vertical\">\n <Radio value={0}>No</Radio>\n <Radio value={1}>Yes</Radio>\n </Space>\n </Radio.Group>\n </Form.Item>\n );\n },\n },\n {\n title: 'Email Function',\n dataIndex: 'emails_toggle',\n key: 'emails_toggle',\n width: '120px',\n renderText: (_, record) => {\n return (\n <Form.Item\n name={[record.accountrole_id, 'emails_toggle']}\n initialValue={record.accountrole_permissions?.[0]?.emails_toggle || 0}\n noStyle\n >\n <Radio.Group\n defaultValue={record.accountrole_permissions?.[0]?.emails_toggle || 0}\n disabled={record.accountrole_permissions?.[0]?.toggle === 0}\n >\n <Space direction=\"vertical\">\n <Radio value={0}>No</Radio>\n <Radio value={1}>Yes</Radio>\n </Space>\n </Radio.Group>\n </Form.Item>\n );\n },\n },\n ];\n\n const _onFinish = (value: any) => {\n console.log('🚀 ~ file: accountRoleSetting.tsx ~ line 90 ~ value', value);\n };\n\n const _onFieldsChange: FormProps['onFieldsChange'] = changedField => {\n const changedRoleField = changedField?.[0];\n\n if (changedRoleField) {\n const accountrole_id = parseInt((changedRoleField.name as string[])?.[0]);\n const updateAccountRolePermissionProps = form.getFieldValue(\n accountrole_id\n ) as AccountRoleType;\n\n updatePermissionByAccountRoleID(accountrole_id, updateAccountRolePermissionProps).then(\n () => {\n // form.resetFields();\n _fetchPermissionSetting();\n setTimeout(() => {\n showMessage(\n 'success',\n `Permission setting for: ${updateAccountRolePermissionProps?.accountrole} has been successfully saved.`\n );\n }, 100);\n }\n );\n }\n };\n\n const _fetchPermissionSetting = () => {\n setIsFetchingPermission(true);\n getAccountRolePermission()\n .then(({ data }) => {\n setAccountRoles(\n data\n ? (data as AccountRoleType[]).filter(aRole => aRole.accountrole_id !== 1)\n : []\n );\n setIsFetchingPermission(false);\n })\n .finally(() => {\n setIsFetchingPermission(false);\n });\n };\n\n useEffect(() => {\n _fetchPermissionSetting();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row>\n <Col span={24} className=\"\">\n <Row gutter={[0, 12]}>\n <Col span={24} style={{ textAlign: 'left' }} className=\"text-help\">\n <Alert\n message={\n <div className=\"pl-4\">\n <div>Tip:</div>\n <div>- Set permissions for each of your Roles below.</div>\n <div>\n - Any custom permission applied to individual user on \"Sub\n Users\" tab will override the below permission.\n </div>\n </div>\n }\n type=\"info\"\n showIcon\n />\n </Col>\n </Row>\n </Col>\n <Col span={24} className=\"mt-3\">\n <Form form={form} onFinish={_onFinish} onFieldsChange={_onFieldsChange}>\n <ProTable\n rowKey=\"accountrole_id\"\n showSorterTooltip={false}\n search={false}\n loading={isFetchingPermission}\n columns={columns}\n pagination={false}\n dataSource={accountRoles}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n />\n </Form>\n </Col>\n </Row>\n );\n};\n","import qs from 'qs';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nexport const getAccountRolePermission = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'account-role-permissions',\n });\n};\n\nexport const getPermissionByAccountRoleID = (accountrole_id: number) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `account-role-permission/${accountrole_id}`,\n });\n};\n\nexport const updatePermissionByAccountRoleID = (accountrole_id: number, payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'team_access_management',\n sub_section: 'global_permissions',\n action: 'edit',\n accountrole_id,\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `account-role-permission/${accountrole_id}`,\n data: payload,\n });\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Col, Row, Tabs } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\n// EZ web-app components import\nimport { SubUserSetting } from './teamAndAccessManagement/subUserSetting';\nimport { OfficeSetting } from './teamAndAccessManagement/officeSetting';\nimport { AccountRolePermission } from './teamAndAccessManagement/accountRoleSetting';\n\n// EZ web-app styles and assets import\n\nexport const TeamMemberSetting: React.FC<{}> = ({}) => {\n const [activeTabKey, setActiveTabKey] = useState('team-member-subuser');\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row>\n <Col span={24}>\n <Tabs\n className=\"tab-team-member-setting\"\n defaultActiveKey=\"team-member-subuser\"\n type=\"card\"\n activeKey={activeTabKey}\n onChange={key => setActiveTabKey(key)}\n destroyInactiveTabPane\n >\n <Tabs.TabPane tab={`Sub Users`} key={`team-member-subuser`}>\n <SubUserSetting tabKey=\"team-member-subuser\" activeTabKey={activeTabKey} />\n </Tabs.TabPane>\n <Tabs.TabPane tab={`Offices`} key={`team-member-office`}>\n <OfficeSetting tabKey=\"team-member-office\" activeTabKey={activeTabKey} />\n </Tabs.TabPane>\n <Tabs.TabPane tab={`Global Permissions`} key={`account-role-permission`}>\n <AccountRolePermission\n tabKey=\"account-role-permission\"\n activeTabKey={activeTabKey}\n />\n </Tabs.TabPane>\n </Tabs>\n </Col>\n </Row>\n );\n};\n","import qs from 'qs';\n\nimport { apiUrl } from '../../envUtil';\nimport { APIRequest } from '../../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\n// Prospect Group\nexport const addNewProspectGroup = (payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'prospect',\n sub_section: 'groups',\n action: 'add_group',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/settings/prospect-groups`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateProspectGroup = (id: number, payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'prospect',\n sub_section: 'groups',\n action: 'edit_group',\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `admin/settings/prospect-group/${id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteProspectGroup = (id: number) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'prospect',\n sub_section: 'groups',\n action: 'delete_group',\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `admin/settings/prospect-group/${id}`,\n useDefaultErrorNotif: true,\n });\n};\n// End of Prospect Group\n\n// Prospect Follow-up codes\nexport const addNewProspectFollowupCode = (payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'prospect',\n sub_section: 'followup_codes',\n action: 'add_followup_code',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/settings/prospect-followup-codes`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateProspectFollowupCode = (id: number, payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'prospect',\n sub_section: 'followup_codes',\n action: 'edit_followup_code',\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `admin/settings/prospect-followup-code/${id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteProspectFollowupCode = (id: number) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'prospect',\n sub_section: 'followup_codes',\n action: 'delete_followup_code',\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `admin/settings/prospect-followup-code/${id}`,\n useDefaultErrorNotif: true,\n });\n};\n// End of Prospect Follow-up codes\n\n// Prospect Flags\nexport const getProspectFlagOptions = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `admin/settings/prospect-flags`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateProspectFlag = (id: number, payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'prospect',\n sub_section: 'flags',\n action: 'edit_flag',\n id,\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `admin/settings/prospect-flag/${id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n// End of Prospect Flags\n\n// Prospect Questions\nexport const getDefaultQuestions = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `admin/settings/prospect-questions`,\n useDefaultErrorNotif: true,\n });\n};\nexport const addNewDropdownOption = (question_id: number, option_value: string) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'prospect',\n sub_section: 'questions',\n action: 'add_dropdown_option',\n question_id,\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/settings/prospect-question/${question_id}/options`,\n data: { option_value },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateDropdownOption = (\n question_id: number,\n option_id: number,\n option_value: string\n) => {\n return APIRequest({\n method: 'put',\n url: apiUrl + `admin/settings/prospect-question/${question_id}/option/${option_id}`,\n data: { option_value },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteDropdownOption = (question_id: number, option_id: number) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'prospect',\n sub_section: 'questions',\n action: 'delete_dropdown_option',\n question_id,\n option_id,\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `admin/settings/prospect-question/${question_id}/option/${option_id}`,\n useDefaultErrorNotif: true,\n });\n};\n// End of Prospect Flags\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Button, Col, Divider, Form, Input, Popconfirm, Row, Typography } from 'antd';\nimport {\n CloseOutlined,\n DeleteOutlined,\n EditFilled,\n InfoCircleOutlined,\n SaveFilled,\n} from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\nimport { ProTable } from '@ant-design/pro-components';\n\n// EZ web-app utils import\nimport { showMessage } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport { getProspectMetaOptions } from 'utils/ez_api/prospect/prospectAPIs';\n// EZ web-app types import\nimport { ProspectGroupType } from 'types/prospect';\nimport {\n addNewProspectGroup,\n deleteProspectGroup,\n updateProspectGroup,\n} from 'utils/ez_api/prospect/prospectAdminAPIs';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nexport const ProspectGroupSetting: React.FC<{}> = ({}) => {\n const [form] = Form.useForm();\n\n const [isFetchingData, setIsFetchingData] = useState(false);\n const [data, setData] = useState<ProspectGroupType[]>([]);\n\n const _fetchData = () => {\n setIsFetchingData(true);\n getProspectMetaOptions('groups')\n .then(({ data }) => {\n const respData = data as ProspectGroupType[];\n setData(respData || []);\n })\n .finally(() => {\n setIsFetchingData(false);\n });\n };\n\n const columns: ProColumns<ProspectGroupType>[] = [\n {\n title: 'Active?',\n dataIndex: 'active',\n key: 'active',\n width: '75px',\n valueType: 'switch',\n render: (text, record, index, action) => {\n return record.active ? 'Yes' : 'No';\n },\n fieldProps: (_, config) => {\n return {\n checkedChildren: 'Yes',\n unCheckedChildren: 'No',\n defaultChecked: false,\n };\n },\n formItemProps: (_, config) => {\n return {};\n },\n },\n {\n title: 'Group Name',\n dataIndex: 'group_name',\n key: 'group_name',\n width: '160px',\n formItemProps: (form, config) => {\n return {\n rules: [\n {\n required: true,\n },\n ],\n };\n },\n render: (_, record) => <Typography.Text strong>{record.group_name}</Typography.Text>,\n },\n {\n title: 'Action',\n dataIndex: '',\n width: '180px',\n key: 'x',\n valueType: 'option',\n render: (_, record, index, action) => (\n <span>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EditFilled />}\n title=\"Edit\"\n size=\"small\"\n onClick={() => {\n action?.startEditable(record.group_id);\n }}\n >\n Edit\n </Button>\n <Divider type=\"vertical\" />\n <Popconfirm\n placement=\"topRight\"\n title={\n <>\n Delete <b>{record.group_name}</b>?\n </>\n }\n onConfirm={() => _deleteData(record)}\n >\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<DeleteOutlined />}\n title=\"Delete this data\"\n size=\"small\"\n danger\n ></Button>\n </Popconfirm>\n </span>\n ),\n },\n ];\n\n const _deleteData = async (record: ProspectGroupType) => {\n await deleteProspectGroup(record.group_id);\n _fetchData();\n setTimeout(() => {\n showMessage(\n 'success',\n `New group: ${record.group_name} has been successfully deleted.`\n );\n }, 100);\n return true;\n };\n\n const _updateData = (record: ProspectGroupType) => {\n return updateProspectGroup(record.group_id, {\n ...record,\n }).then(() => {\n _fetchData();\n setTimeout(() => {\n showMessage(\n 'success',\n `Selected data: ${record.group_name} has been successfully saved.`\n );\n }, 100);\n return true;\n });\n };\n\n const _onFinish = (value: any) => {\n addNewProspectGroup({\n ...value,\n }).then(() => {\n _fetchData();\n form.resetFields();\n setTimeout(() => {\n showMessage(\n 'success',\n `Selected data: ${value.group_name} has been successfully added.`\n );\n }, 100);\n });\n };\n\n useEffect(() => {\n _fetchData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row>\n <Col span={10} className=\"mt-3 pt-3\">\n <Row gutter={[0, 12]}>\n <Col span={24}>\n <Form layout=\"inline\" form={form} onFinish={_onFinish} requiredMark={false}>\n <Form.Item\n name=\"group_name\"\n rules={[{ required: true, message: \"Group name can't be empty\" }]}\n >\n <Input\n style={{ width: '280px' }}\n allowClear\n placeholder=\"Enter the new group name\"\n />\n </Form.Item>\n <Form.Item>\n <Button type=\"primary\" htmlType=\"submit\">\n Add Group\n </Button>\n </Form.Item>\n </Form>\n </Col>\n <Col span={18} style={{ textAlign: 'left' }} className=\"text-help\">\n <InfoCircleOutlined /> Tip: Grouping is very useful when you want to\n segmentize a set of prospects based on each particular purpose.\n </Col>\n <Col span={6} style={{ textAlign: 'right' }}></Col>\n </Row>\n </Col>\n <Col span={14} className=\"mt-3\">\n <ProTable\n rowKey=\"group_id\"\n showSorterTooltip={false}\n search={false}\n loading={isFetchingData}\n columns={columns}\n pagination={{ pageSize: 100 }}\n editable={{\n actionRender: (_, __, defaultDom) => [defaultDom.save, defaultDom.cancel],\n type: 'multiple',\n onSave: async (_, newData: ProspectGroupType, oldData) => {\n return _updateData({\n ...newData,\n active: newData.active ? 1 : 0,\n });\n },\n saveText: (\n <>\n <Button className=\"p-0 pl-1\" type=\"link\" icon={<SaveFilled />}>\n Save\n </Button>\n </>\n ),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n dataSource={data}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n />\n </Col>\n </Row>\n );\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Button, Col, Divider, Form, Input, Popconfirm, Row, Typography } from 'antd';\nimport {\n CloseOutlined,\n DeleteOutlined,\n EditFilled,\n InfoCircleOutlined,\n SaveFilled,\n} from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\nimport { ProTable } from '@ant-design/pro-components';\n\n// EZ web-app utils import\nimport { showMessage } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport { getProspectMetaOptions } from 'utils/ez_api/prospect/prospectAPIs';\n// EZ web-app types import\nimport { ProspectFollowupCodeType } from 'types/prospect';\nimport {\n addNewProspectFollowupCode,\n deleteProspectFollowupCode,\n updateProspectFollowupCode,\n} from 'utils/ez_api/prospect/prospectAdminAPIs';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nexport const ProspectFollowupCodeSetting: React.FC<{}> = ({}) => {\n const [form] = Form.useForm();\n\n const [isFetchingData, setIsFetchingData] = useState(false);\n const [data, setData] = useState<ProspectFollowupCodeType[]>([]);\n\n const _fetchData = () => {\n setIsFetchingData(true);\n getProspectMetaOptions('followup_codes')\n .then(({ data }) => {\n const respData = data as ProspectFollowupCodeType[];\n setData(respData || []);\n })\n .finally(() => {\n setIsFetchingData(false);\n });\n };\n\n const columns: ProColumns<ProspectFollowupCodeType>[] = [\n {\n title: 'Active?',\n dataIndex: 'active',\n key: 'active',\n width: '75px',\n valueType: 'switch',\n render: (_, record) => {\n return record.active ? 'Yes' : 'No';\n },\n fieldProps: (_, __) => {\n return {\n checkedChildren: 'Yes',\n unCheckedChildren: 'No',\n defaultChecked: false,\n };\n },\n formItemProps: (_, config) => {\n return {};\n },\n },\n {\n title: 'Follow-up Code',\n dataIndex: 'code',\n key: 'code',\n width: '120px',\n formItemProps: (form, config) => {\n return {\n rules: [\n {\n required: true,\n },\n ],\n };\n },\n render: (_, record) => <Typography.Text strong>{record.code}</Typography.Text>,\n },\n {\n title: 'Description',\n dataIndex: 'description',\n key: 'description',\n width: '180px',\n render: (_, record) => <Typography.Text>{record.description || '-'}</Typography.Text>,\n },\n {\n title: 'Action',\n dataIndex: '',\n width: '80px',\n key: 'x',\n valueType: 'option',\n render: (_, record, index, action) => (\n <span>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EditFilled />}\n title=\"Edit\"\n size=\"small\"\n onClick={() => {\n action?.startEditable(record.followup_id);\n }}\n >\n Edit\n </Button>\n <Divider type=\"vertical\" />\n <Popconfirm\n placement=\"topRight\"\n title={\n <>\n Delete <b>{record.code}</b>?\n </>\n }\n onConfirm={() => _deleteData(record)}\n >\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<DeleteOutlined />}\n title=\"Delete this data\"\n size=\"small\"\n danger\n ></Button>\n </Popconfirm>\n </span>\n ),\n },\n ];\n\n const _deleteData = async (record: ProspectFollowupCodeType) => {\n await deleteProspectFollowupCode(record.followup_id);\n _fetchData();\n setTimeout(() => {\n showMessage('success', `New code: ${record.code} has been successfully deleted.`);\n }, 100);\n return true;\n };\n\n const _updateData = async (record: ProspectFollowupCodeType) => {\n await updateProspectFollowupCode(record.followup_id, {\n ...record,\n });\n _fetchData();\n setTimeout(() => {\n showMessage('success', `Selected data: ${record.code} has been successfully saved.`);\n }, 100);\n return true;\n };\n\n const _onFinish = (value: any) => {\n addNewProspectFollowupCode({\n ...value,\n }).then(() => {\n _fetchData();\n form.resetFields();\n setTimeout(() => {\n showMessage(\n 'success',\n `Selected data: ${value.group_name} has been successfully added.`\n );\n }, 100);\n });\n };\n\n useEffect(() => {\n _fetchData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row>\n <Col span={10} className=\"mt-3 pt-3\">\n <Row gutter={[0, 12]}>\n <Col span={24}>\n <Form layout=\"inline\" form={form} onFinish={_onFinish} requiredMark={false}>\n <Form.Item\n name=\"code\"\n rules={[{ required: true, message: \"Code can't be empty\" }]}\n >\n <Input\n style={{ width: '280px' }}\n allowClear\n placeholder=\"Enter the new code\"\n />\n </Form.Item>\n <Form.Item>\n <Button type=\"primary\" htmlType=\"submit\">\n Add Follow-up Code\n </Button>\n </Form.Item>\n </Form>\n </Col>\n <Col span={18} style={{ textAlign: 'left' }} className=\"text-help\">\n <InfoCircleOutlined /> Tip: Using the followup codes is very useful when you\n want to segmentize a set of prospects based on each particular purpose.\n </Col>\n <Col span={6} style={{ textAlign: 'right' }}></Col>\n </Row>\n </Col>\n <Col span={14} className=\"mt-3\">\n <ProTable\n rowKey=\"followup_id\"\n showSorterTooltip={false}\n search={false}\n loading={isFetchingData}\n columns={columns}\n pagination={{ pageSize: 100 }}\n editable={{\n actionRender: (_, __, defaultDom) => [defaultDom.save, defaultDom.cancel],\n type: 'multiple',\n onSave: async (_, newData: ProspectFollowupCodeType, oldData) => {\n return _updateData({\n ...newData,\n active: newData.active ? 1 : 0,\n });\n },\n saveText: (\n <>\n <Button className=\"p-0 pl-1\" type=\"link\" icon={<SaveFilled />}>\n Save\n </Button>\n </>\n ),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n dataSource={data}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n />\n </Col>\n </Row>\n );\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Button, Col, Divider, Form, Popconfirm, Row, Typography } from 'antd';\nimport {\n CloseOutlined,\n DeleteOutlined,\n EditFilled,\n FlagTwoTone,\n SaveFilled,\n} from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\nimport { ProTable } from '@ant-design/pro-components';\n\n// EZ web-app utils import\nimport { showMessage } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport {\n getProspectFlagOptions,\n updateProspectFlag,\n} from 'utils/ez_api/prospect/prospectAdminAPIs';\n// EZ web-app types import\nimport { ProspectDefaultFlagType } from 'types/prospect';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nexport const ProspectFlagSetting: React.FC<{}> = ({}) => {\n const [form] = Form.useForm();\n\n const [isFetchingData, setIsFetchingData] = useState(false);\n const [data, setData] = useState<ProspectDefaultFlagType[]>([]);\n\n const _fetchData = () => {\n setIsFetchingData(true);\n getProspectFlagOptions()\n .then(({ data }) => {\n const respData = data as ProspectDefaultFlagType[];\n setData(respData || []);\n })\n .finally(() => {\n setIsFetchingData(false);\n });\n };\n\n const columns: ProColumns<ProspectDefaultFlagType>[] = [\n {\n title: 'Flag',\n dataIndex: 'flag',\n key: 'flag',\n width: '80px',\n editable: false,\n render: (_, record) => <Typography.Text strong>{record.flag}</Typography.Text>,\n },\n {\n title: 'Flag Icon',\n dataIndex: 'flag',\n key: 'flag',\n width: '120px',\n editable: false,\n render: (_, record) => (\n <>\n <FlagTwoTone twoToneColor={record.flag_color} />\n <span className=\"ml-2\">{record.flag}</span>\n </>\n ),\n },\n {\n title: 'Description',\n dataIndex: 'description',\n key: 'description',\n width: '220px',\n renderText(_, record) {\n return record.prospects_flag?.description;\n },\n },\n {\n title: 'Active?',\n dataIndex: 'new_active',\n key: 'new_active',\n width: '75px',\n valueType: 'switch',\n render: (_, record) => {\n return record.prospects_flag?.active ? 'Yes' : 'No';\n },\n fieldProps: (_, config) => {\n return {\n checkedChildren: 'Yes',\n unCheckedChildren: 'No',\n defaultChecked: false,\n };\n },\n formItemProps: (_, config) => {\n return {\n initialValue: config.entity.prospects_flag?.active ? true : false,\n };\n },\n },\n {\n title: 'Action',\n dataIndex: '',\n width: '120px',\n key: 'x',\n valueType: 'option',\n render: (_, record, index, action) => {\n return record.flag_id !== 1 ? (\n <span>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EditFilled />}\n title=\"Edit\"\n size=\"small\"\n onClick={() => {\n action?.startEditable(record.flag_id);\n }}\n >\n Edit\n </Button>\n </span>\n ) : (\n <></>\n );\n },\n },\n ];\n\n const _updateData = async (record: ProspectDefaultFlagType) => {\n await updateProspectFlag(record.flag_id, {\n ...record,\n });\n _fetchData();\n setTimeout(() => {\n showMessage('success', `Selected data: ${record.flag} has been successfully saved.`);\n }, 100);\n return true;\n };\n\n useEffect(() => {\n _fetchData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row>\n <Col span={20} className=\"mt-3\">\n <ProTable\n rowKey=\"flag_id\"\n showSorterTooltip={false}\n search={false}\n loading={isFetchingData}\n columns={columns}\n pagination={{ pageSize: 100 }}\n editable={{\n actionRender: (_, __, defaultDom) => [defaultDom.save, defaultDom.cancel],\n type: 'multiple',\n onSave: async (_, newData: any, oldData) => {\n return _updateData({\n ...newData,\n active: newData.new_active ? 1 : 0,\n });\n },\n saveText: (\n <>\n <Button className=\"p-0 pl-1\" type=\"link\" icon={<SaveFilled />}>\n Save\n </Button>\n </>\n ),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n dataSource={data}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n />\n </Col>\n </Row>\n );\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Button, Col, Divider, Form, Popconfirm, Row, Switch, Tag, Typography } from 'antd';\nimport {\n CheckSquareOutlined,\n CloseOutlined,\n DeleteFilled,\n DeleteOutlined,\n EditFilled,\n EyeInvisibleOutlined,\n EyeOutlined,\n InfoCircleOutlined,\n PlusOutlined,\n SaveFilled,\n} from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\nimport { ProTable } from '@ant-design/pro-components';\nimport debounce from 'lodash/debounce';\n\n// EZ web-app utils import\nimport { showMessage } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport {\n addNewProspectDefaultTaskData,\n addNewProspectDefaultTaskTab,\n deleteProspectDefaultTask,\n deleteProspectDefaultTaskTab,\n getProspectTaskTabsDetail,\n updateProspectDefaultTaskData,\n updateProspectDefaultTaskTabData,\n} from 'utils/ez_api/prospect/prospectAdminTaskAPIs';\n// EZ web-app types import\nimport { ProspectDefaultTaskTabType, ProspectDefaultTaskType } from 'types/prospectTask';\n\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nexport const ProspectTaskSetting: React.FC<{}> = ({}) => {\n const [form] = Form.useForm();\n\n const [isFetchingTaskTabs, setIsFetchingTaskTabs] = useState(false);\n const [taskTabs, setTaskTabs] = useState<ProspectDefaultTaskTabType[]>([]);\n\n const [expandedRecordIDs, setExpandedRecordIDs] = useState<React.Key[]>([]);\n\n const _fetchTaskTabsDetail = () => {\n setIsFetchingTaskTabs(true);\n getProspectTaskTabsDetail()\n .then(({ data }) => {\n const respData = data as ProspectDefaultTaskTabType[];\n setTaskTabs(respData || []);\n })\n .finally(() => {\n setIsFetchingTaskTabs(false);\n });\n };\n\n const columns: ProColumns<ProspectDefaultTaskTabType>[] = [\n {\n title: 'On/Off',\n dataIndex: 'toggle',\n key: 'toggle',\n width: '80px',\n editable: false,\n render: (_, record) => (\n <Form.Item\n name={[`${record.prospects_defaulttasktab_id}`, 'toggle']}\n noStyle\n valuePropName=\"checked\"\n initialValue={\n !record.defaulttasktab_preference ||\n record.defaulttasktab_preference?.toggle\n ? true\n : false\n }\n >\n <Switch\n checkedChildren={<EyeOutlined />}\n unCheckedChildren={<EyeInvisibleOutlined />}\n defaultChecked={false}\n onChange={(val: boolean) => {\n _saveTaskTabData(record, {\n toggle: val,\n });\n }}\n />\n </Form.Item>\n ),\n },\n {\n title: 'List Name',\n dataIndex: 'name',\n key: 'name',\n width: '280px',\n formItemProps: (form, config) => {\n return {\n rules: [\n {\n required: true,\n },\n ],\n };\n },\n render: (_, record) => (\n <Typography.Text\n onClick={() => setExpandedRecordIDs([record.prospects_defaulttasktab_id])}\n strong\n underline\n >\n {record.name}\n </Typography.Text>\n ),\n },\n {\n title: 'Tasklist Information',\n dataIndex: '',\n key: 'x',\n editable: false,\n render: (_, record) => (\n <Tag\n onClick={() => setExpandedRecordIDs([record.prospects_defaulttasktab_id])}\n className=\"tag-rounded\"\n >\n {record.defaulttasks?.length} Task(s)\n </Tag>\n ),\n },\n {\n title: 'Action',\n dataIndex: '',\n width: '180px',\n key: 'x',\n valueType: 'option',\n render: (_, record, index, action) => (\n <span>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EditFilled />}\n title=\"Edit list name\"\n size=\"small\"\n onClick={() => {\n action?.startEditable(record.prospects_defaulttasktab_id);\n }}\n >\n Edit List Name\n </Button>\n <Divider type=\"vertical\" />\n <Popconfirm\n placement=\"bottomLeft\"\n title={\n <>\n Delete <b>{record.name}</b>?\n </>\n }\n onConfirm={() => _deleteSelectedTaskTab(record.prospects_defaulttasktab_id)}\n >\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<DeleteOutlined />}\n title=\"Delete this list\"\n size=\"small\"\n danger\n ></Button>\n </Popconfirm>\n </span>\n ),\n },\n ];\n\n const modifyTaskData = (\n TaskTab: ProspectDefaultTaskTabType,\n taskID: number,\n newRecordData: any\n ) => {\n try {\n const taskIndex = TaskTab.defaulttasks?.findIndex(\n t => t.prospects_defaulttask_id === taskID\n );\n\n if (taskIndex !== undefined && taskIndex >= 0 && TaskTab.defaulttasks?.[taskIndex]) {\n TaskTab.defaulttasks![taskIndex] = {\n ...TaskTab.defaulttasks[taskIndex],\n ...newRecordData,\n };\n\n if (newRecordData.toggle === false) {\n TaskTab.defaulttasks![taskIndex].defaulttask_preference = {\n prospects_defaulttask_id: taskID.toString(),\n defaulttasks_preference_id:\n TaskTab.defaulttasks![taskIndex].defaulttask_preference\n ?.defaulttasks_preference_id || -1,\n prospects_defaulttasktab_id: TaskTab.prospects_defaulttasktab_id,\n toggle: 0,\n parent_account_id: TaskTab.parent_account_id,\n };\n }\n\n setTaskTabs([...taskTabs]);\n }\n } catch (error) {\n console.log('🚀 ~ file: taskSetting.tsx ~ line 263 ~ modifyTaskData ~ error', error);\n }\n };\n const modifyTaskTabData = (taskTabID: number, newRecordData: any) => {\n try {\n const taskTabIndex = taskTabs.findIndex(\n t => t.prospects_defaulttasktab_id === taskTabID\n );\n\n if (taskTabIndex !== undefined && taskTabIndex >= 0) {\n taskTabs[taskTabIndex] = { ...taskTabs[taskTabIndex], ...newRecordData };\n setTaskTabs([...taskTabs]);\n }\n } catch (error) {\n console.log('🚀 ~ file: taskSetting.tsx ~ line 288 ~ modifyTaskTabData ~ error', error);\n }\n };\n\n const deleteTask = (TaskTab: ProspectDefaultTaskTabType, taskID: number) => {\n try {\n const taskIndex = TaskTab.defaulttasks?.findIndex(\n t => t.prospects_defaulttask_id === taskID\n );\n\n if (taskIndex !== undefined && taskIndex >= 0) {\n TaskTab.defaulttasks!.splice(taskIndex, 1);\n setTaskTabs([...taskTabs]);\n }\n } catch (error) {\n console.log('🚀 ~ file: taskSetting.tsx ~ line 267 ~ deleteTask ~ error', error);\n }\n };\n\n const deleteTaskList = (taskListID: number) => {\n try {\n const taskListIndex = taskTabs.findIndex(\n t => t.prospects_defaulttasktab_id === taskListID\n );\n\n if (taskListIndex !== undefined && taskListIndex >= 0) {\n taskTabs.splice(taskListIndex, 1);\n setTaskTabs([...taskTabs]);\n }\n } catch (error) {\n console.log('🚀 ~ file: taskSetting.tsx ~ line 292 ~ deleteTaskList ~ error', error);\n }\n };\n\n const addNewTask = (TaskTab: ProspectDefaultTaskTabType, taskData: ProspectDefaultTaskType) => {\n try {\n if (!TaskTab.defaulttasks) {\n TaskTab.defaulttasks = [];\n }\n\n TaskTab.defaulttasks.unshift(taskData);\n setTaskTabs([...taskTabs]);\n } catch (error) {\n console.log('🚀 ~ file: taskSetting.tsx ~ line 267 ~ deleteTask ~ error', error);\n }\n };\n\n const addNewTaskTab = (taskTabData: ProspectDefaultTaskTabType) => {\n try {\n taskTabs.unshift(taskTabData);\n setTaskTabs([...taskTabs]);\n } catch (error) {\n console.log('🚀 ~ file: taskSetting.tsx ~ line 267 ~ deleteTask ~ error', error);\n }\n };\n\n const _saveTaskData = (\n TaskTab: ProspectDefaultTaskTabType,\n task: ProspectDefaultTaskType,\n newRecordData: any\n ) => {\n return updateProspectDefaultTaskData(\n TaskTab.prospects_defaulttasktab_id,\n task.prospects_defaulttask_id,\n newRecordData\n ).then(() => {\n setTimeout(() => {\n modifyTaskData(TaskTab, task.prospects_defaulttask_id, {\n ...task,\n ...newRecordData,\n });\n }, 1000);\n showMessage('success', 'Selected task data has been updated.');\n return true;\n });\n };\n\n const _saveTaskTabData = (TaskTab: ProspectDefaultTaskTabType, newRecordData: any) => {\n setTimeout(() => {\n modifyTaskTabData(TaskTab.prospects_defaulttasktab_id, {\n ...TaskTab,\n ...newRecordData,\n });\n }, 0);\n return updateProspectDefaultTaskTabData(\n TaskTab.prospects_defaulttasktab_id,\n newRecordData\n ).then(() => {\n showMessage('success', 'Selected task list data has been updated.');\n return true;\n });\n };\n\n const _deleteSelectedTask = (TaskTab: ProspectDefaultTaskTabType, taskID: number) => {\n return deleteProspectDefaultTask(TaskTab.prospects_defaulttasktab_id, taskID)\n .then(() => {\n showMessage('success', 'Selected task has been deleted.');\n deleteTask(TaskTab, taskID);\n })\n .catch(() => {});\n };\n\n const _deleteSelectedTaskTab = (taskTabID: number) => {\n return deleteProspectDefaultTaskTab(taskTabID)\n .then(() => {\n showMessage('success', 'Selected task list has been deleted.');\n deleteTaskList(taskTabID);\n })\n .catch(() => {});\n };\n\n const _saveNewTaskTab = () => {\n const payload = {\n name: 'Untitled',\n\n toggle: false,\n };\n\n return addNewProspectDefaultTaskTab(payload)\n .then(({ data }) => {\n showMessage('success', `New task list: \"Untitled\" has been added.`);\n addNewTaskTab(data);\n })\n .catch(() => {});\n };\n\n const _saveNewTask = (TaskTab: ProspectDefaultTaskTabType) => {\n const defaulttask_id_dummy = Date.now();\n\n const payload = {\n title: 'Untitled',\n\n num_days: 1,\n before_after: 'after',\n date: 'close_date',\n\n toggle: true,\n };\n\n return addNewProspectDefaultTaskData(TaskTab.prospects_defaulttasktab_id, payload)\n .then(({ data }) => {\n showMessage(\n 'success',\n `New task: \"Untitled\" has been added to task list: \"${TaskTab.name}\".`\n );\n addNewTask(TaskTab, data);\n })\n .catch(() => {\n deleteTask(TaskTab, defaulttask_id_dummy);\n });\n };\n\n const _taskTitleHandler = debounce(\n (\n TaskTab: ProspectDefaultTaskTabType,\n task: ProspectDefaultTaskType,\n taskTitle?: string\n ) => {\n const trimmedTaskTitle = taskTitle?.toString().trim();\n\n if (trimmedTaskTitle) {\n _saveTaskData(TaskTab, task, {\n title: trimmedTaskTitle,\n });\n }\n },\n 1000\n );\n\n const _taskNumDaysHandler = debounce(\n (TaskTab: ProspectDefaultTaskTabType, task: ProspectDefaultTaskType, numDays?: number) => {\n _saveTaskData(TaskTab, task, {\n num_days: numDays,\n });\n },\n 1000\n );\n\n const ExpandedRowComponent: React.FC<{ TaskTab: ProspectDefaultTaskTabType }> = ({\n TaskTab,\n }) => {\n const taskColumns: ProColumns<ProspectDefaultTaskType>[] = [\n {\n title: '',\n dataIndex: 'toggle',\n key: 'toggle',\n width: '40px',\n valueType: 'switch',\n align: 'right',\n fieldProps: (_, config) => {\n return {\n size: 'small',\n checkedChildren: <EyeOutlined />,\n unCheckedChildren: <EyeInvisibleOutlined />,\n defaultChecked: false,\n onChange: (val: boolean) => {\n _saveTaskData(TaskTab, config.entity, {\n toggle: val,\n });\n },\n };\n },\n formItemProps: (_, config) => {\n return {\n initialValue:\n !config.entity.defaulttask_preference ||\n config.entity.defaulttask_preference?.toggle\n ? true\n : false,\n };\n },\n },\n {\n title: 'Task Title',\n dataIndex: 'title',\n key: 'title',\n width: '260px',\n fieldProps: (_, config) => {\n return {\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n _taskTitleHandler(TaskTab, config.entity, e?.target?.value);\n },\n };\n },\n formItemProps: (form, config) => {\n return {\n rules: [\n {\n required: true,\n },\n ],\n };\n },\n },\n {\n title: 'Action',\n width: '70px',\n dataIndex: '',\n valueType: 'option',\n fixed: 'right',\n render: (_, record, index, action) => (\n <span>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<EditFilled />}\n title=\"Delete this list\"\n size=\"small\"\n onClick={() => {\n action?.startEditable(record.prospects_defaulttask_id);\n }}\n >\n Edit\n </Button>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 mr-1\"\n type=\"link\"\n icon={<DeleteOutlined />}\n title=\"Delete this list\"\n size=\"small\"\n danger\n ></Button>\n </span>\n ),\n },\n ];\n\n return (\n <div className=\"expanded-row-with-table\">\n <ProTable\n size=\"small\"\n rowKey=\"prospects_defaulttask_id\"\n pagination={{ pageSize: 100 }}\n showSorterTooltip={false}\n search={false}\n columns={taskColumns}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n dataSource={TaskTab.defaulttasks || []}\n editable={{\n editableKeys: TaskTab.defaulttasks?.map(t => t.prospects_defaulttask_id),\n actionRender: (_, __, defaultDom) => [defaultDom.delete],\n type: 'multiple',\n onSave: async (_, data: ProspectDefaultTaskType, oldData) => {\n return _saveTaskData(TaskTab, data, data);\n },\n onDelete: (_, row) => {\n return _deleteSelectedTask(TaskTab, row.prospects_defaulttask_id);\n },\n saveText: (\n <>\n <Button className=\"p-0 pl-1\" type=\"link\" icon={<SaveFilled />}>\n Save\n </Button>\n </>\n ),\n deleteText: (\n <>\n <Button\n className=\"p-0\"\n type=\"link\"\n icon={<DeleteFilled />}\n title=\"Delete this task?\"\n size=\"small\"\n danger\n ></Button>\n </>\n ),\n deletePopconfirmMessage: 'Delete this task?',\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n toolBarRender={() => [\n <Button\n size=\"small\"\n key=\"3\"\n type=\"primary\"\n onClick={() => _saveNewTask(TaskTab)}\n >\n <CheckSquareOutlined />\n New Task\n </Button>,\n ]}\n />\n </div>\n );\n };\n\n useEffect(() => {\n _fetchTaskTabsDetail();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Form layout=\"vertical\" form={form} requiredMark={false}>\n <Row>\n <Col span={18} style={{ textAlign: 'left' }} className=\"text-help\">\n <InfoCircleOutlined /> Tip: Check the box in the On/Off column to have this task\n list automatically added to all <b>new transactions</b>.\n </Col>\n <Col span={6} style={{ textAlign: 'right' }}>\n <Button key=\"3\" type=\"primary\" onClick={() => _saveNewTaskTab()}>\n <PlusOutlined />\n New Task List\n </Button>\n </Col>\n <Col span={24} className=\"mt-3\">\n <ProTable\n rowKey=\"prospects_defaulttasktab_id\"\n showSorterTooltip={false}\n search={false}\n // scroll={{ x: 1100 }}\n loading={isFetchingTaskTabs}\n columns={columns}\n expandable={{\n expandedRowRender: (record: ProspectDefaultTaskTabType) => {\n return <ExpandedRowComponent TaskTab={record} />;\n },\n expandedRowKeys: expandedRecordIDs,\n onExpand: (expanded, record: ProspectDefaultTaskTabType) => {\n if (expanded) {\n setExpandedRecordIDs([record.prospects_defaulttasktab_id]);\n } else {\n setExpandedRecordIDs([]);\n }\n },\n }}\n editable={{\n actionRender: (_, __, defaultDom) => [\n defaultDom.save,\n defaultDom.cancel,\n ],\n type: 'multiple',\n onSave: async (_, newData: ProspectDefaultTaskTabType, oldData) => {\n return _saveTaskTabData(oldData, { name: newData.name });\n },\n onDelete: (key, row) => {\n return _deleteSelectedTaskTab(row.prospects_defaulttasktab_id);\n },\n saveText: (\n <>\n <Button className=\"p-0 pl-1\" type=\"link\" icon={<SaveFilled />}>\n Save\n </Button>\n </>\n ),\n cancelText: (\n <>\n <Divider type=\"vertical\" />\n <Button\n className=\"p-0 text-grey\"\n type=\"text\"\n title=\"Cancel and back\"\n icon={<CloseOutlined />}\n ></Button>\n </>\n ),\n }}\n dataSource={taskTabs}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n />\n </Col>\n </Row>\n </Form>\n );\n};\n","import qs from 'qs';\n\nimport { apiUrl } from '../../envUtil';\nimport { APIRequest } from '../../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nexport const getProspectTaskTabsDetail = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + 'admin/settings/prospect-default-tasktabs',\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateProspectDefaultTaskTabData = (defaulttasktab_id: number, payload: any) => {\n return APIRequest({\n method: 'put',\n url: apiUrl + `admin/settings/prospect-default-tasktab/${defaulttasktab_id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateProspectDefaultTaskData = (\n defaulttasktab_id?: number,\n defaulttask_id?: number,\n payload?: any\n) => {\n return APIRequest({\n method: 'put',\n url:\n apiUrl +\n `admin/settings/prospect-default-tasktab/${defaulttasktab_id}/default-task/${defaulttask_id}`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const addNewProspectDefaultTaskTab = (payload: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'prospect',\n sub_section: 'task_templates',\n action: 'add_tasktab',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/settings/prospect-default-tasktabs`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const addNewProspectDefaultTaskData = (defaulttasktab_id?: number, payload?: any) => {\n Mixpanel.track('app.edit_admin_setting', {\n section: 'prospect',\n sub_section: 'task_templates',\n action: 'add_task',\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `admin/settings/prospect-default-tasktab/${defaulttasktab_id}/default-tasks`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteProspectDefaultTask = (defaulttasktab_id: number, defaulttask_id: number) => {\n return APIRequest({\n method: 'delete',\n url:\n apiUrl +\n `admin/settings/prospect-default-tasktab/${defaulttasktab_id}/default-task/${defaulttask_id}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const deleteProspectDefaultTaskTab = (defaulttasktab_id: number) => {\n return APIRequest({\n method: 'delete',\n url: apiUrl + `admin/settings/prospect-default-tasktab/${defaulttasktab_id}`,\n useDefaultErrorNotif: true,\n });\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Button, Col, Form, Input, Popconfirm, Row, Tag, Typography } from 'antd';\nimport { DeleteOutlined, PlusOutlined } from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\nimport { ProTable } from '@ant-design/pro-components';\nimport debounce from 'lodash/debounce';\nimport groupBy from 'lodash/groupBy';\n\n// EZ web-app utils import\nimport { showMessage } from 'utils/notificationUtil';\n// EZ web-app APIs import\nimport {\n addNewDropdownOption,\n deleteDropdownOption,\n updateDropdownOption,\n getDefaultQuestions,\n} from 'utils/ez_api/prospect/prospectAdminAPIs';\nimport { generateDefaultQuestions } from 'utils/ez_api/prospect/prospectAPIs';\n// EZ web-app types import\nimport { ProspectQuestionOptionType, ProspectQuestionType } from 'types/prospect';\nimport {\n AdditionalInfoFieldType,\n contractAdditionalInfoCategoryType,\n ContractAdditionalInfoOption,\n} from 'types/transaction';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\ntype GroupedQuestionsType = {\n key: number;\n section_name: string;\n questions: ProspectQuestionType[];\n};\n\nexport const ProspectQuestionSetting: React.FC<{}> = ({}) => {\n const [isFetchingSections, setIsFetchingSections] = useState(false);\n const [groupedQuestions, setGroupedQuestions] = useState<GroupedQuestionsType[]>([]);\n\n const [expandedRecordIDs, setExpandedRecordIDs] = useState<React.Key[]>([]);\n\n const _fetchDefaultQuestions = () => {\n setIsFetchingSections(true);\n generateDefaultQuestions()\n .then(() => {\n return getDefaultQuestions().then(({ data }) => {\n const questions = data as ProspectQuestionType[];\n if (questions?.length) {\n setGroupedQuestions([\n {\n key: 1,\n section_name: 'Looking For',\n questions: questions.filter(q => q.accordion_id === 1),\n },\n {\n key: 2,\n section_name: 'Household Profile',\n questions: questions.filter(q => q.accordion_id === 2),\n },\n ]);\n }\n return data;\n });\n })\n .catch(err => {\n console.log('🚀 ~ file: questionSetting.tsx:69 ~ err', err);\n })\n .finally(() => {\n setIsFetchingSections(false);\n });\n };\n\n const columns: ProColumns<GroupedQuestionsType>[] = [\n {\n title: 'Section Name',\n dataIndex: 'section_name',\n key: 'section_name',\n width: '320px',\n render: (_, record) => (\n <Typography.Text\n onClick={() => setExpandedRecordIDs([record.key])}\n strong\n underline\n >\n {record.section_name}\n </Typography.Text>\n ),\n },\n {\n title: 'Section Information',\n dataIndex: '',\n key: 'x',\n editable: false,\n render: (_, record) => (\n <Tag\n onClick={() => setExpandedRecordIDs([record.key])}\n className=\"tag-rounded cursor-pointer\"\n >\n {record.questions?.length} Questions\n </Tag>\n ),\n },\n ];\n\n const _dropdownValueHandler = debounce(\n (question_id: number, option_id: number, option_value: string) => {\n return updateDropdownOption(question_id, option_id, option_value).then(resp => {\n showMessage('success', 'Option has been updated.');\n return resp;\n });\n },\n 3000\n );\n\n const DropdownFieldComponent: React.FC<{\n question: ProspectQuestionType;\n options: ProspectQuestionOptionType[];\n }> = ({ question, options }) => {\n const [form] = Form.useForm();\n\n const _redrawSections = () => {\n const options = form.getFieldValue('dropdown_options') as ProspectQuestionOptionType[];\n\n if (options) {\n question.prospects_questions_options = options;\n } else {\n question.prospects_questions_options = [];\n }\n setGroupedQuestions([...groupedQuestions]);\n };\n\n useEffect(() => {\n form.setFieldsValue({\n dropdown_options: options,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Form form={form}>\n <Row>\n <Form.List name=\"dropdown_options\">\n {(fields, { add, remove }) => (\n <>\n {fields.map(({ key, name, ...restField }, index) => (\n <Col span={24} className=\"mb-2\" style={{ textAlign: 'left' }}>\n <Form.Item\n rules={[\n {\n required: true,\n },\n ]}\n name={[name, 'option_id']}\n noStyle\n hidden\n >\n <Input hidden />\n </Form.Item>\n <Form.Item\n rules={[\n {\n required: true,\n },\n ]}\n name={[name, 'option_value']}\n noStyle\n >\n <Input\n placeholder=\"Enter the option\"\n style={{ width: '280px' }}\n allowClear\n onChange={evt => {\n const val = evt.target.value?.trim();\n if (val) {\n _dropdownValueHandler(\n question.question_id,\n form.getFieldValue([\n 'dropdown_options',\n name,\n 'option_id',\n ]),\n val\n )?.then(() => {\n _redrawSections();\n });\n }\n }}\n />\n </Form.Item>\n <Popconfirm\n title=\"Delete this option?\"\n onConfirm={() => {\n deleteDropdownOption(\n question.question_id,\n form.getFieldValue([\n 'dropdown_options',\n name,\n 'option_id',\n ])\n ).then(() => {\n remove(name);\n showMessage(\n 'success',\n 'Option has been deleted.'\n );\n _redrawSections();\n });\n }}\n >\n <Button\n className=\"p-0 ml-1\"\n type=\"link\"\n icon={<DeleteOutlined />}\n title=\"Delete this option?\"\n size=\"small\"\n danger\n ></Button>\n </Popconfirm>\n </Col>\n ))}\n <Col span={24} style={{ textAlign: 'left' }}>\n <Form.Item noStyle>\n <Button\n type=\"dashed\"\n onClick={() => {\n addNewDropdownOption(\n question.question_id,\n 'Untitled'\n ).then(({ data }) => {\n add(data);\n showMessage(\n 'success',\n 'New option has been added.'\n );\n _redrawSections();\n });\n }}\n block\n icon={<PlusOutlined />}\n style={{ width: '280px' }}\n >\n Add option\n </Button>\n </Form.Item>\n </Col>\n </>\n )}\n </Form.List>\n </Row>\n </Form>\n );\n };\n\n const ExpandedRowComponent: React.FC<{ section: GroupedQuestionsType }> = ({ section }) => {\n const expandedTableColumns: ProColumns<ProspectQuestionType>[] = [\n {\n title: '#',\n dataIndex: 'name',\n key: 'name',\n width: '5px',\n renderText(text, record, index) {\n return index + 1;\n },\n },\n {\n title: 'Question',\n dataIndex: 'name',\n key: 'name',\n width: '180px',\n renderText(text) {\n return text + ':';\n },\n },\n {\n title: 'Options',\n dataIndex: 'class',\n key: 'class',\n editable: false,\n width: '270px',\n render: (_, record) => {\n return (\n <DropdownFieldComponent\n question={record}\n options={record.prospects_questions_options || []}\n />\n );\n },\n },\n ];\n\n return (\n <div className=\"expanded-row-with-table\">\n <ProTable\n size=\"small\"\n rowKey=\"option_id\"\n pagination={false}\n showSorterTooltip={false}\n search={false}\n columns={expandedTableColumns}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n dataSource={section.questions || []}\n />\n </div>\n );\n };\n\n useEffect(() => {\n _fetchDefaultQuestions();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row>\n <Col span={24} className=\"mt-3\">\n <ProTable\n rowKey=\"key\"\n showSorterTooltip={false}\n search={false}\n loading={isFetchingSections}\n columns={columns}\n pagination={false}\n expandable={{\n expandedRowRender: (record: GroupedQuestionsType) => {\n return <ExpandedRowComponent section={record} />;\n },\n expandedRowKeys: expandedRecordIDs,\n onExpand: (expanded, record: GroupedQuestionsType) => {\n if (expanded) {\n setExpandedRecordIDs([record.key]);\n } else {\n setExpandedRecordIDs([]);\n }\n },\n }}\n dataSource={groupedQuestions}\n options={{\n fullScreen: false,\n reload: false,\n setting: false,\n density: false,\n }}\n />\n </Col>\n </Row>\n );\n};\n","// Core React libraries import\nimport { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Col, Row, Tabs } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\n// EZ web-app components import\nimport { ProspectGroupSetting } from './prospect/prospectGroupSetting';\nimport { ProspectFollowupCodeSetting } from './prospect/prospectFollowupCodeSetting';\nimport { ProspectFlagSetting } from './prospect/prospectFlagSetting';\nimport { ProspectTaskSetting } from './prospect/prospectTaskSetting';\nimport { ProspectQuestionSetting } from './prospect/questionSetting';\n\n// EZ web-app styles and assets import\n\nexport const ProspectSetting: React.FC<{}> = ({}) => {\n const [activeTabKey, setActiveTabKey] = useState('prospect-questions');\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row>\n <Col span={24}>\n <Tabs\n className=\"tab-team-member-setting\"\n defaultActiveKey=\"prospect-groups\"\n type=\"card\"\n activeKey={activeTabKey}\n onChange={key => setActiveTabKey(key)}\n destroyInactiveTabPane\n >\n <Tabs.TabPane tab={`Questions`} key={`prospect-questions`}>\n <ProspectQuestionSetting />\n </Tabs.TabPane>\n <Tabs.TabPane tab={`Follow-up Codes`} key={`prospect-followup-codes`}>\n <ProspectFollowupCodeSetting />\n </Tabs.TabPane>\n <Tabs.TabPane tab={`Groups`} key={`prospect-groups`}>\n <ProspectGroupSetting />\n </Tabs.TabPane>\n <Tabs.TabPane tab={`Flags`} key={`prospect-flags`}>\n <ProspectFlagSetting />\n </Tabs.TabPane>\n <Tabs.TabPane tab={`Task Templates`} key={`prospect-tasks`}>\n <ProspectTaskSetting />\n </Tabs.TabPane>\n </Tabs>\n </Col>\n </Row>\n );\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { Button, Col, Row } from 'antd';\nimport { EditOutlined } from '@ant-design/icons';\nimport { DocusignCredentialType } from 'types/docusign';\nimport {\n processDocusignLogout,\n generateDocuSignAuthURL,\n getDocusignAccountInformation,\n} from 'utils/ez_api/docusignAPI';\nimport { showNotification } from 'utils/notificationUtil';\n\nexport const DocusignSetting: React.FC<{}> = ({}) => {\n const [credential, setCredential] = useState<DocusignCredentialType>();\n\n const _fetchCredentials = async () => {\n getDocusignAccountInformation().then(resp => {\n setCredential(resp.data);\n });\n };\n\n const _signInDocuSign = () => {\n generateDocuSignAuthURL().then(resp => {\n window.open(resp.data.url, '_blank');\n });\n };\n\n const _onDocuSignLogout = () => {\n processDocusignLogout().then(resp => {\n showNotification('success', 'You have unlinked a DocuSign account successfully.');\n _fetchCredentials();\n });\n };\n\n useEffect(() => {\n _fetchCredentials();\n }, []);\n\n useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n if (event.data === 'exchange-code-completed') {\n _fetchCredentials();\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n // Clean up listener on component unmount\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, []);\n\n return (\n <div className=\"ez_email_logs\">\n <Row gutter={[0, 24]} className=\"\">\n <Col span={24} className=\"\">\n <span style={{ width: '220px' }} className=\"mr-2\">\n <Button icon={<EditOutlined />} onClick={() => _signInDocuSign()}>\n {credential?.docusign_name && credential?.docusign_email ? (\n <>\n Signed in as <b>{credential.docusign_email}</b>\n </>\n ) : (\n <>Sign in with your DocuSign</>\n )}\n </Button>\n </span>\n {credential?.docusign_name && credential?.docusign_email && (\n <a className=\"mr-2\" onClick={() => _onDocuSignLogout()}>\n <u>Logout</u>\n </a>\n )}\n </Col>\n <Col span={24} className=\"mt-4\"></Col>\n </Row>\n </div>\n );\n};\n","import { Col, Row, Tabs } from 'antd';\nimport { useEffect, useState } from 'react';\nimport { DocusignSetting } from './integration/docusignSetting';\n\nexport const IntegrationSetting: React.FC<{}> = ({}) => {\n const [activeTabKey, setActiveTabKey] = useState('integration-docusign');\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row>\n <Col span={24}>\n <Tabs\n className=\"tab-integration-setting\"\n defaultActiveKey=\"integration-docusign\"\n type=\"card\"\n activeKey={activeTabKey}\n onChange={key => setActiveTabKey(key)}\n destroyInactiveTabPane\n >\n <Tabs.TabPane tab={`DocuSign`} key={`integration-docusign`}>\n <DocusignSetting />\n </Tabs.TabPane>\n </Tabs>\n </Col>\n </Row>\n );\n};\n","// Core React libraries import\nimport { useContext, useEffect } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Col, Row, Tabs } from 'antd';\nimport { AppstoreAddOutlined, UsergroupAddOutlined } from '@ant-design/icons';\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\nimport { ProspectTabIcon, TransactionTabIcon } from 'types/webAppTab';\n// EZ web-app components import\nimport { TransactionSetting } from './subTabs/transactionSetting';\nimport { TeamMemberSetting } from './subTabs/teamMemberSetting';\n\n// EZ web-app styles and assets import\nimport './Admin.scss';\nimport { ProspectSetting } from './subTabs/prospectSetting';\nimport { ACCOUNT_ROLE_HAS_ACCESS_TO_DETAIL_ADMIN_AREA } from 'types/account';\nimport { HomeContext } from 'context/EZContext';\nimport { IntegrationSetting } from './subTabs/integrationSetting';\n\nconst AdminSettingTab: React.FC<{}> = ({}) => {\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n const HomeCtx = useContext(HomeContext);\n const accountrole_id = HomeCtx.userPermission?.accountrole_id;\n\n const hasAccessToDetailAdmin = accountrole_id\n ? ACCOUNT_ROLE_HAS_ACCESS_TO_DETAIL_ADMIN_AREA.includes(accountrole_id)\n : false;\n return (\n <div className=\"ez_admin-setting\">\n <div className=\"mb-4 ez-sub-content-wrapper ez-sub-content-section\">\n <Row>\n <Col span={24}>\n <b>Admin Area - Web App Setting and Customization</b>\n </Col>\n </Row>\n </div>\n <div className=\" ez-sub-content-wrapper ez-sub-content-section\">\n <Row>\n <Col span={24}>\n <Tabs className=\"mb-4\" defaultActiveKey=\"1\">\n <Tabs.TabPane\n tab={\n <span>\n <TransactionTabIcon /> Transaction\n </span>\n }\n key=\"admin-transaction-setting\"\n >\n <TransactionSetting />\n </Tabs.TabPane>\n <Tabs.TabPane\n tab={\n <span\n style={{\n display: hasAccessToDetailAdmin ? 'inherit' : 'none',\n }}\n >\n <ProspectTabIcon /> Prospect\n </span>\n }\n key=\"admin-prospect-setting\"\n >\n <ProspectSetting />\n </Tabs.TabPane>\n <Tabs.TabPane\n tab={\n <span\n style={{\n display: hasAccessToDetailAdmin ? 'inherit' : 'none',\n }}\n >\n <UsergroupAddOutlined /> Team and Access Management\n </span>\n }\n key=\"admin-member-setting\"\n >\n <TeamMemberSetting />\n </Tabs.TabPane>\n <Tabs.TabPane\n tab={\n <span\n style={{\n display: hasAccessToDetailAdmin ? 'inherit' : 'none',\n }}\n >\n <AppstoreAddOutlined /> 3rd-Party Integration\n </span>\n }\n key=\"admin-integration-setting\"\n >\n <IntegrationSetting />\n </Tabs.TabPane>\n </Tabs>\n </Col>\n </Row>\n </div>\n </div>\n );\n};\n\nexport default AdminSettingTab;\n","// Core React libraries import\nimport React from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Typography, Alert } from 'antd';\n\n// EZ web-app utils import\n// EZ web-app APIs import\n// EZ web-app types import\n// EZ web-app components import\nimport { Partial_EmailLogs } from 'components/appPage/partials/emailLogs';\n\n// EZ web-app styles and assets import\n\nexport const SubTab_EmailLogs: React.FC<{}> = ({}) => {\n return (\n <div className=\"ez_email_logs\">\n <Row gutter={24} className=\"mt-2 mb-3\">\n <Col span={24} className=\"\">\n <Alert\n message=\"All the drafts and sent emails you own from listing/transaction's tasklists will be shown on the below table.\"\n type=\"info\"\n showIcon\n className=\"mb-3\"\n />\n <Partial_EmailLogs />\n </Col>\n </Row>\n </div>\n );\n};\n","// Core React libraries import\nimport React from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport {\n Row,\n Col,\n Typography,\n Button,\n Form,\n Input,\n Alert,\n Checkbox,\n Radio,\n Space,\n Modal,\n} from 'antd';\nimport { useGoogleLogin } from '@react-oauth/google';\nimport { CloseOutlined, GoogleOutlined, ReloadOutlined, WindowsOutlined } from '@ant-design/icons';\nimport { useMsal } from '@azure/msal-react';\n\n// EZ web-app utils import\nimport { REDIRECT_URI } from 'utils/envUtil';\n// EZ web-app APIs import\nimport {\n generateLogoutCallbackURL,\n getMSGraphAuthURLMailAccess,\n getMyEmailCredential,\n googleLogout,\n processMSGraphAuthPayload,\n swapGoogleCodeWithTokenForMailAccess,\n updateEmailCredential,\n verifyCustomSMTPSetting,\n} from 'utils/ez_api/emailLogAPIs';\n// EZ web-app types import\nimport { showMessage, showNotification } from 'utils/notificationUtil';\nimport { EmailCredentialType, SENDMAIL_ONBEHALF } from 'types/email';\nimport { checkEmailCredential } from 'utils/emailUtil';\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nconst { Text, Paragraph } = Typography;\n// const msalInstance = new PublicClientApplication(msalConfig);\n\nexport const SubTab_EmailIntegration: React.FC<{}> = ({}) => {\n const [form] = Form.useForm();\n\n const [emailCredential, setEmailCredential] = useState<EmailCredentialType>();\n const [relayTypeID, setRelayTypeID] = useState<number | undefined>();\n\n const [isCheckingSMTPSetting, setIsCheckingSMTPSetting] = useState<boolean>(false);\n const [isMS265ButtonClicked, setIsMS265ButtonClicked] = useState<boolean>(false);\n const [smtpVerificationMsg, setSmtpVerificationMsg] = useState<{\n messageType: 'error' | 'success' | 'info';\n messageContent: string;\n } | null>();\n const [isEmailCredentialSet, setIsEmailCredentialSet] = useState<boolean>(false);\n\n const loginWithGoogle = useGoogleLogin({\n onSuccess: tokenResponse => {\n const code = tokenResponse.code;\n const scope = tokenResponse.scope;\n\n if (!scope.includes('https://www.googleapis.com/auth/gmail.send')) {\n showNotification(\n 'error',\n 'Required scope is still missing. Please re-authorize your google permission and make sure that you check all the necessary access.'\n );\n } else {\n swapGoogleCodeWithTokenForMailAccess(code)\n .then(resp => {\n updateEmailCredential({\n relay_type_id: SENDMAIL_ONBEHALF.GMAIL,\n }).then(() => {\n showNotification(\n 'success',\n `You are now using your gmail account as the sender profile.`\n );\n _fetchMyCredentials();\n });\n })\n .catch(err => {\n console.log(\n '🚀 ~ file: subTabs_Integration.tsx:43 ~ swapGoogleCodeWithToken ~ err:',\n err\n );\n });\n }\n },\n flow: 'auth-code',\n scope: 'https://www.googleapis.com/auth/gmail.send',\n redirect_uri: REDIRECT_URI,\n });\n\n const _fetchMyCredentials = async () => {\n setIsEmailCredentialSet(false);\n getMyEmailCredential().then(resp => {\n const emailCredentialTemp = resp.data as EmailCredentialType;\n\n setEmailCredential(emailCredentialTemp);\n form.setFieldsValue(emailCredentialTemp);\n\n setRelayTypeID(relayTypeID || emailCredentialTemp?.relay_type_id);\n\n setIsMS265ButtonClicked(false);\n\n const checkResult = checkEmailCredential(emailCredentialTemp);\n setIsEmailCredentialSet(checkResult.isEmailIntegrationSet);\n });\n };\n\n const _signInWithMicrosoft = () => {\n setIsMS265ButtonClicked(true);\n getMSGraphAuthURLMailAccess().then(resp => {\n const url = resp.data?.url;\n window.open(url, '_blank');\n });\n };\n\n const _reloadMS365Integration = () => {\n getMyEmailCredential().then(resp => {\n const emailCredentialTemp = resp.data as EmailCredentialType;\n\n if (\n emailCredentialTemp.ms_email &&\n emailCredentialTemp.ms_email !== emailCredential?.ms_email\n ) {\n updateEmailCredential({\n relay_type_id: SENDMAIL_ONBEHALF.MS_365,\n }).then(() => {\n showNotification(\n 'success',\n `You are now using your microsoft account as the sender profile.`\n );\n _fetchMyCredentials();\n });\n } else {\n _fetchMyCredentials();\n }\n });\n };\n\n const _onLogoutMS365 = () => {\n setIsMS265ButtonClicked(true);\n generateLogoutCallbackURL().then(resp => {\n const url = `https://login.microsoftonline.com/common/oauth2/v2.0/logout?post_logout_redirect_uri=${encodeURIComponent(\n resp.data?.url\n )}`;\n window.open(url, '_blank');\n });\n };\n\n const _onGoogleLogout = () => {\n googleLogout().then(resp => {\n showNotification('success', 'You have unlinked a Google account successfully.');\n _fetchMyCredentials();\n });\n };\n\n const _saveChanges = async () => {\n if (relayTypeID === SENDMAIL_ONBEHALF.CUSTOM_SMTP) {\n form.validateFields()\n .then((formValues: EmailCredentialType) => {\n formValues.smtp_incoming_ssl = formValues.smtp_incoming_ssl ? true : false;\n formValues.relay_type_id = SENDMAIL_ONBEHALF.CUSTOM_SMTP; // Custom SMTP\n\n updateEmailCredential(formValues).then(() => {\n showNotification(\n 'success',\n 'You are now using a Custom SMTP setting as the sender profile.'\n );\n _fetchMyCredentials();\n });\n })\n .catch(() => {});\n } else if (relayTypeID) {\n updateEmailCredential({\n relay_type_id: relayTypeID,\n }).then(() => {\n showNotification(\n 'success',\n `You are now using ${\n SENDMAIL_ONBEHALF.GMAIL === relayTypeID\n ? 'your gmail account'\n : 'your microsoft account'\n } as the sender profile.`\n );\n _fetchMyCredentials();\n });\n } else {\n showMessage('error', 'Please select an email integration to start.');\n }\n };\n\n const _testSMTPConnection = async () => {\n form.validateFields()\n .then((formValues: EmailCredentialType) => {\n formValues.smtp_incoming_ssl = formValues.smtp_incoming_ssl ? true : false;\n formValues.relay_type_id = SENDMAIL_ONBEHALF.CUSTOM_SMTP; // Custom SMTP\n\n setIsCheckingSMTPSetting(true);\n verifyCustomSMTPSetting(formValues)\n .then(() => {\n setSmtpVerificationMsg({\n messageContent: 'SMTP setting is valid',\n messageType: 'success',\n });\n })\n .catch(() => {\n setSmtpVerificationMsg({\n messageContent:\n \"Connection can't be established. Please check your setting.\",\n messageType: 'error',\n });\n })\n .finally(() => {\n setIsCheckingSMTPSetting(false);\n\n setTimeout(() => {\n setSmtpVerificationMsg(null);\n }, 10000);\n });\n })\n .catch(() => {});\n };\n\n useEffect(() => {\n _fetchMyCredentials();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"ez_email_logs\">\n <Row gutter={[0, 24]} className=\"\">\n <Col span={24} className=\"\">\n {isEmailCredentialSet && (\n <Alert\n icon={<></>}\n message={\n <>\n You currently use \n <b>\n {emailCredential?.relay_type_id === SENDMAIL_ONBEHALF.GMAIL\n ? emailCredential?.google_email\n : emailCredential?.relay_type_id ===\n SENDMAIL_ONBEHALF.MS_365\n ? emailCredential.ms_email\n : emailCredential?.relay_type_id ===\n SENDMAIL_ONBEHALF.CUSTOM_SMTP\n ? emailCredential.smtp_outgoing_username\n : '-'}\n </b>{' '}\n (\n {emailCredential?.relay_type_id === SENDMAIL_ONBEHALF.GMAIL\n ? 'Gmail integration'\n : emailCredential?.relay_type_id ===\n SENDMAIL_ONBEHALF.MS_365\n ? 'Microsoft 365 integration'\n : emailCredential?.relay_type_id ===\n SENDMAIL_ONBEHALF.CUSTOM_SMTP\n ? 'Custom SMTP integration'\n : '-'}\n ) for sending your email.\n </>\n }\n type=\"success\"\n showIcon\n className=\"mb-3\"\n />\n )}\n <Alert\n message={\n <>\n Hit the button <b>\"Save Changes\"</b> to save all the changes you\n have made, and start using the selected type of integration.\n </>\n }\n type=\"info\"\n showIcon\n action={\n <Space>\n <Button type=\"primary\" onClick={() => _saveChanges()}>\n Save Changes\n </Button>\n </Space>\n }\n />\n </Col>\n <Col span={24} className=\"\">\n <Radio.Group\n defaultValue=\"1\"\n buttonStyle=\"solid\"\n size=\"large\"\n onChange={e => setRelayTypeID(e.target.value)}\n value={relayTypeID}\n >\n <Radio.Button value={2}>Gmail</Radio.Button>\n <Radio.Button value={3}>Microsoft 365</Radio.Button>\n <Radio.Button value={4}>Custom SMTP (Outgoing)</Radio.Button>\n </Radio.Group>\n </Col>\n {relayTypeID == SENDMAIL_ONBEHALF.GMAIL && (\n <Col span={24} className=\"\">\n <span style={{ width: '220px' }} className=\"mr-2\">\n <Button onClick={() => loginWithGoogle()} icon={<GoogleOutlined />}>\n {emailCredential?.google_access_token &&\n emailCredential?.google_email ? (\n <>\n Signed in as <b>{emailCredential.google_email}</b>\n </>\n ) : (\n <>Sign in with Google</>\n )}\n </Button>\n </span>\n {emailCredential?.google_access_token && emailCredential?.google_email && (\n <a className=\"mr-2\" onClick={() => _onGoogleLogout()}>\n <u>Logout</u>\n </a>\n )}\n </Col>\n )}\n {relayTypeID == SENDMAIL_ONBEHALF.MS_365 && (\n <Col span={24} className=\"\">\n <span style={{ width: '220px' }} className=\"mr-2\">\n <Button\n icon={<WindowsOutlined />}\n onClick={() => _signInWithMicrosoft()}\n >\n {emailCredential?.ms_access_token && emailCredential?.ms_email ? (\n <>\n Signed in as <b>{emailCredential.ms_email}</b>\n </>\n ) : (\n <>Sign in with Microsoft</>\n )}\n </Button>\n </span>\n {emailCredential?.ms_access_token && emailCredential?.ms_email && (\n <a className=\"mr-2\" onClick={() => _onLogoutMS365()}>\n <u>Logout</u>\n </a>\n )}\n {isMS265ButtonClicked && (\n <a onClick={() => _reloadMS365Integration()}>\n <u>\n <ReloadOutlined /> Reload integration\n </u>\n </a>\n )}\n </Col>\n )}\n {relayTypeID == SENDMAIL_ONBEHALF.CUSTOM_SMTP && (\n <Col span={24} className=\"\">\n <div style={{ width: '600px' }}>\n <Form\n layout=\"vertical\"\n form={form}\n requiredMark={true}\n autoComplete=\"off\"\n >\n <Row gutter={[16, 0]}>\n <Col span={24}>\n <Form.Item\n label=\"Email Address (Username)\"\n name=\"smtp_outgoing_username\"\n rules={[\n {\n required: true,\n },\n ]}\n >\n <Input placeholder=\"Enter the email address, e.g.,: youremail@yourdomain.com\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n label=\"Password\"\n name=\"smtp_outgoing_password\"\n rules={[\n {\n required: true,\n },\n ]}\n >\n <Input.Password placeholder=\"Enter the password\" />\n </Form.Item>\n </Col>\n <Col span={20}>\n <Form.Item\n label=\"Hostname\"\n name=\"smtp_outgoing_server\"\n rules={[\n {\n required: true,\n whitespace: false,\n },\n ]}\n >\n <Input placeholder=\"Enter the hostname, e.g.,: mail.yourdomain.com\" />\n </Form.Item>\n </Col>\n <Col span={4}>\n <Form.Item label=\"Port\" name=\"smtp_outgoing_port\">\n <Input placeholder=\"25\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n label=\"\"\n name=\"smtp_outgoing_ssl\"\n valuePropName=\"checked\"\n extra={\n <>\n Enables enhanced security. \n <a\n href=\"https://www.mailmodo.com/guides/ssl/\"\n target=\"blank\"\n >\n Read more\n </a>\n </>\n }\n >\n <Checkbox>Use SSL</Checkbox>\n </Form.Item>\n </Col>\n <Col span={24}>\n <Button\n onClick={() => _testSMTPConnection()}\n disabled={isCheckingSMTPSetting}\n >\n {isCheckingSMTPSetting ? (\n <>Verifying...</>\n ) : (\n <>Test Connection</>\n )}\n </Button>\n </Col>\n\n {smtpVerificationMsg?.messageType && (\n <Col span={24} className=\"mt-2\">\n <Alert\n message={smtpVerificationMsg.messageContent}\n type={smtpVerificationMsg.messageType}\n showIcon\n closeText=\"Close\"\n closable\n />\n </Col>\n )}\n </Row>\n </Form>\n </div>\n </Col>\n )}\n <Col span={24} className=\"mt-4\"></Col>\n </Row>\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { Col, Form, FormInstance, Input, Row } from 'antd';\nimport { EZRichTextEditor } from 'components/richTextEditor/richTextEditor';\nimport { AccountDataType } from 'types/account';\nimport { EmailSignatureType } from 'types/emailSignature';\n\nexport const EditEmailSignatureModalContent: React.FC<{\n emailSignature: Partial<EmailSignatureType>;\n form: FormInstance<any>;\n UserInfo?: AccountDataType;\n mode: 'EDIT' | 'ADD';\n}> = ({ emailSignature, form, UserInfo, mode }) => {\n const _setFieldValues = () => {\n form.resetFields();\n\n form.setFieldsValue({\n ...emailSignature,\n });\n };\n\n useEffect(() => {\n _setFieldValues();\n }, []);\n\n return (\n <Form layout=\"vertical\" form={form} requiredMark={true}>\n <Row gutter={[16, 0]}>\n <Col span={24} id=\"signature-name\">\n <Form.Item\n label=\"Signature Name\"\n name=\"signature_name\"\n rules={[{ required: true, message: \"Signature name can't be empty\" }]}\n >\n <Input placeholder=\"Enter the name\" />\n </Form.Item>\n </Col>\n <Col span={24}>\n <Form.Item\n name=\"signature_body\"\n rules={[\n { required: true, message: 'Signature body is required' },\n {\n validator: (_, value) => {\n const parser = new DOMParser();\n const { textContent } = parser.parseFromString(\n value,\n 'text/html'\n ).documentElement;\n\n if (!textContent?.trim()) {\n return Promise.reject(\"Signature body can't be empty\");\n } else {\n return Promise.resolve();\n }\n },\n },\n ]}\n >\n <EZRichTextEditor isRequired />\n </Form.Item>\n </Col>\n </Row>\n </Form>\n );\n};\n","import React, { useContext, useRef, useState } from 'react';\n\nimport { DeleteOutlined, EditOutlined, EllipsisOutlined, PlusOutlined } from '@ant-design/icons';\nimport { ProColumns } from '@ant-design/pro-components';\nimport {\n Button,\n Col,\n Divider,\n Dropdown,\n Form,\n Menu,\n Modal,\n Popconfirm,\n Row,\n Space,\n Typography,\n} from 'antd';\nimport { EZDateFormat } from 'components';\nimport { EZTable, ITableQueryParams, forwardRefEZTableProps } from 'components/table/EZProTable';\nimport { HomeContext } from 'context/EZContext';\nimport { EmailSignatureType } from 'types/emailSignature';\nimport {\n addNewEmailSignature,\n deleteEmailSignature,\n editEmailSignature,\n getEmailSignatures,\n} from 'utils/ez_api/emailSignatureAPIs';\nimport { showNotification } from 'utils/notificationUtil';\nimport { EditEmailSignatureModalContent } from '../modal/emailSignatureEditDetail';\nconst { Text } = Typography;\n\nconst defaultTableParam: ITableQueryParams = {\n searchKeyword: '',\n orderParams: [['email_signature_id', 'desc']],\n whereParams: {},\n whereFilterParams: {},\n};\n\nexport const SubTab_EmailSignatures: React.FC<{}> = ({}) => {\n const HomeCtx = useContext(HomeContext);\n const EZTableRef = useRef<forwardRefEZTableProps>();\n const UserInfo = HomeCtx.userInfo;\n\n const [form] = Form.useForm();\n const [queryParams, setQueryParams] = useState<ITableQueryParams>(defaultTableParam);\n\n const _columns: ProColumns<EmailSignatureType>[] = [\n {\n title: 'Signature Name',\n dataIndex: 'signature_name',\n width: '85px',\n sorter: true,\n render: (_, record) => (\n <>\n <Text title={record.signature_name}>{record.signature_name || '-'}</Text>\n </>\n ),\n },\n {\n title: 'Description',\n dataIndex: 'signature_body',\n width: '200px',\n sorter: true,\n render: (_, record) => (\n <>\n <Text title={record.signature_body}>\n {sanitizeText(record.signature_body) || '-'}\n </Text>\n </>\n ),\n },\n {\n title: 'Created Time',\n dataIndex: 'created_at',\n width: '85px',\n editable: false,\n sorter: true,\n ellipsis: true,\n render: (_, record) => (\n <>\n <Text>\n <EZDateFormat value={record.created_at} format=\"MMM Do, YYYY hh:mma\" />\n </Text>\n </>\n ),\n },\n {\n title: 'Action',\n dataIndex: 'action',\n width: '65px',\n valueType: 'option',\n fixed: 'right',\n render: (_, record, index, action) => (\n <Space size=\"small\" className=\"pl-1\">\n <Button\n className=\"p-0\"\n type=\"link\"\n disabled={record.is_active}\n onClick={() => {\n _setActiveSignature(record);\n }}\n style={{ minWidth: '70px', textAlign: 'left' }}\n >\n {record.is_active ? 'Active' : 'Set Active'}\n </Button>\n <Divider type=\"vertical\" />\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu>\n <Menu.Item\n key=\"0\"\n onClick={() => _showEditSignatureDetailModal(record, 'EDIT')}\n style={{ color: '#1890ff' }}\n >\n <EditOutlined className=\"mr-3\" />\n Edit\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item key=\"2\" danger onClick={() => _deleteSignature(record)}>\n <DeleteOutlined className=\"mr-3\" />\n Delete\n </Menu.Item>\n </Menu>\n }\n placement=\"bottomRight\"\n >\n <span onClick={e => e.preventDefault()}>\n <Button size=\"small\" type=\"link\" icon={<EllipsisOutlined />} />\n </span>\n </Dropdown>\n </Space>\n ),\n },\n ];\n\n async function _fetchData(EZTableQueryParams: string): Promise<any> {\n return getEmailSignatures(EZTableQueryParams).then(result => result);\n }\n\n const _showEditSignatureDetailModal = (\n record: Partial<EmailSignatureType>,\n mode: 'EDIT' | 'ADD' = 'EDIT'\n ) => {\n const editTemplateDetailModal = Modal.confirm({\n title: (\n <Typography.Title level={4}>\n {mode === 'ADD' ? 'Add New Signature' : 'Edit Signature Detail'}\n </Typography.Title>\n ),\n content: (\n <EditEmailSignatureModalContent\n emailSignature={record}\n form={form}\n mode=\"EDIT\"\n UserInfo={UserInfo}\n />\n ),\n okText: 'Save',\n cancelText: 'Save and Set as Active',\n icon: <></>,\n style: { top: '40px' },\n width: '80%',\n autoFocusButton: null,\n closable: true,\n maskClosable: true,\n });\n\n const handleFormSubmit = async (\n setIsSaving: (isSaving: boolean) => void,\n isSetActive: boolean\n ) => {\n updateButtonProps(isSetActive, true, 'Loading...');\n\n try {\n setIsSaving(true);\n await form.validateFields();\n\n const formValues = form.getFieldsValue(true);\n const formParams = formValues as Partial<EmailSignatureType>;\n\n if (mode === 'ADD') {\n formParams.is_active = isSetActive;\n\n const newEmailSignatureRecord = await addNewEmailSignature(formParams);\n\n EZTableRef.current?.reload();\n showNotification('success', 'New signature created successfully.');\n return newEmailSignatureRecord;\n } else {\n formParams.email_signature_id = record.email_signature_id;\n formParams.is_active = isSetActive ? true : record.is_active;\n\n const updatedEmailSignatureRecord = await editEmailSignature(formParams);\n\n EZTableRef.current?.reload();\n showNotification('success', 'Signature details updated successfully.');\n return updatedEmailSignatureRecord;\n }\n } catch (err) {\n console.error('Error saving email signature:', err);\n throw err;\n } finally {\n setIsSaving(false);\n updateButtonProps(isSetActive, false, 'Save');\n }\n };\n\n editTemplateDetailModal.update({\n onOk: () =>\n handleFormSubmit(\n () => editTemplateDetailModal.update({ okButtonProps: { disabled: true } }),\n false // save only\n ),\n onCancel: () =>\n handleFormSubmit(\n () => editTemplateDetailModal.update({ cancelButtonProps: { disabled: true } }),\n true // save with set active\n ),\n });\n\n const updateButtonProps = (isSetActive: boolean, isDisabled: boolean, text: string) => {\n const btnText = isDisabled ? text : isSetActive ? 'Save and Set as Active' : 'Save';\n\n if (isSetActive) {\n editTemplateDetailModal.update({\n cancelButtonProps: {\n disabled: isDisabled,\n },\n cancelText: btnText,\n });\n } else {\n editTemplateDetailModal.update({\n okButtonProps: {\n disabled: isDisabled,\n },\n okText: btnText,\n });\n }\n };\n };\n\n const _showAddNewSignatureModal = () => {\n _showEditSignatureDetailModal({}, 'ADD');\n };\n\n const _setActiveSignature = async (record: EmailSignatureType) => {\n const payload: EmailSignatureType = {\n ...record,\n is_active: true,\n };\n\n try {\n const resp = await editEmailSignature(payload);\n const emailSignatureRecord = resp.data as EmailSignatureType;\n\n EZTableRef.current?.reload();\n showNotification('success', 'New changes have been applied successfully.');\n return emailSignatureRecord;\n } catch (err) {\n throw err;\n }\n };\n\n const _deleteSignature = async (record: EmailSignatureType) => {\n const deleteConfirmationModal = Modal.confirm({\n title: `Delete Confirmation`,\n content: (\n <>\n Are you sure to delete signature: <b>{record.signature_name}</b>?\n </>\n ),\n onOk: () => {\n deleteConfirmationModal.update({\n okButtonProps: {\n disabled: true,\n },\n okText: 'Deleting...',\n });\n deleteEmailSignature(record.email_signature_id).then(() => {\n deleteConfirmationModal.destroy();\n\n showNotification(\n 'success',\n `Signature: \"${record.signature_name}\" has been successfully deleted.`\n );\n EZTableRef.current?.reload();\n });\n return true;\n },\n closable: true,\n maskClosable: true,\n });\n };\n\n const sanitizeText = (body: string) => {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = body;\n\n let imgElements = tempDiv.getElementsByTagName('img');\n for (let i = imgElements.length - 1; i >= 0; i--) {\n imgElements[i].outerHTML = '[Image]';\n }\n\n const sanitizedText = tempDiv.textContent || tempDiv.innerText || '';\n tempDiv.remove();\n\n return sanitizedText;\n };\n\n return (\n <div className=\"ez_email_logs\">\n <Row gutter={24} className=\"mt-2 mb-3\">\n <Col span={24}>\n <EZTable\n ref={EZTableRef}\n className=\"eztable-hide-delete-editable\"\n pagination={{\n pageSize: 20,\n pageSizeOptions: [20, 50, 100],\n position: ['bottomRight', 'topLeft'],\n }}\n queryParams={queryParams}\n columns={_columns}\n size=\"small\"\n rowKey=\"email_signature_id\"\n fetchData={_fetchData}\n scroll={{ x: 900 }}\n tableAlertRender={false}\n toolBarComponents={[\n <Button\n key={`toolBarComponents-2-task-list`}\n className=\"ml-2 mr-2 ez-action-btn\"\n onClick={() => _showAddNewSignatureModal()}\n >\n <PlusOutlined />\n Add New Signature\n </Button>,\n ]}\n />\n </Col>\n </Row>\n </div>\n );\n};\n","// Core React libraries import\nimport React, { useContext, useEffect } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Row, Col, Tabs } from 'antd';\nimport { GoogleOAuthProvider } from '@react-oauth/google';\n\n// EZ web-app utils import\nimport { GOOGLE_CLIENTID } from 'utils/envUtil';\n// EZ web-app APIs import\n// EZ web-app types import\n// EZ web-app components import\nimport { HomeContext } from 'context/EZContext';\n\nimport { SubTab_EmailLogs } from './subTabs/subTabs_EmailLogs';\nimport { SubTab_EmailTemplates } from './subTabs/subTabs_Templates';\nimport { SubTab_EmailIntegration } from './subTabs/subTabs_Integration';\n\n// Page level styles\nimport './email.scss';\nimport { SubTab_TemplateCodes } from './subTabs/subTabs_TemplateCodes';\nimport { SubTab_EmailSignatures } from './subTabs/subTabs_Signatures';\n\nconst EmailTab: React.FC<{}> = ({}) => {\n const HomeCtx = useContext(HomeContext);\n\n const UserPermission = HomeCtx.userPermission;\n\n const hasFullAccessPermission = [1, 3].includes(UserPermission?.accountrole_id || 0);\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <GoogleOAuthProvider clientId={GOOGLE_CLIENTID}>\n <div className=\"ez-component-email ez-tab-email\">\n <div className=\"mb-4 ez-sub-content-wrapper\">\n <Row className=\"row-wrapper\">\n <Col span={24}>\n <Tabs defaultActiveKey=\"all_draft_sent_emails\">\n <Tabs.TabPane\n tab=\"All Draft and Sent Emails\"\n key=\"all_draft_sent_emails\"\n closable={false}\n >\n <SubTab_EmailLogs />\n </Tabs.TabPane>\n <Tabs.TabPane\n tab=\"Email Templates\"\n key=\"email_templates\"\n closable={false}\n >\n <SubTab_EmailTemplates />\n </Tabs.TabPane>\n <Tabs.TabPane\n tab=\"Email Signature\"\n key=\"email_signatures\"\n closable={false}\n >\n <SubTab_EmailSignatures />\n </Tabs.TabPane>\n {/* <Tabs.TabPane\n tab=\"Template Codes\"\n key=\"template_codes\"\n closable={false}\n >\n <SubTab_TemplateCodes />\n </Tabs.TabPane> */}\n <Tabs.TabPane tab=\"Integration\" key=\"integration\" closable={false}>\n <SubTab_EmailIntegration />\n </Tabs.TabPane>\n </Tabs>\n </Col>\n </Row>\n </div>\n </div>\n </GoogleOAuthProvider>\n );\n};\n\nexport default EmailTab;\n","import React, { FC, ReactNode } from 'react';\nimport {\n UnorderedListOutlined as TransactionTabIcon,\n CalendarOutlined as CalendarTabIcon,\n NumberOutlined as SummaryTabIcon,\n CheckSquareOutlined as TaskTabIcon,\n BookOutlined as ProspectTabIcon,\n DatabaseOutlined as DocumentTabIcon,\n FolderViewOutlined as DocReviewTabIcon,\n IdcardOutlined as AddressbookTabIcon,\n UserOutlined as MyProfileTabIcon,\n SettingOutlined as AdminSettingTabIcon,\n MailOutlined as EmailTabIcon,\n} from '@ant-design/icons';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\n\n// EZ web-app pages import\nimport SummaryTab from 'pages/tabs/summary';\nimport TaskListTab from 'pages/tabs/task';\nimport DocumentListTab from 'pages/tabs/document';\nimport TransactionList from 'pages/tabs/transaction/TransactionList';\nimport CalendarTab from 'pages/tabs/calendar';\nimport ProspectTab from 'pages/tabs/prospect/ProspectList';\nimport AddressbookTab from 'pages/tabs/contact/addressBook';\nimport DocumentReviewTab from 'pages/tabs/docReview/docReview';\nimport MyProfileTab from 'pages/tabs/account/myProfile';\nimport AdminSettingTab from 'pages/tabs/admin/admin';\nimport DocumentLibraryTab from 'pages/tabs/docLibrary/docLibrary';\nimport EmailTab from 'pages/tabs/email/email';\n\nexport {\n UnorderedListOutlined as TransactionTabIcon,\n CalendarOutlined as CalendarTabIcon,\n HomeOutlined as SummaryTabIcon,\n CheckSquareOutlined as TaskTabIcon,\n BookOutlined as ProspectTabIcon,\n IdcardOutlined as AddressbookTabIcon,\n DatabaseOutlined as DocumentTabIcon,\n FolderViewOutlined as DocReviewTabIcon,\n UserOutlined as MyProfileTabIcon,\n SettingOutlined as AdminSettingTabIcon,\n MailOutlined as EmailTabIcon,\n} from '@ant-design/icons';\n\nexport enum TAB_CATEGORY {\n SUMMARY = 'Summary',\n TRANSACTION = 'Transactions',\n CALENDAR = 'Calendar',\n TASK = 'Tasks',\n PROSPECT = 'Prospects',\n DOC_REVIEW = 'Document Review',\n DOC_LIBRARY = 'Document Library',\n ADDRESS_BOOK = 'Address Book',\n REPORT = 'Report',\n MY_PROFILE = 'My Profile',\n ADMIN_SETTING = 'Admin Area',\n EMAIL = 'Email',\n MORE = 'More',\n}\n\nexport interface ITabContentProps {\n appTabs: IWebAppTabProps[];\n addTab: (tab: IWebAppTabProps, shiftFocus?: boolean) => void;\n setActiveTabKey: React.Dispatch<React.SetStateAction<string>>;\n\n isCurrentTabActive: boolean;\n\n tabKey: string;\n\n data?: any;\n}\n\nexport type OpenHomeDrawerType = (props: IMainDrawerProps) => void;\n\nexport interface IMainDrawerProps {\n content: ReactNode;\n container: HTMLElement;\n}\n\nexport interface IWebAppTabProps {\n // antd required props for tab pane component\n title: string;\n key: string; // unique key\n content: FC<ITabContentProps> | FC<{}>;\n closeable?: boolean;\n disabled?: boolean;\n tabIcon?: JSX.Element | FC;\n tooltip?: string | JSX.Element;\n\n // app level props\n tabCategory: TAB_CATEGORY | string; // app tab identifier\n isMainMenu?: boolean; // app tab identifier\n recordId?: string | number; // app tab identifier\n\n data?: any;\n\n origin?: string; // from where the creation of new tab is triggered\n}\n\nexport const MAIN_TAB_INSTANCES = [\n {\n label: 'Summary',\n key: TAB_CATEGORY.SUMMARY,\n tabIcon: () => {\n return <SummaryTabIcon />;\n },\n tabContent: SummaryTab,\n tabCategory: TAB_CATEGORY.SUMMARY,\n tabCloseable: true,\n isChildMenu: true,\n },\n {\n label: 'Transactions',\n key: TAB_CATEGORY.TRANSACTION,\n tabIcon: () => {\n return <TransactionTabIcon />;\n },\n tabContent: TransactionList,\n tabCategory: TAB_CATEGORY.TRANSACTION,\n tabCloseable: false,\n },\n {\n label: 'Tasks',\n key: TAB_CATEGORY.TASK,\n tabIcon: () => {\n return <TaskTabIcon />;\n },\n tabContent: TaskListTab,\n tabCategory: TAB_CATEGORY.TASK,\n tabCloseable: true,\n },\n {\n label: 'Calendar',\n key: TAB_CATEGORY.CALENDAR,\n tabIcon: () => {\n return <CalendarTabIcon />;\n },\n tabContent: CalendarTab,\n tabCategory: TAB_CATEGORY.CALENDAR,\n tabCloseable: true,\n },\n {\n label: 'Prospects',\n key: TAB_CATEGORY.PROSPECT,\n tabIcon: () => {\n return <ProspectTabIcon />;\n },\n tabContent: ProspectTab,\n tabCategory: TAB_CATEGORY.PROSPECT,\n tabCloseable: true,\n },\n {\n label: 'Document Review',\n key: TAB_CATEGORY.DOC_REVIEW,\n tabIcon: () => {\n return <DocReviewTabIcon />;\n },\n tabContent: DocumentReviewTab,\n tabCategory: TAB_CATEGORY.DOC_REVIEW,\n tabCloseable: true,\n },\n {\n label: 'Document Library',\n key: TAB_CATEGORY.DOC_LIBRARY,\n tabIcon: () => {\n return <DocumentTabIcon />;\n },\n tabContent: DocumentLibraryTab,\n tabCategory: TAB_CATEGORY.DOC_LIBRARY,\n tabCloseable: true,\n },\n {\n label: 'Address Book',\n key: TAB_CATEGORY.ADDRESS_BOOK,\n tabIcon: () => {\n return <AddressbookTabIcon />;\n },\n tabContent: AddressbookTab,\n tabCategory: TAB_CATEGORY.ADDRESS_BOOK,\n tabCloseable: true,\n },\n {\n label: 'My Profile',\n key: TAB_CATEGORY.MY_PROFILE,\n tabIcon: () => {\n return <MyProfileTabIcon />;\n },\n tabContent: MyProfileTab,\n tabCategory: TAB_CATEGORY.MY_PROFILE,\n tabCloseable: true,\n },\n {\n label: 'Admin Area',\n key: TAB_CATEGORY.ADMIN_SETTING,\n tabIcon: () => {\n return <AdminSettingTabIcon />;\n },\n tabContent: AdminSettingTab,\n tabCategory: TAB_CATEGORY.ADMIN_SETTING,\n tabCloseable: true,\n },\n {\n label: 'Email',\n key: TAB_CATEGORY.EMAIL,\n tabIcon: () => {\n return <EmailTabIcon />;\n },\n tabContent: EmailTab,\n tabCategory: TAB_CATEGORY.EMAIL,\n tabCloseable: true,\n },\n];\n\nexport const WEB_APP_MAIN_MENU: ItemType[] = [\n {\n label: 'Transactions',\n key: TAB_CATEGORY.TRANSACTION,\n },\n {\n label: 'Tasks',\n key: TAB_CATEGORY.TASK,\n },\n { label: 'Email', key: TAB_CATEGORY.EMAIL, className: 'email-function-menu' },\n {\n label: 'Calendar',\n key: TAB_CATEGORY.CALENDAR,\n },\n {\n label: 'Prospects',\n key: TAB_CATEGORY.PROSPECT,\n },\n // { label: 'Summary', key: TAB_CATEGORY.SUMMARY },\n // { label: 'Address Book', key: TAB_CATEGORY.ADDRESS_BOOK },\n // { label: 'Document Library', key: TAB_CATEGORY.DOC_LIBRARY },\n\n {\n label: 'More',\n key: TAB_CATEGORY.MORE,\n children: [\n // {\n // label: 'Document Review',\n // key: TAB_CATEGORY.DOC_REVIEW,\n // },\n { label: 'Document Library', key: TAB_CATEGORY.DOC_LIBRARY },\n { type: 'divider' },\n {\n label: 'Address Book',\n key: TAB_CATEGORY.ADDRESS_BOOK,\n },\n { type: 'divider' },\n { label: 'Summary', key: TAB_CATEGORY.SUMMARY },\n ],\n },\n];\n","import qs from 'qs';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { DataTableQueryType } from 'types/base';\n\nexport const getCalendarEvents = (params?: DataTableQueryType) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `calendar/events` + (params ? `?${qs.stringify(params)}` : ''),\n useDefaultErrorNotif: true,\n });\n};\n","import { AuthenticationResult } from '@azure/msal-browser';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nimport { EmailTemplateFolderType, EmailTemplateType } from 'types/emailTemplate';\nimport { EmailCredentialType, EmailLogType, SENDMAIL_ONBEHALF } from 'types/email';\n\nexport const getEmailLogs = (params?: string) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `email-logs` + (params ? `?${params}` : ''),\n });\n};\n\nexport const verifyCustomSMTPSetting = (formValues: Partial<EmailCredentialType>) => {\n return APIRequest({\n method: 'post',\n url: apiUrl + `email-credential/verify-smtp-setting`,\n data: { ...formValues },\n });\n};\n\nexport const swapGoogleCodeWithTokenForMailAccess = (code: string) => {\n Mixpanel.track('app.swap_google_code_with_token_for_mail_access', {});\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `email-credential/process-google-auth-code`,\n data: { code },\n });\n};\n\nexport const processMSGraphAuthPayload = (payload: AuthenticationResult) => {\n Mixpanel.track('app.process_msgraph_auth_payload', {});\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `email-credential/process-msgraph-auth-payload`,\n data: { payload },\n });\n};\n\nexport const getMSGraphAuthURLMailAccess = () => {\n Mixpanel.track('app.get_msgraph_auth_url', {});\n\n return APIRequest({\n method: 'get',\n url: apiUrl + `email-credential/get-msgraph-auth-url`,\n });\n};\n\nexport const updateEmailCredential = (formValues: Partial<EmailCredentialType>) => {\n Mixpanel.track('app.update_email_credential', {\n relay_type_id: formValues.relay_type_id,\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `email-credential`,\n data: { ...formValues },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const requestNew3rdPartyEmailAccessToken = (relay_type_id: SENDMAIL_ONBEHALF) => {\n return APIRequest({\n method: 'post',\n url: apiUrl + `email-credential/request-access-token/${relay_type_id}`,\n });\n};\n\nexport const getMyEmailCredential = () => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `email-credential`,\n });\n};\n\nexport const generateLogoutCallbackURL = () => {\n return APIRequest({\n method: 'post',\n url: apiUrl + `email-credential/create-logout-callback-url`,\n useDefaultErrorNotif: true,\n });\n};\nexport const googleLogout = () => {\n return APIRequest({\n method: 'post',\n url: apiUrl + `email-credential/google-logout`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getEmailLogDetail = (emailLogID: number) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `email-log/${emailLogID}`,\n });\n};\n\nexport const createEmailDraft = (formValues: Partial<EmailLogType>) => {\n Mixpanel.track('app.add_email_draft', {});\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `email-logs`,\n data: { ...formValues },\n });\n};\n\nexport const updateEmailDraft = (emailLogID: number, formValues: Partial<EmailLogType>) => {\n Mixpanel.track('app.edit_email_draft', {\n emailLogID: emailLogID,\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `email-log/${emailLogID}`,\n data: { ...formValues },\n });\n};\n\nexport const deleteEmailDraft = (emailLogID: number) => {\n Mixpanel.track('app.delete_email_draft', {\n emailLogID: emailLogID,\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `email-log/${emailLogID}`,\n });\n};\n\nexport const sendEmailByEmailLogID = (\n emailLogID: number,\n formValues: Partial<EmailLogType>,\n isNotPreview: boolean = true\n) => {\n Mixpanel.track('app.dispatch_new_email', {\n relay_type_id: formValues.relay_type_id,\n emailLogID: emailLogID,\n isPreview: !isNotPreview,\n });\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `email-log/${emailLogID}/send?isPreview=${!isNotPreview}`,\n data: { ...formValues },\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getEmailLogDetailByTransactionTaskID = (\n taskID: number,\n skip_template: boolean = false\n) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `email-log/by-task-id/${taskID}?skip_template=${skip_template}`,\n });\n};\n","import { ISelectOptionGroup } from './base';\n\nimport { IDataType } from 'components/table/EZProTable';\nimport { AccountCompactDataType, AccountDataType, AccountRoleType } from './account';\nimport { EmailLogType } from './email';\nimport { DOCUMENT_TYPE } from './document';\n\nexport const RENTAL_CATEGORY_ID = 3;\n\nexport const TRANSACTION_STATUSES = [\n {\n status_category_id: 2,\n status_category_label: 'Listings',\n status_list: [\n {\n status: 'Active',\n status_id: 1,\n color: '#67f14b',\n },\n {\n status: 'Pending',\n status_id: 2,\n color: '#5a35b6',\n },\n {\n status: 'Contingent',\n status_id: 3,\n color: '#b64135',\n },\n {\n status: 'Sold',\n status_id: 4,\n color: '#3590b6',\n },\n {\n status: 'Withdrawn',\n status_id: 5,\n color: '#b6a335',\n },\n {\n status: 'Expired',\n status_id: 6,\n color: '#e2e4e2',\n },\n {\n status: 'Cancelled',\n status_id: 8,\n color: '#000000',\n },\n {\n status: 'New Listing',\n status_id: 16,\n color: '#RRGGBB',\n },\n {\n status: 'Pre-Listing',\n status_id: 20,\n color: '#e4f09d',\n },\n {\n status: 'Hold',\n status_id: 25,\n color: '#e97c84',\n },\n {\n status: 'BPO',\n status_id: 26,\n color: '#f2ff0a',\n },\n {\n status: 'Referral - Listing',\n status_id: 27,\n color: '#b9ff80',\n },\n {\n status: 'Backup Offer',\n status_id: 29,\n color: '#d2ea76',\n },\n {\n status: 'Rejected Offer',\n status_id: 30,\n color: '#000000',\n },\n {\n status: 'Terminated Contract - Listing',\n status_id: 31,\n color: '#582225',\n },\n ],\n },\n {\n status_category_id: 1,\n status_category_label: 'Buyer',\n status_list: [\n {\n status_id: 9,\n status: 'Buyer',\n color: '#ece1d0',\n },\n {\n status_id: 15,\n status: 'Contract Out',\n color: '#e6bd37',\n },\n {\n status_id: 18,\n status: 'Pending Buyer',\n color: '#b69cf6',\n },\n {\n status_id: 19,\n status: 'Cancelled Buyer',\n color: '#000000',\n },\n {\n status_id: 24,\n status: 'Closed Buyer',\n color: '#7c90e9',\n },\n {\n status_id: 28,\n status: 'Referral - Buyer',\n color: '#f1efc0',\n },\n {\n status_id: 32,\n status: 'Terminated Contract - Buyer',\n color: '#582225',\n },\n {\n status_id: 33,\n status: 'Buyer - Expired',\n color: '',\n },\n ],\n },\n {\n status_category_id: 3,\n status_category_label: 'Rental',\n status_list: [\n {\n status_id: 10,\n status: 'Available',\n color: '#80ffa4',\n },\n {\n status_id: 11,\n status: 'Leased',\n color: '#1eae47',\n },\n {\n status_id: 12,\n status: 'Off Market',\n color: '#f9920b',\n },\n {\n status_id: 13,\n status: 'Pending Lease',\n color: '#8e6ae7',\n },\n {\n status_id: 14,\n status: 'Rerental',\n color: '#f7ff0a',\n },\n {\n status_id: 34,\n status: 'Rental - Expired',\n color: '',\n },\n ],\n },\n];\n\nexport const STATUS_LIST_RENTAL =\n TRANSACTION_STATUSES.find(item => item.status_category_id === RENTAL_CATEGORY_ID)\n ?.status_list || [];\n\nexport const ACTIVE_STATUS_IDS = [\n 1, 2, 3, 9, 10, 13, 15, 16, 18, 20, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,\n];\n\nexport const PROPERTY_TYPES = [\n {\n type_id: 18,\n type_name: 'Income Sale',\n },\n {\n type_id: 6,\n type_name: 'Commercial',\n },\n {\n type_id: 12,\n type_name: 'Townhouse',\n },\n {\n type_id: 16,\n type_name: 'Vacant Land',\n },\n {\n type_id: 1,\n type_name: 'SFR',\n },\n {\n type_id: 2,\n type_name: 'Condo',\n },\n {\n type_id: 3,\n type_name: 'TIC',\n },\n {\n type_id: 15,\n type_name: 'Mobile Home',\n },\n {\n type_id: 17,\n type_name: 'COOP',\n },\n {\n type_id: 4,\n type_name: '2-4',\n },\n {\n type_id: 5,\n type_name: '5+',\n },\n {\n type_id: 10,\n type_name: 'Other',\n },\n];\n\nexport const SALE_TYPES = [\n {\n sale_type_id: 1,\n saletype_name: 'Foreclosure',\n },\n {\n sale_type_id: 2,\n saletype_name: 'Probate',\n },\n {\n sale_type_id: 3,\n saletype_name: 'Short Sale',\n },\n {\n sale_type_id: 4,\n saletype_name: 'Approved Short Sale',\n },\n {\n sale_type_id: 7,\n saletype_name: 'Sale Type 1 (customize in admin)',\n },\n {\n sale_type_id: 8,\n saletype_name: 'Sale Type 2',\n },\n {\n sale_type_id: 9,\n saletype_name: 'Sale Type 3',\n },\n {\n sale_type_id: 10,\n saletype_name: 'Sale Type 4',\n },\n {\n sale_type_id: 11,\n saletype_name: 'Sale Type 5',\n },\n {\n sale_type_id: 12,\n saletype_name: 'Sale Type 6',\n },\n];\n\nexport const TRANSACTION_FLAGS = [\n {\n flag_id: 1,\n flag: 'No Flag',\n flag_color: 'black',\n status: 1,\n },\n {\n flag_id: 2,\n flag: 'Missing Documents',\n flag_color: 'red',\n status: 1,\n },\n {\n flag_id: 3,\n flag: 'Broker Review',\n flag_color: 'green',\n status: 1,\n },\n {\n flag_id: 4,\n flag: 'Missing Signatures',\n flag_color: 'orange',\n status: 1,\n },\n {\n flag_id: 5,\n flag: 'Past Expiration',\n flag_color: 'yellow',\n status: 1,\n },\n {\n flag_id: 6,\n flag: 'Past Closing',\n flag_color: 'gray',\n status: 1,\n },\n {\n flag_id: 7,\n flag: 'Broker Approved',\n flag_color: 'pink',\n status: 1,\n },\n {\n flag_id: 9,\n flag: 'Coordinator Approved',\n flag_color: 'purple',\n status: 1,\n },\n {\n flag_id: 10,\n flag: 'Coordinator Review',\n flag_color: 'black',\n status: 1,\n },\n {\n flag_id: 11,\n flag: 'Missing E-Mails',\n flag_color: 'blue',\n status: 1,\n },\n];\n\nexport type PARTY_TYPES =\n // non-rental\n | 'contract_buyers'\n | 'contract_buyer_agents'\n | 'contract_sellers'\n | 'contract_seller_agents'\n // rental\n | 'contract_tenants'\n | 'contract_referral_sources'\n | 'contract_landlords'\n | 'contract_leasing_agents';\n\nexport const TRANSACTION_STATUSES_OPT_GROUP: ISelectOptionGroup[] = TRANSACTION_STATUSES.map(\n status_category => {\n const optGroup: ISelectOptionGroup = {\n label: status_category.status_category_label,\n options: [],\n };\n optGroup.options = status_category.status_list.map(opt => ({\n label: opt.status,\n value: opt.status_id.toString(),\n color: opt.color,\n }));\n\n return optGroup;\n }\n);\n\nexport type ContractAdditionalInfoOption = {\n additional_info_fields_option_id: number;\n additional_info_field_id: number;\n option_value: string;\n account_id: number;\n parent_account_id: number;\n};\n\nexport type AdditionalInfoFieldType = {\n active: number;\n additional_info_field_id: number;\n additional_info_fields_category_id: number;\n additional_info_fields_preference_id: number;\n contract_additional_info_category: {\n category: string;\n };\n newname: string;\n parent_account_id: number;\n rank: number;\n toggle: number;\n field_value?: any;\n field_option_id?: any;\n\n contract_additional_info_field: {\n class: string | null; // date, dropdown, numeric, text. All lower cases.\n tempFieldType?: string;\n\n additional_info_field_id: number;\n name: string;\n type: string;\n id: string;\n status: number;\n rank: number;\n account_id: number;\n parent_account_id: number;\n };\n\n contract_additional_info_options: ContractAdditionalInfoOption[];\n contract_additional_info_options_temp?: ContractAdditionalInfoOption[];\n\n contract_additional_info_value?: {\n additional_info_field_id: number;\n field_value: any;\n };\n};\n\nexport type contractAdditionalInfoCategoryType = {\n additional_info_fields_category_id: number;\n category: string;\n account_id: number;\n parent_account_id: number;\n\n contract_additional_info_preferences: AdditionalInfoFieldType[];\n};\n\nexport type ContractBuyer = {\n buyer_id: number;\n contract_id?: number;\n date_posted?: Date;\n buyer_name?: string;\n telephone?: string;\n telephone2?: string;\n fax?: string;\n email?: string;\n company?: string;\n address?: string;\n city?: string;\n state?: string;\n zip?: string;\n};\nexport type ContractBuyerAgents = {\n agent_id: number;\n contract_id?: number;\n date_posted?: Date;\n agent_name?: string;\n telephone?: string;\n telephone2?: string;\n fax?: string;\n email?: string;\n company?: string;\n address?: string;\n city?: string;\n state?: string;\n zip?: string;\n commission_rate?: number;\n commission_amount?: number;\n};\nexport type ContractSellerAgents = {\n broker_id: number;\n contract_id?: number;\n date_posted?: Date;\n broker_name?: string;\n telephone?: string;\n telephone2?: string;\n fax?: string;\n email?: string;\n company?: string;\n address?: string;\n city?: string;\n state?: string;\n zip?: string;\n commission_rate?: number;\n commission_amount?: number;\n};\nexport type ContractSellers = {\n seller_id: number;\n contract_id?: number;\n date_posted?: Date;\n seller_name?: string;\n telephone?: string;\n telephone2?: string;\n fax?: string;\n email?: string;\n company?: string;\n address?: string;\n city?: string;\n state?: string;\n zip?: string;\n};\n\nexport type ContractLeasingAgent = {\n leasing_agent_id: number;\n contract_id?: number;\n date_posted?: Date;\n leasing_agent_name?: string;\n telephone?: string;\n telephone2?: string;\n fax?: string;\n email?: string;\n company?: string;\n address?: string;\n city?: string;\n state?: string;\n zip?: string;\n commission_rate?: number;\n commission_amount?: number;\n};\nexport type ContractReferralSources = {\n referral_source_id: number;\n contract_id?: number;\n date_posted?: Date;\n referral_source_name?: string;\n telephone?: string;\n telephone2?: string;\n fax?: string;\n email?: string;\n company?: string;\n address?: string;\n city?: string;\n state?: string;\n zip?: string;\n commission_rate?: number;\n commission_amount?: number;\n};\nexport type ContractTenants = {\n tenant_id: number;\n contract_id?: number;\n date_posted?: Date;\n tenant_name?: string;\n telephone?: string;\n telephone2?: string;\n fax?: string;\n email?: string;\n company?: string;\n address?: string;\n city?: string;\n state?: string;\n zip?: string;\n};\nexport type ContractLandlords = {\n landlord_id: number;\n contract_id?: number;\n date_posted?: Date;\n landlord_name?: string;\n telephone?: string;\n telephone2?: string;\n fax?: string;\n email?: string;\n company?: string;\n address?: string;\n city?: string;\n state?: string;\n zip?: string;\n};\n\nexport interface ITransactionListDataType extends IDataType {\n contract_id: number;\n account_id: number;\n active: number | boolean;\n address: string;\n city: string;\n state: string;\n zip: string;\n escrow: string;\n mis: string;\n status_id: number;\n contract_status?: {\n status: string;\n color: string;\n };\n flag_id: number;\n type_id: number | null;\n sale_types_id: number | null;\n date_posted: string;\n account?: {\n email: string;\n fullname: string;\n };\n contract_flag?: {\n flag: string;\n flag_color: string;\n };\n contract_date?: {\n date_id?: number;\n contract_id?: number;\n date_posted?: Date;\n contract_date?: string;\n close_date?: string;\n inspection_contingency_date?: string;\n financing_contingency_date?: string;\n expiration_date?: string;\n lease_signed_date?: string;\n lease_start_date?: string;\n lease_end_date?: string;\n application_date?: string;\n lease_term?: string;\n move_in_date?: string;\n year_built?: number;\n appraisal_contingency_date?: string;\n close_past_alert?: number;\n expiration_past_alert?: number;\n contingency_past_alert?: number;\n listing_date?: string;\n effective_date?: string;\n listing_agreement_date?: string;\n listing_live_date?: string;\n };\n contract_price?: {\n price_id?: number;\n contract_id?: number;\n date_posted?: Date;\n listprice?: number;\n salesprice?: number;\n cccredit?: number;\n marketedprice?: number;\n rentalprice?: number;\n credits?: number;\n deposits?: number;\n };\n contract_property_type?: {\n type_name: string;\n };\n\n // parties for non-rental prop\n contract_buyers?: ContractBuyer[];\n contract_buyer_agents?: ContractBuyerAgents[];\n contract_sellers?: ContractSellers[];\n contract_seller_agents?: ContractSellerAgents[];\n\n // parties for rental prop\n contract_tenants?: ContractTenants[];\n contract_referral_sources?: ContractReferralSources[];\n contract_landlords?: ContractLandlords[];\n contract_leasing_agents?: ContractLeasingAgent[];\n\n contract_date_additionals?: {\n date_additional_id: number;\n date_name: string;\n val_date: string;\n telephone: string;\n past_alerts: number;\n }[];\n\n contract_additional_info_categories?: contractAdditionalInfoCategoryType[];\n\n complete_task_count?: number;\n total_task_count?: number;\n\n is_archived: boolean;\n\n complete_doc_count?: number;\n total_doc_count?: number;\n\n total_note_count?: number;\n}\n\nexport type TransactionListQuickStatType = {\n contract_id: number;\n\n complete_task_count: number;\n incomplete_task_count: number;\n\n complete_doc_count: number;\n incomplete_doc_count: number;\n\n email_msg_count: number;\n contract_note_count: number;\n};\n\nexport type TransactionDetailType = ITransactionListDataType & {\n assigned_accounts?: {\n account_id: number;\n email: string;\n fullname: string;\n\n accountrole: AccountRoleType;\n }[];\n};\n\nexport type TransactionDetailTabPane = {\n key: string;\n label: string | React.ReactNode;\n tabContent: React.FC<TransactionDetailTabProps>;\n};\n\nexport type TransactionDetailTabProps = {\n isLoading?: boolean;\n subTabs: TransactionDetailTabPane[];\n currentTab: TransactionDetailTabPane;\n\n contractID: number;\n contractAddress?: string;\n\n isRentalProperty: boolean;\n isTransactionDeleted?: boolean;\n manualReloadCount: number;\n isLoadingSubTabData: boolean;\n setIsLoadingSubTabData: React.Dispatch<React.SetStateAction<boolean>>;\n\n reloadTransactionStat: (contract_id?: number) => void;\n // transactionData: TransactionDetailType;\n // setTransactionData: React.Dispatch<React.SetStateAction<TransactionDetailType>>;\n};\n\nexport type ContactRoleType = {\n role_id: number;\n role?: string;\n parent_account_id?: number;\n date_added?: Date;\n};\n\nexport type TransactionContactItemType = {\n address?: string | null;\n city?: string | null;\n company?: string | null;\n contact_id?: number | null;\n contactname?: string | null;\n contract_id?: number | null;\n country?: string | null;\n date_posted?: string | null;\n email?: string | null;\n email2?: string | null;\n fax?: string | null;\n role?: string | null;\n\n role_id?: number | null;\n contact_role?: ContactRoleType;\n\n state?: string | null;\n telephone?: string | null;\n telephone2?: string | null;\n zip?: string | null;\n\n notes?: string | null;\n};\n\nexport type TransactionNoteItemType = {\n category: string;\n contract_id: number;\n date_posted: string;\n note_id: number;\n notes: string;\n posted_account?: { fullname: string; email: string };\n posted_account_id: number;\n};\n\nexport type TransactionNoteViewItemType = {\n category: string;\n contract_id: number;\n date_posted: string;\n note_id: number;\n notes: string;\n username: string;\n msg_body: string;\n account?: { fullname: string; email: string };\n account_id: number;\n};\n\nexport type TransactionEmailNoteItemType = {\n m_id: number;\n account_id: number;\n contract_id: number;\n msg_date: Date;\n msg_sender?: string;\n msg_subject?: string;\n msg_body?: string;\n account?: { fullname: string; email: string };\n};\n\nexport type TransactionTaskItemType = {\n id: number;\n uuid: string;\n list_id: number;\n d_created: number;\n d_completed: number;\n d_edited: number;\n compl: number;\n title: string;\n note?: string;\n prio: number;\n ow: number;\n tags: string;\n tags_ids: string;\n duedate?: string | null;\n completeddate?: Date;\n defaulttask_id: number;\n required_signers?: string;\n alertnumdays?: number;\n\n assignee?: number;\n email_template_id?: number;\n message_log_id?: number; // active draft id\n\n task_list: {\n name: string;\n contract_id: number;\n contract?: {\n address: string;\n city: string;\n state: string;\n zip: string;\n contract_id: number;\n };\n };\n\n task_todo_reminders?: {\n id: number;\n contract_id: number;\n task_id: number;\n duedate: string;\n day_number: string;\n day_after_before: string;\n sendemailto: string;\n send_reminder_on_date: string;\n email_sent: number;\n task_level: number;\n parent_account_id: number;\n }[];\n\n docs?: TransactionDocItemType[];\n\n emails?: EmailLogType[];\n emails_sent_count?: number;\n\n assignee_account?: AccountCompactDataType;\n};\n\nexport type TransactionTaskListType = {\n id: number;\n contract_id: number;\n account_id: number;\n uuid: string;\n ow: number;\n name: string;\n d_created: number;\n d_edited: number;\n sorting: number;\n published: number;\n taskview: number;\n};\n\nexport type DocFolderPreference = {\n folders_preference_id: number;\n folder_id: number;\n parent_account_id: number;\n folder_name?: string;\n files_information?: string;\n toggle: number;\n};\n\nexport type DocNotesType = {\n doc_note_id: number;\n doc_id: number;\n notes: string;\n date_posted: Date;\n posted_user_id?: number;\n\n account?: {\n email: string;\n fullname: string;\n };\n};\n\nexport type TemplateDocType = {\n docs_template_id: number;\n account_id: number;\n folder_id: number;\n parent_account_id: number;\n toggle: number;\n type: string;\n docs_template_name: string;\n};\n\nexport type DocFolderType = {\n folder_id: number;\n folder: string;\n date_added?: Date;\n path?: string;\n folder_name?: string;\n files_information?: string;\n rank?: number;\n parent_account_id: number;\n\n account?: {\n email: string;\n fullname: string;\n };\n\n doc_folder_preference?: DocFolderPreference;\n docs_templates?: TemplateDocType[];\n\n new_folder_name?: string;\n toggle: number;\n};\n\nexport interface TransactionDocItemType {\n doc_id: number;\n account_id?: number;\n\n contract_id: number;\n date_uploaded?: Date;\n status: number;\n filename?: string;\n u_filename?: string;\n path?: string;\n description?: string;\n uploadedby_account_id?: number;\n folder_id?: number;\n review_status: number;\n rank: number;\n sender_email?: string;\n emailed: number;\n document_id?: number;\n m_id?: number;\n docusign_envelopeid?: string;\n docusign_documentid?: string;\n docusign_uri?: string;\n docusign_fetched: number;\n archived: number;\n\n bucket: string;\n key: string;\n content_type: string;\n size: number;\n seller_sign: number;\n buyer_sign: number;\n seller_agent_sign: number;\n buyer_agent_sign: number;\n last_execute?: Date;\n doc_title?: string;\n template_type?: DOCUMENT_TYPE | null;\n\n doc_folder?: {\n rank: number;\n folder_name: string;\n\n doc_folder_preference?: DocFolderPreference;\n };\n account?: {\n email: string;\n fullname: string;\n };\n doc_notes?: DocNotesType[];\n\n task_todolists?: TransactionTaskItemType[];\n}\n\nexport type TransactionQuickStat = {\n taskStatInfo: {\n incomplete: number;\n complete: number;\n total: number;\n };\n documentStatInfo: {\n incomplete: number;\n complete: number;\n total: number;\n };\n noteStatInfo: {\n total: number;\n };\n};\n\nexport interface SelectPartyItemType {\n key: string;\n name?: string;\n telephone?: string;\n telephone2?: string;\n fax?: string;\n email?: string;\n company?: string;\n address?: string;\n city?: string;\n state?: string;\n zip?: string;\n commission?: number;\n commission_rate?: number;\n commission_amount?: number;\n}\n\nexport type GreenSheetType = {\n greensheet_id: number;\n contract_id?: number;\n other_fee?: string;\n trans_coord_fee?: string;\n brokerage_fee?: string;\n home_warranty_fee?: string;\n referral_amount?: string;\n referral_paid_to?: string;\n trans_coord_name?: string;\n credit_to_buyer_seller?: string;\n titleco_contact_id?: number;\n titleco_company?: string;\n titleco_closing_officer?: string;\n titleco_address?: string;\n titleco_fax?: string;\n titleco_email?: string;\n titleco_office_num?: string;\n titleco_mobile?: string;\n lenderco_contact_id?: number;\n lenderco_cash_deal?: number;\n lenderco_company?: string;\n lenderco_loan_officer?: string;\n lenderco_address?: string;\n lenderco_fax?: string;\n lenderco_email?: string;\n lenderco_office_num?: string;\n lenderco_mobile?: string;\n notes?: string;\n show_additional_info?: boolean;\n\n titleco_contact?: TransactionContactItemType;\n lenderco_contact?: TransactionContactItemType;\n};\n","import React, { HTMLAttributes } from 'react';\n\nimport { CopyTwoTone } from '@ant-design/icons';\n\nimport { showMessage } from 'utils/notificationUtil';\n\nconst EZCopyable: React.FC<HTMLAttributes<any> & { text: string }> = ({ text, className }) => {\n const _onClick: React.MouseEventHandler = () => {\n window.navigator.clipboard.writeText(text);\n showMessage('success', 'A text has been copied to clipboard!');\n };\n\n return (\n <span title=\"Copy the text\" onClick={_onClick} className={`copyable ${className}`}>\n <CopyTwoTone />\n </span>\n );\n};\n\nexport default EZCopyable;\n","import React from 'react';\n\nimport { Popover, PopoverProps, Row, Col, Typography } from 'antd';\n\nimport Copyable from '../copyable';\nimport { EZNumberFormat, CommissionInfo } from 'components';\n\nconst { Text } = Typography;\n\ninterface ITransactionPartyDataType {\n title?: string;\n fullname?: string;\n phone?: string;\n email?: string;\n\n commission_base?: number;\n\n commission_rate?: number;\n commission_amount?: number;\n}\n\ntype PopoverExtended = PopoverProps & {\n data: ITransactionPartyDataType;\n\n type?: 'transaction_party';\n emptyLabel?: string;\n\n showCommission?: boolean;\n};\n\nconst EZPopupable: React.FC<PopoverExtended> = ({ emptyLabel, showCommission, data, ...props }) => {\n const _generateContent = () => {\n return (\n <Row style={{ width: '400px' }} gutter={[8, 4]}>\n <Col span={6}>Fullname</Col>\n <Col span={18}>\n : \n {data.fullname ? (\n <span>\n {data.fullname} <Copyable text={data.fullname} />\n </span>\n ) : (\n '-'\n )}\n </Col>\n <Col span={6}>Email</Col>\n <Col span={18}>\n : \n {data.email ? (\n <span>\n {data.email} <Copyable text={data.email} />\n </span>\n ) : (\n '-'\n )}\n </Col>\n <Col span={6}>Phone</Col>\n <Col span={18}>\n : \n {data.phone ? (\n <span>\n {data.phone} <Copyable text={data.phone} />\n </span>\n ) : (\n '-'\n )}\n </Col>\n {showCommission && (\n <>\n <Col span={6}>Commission</Col>\n <Col span={18}>\n : \n <CommissionInfo\n commission_base={data.commission_base}\n commission_rate={data.commission_rate}\n commission_amount={data.commission_amount}\n />\n </Col>\n </>\n )}\n </Row>\n );\n };\n\n return (\n <>\n <Popover\n title=\"Additional info\"\n trigger=\"hover\"\n content={_generateContent()}\n autoAdjustOverflow\n showArrow={false}\n {...props}\n >\n {data.title ? (\n <Text underline ellipsis>\n {data.title}\n </Text>\n ) : (\n <i>{emptyLabel || 'Value'} isn't set</i>\n )}\n </Popover>\n </>\n );\n};\n\nexport default EZPopupable;\n","import React from 'react';\n\nimport { MaskedInput } from 'antd-mask-input';\nimport { MaskedInputProps, MaskType } from 'antd-mask-input/build/main/lib/MaskedInput';\n\ntype EZInputMaskedProps = Omit<MaskedInputProps, 'mask'> & {\n inputType?: 'USPhoneNumber' | 'USPCellphoneNumber';\n mask?: MaskType;\n};\n\nconst EZInputMasked: React.FC<EZInputMaskedProps> = ({\n inputType,\n mask = '(000) 000-0000',\n ...props\n}) => {\n return (\n <>\n <MaskedInput\n mask={\n // https://imask.js.org/guide.html#masked-pattern\n mask\n }\n {...props}\n />\n </>\n );\n};\n\nexport default EZInputMasked;\n","import { IDocument } from 'react-doc-viewer';\n\nimport { TransactionDocItemType } from './transaction';\n\nexport const enum DOCUMENT_TYPE {\n WEBLINK = 'Weblink',\n FILE = 'file',\n}\n\nexport interface IDocumentTabInsanceProps {\n name: string;\n}\n\nexport type DocViewerType = TransactionDocItemType &\n IDocument & {\n file_id: number;\n presignedURL: string;\n isPreviewAvailable?: boolean;\n };\n","import axios, { AxiosRequestConfig } from 'axios';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\n\nexport const generatePresignedURL = (filePayload: {\n original_name: string;\n mime_type: string;\n size: number;\n}) => {\n return APIRequest({\n method: 'post',\n url: apiUrl + `/file-upload/presign-url`,\n data: {\n ...filePayload,\n },\n });\n};\n\nexport const uploadToAWSS3 = (presignedURL: string, file: File, opts?: AxiosRequestConfig) => {\n var options: AxiosRequestConfig = {\n headers: {\n 'Content-Type': file.type,\n },\n ...opts,\n };\n\n return axios.put(presignedURL, file, options);\n};\n\n// export const uploadToAWSS3 = (presignedURL: string, file: File) => {\n// return APIRequest({\n// method: 'put',\n// url: presignedURL,\n// data: file,\n// headers: {\n// 'Content-Type': file.type,\n// },\n// withCredentials: false,\n// });\n// };\n\n// UploadToAWSS3: (awsURL, file) => {\n// var options = {\n// headers: {\n// \"Content-Type\": file.type,\n// },\n// };\n\n// return axios.put(awsURL, file, options);\n// },\n","import React, { useState } from 'react';\n\nimport { Upload, UploadProps } from 'antd';\n\nimport { generatePresignedURL, uploadToAWSS3 } from 'utils/ez_api/fileUploadAPIs';\n\nimport { showNotification } from 'utils/notificationUtil';\nimport { RcFile, UploadFile } from 'antd/lib/upload';\nimport axios, { AxiosRequestConfig } from 'axios';\nimport { UploadFileStatus } from 'antd/lib/upload/interface';\n\nexport type EZUploadFileProps = {\n uid: string;\n size?: number;\n name: string;\n fileName?: string;\n lastModified?: number;\n lastModifiedDate?: Date;\n url?: string;\n status?: UploadFileStatus;\n percent?: number;\n error?: any;\n};\n\nexport type EZUploadProps = UploadProps & {\n contractID?: number;\n dragger?: boolean;\n\n getPresignedURL?: (payload: any) => Promise<any>;\n};\n\nconst { Dragger } = Upload;\n\nconst defaultProps: UploadProps = {\n showUploadList: false,\n name: 'file',\n multiple: true,\n};\n\nexport const EZUpload: React.FC<EZUploadProps> = ({\n contractID,\n getPresignedURL,\n dragger,\n ...props\n}) => {\n const _customRequest: UploadProps['customRequest'] = ({\n file,\n onError,\n onSuccess,\n onProgress,\n data,\n }) => {\n const File: RcFile = file as RcFile;\n // const axiosTokenSource = axios.CancelToken.source();\n\n const payload = {\n original_name: File.name,\n mime_type: File.type,\n size: File.size,\n };\n\n if (getPresignedURL) {\n getPresignedURL(payload)\n .then(presignedURLResp => {\n if (presignedURLResp?.data?.presignedURL) {\n const presignedURL = presignedURLResp.data.presignedURL;\n\n var options: AxiosRequestConfig = {\n onUploadProgress: (event: ProgressEvent) => {\n const { loaded, total } = event;\n onProgress?.({\n percent: Math.round((loaded / total) * 100),\n });\n },\n headers: {\n 'Content-Type': File.type,\n },\n // cancelToken: axiosTokenSource.token,\n };\n\n return uploadToAWSS3(presignedURL, File, options)\n .then(resp => {\n onSuccess?.({\n ...presignedURLResp.data,\n data,\n });\n })\n .catch(err => {\n throw err;\n });\n }\n })\n .catch(err => {\n onError?.(err);\n console.log('🚀 ~ file: upload.tsx ~ line 45 ~ beforeUpload ~ err', err);\n showNotification('error', 'Error while uploading the selected file(s)');\n })\n\n .finally(() => {});\n } else {\n onError?.(new Error(`getPresignedURL function isn't set!`));\n showNotification('error', 'Error while uploading the selected file(s)');\n }\n return {\n abort() {\n console.log('upload progress is aborted.');\n },\n };\n };\n\n return (\n <React.Fragment>\n {dragger ? (\n <Dragger customRequest={_customRequest} {...defaultProps} {...props} />\n ) : (\n <Upload customRequest={_customRequest} {...defaultProps} {...props} />\n )}\n </React.Fragment>\n );\n};\n","// Core React libs import\nimport React, { useState } from 'react';\n\n// Core ANTD and 3rd party libs import\nimport { Button, Dropdown, Input, Menu, Space, UploadProps } from 'antd';\nimport { TransactionDocItemType } from 'types/transaction';\nimport { DOCUMENT_TYPE } from 'types/document';\nimport {\n AuditOutlined,\n CopyOutlined,\n DeleteOutlined,\n DownOutlined,\n DownloadOutlined,\n EditOutlined,\n EyeOutlined,\n FileSyncOutlined,\n PlusOutlined,\n UploadOutlined,\n} from '@ant-design/icons';\nimport { previewDoc } from 'components/appPage/documents';\nimport { showMessage } from 'utils/notificationUtil';\nimport { EZUpload } from 'components/upload/upload';\nimport { UploadChangeParam } from 'antd/lib/upload';\n\ntype EZDocumentUploadProps = {\n record: TransactionDocItemType;\n index: number;\n contractID: number;\n isTransactionDeleted?: boolean;\n uploadProps: UploadProps;\n _handleFileUploadOnTemplate: ({ file, fileList }: UploadChangeParam, doc_id: number) => void;\n _downloadDocument: (doc: TransactionDocItemType) => void;\n _initiateDocuSign: (doc: TransactionDocItemType) => void;\n _deleteFile: (record: TransactionDocItemType) => void;\n _hanldeUploadWeblink: (\n fileLink: string,\n doc_id: number,\n callbackIsWeblink: React.Dispatch<React.SetStateAction<number | null>>,\n callbackTemp: React.Dispatch<React.SetStateAction<string>>\n ) => void;\n};\nexport const DocFilenameColumn: React.FC<EZDocumentUploadProps> = ({\n record,\n index,\n contractID,\n uploadProps,\n isTransactionDeleted,\n _handleFileUploadOnTemplate,\n _downloadDocument,\n _initiateDocuSign,\n _deleteFile,\n _hanldeUploadWeblink,\n}) => {\n const [activeWeblink, setActiveWeblink] = useState<number | null>(null);\n const [weblinkTemp, setWeblinkTemp] = useState<string>('');\n\n if (record.date_uploaded && !activeWeblink) {\n // show data file and weblink\n return (\n <Space align=\"center\" size=\"small\" className=\"pl-1\">\n {record.template_type !== DOCUMENT_TYPE.WEBLINK ? (\n <Button\n className=\"p-0\"\n type=\"link\"\n style={{ fontSize: 12 }}\n icon={<EyeOutlined />}\n title={record.filename}\n onClick={() => {\n previewDoc('contract_document', [\n {\n file_id: record.doc_id,\n contract_id: contractID,\n },\n ]);\n }}\n >\n <span className=\"ellipsis-filename\">{record.filename || '-'}</span>\n </Button>\n ) : (\n // <span className=\"ellipsis-filename\">{record.filename || '-'}</span>\n <Button\n className=\"p-0\"\n type=\"link\"\n style={{ fontSize: 12 }}\n icon={<CopyOutlined />}\n title={record.filename}\n onClick={() => {\n window.navigator.clipboard.writeText(record.filename || '');\n showMessage('success', 'A text has been copied to clipboard!');\n }}\n >\n <span className=\"ellipsis-filename\">{record.filename || '-'}</span>\n </Button>\n )}\n {record.template_type !== DOCUMENT_TYPE.WEBLINK ? (\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu>\n {!isTransactionDeleted && (\n <EZUpload\n {...uploadProps}\n style={{\n width: '50%',\n }}\n onChange={info =>\n _handleFileUploadOnTemplate(info, record.doc_id)\n }\n >\n <Menu.Item key=\"0\">\n <FileSyncOutlined className=\"mr-3\" />\n <span className=\"\">Replace File</span>\n </Menu.Item>\n </EZUpload>\n )}\n\n <Menu.Item key=\"1\" onClick={() => _downloadDocument(record)}>\n <DownloadOutlined className=\"mr-3\" />\n <span className=\"\">Download</span>\n </Menu.Item>\n {!isTransactionDeleted && (\n <Menu.Item key=\"2\" onClick={() => _initiateDocuSign(record)}>\n <AuditOutlined className=\"mr-3\" />\n <span className=\"\">Send to DocuSign</span>\n </Menu.Item>\n )}\n <Menu.Divider />\n {!isTransactionDeleted && (\n <Menu.Item key=\"3\" danger onClick={() => _deleteFile(record)}>\n <DeleteOutlined className=\"mr-3\" />\n Delete File\n </Menu.Item>\n )}\n </Menu>\n }\n placement=\"bottomRight\"\n >\n <span onClick={e => e.preventDefault()}>\n <Button size=\"small\" type=\"text\" icon={<DownOutlined />} />\n </span>\n </Dropdown>\n ) : !isTransactionDeleted ? (\n <Dropdown\n trigger={['click']}\n overlay={\n <Menu>\n <Menu.Item\n key=\"0\"\n onClick={() => {\n setActiveWeblink(index);\n }}\n >\n <EditOutlined className=\"mr-3\" />\n <span className=\"\">Edit Weblink</span>\n </Menu.Item>\n\n <Menu.Divider />\n <Menu.Item key=\"3\" danger onClick={() => _deleteFile(record)}>\n <DeleteOutlined className=\"mr-3\" />\n Delete Weblink\n </Menu.Item>\n </Menu>\n }\n placement=\"bottomRight\"\n >\n <span onClick={e => e.preventDefault()}>\n <Button size=\"small\" type=\"text\" icon={<DownOutlined />} />\n </span>\n </Dropdown>\n ) : (\n <></>\n )}\n </Space>\n );\n } else if (record.date_uploaded && activeWeblink === index) {\n //edit weblink\n return (\n <Space size={[4, 4]} style={{ width: '100%' }}>\n <Input\n placeholder=\"Please enter weblink\"\n name=\"filename\"\n defaultValue={record.date_uploaded && record.filename}\n onChange={e => setWeblinkTemp(e.target.value)}\n />\n\n <Button\n type=\"primary\"\n onClick={() =>\n _hanldeUploadWeblink(\n weblinkTemp,\n record.doc_id,\n setActiveWeblink,\n setWeblinkTemp\n )\n }\n >\n Save\n </Button>\n <Button\n type=\"text\"\n onClick={() => {\n setActiveWeblink(null);\n setWeblinkTemp('');\n }}\n >\n X\n </Button>\n </Space>\n );\n }\n //show button upload file or weblink (empty file state)\n switch (record.template_type) {\n case DOCUMENT_TYPE.WEBLINK:\n return activeWeblink === index ? (\n <Space size={[4, 4]} style={{ width: '100%' }}>\n <Input\n placeholder=\"Please enter weblink\"\n name=\"filename\"\n defaultValue={record.date_uploaded && record.filename}\n onChange={e => setWeblinkTemp(e.target.value)}\n />\n\n <Button\n type=\"primary\"\n onClick={() =>\n _hanldeUploadWeblink(\n weblinkTemp,\n record.doc_id,\n setActiveWeblink,\n setWeblinkTemp\n )\n }\n >\n Save\n </Button>\n <Button\n type=\"text\"\n onClick={() => {\n setActiveWeblink(null);\n setWeblinkTemp('');\n }}\n >\n X\n </Button>\n </Space>\n ) : isTransactionDeleted ? (\n <></>\n ) : (\n <Button\n onClick={() => {\n setActiveWeblink(index);\n }}\n icon={<PlusOutlined />}\n className=\"button-file\"\n >\n Add Weblink\n </Button>\n );\n default:\n return isTransactionDeleted ? (\n <></>\n ) : (\n <EZUpload\n {...uploadProps}\n onChange={info => _handleFileUploadOnTemplate(info, record.doc_id)}\n >\n <Button icon={<UploadOutlined />} className=\"button-file\">\n Upload File\n </Button>\n </EZUpload>\n );\n }\n};\n","import React, { useMemo, useRef, useState } from 'react';\n\nimport debounce from 'lodash/debounce';\nimport { Spin, Select } from 'antd';\nimport type { SelectProps } from 'antd/es/select';\nimport { AxiosResponse } from 'axios';\n\nimport {\n ContractBuyer,\n ContractBuyerAgents,\n ContractLandlords,\n ContractLeasingAgent,\n ContractReferralSources,\n ContractSellerAgents,\n ContractSellers,\n ContractTenants,\n PARTY_TYPES,\n} from 'types/transaction';\nimport { getTransactionParties } from 'utils/ez_api/transactionAPIs';\n\nexport interface EZSelectPartyProps<ValueType = any>\n extends Omit<SelectProps<ValueType | ValueType[]>, 'options' | 'children'> {\n fetchOptions?: (search: string) => Promise<ValueType[]>;\n debounceTimeout?: number;\n placeholderOnFocus?: JSX.Element;\n defaultPlaceholder?: JSX.Element;\n\n partyType?: PARTY_TYPES;\n}\n\nasync function _fetchParties(partyType: PARTY_TYPES, searchKeyword: string): Promise<any[]> {\n return getTransactionParties(partyType, searchKeyword).then((response: AxiosResponse<any>) => {\n switch (partyType) {\n case 'contract_buyers':\n return response.data?.map((record: ContractBuyer) => ({\n label: (\n <span>\n {record.buyer_name} {record.email && `(${record.email})`}\n </span>\n ),\n selectedLabel: `${record.buyer_name}`,\n value: record.buyer_name,\n }));\n\n case 'contract_buyer_agents':\n return response.data?.map((record: ContractBuyerAgents) => ({\n label: (\n <span>\n {record.agent_name} {record.email && `(${record.email})`}\n </span>\n ),\n selectedLabel: `${record.agent_name}`,\n value: record.agent_name,\n }));\n\n case 'contract_sellers':\n return response.data?.map((record: ContractSellers) => ({\n label: (\n <span>\n {record.seller_name} {record.email && `(${record.email})`}\n </span>\n ),\n selectedLabel: `${record.seller_name}`,\n value: record.seller_name,\n }));\n\n case 'contract_seller_agents':\n return response.data?.map((record: ContractSellerAgents) => ({\n label: (\n <span>\n {record.broker_name} {record.email && `(${record.email})`}\n </span>\n ),\n selectedLabel: `${record.broker_name}`,\n value: record.broker_name,\n }));\n\n case 'contract_tenants':\n return response.data?.map((record: ContractTenants) => ({\n label: (\n <span>\n {record.tenant_name} {record.email && `(${record.email})`}\n </span>\n ),\n selectedLabel: `${record.tenant_name}`,\n value: record.tenant_name,\n }));\n\n case 'contract_landlords':\n return response.data?.map((record: ContractLandlords) => ({\n label: (\n <span>\n {record.landlord_name} {record.email && `(${record.email})`}\n </span>\n ),\n selectedLabel: `${record.landlord_name}`,\n value: record.landlord_name,\n }));\n\n case 'contract_referral_sources':\n return response.data?.map((record: ContractReferralSources) => ({\n label: (\n <span>\n {record.referral_source_name} {record.email && `(${record.email})`}\n </span>\n ),\n selectedLabel: `${record.referral_source_name}`,\n value: record.referral_source_name,\n }));\n case 'contract_leasing_agents':\n return response.data?.map((record: ContractLeasingAgent) => ({\n label: (\n <span>\n {record.leasing_agent_name} {record.email && `(${record.email})`}\n </span>\n ),\n selectedLabel: `${record.leasing_agent_name}`,\n value: record.leasing_agent_name,\n }));\n\n default:\n return [];\n }\n });\n}\n\nexport function EZSelectParty<\n ValueType extends {\n key?: string;\n label: React.ReactNode;\n selectedLabel?: React.ReactNode;\n value: string | number;\n } = any\n>({\n fetchOptions,\n debounceTimeout = 800,\n placeholderOnFocus,\n defaultPlaceholder,\n partyType,\n\n ...props\n}: EZSelectPartyProps<ValueType>) {\n const [fetching, setFetching] = useState(false);\n const [keyword, setKeyword] = useState('');\n const [onFocus, setOnFocus] = useState(false);\n const [options, setOptions] = useState<ValueType[]>([]);\n const fetchRef = useRef(0);\n\n const debounceFetcher = useMemo(() => {\n const loadOptions = (searchKeyword: string) => {\n fetchRef.current += 1;\n const fetchId = fetchRef.current;\n setOptions([]);\n setFetching(true);\n setKeyword(searchKeyword);\n\n if (partyType) {\n _fetchParties(partyType, searchKeyword).then(newOptions => {\n if (fetchId !== fetchRef.current) {\n // for fetch callback order\n return;\n }\n\n setOptions(newOptions);\n setFetching(false);\n });\n } else {\n fetchOptions?.(searchKeyword).then(newOptions => {\n if (fetchId !== fetchRef.current) {\n // for fetch callback order\n return;\n }\n\n setOptions(newOptions);\n setFetching(false);\n });\n }\n };\n\n return debounce(loadOptions, debounceTimeout);\n }, [fetchOptions, debounceTimeout]);\n\n return (\n <Select\n filterOption={false}\n onSearch={debounceFetcher}\n notFoundContent={\n fetching ? (\n <Spin size=\"small\" />\n ) : keyword ? (\n 'No result'\n ) : (\n 'Type a keyword to search'\n )\n }\n placeholder={onFocus ? placeholderOnFocus : defaultPlaceholder}\n onFocus={() => setOnFocus(true)}\n onBlur={() => setOnFocus(false)}\n options={options}\n {...props}\n />\n );\n}\n","// Core React libs import\nimport React from 'react';\n\n// Core ANTD and 3rd party libs import\nimport { Select } from 'antd';\nimport type { SelectProps } from 'antd/es/select';\nimport { FlagTwoTone, StopOutlined } from '@ant-design/icons';\n\n// EZ level libs import\nimport { TRANSACTION_FLAGS } from 'types/transaction';\n\nexport interface EZSelectFlagProps<ValueType = any>\n extends Omit<SelectProps<ValueType | ValueType[]>, 'options' | 'children'> {}\n\nconst { Option } = Select;\n\nconst noFlagItem = TRANSACTION_FLAGS[0];\n\nexport const TransactionFlag: React.FC<{ contract_id: number; flag_id: number | null }> = ({\n contract_id,\n flag_id,\n}) => {\n const contractFlag = TRANSACTION_FLAGS.find(flag => flag.flag_id === flag_id) || noFlagItem;\n\n return (\n <span>\n {!flag_id || flag_id === 1 ? (\n <StopOutlined />\n ) : (\n <FlagTwoTone twoToneColor={contractFlag.flag_color} />\n )}\n <span className=\"ml-2\">{contractFlag.flag}</span>\n </span>\n );\n};\n\nexport function EZSelectFlag<\n ValueType extends {\n key?: string;\n // label: React.ReactNode;\n // value: string | number;\n } = any\n>({ ...props }: EZSelectFlagProps<any>) {\n return (\n <Select\n style={{ width: '100%' }}\n showSearch\n allowClear\n placeholder=\"Select Transaction Flag\"\n {...props}\n >\n {TRANSACTION_FLAGS.map(item => (\n <Option key={item.flag_id} value={item.flag_id}>\n {item.flag_id !== 1 ? (\n <FlagTwoTone twoToneColor={item.flag_color} />\n ) : (\n <StopOutlined />\n )}\n <span className=\"ml-2\">{item.flag}</span>\n </Option>\n ))}\n </Select>\n );\n}\n","// Core React libs import\nimport React, { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rd party libs import\nimport { Badge, Select } from 'antd';\nimport type { SelectProps } from 'antd/es/select';\nimport { cloneDeep } from 'lodash';\n\n// EZ level libs import\nimport { HomeContext } from 'context/EZContext';\nimport { PropStatusPreference } from 'types/admin';\nimport { TRANSACTION_STATUSES as DEFAULT_TRANSACTION_STATUSES } from 'types/transaction';\nimport { getPropertyStatusSetting } from 'utils/ez_api/AdminAPIs';\nexport { TRANSACTION_STATUSES } from 'types/transaction';\n\nexport interface EZSelectStatusProps<ValueType = any>\n extends Omit<SelectProps<ValueType | ValueType[]>, 'options' | 'children'> {\n showAllActiveStatusesOpt?: boolean;\n showArchivedFilterOpt?: boolean;\n showDeletedFilterOpt?: boolean;\n}\n\nconst { Option, OptGroup } = Select;\n\nlet defaultTransactionStatuses = cloneDeep(DEFAULT_TRANSACTION_STATUSES);\n\nlet hasSettingAPIBeenCalled = false;\n\nexport function EZSelectStatus<\n ValueType extends {\n key?: string;\n label: React.ReactNode;\n value: string | number;\n } = any\n>({ ...props }: EZSelectStatusProps<ValueType>) {\n const [statusOptions, setStatusOptions] = useState<typeof DEFAULT_TRANSACTION_STATUSES>(\n defaultTransactionStatuses\n );\n const { triggerRefetchDataList, setTriggerRefetchDataList } = useContext(HomeContext);\n const hasTriggerRefetchData = triggerRefetchDataList.includes('property_status');\n\n const _fetchTransactionStatusSetting = () => {\n if (hasSettingAPIBeenCalled && !hasTriggerRefetchData) return;\n\n getPropertyStatusSetting().then(({ data }) => {\n hasSettingAPIBeenCalled = true;\n if (data) {\n const propStatusPreference = (data as PropStatusPreference[])?.map(\n pref => pref.status_id || []\n );\n defaultTransactionStatuses?.forEach(statusCategory => {\n statusCategory.status_list = statusCategory.status_list.filter(\n status => !propStatusPreference.includes(status.status_id)\n );\n });\n setStatusOptions([...defaultTransactionStatuses]);\n }\n\n if (hasTriggerRefetchData) {\n const newTriggerRefetchDataList = triggerRefetchDataList.filter(\n key => key !== 'property_status'\n );\n setTriggerRefetchDataList(newTriggerRefetchDataList);\n }\n });\n };\n\n useEffect(() => {\n _fetchTransactionStatusSetting();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Select\n style={{ width: '100%' }}\n showSearch\n allowClear\n placeholder=\"Select Status\"\n {...props}\n >\n {props.showAllActiveStatusesOpt && (\n <Option value=\"all_active_statuses\">All Active Statuses</Option>\n )}\n {props.showArchivedFilterOpt && <Option value=\"archived_transaction\">Archived</Option>}\n {props.showDeletedFilterOpt && <Option value=\"deleted_transaction\">Deleted</Option>}\n {statusOptions?.map((statusCategory, idx) => (\n <OptGroup\n label={statusCategory.status_category_label}\n key={`statusCategory-${idx}`}\n >\n {statusCategory.status_list.map(status => (\n <Option key={status.status_id} value={status.status_id}>\n <Badge color={status.color} text={status.status} />\n </Option>\n ))}\n </OptGroup>\n ))}\n </Select>\n );\n}\n","// Core React libs import\nimport React, { useContext, useEffect, useState } from 'react';\n\n// Core ANTD and 3rd party libs import\nimport { Select } from 'antd';\nimport { cloneDeep } from 'lodash';\n\n// import type { SelectProps, BaseOptionType, DefaultOptionType } from 'antd/es/select';\nimport type { SelectProps } from 'antd/es/select';\n\n// EZ level libs import\nimport { PROPERTY_TYPES } from 'types/transaction';\nimport { getPropertyTypeSetting } from 'utils/ez_api/AdminAPIs';\nimport { PropTypePreference } from 'types/admin';\nimport { HomeContext } from 'context/EZContext';\n\nlet defaultPropTypes = cloneDeep(PROPERTY_TYPES);\n\nlet hasSettingAPIBeenCalled = false;\n\nexport interface EZSelectPropertyTypeProps<ValueType = any>\n extends Omit<SelectProps<ValueType | ValueType[]>, 'options' | 'children'> {}\n\nexport function EZSelectPropertyType({ ...props }) {\n const [options, setOptions] = useState<typeof PROPERTY_TYPES>(defaultPropTypes);\n\n const { triggerRefetchDataList, setTriggerRefetchDataList } = useContext(HomeContext);\n const hasTriggerRefetchData = triggerRefetchDataList.includes('property_type');\n\n const _fetchSetting = () => {\n if (hasSettingAPIBeenCalled && !hasTriggerRefetchData) return;\n\n getPropertyTypeSetting().then(({ data }) => {\n hasSettingAPIBeenCalled = true;\n if (data) {\n const propTypePreference = (data as PropTypePreference[])?.map(\n pref => pref.type_id || []\n );\n\n if (propTypePreference?.length) {\n defaultPropTypes = [\n ...defaultPropTypes.filter(\n opt => !propTypePreference.includes(opt.type_id)\n ),\n ];\n\n setOptions([...defaultPropTypes]);\n }\n }\n if (hasTriggerRefetchData) {\n const newTriggerRefetchDataList = triggerRefetchDataList.filter(\n key => key !== 'property_type'\n );\n setTriggerRefetchDataList(newTriggerRefetchDataList);\n }\n });\n };\n\n useEffect(() => {\n _fetchSetting();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Select\n style={{ width: '100%' }}\n showSearch\n allowClear\n placeholder=\"Select Property Type\"\n fieldNames={{\n label: 'type_name',\n value: 'type_id',\n }}\n {...props}\n options={options}\n ></Select>\n );\n}\n","import React from 'react';\n\nimport qs from 'qs';\nimport { AxiosResponse } from 'axios';\n\nimport { Typography } from 'antd';\nimport type { SelectProps } from 'antd/es/select';\n\nimport { EZSelectParty } from './selectParty';\nimport { getAllTransactions } from 'utils/ez_api/transactionAPIs';\nimport { ITransactionListDataType } from 'types/transaction';\n\nconst { Text } = Typography;\n\nexport interface EZSelectTransactionProps<ValueType = any>\n extends Omit<SelectProps<ValueType | ValueType[]>, 'options' | 'children'> {\n debounceTimeout?: number;\n placeholderOnFocus?: JSX.Element;\n defaultPlaceholder?: JSX.Element;\n}\n\nasync function _fetchTransaction(searchKeyword: string): Promise<any[]> {\n return getAllTransactions(\n 'compact',\n qs.stringify({\n keyword: searchKeyword,\n })\n ).then((response: AxiosResponse<any>) => {\n return response.data?.map((record: ITransactionListDataType) => ({\n label: (\n <span>\n {[record.address || '-', record.city, record.state]\n .filter(item => item)\n .join(', ')}\n </span>\n ),\n selectedLabel: `${record.address}`,\n value: record.contract_id,\n }));\n });\n}\n\nexport function EZSelectTransaction<\n ValueType extends {\n key?: string;\n label: React.ReactNode;\n selectedLabel?: React.ReactNode;\n value: string | number;\n } = any\n>({\n debounceTimeout = 800,\n placeholderOnFocus,\n defaultPlaceholder,\n ...props\n}: EZSelectTransactionProps<ValueType>) {\n return (\n <EZSelectParty\n style={{ width: '100%' }}\n maxTagCount={'responsive'}\n mode=\"multiple\"\n fetchOptions={_fetchTransaction}\n optionFilterProp=\"label\"\n className=\"mr-3\"\n showSearch\n showArrow\n allowClear\n placeholderOnFocus={\n <span>\n <Text type=\"secondary\">Enter keyword to search a transaction </Text>\n </span>\n }\n defaultPlaceholder={\n <span>\n <Text>Show: </Text>\n <Text strong>All Transactions</Text>\n </span>\n }\n optionLabelProp=\"selectedLabel\"\n {...props}\n />\n );\n}\n","export const US_STATES = [\n {\n id: 1,\n state_code: 'AL',\n state_name: 'Alabama',\n },\n {\n id: 2,\n state_code: 'AK',\n state_name: 'Alaska',\n },\n {\n id: 3,\n state_code: 'AZ',\n state_name: 'Arizona',\n },\n {\n id: 4,\n state_code: 'AR',\n state_name: 'Arkansas',\n },\n {\n id: 5,\n state_code: 'CA',\n state_name: 'California',\n },\n {\n id: 6,\n state_code: 'CO',\n state_name: 'Colorado',\n },\n {\n id: 7,\n state_code: 'CT',\n state_name: 'Connecticut',\n },\n {\n id: 8,\n state_code: 'DE',\n state_name: 'Delaware',\n },\n {\n id: 9,\n state_code: 'DC',\n state_name: 'District of Columbia',\n },\n {\n id: 10,\n state_code: 'FL',\n state_name: 'Florida',\n },\n {\n id: 11,\n state_code: 'GA',\n state_name: 'Georgia',\n },\n {\n id: 12,\n state_code: 'HI',\n state_name: 'Hawaii',\n },\n {\n id: 13,\n state_code: 'ID',\n state_name: 'Idaho',\n },\n {\n id: 14,\n state_code: 'IL',\n state_name: 'Illinois',\n },\n {\n id: 15,\n state_code: 'IN',\n state_name: 'Indiana',\n },\n {\n id: 16,\n state_code: 'IA',\n state_name: 'Iowa',\n },\n {\n id: 17,\n state_code: 'KS',\n state_name: 'Kansas',\n },\n {\n id: 18,\n state_code: 'KY',\n state_name: 'Kentucky',\n },\n {\n id: 19,\n state_code: 'LA',\n state_name: 'Louisiana',\n },\n {\n id: 20,\n state_code: 'ME',\n state_name: 'Maine',\n },\n {\n id: 21,\n state_code: 'MD',\n state_name: 'Maryland',\n },\n {\n id: 22,\n state_code: 'MA',\n state_name: 'Massachusetts',\n },\n {\n id: 23,\n state_code: 'MI',\n state_name: 'Michigan',\n },\n {\n id: 24,\n state_code: 'MN',\n state_name: 'Minnesota',\n },\n {\n id: 25,\n state_code: 'MS',\n state_name: 'Mississippi',\n },\n {\n id: 26,\n state_code: 'MO',\n state_name: 'Missouri',\n },\n {\n id: 27,\n state_code: 'MT',\n state_name: 'Montana',\n },\n {\n id: 28,\n state_code: 'NE',\n state_name: 'Nebraska',\n },\n {\n id: 29,\n state_code: 'NV',\n state_name: 'Nevada',\n },\n {\n id: 30,\n state_code: 'NH',\n state_name: 'New Hampshire',\n },\n {\n id: 31,\n state_code: 'NJ',\n state_name: 'New Jersey',\n },\n {\n id: 32,\n state_code: 'NM',\n state_name: 'New Mexico',\n },\n {\n id: 33,\n state_code: 'NY',\n state_name: 'New York',\n },\n {\n id: 34,\n state_code: 'NC',\n state_name: 'North Carolina',\n },\n {\n id: 35,\n state_code: 'ND',\n state_name: 'North Dakota',\n },\n {\n id: 36,\n state_code: 'OH',\n state_name: 'Ohio',\n },\n {\n id: 37,\n state_code: 'OK',\n state_name: 'Oklahoma',\n },\n {\n id: 38,\n state_code: 'OR',\n state_name: 'Oregon',\n },\n {\n id: 39,\n state_code: 'PA',\n state_name: 'Pennsylvania',\n },\n {\n id: 40,\n state_code: 'PR',\n state_name: 'Puerto Rico',\n },\n {\n id: 41,\n state_code: 'RI',\n state_name: 'Rhode Island',\n },\n {\n id: 42,\n state_code: 'SC',\n state_name: 'South Carolina',\n },\n {\n id: 43,\n state_code: 'SD',\n state_name: 'South Dakota',\n },\n {\n id: 44,\n state_code: 'TN',\n state_name: 'Tennessee',\n },\n {\n id: 45,\n state_code: 'TX',\n state_name: 'Texas',\n },\n {\n id: 46,\n state_code: 'UT',\n state_name: 'Utah',\n },\n {\n id: 47,\n state_code: 'VT',\n state_name: 'Vermont',\n },\n {\n id: 48,\n state_code: 'VA',\n state_name: 'Virginia',\n },\n {\n id: 49,\n state_code: 'WA',\n state_name: 'Washington',\n },\n {\n id: 50,\n state_code: 'WV',\n state_name: 'West Virginia',\n },\n {\n id: 51,\n state_code: 'WI',\n state_name: 'Wisconsin',\n },\n {\n id: 52,\n state_code: 'WY',\n state_name: 'Wyoming',\n },\n];\n","// Core React libs import\nimport React from 'react';\n\n// Core ANTD and 3rd party libs import\nimport { Select } from 'antd';\n// import type { SelectProps, BaseOptionType, DefaultOptionType } from 'antd/es/select';\nimport type { SelectProps } from 'antd/es/select';\n\n// EZ level libs import\nimport { US_STATES } from 'static/US_States';\n\nexport interface EZSelectPropertyTypeProps<ValueType = any>\n extends Omit<SelectProps<ValueType | ValueType[]>, 'options' | 'children'> {}\n\nexport function EZSelectUSState({ ...props }) {\n return (\n <Select\n style={{ width: '100%' }}\n options={US_STATES}\n optionFilterProp=\"state_name\"\n fieldNames={{\n label: 'state_name',\n value: 'state_code',\n }}\n showSearch\n allowClear\n showArrow\n placeholder={'Select or search the state'}\n {...props}\n ></Select>\n );\n}\n","// Core React libs import\nimport React, { useRef, useState } from 'react';\n\n// Core ANTD and 3rd party libs import\nimport { Button, Divider, Input, InputRef, Select, Space } from 'antd';\n// import type { SelectProps, BaseOptionType, DefaultOptionType } from 'antd/es/select';\nimport type { SelectProps } from 'antd/es/select';\nimport { PlusOutlined } from '@ant-design/icons';\nimport { showMessage } from 'utils/notificationUtil';\nimport { addNewContactRole } from 'utils/ez_api/contactAPIs';\n\n// EZ level libs import\n\ntype EZSelectContactRoleProps = SelectProps & {\n onAddNewRole?: () => void;\n};\n\nexport const EZSelectContactRole: React.FC<EZSelectContactRoleProps> = ({\n onAddNewRole,\n ...props\n}) => {\n const [newRole, setNewRole] = useState('');\n const [isSubmitting, setIsSubmitting] = useState(false);\n const inputRef = useRef<InputRef>(null);\n\n const onNewRoleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setNewRole(event.target.value);\n };\n\n const addItem = (e: React.MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n\n const newRoleVal = newRole.trim();\n if (!newRoleVal) return showMessage('error', \"Role can't be empty.\");\n // onAddNewRole\n\n setIsSubmitting(true);\n addNewContactRole({ role: newRoleVal })\n .then(() => {\n showMessage('success', 'New role has been added.');\n onAddNewRole?.();\n })\n .finally(() => {\n setIsSubmitting(false);\n setNewRole('');\n setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n });\n };\n\n const dropdownRender: SelectProps['dropdownRender'] = menu => (\n <>\n {menu}\n <Divider style={{ margin: '8px 0' }} />\n <Space style={{ padding: '0 8px 4px' }}>\n <Input\n placeholder=\"Enter new role title\"\n ref={inputRef}\n value={newRole}\n onChange={onNewRoleChange}\n />\n <Button\n type=\"text\"\n icon={<PlusOutlined />}\n className=\"ez-action-btn\"\n size=\"middle\"\n onClick={addItem}\n >\n Add\n </Button>\n </Space>\n </>\n );\n\n return (\n <Select\n style={{ width: '100%' }}\n showSearch\n allowClear\n showArrow\n optionFilterProp=\"label\"\n placeholder=\"Search or select a role\"\n dropdownRender={dropdownRender}\n {...props}\n ></Select>\n );\n};\n","// Core React libs import\nimport React from 'react';\n\n// Core ANTD and 3rd party libs import\nimport { Select } from 'antd';\n// import type { SelectProps, BaseOptionType, DefaultOptionType } from 'antd/es/select';\nimport type { SelectProps } from 'antd/es/select';\n\ntype EZSelectDocumentProps = SelectProps & {};\n\nexport const EZSelectDocument: React.FC<EZSelectDocumentProps> = ({ ...props }) => {\n return (\n <Select<any, any>\n style={{ width: '100%' }}\n mode=\"multiple\"\n showSearch\n allowClear\n showArrow\n placeholder=\"Select the document(s)\"\n fieldNames={{ label: 'filename', value: 'doc_id' }}\n optionFilterProp=\"filename\"\n {...props}\n ></Select>\n );\n};\n","// Core React libs import\nimport React from 'react';\n\n// Core ANTD and 3rd party libs import\nimport { Select } from 'antd';\n// import type { SelectProps, BaseOptionType, DefaultOptionType } from 'antd/es/select';\nimport type { SelectProps } from 'antd/es/select';\n\ntype EZSelectTaskProps = SelectProps & {};\n\nexport const EZSelectTask: React.FC<EZSelectTaskProps> = ({ ...props }) => {\n return (\n <Select<any, any>\n style={{ width: '100%' }}\n mode=\"multiple\"\n showSearch\n allowClear\n showArrow\n placeholder=\"Select the task(s)\"\n fieldNames={{ label: 'title', value: 'id' }}\n optionFilterProp=\"title\"\n {...props}\n ></Select>\n );\n};\n","import React from 'react';\n\n// import { InputNumber, InputNumberProps } from 'antd';\n\nimport NumberFormat, { NumberFormatPropsBase } from 'react-number-format';\n\ntype EZNumberFormatProps = NumberFormatPropsBase<any> & {\n ifEmptyText?: string;\n};\n\nexport const EZNumberFormat: React.FC<EZNumberFormatProps> = ({\n ifEmptyText = '-',\n value,\n ...props\n}) => {\n if (value) {\n return <NumberFormat value={value} decimalScale={2} {...props} />;\n } else {\n return <span>{ifEmptyText}</span>;\n }\n};\n","import React from 'react';\n\nimport { EZNumberFormat, EZCurrencyFormat } from 'components';\nimport { Typography } from 'antd';\n\ntype CommissionInfoProps = {\n ifEmptyText?: React.ReactNode;\n\n commission_base?: number;\n\n commission_rate?: number;\n commission_amount?: number;\n};\n\nexport const CommissionInfo: React.FC<CommissionInfoProps> = ({\n ifEmptyText = '-',\n commission_base = 0,\n commission_rate = 0,\n commission_amount = 0,\n}) => {\n const showCommissionRate = commission_rate\n ? true\n : commission_amount && commission_base\n ? true\n : false;\n\n if (commission_amount || (commission_rate && commission_base)) {\n return (\n <>\n <EZCurrencyFormat\n value={\n commission_amount\n ? commission_amount\n : commission_rate && commission_base\n ? (commission_rate * commission_base) / 100\n : undefined\n }\n thousandSeparator={true}\n prefix={'$ '}\n displayType={'text'}\n />\n {showCommissionRate ? (\n <span className=\"ml-2\">\n (\n <EZNumberFormat\n value={\n !commission_rate && commission_base\n ? (100 * commission_amount) / commission_base\n : commission_rate\n }\n suffix={'%'}\n displayType={'text'}\n />\n )\n </span>\n ) : (\n ''\n )}\n </>\n );\n }\n\n // otherwise, return an empty element\n return <>{ifEmptyText ? <Typography.Text>$ - (- %)</Typography.Text> : ''}</>;\n};\n","import React from 'react';\n\nimport moment from 'moment';\n\ntype EZDateFormatProps = {\n ifEmptyText?: string;\n format?: string;\n value: string | null | undefined | Date | number;\n humanize?: boolean;\n noTimezone?: boolean;\n};\n\nexport const EZDateFormat: React.FC<EZDateFormatProps> = props => {\n const { ifEmptyText = '-', format = 'MM/DD/YYYY', value, humanize, noTimezone } = props;\n if (value) {\n const m =\n typeof value === 'number'\n ? moment.unix(value)\n : noTimezone\n ? moment.utc(value)\n : moment(value);\n if (!m.isValid()) return <span>{ifEmptyText}</span>;\n\n if (humanize) {\n const now = new Date();\n\n return (\n <span>\n {m\n .hour(now.getHours())\n .minute(now.getMinutes())\n .second(now.getSeconds())\n .millisecond(now.getMilliseconds())\n .fromNow()}\n </span>\n );\n } else return <span>{m.format(format)}</span>;\n } else {\n return <span>{ifEmptyText}</span>;\n }\n};\n","import qs from 'qs';\n\nimport { apiUrl } from '../envUtil';\nimport { APIRequest } from '../apiUtil';\n\nexport const getUSCityList = (keyword?: string) => {\n const params: string = qs.stringify({\n keyword: keyword,\n });\n\n return APIRequest({\n method: 'get',\n url: apiUrl + 'location/us-cities?' + params,\n });\n};\n","import React, { useCallback, useState } from 'react';\n\nimport { AutoComplete, AutoCompleteProps } from 'antd';\nimport { debounce } from 'lodash';\n\nimport { getUSCityList } from 'utils/ez_api/locationAPIs';\n\ntype EZAutocompleteCityProps = AutoCompleteProps<any> & {\n ifEmptyText?: string;\n};\n\nexport const EZAutocompleteCity: React.FC<EZAutocompleteCityProps> = ({\n ifEmptyText = '-',\n ...props\n}) => {\n const [citySearchOptions, setCitySearchOptions] = useState<{ label: string; value: string }[]>(\n []\n );\n\n const _onSearchCity = useCallback(\n debounce(searchKeyword => {\n getUSCityList(searchKeyword)\n .then((response: any) => {\n if (response.data?.data.length) {\n setCitySearchOptions(\n response.data?.data.map((iData: { city: string }) => ({\n label: iData.city,\n value: iData.city,\n }))\n );\n } else {\n setCitySearchOptions([]);\n }\n })\n .finally(() => {});\n }, 500),\n []\n );\n\n return (\n <AutoComplete\n options={citySearchOptions}\n onSearch={_onSearchCity}\n placeholder=\"Enter the city\"\n {...props}\n />\n );\n};\n","import React, { useCallback, useState } from 'react';\n\nimport { AutoComplete, AutoCompleteProps } from 'antd';\nimport { debounce } from 'lodash';\n\nimport { AddressbookType } from 'types/contact';\n\nimport { getAllAddressBooks } from 'utils/ez_api/contactAPIs';\n\ntype EZAutocompletePartyProps = AutoCompleteProps<any> & {\n ifEmptyText?: string;\n};\n\ntype EZAutocompletePartyOptProps = AddressbookType & {\n label: string;\n value: string;\n key: React.Key;\n};\n\nexport const EZAutocompleteParty: React.FC<EZAutocompletePartyProps> = ({\n ifEmptyText = '-',\n ...props\n}) => {\n const [searchOptions, setSearchOptions] = useState<EZAutocompletePartyOptProps[]>([]);\n\n const _onSearch = useCallback(\n debounce(searchKeyword => {\n getAllAddressBooks({\n keyword: searchKeyword,\n where: {\n '!fullname': null,\n },\n })\n .then((response: any) => {\n if (response.data?.length) {\n setSearchOptions(\n response.data?.map((iData: AddressbookType) => ({\n ...iData,\n label: iData.fullname,\n value: iData.fullname,\n key: iData.addressbook_id,\n }))\n );\n } else {\n setSearchOptions([]);\n }\n })\n .finally(() => {});\n }, 500),\n []\n );\n\n return (\n <AutoComplete\n options={searchOptions}\n onSearch={_onSearch}\n placeholder=\"Enter the name\"\n {...props}\n />\n );\n};\n","// Core React libraries import\nimport React, { useEffect, useState } from 'react';\n\n// Core ANTD and 3rdparty libraries import\nimport { Typography, UploadFile, Collapse, Col, Row, Progress } from 'antd';\nimport { CloseOutlined } from '@ant-design/icons';\nimport { EZUploadFileProps } from './upload';\n\n// EZ web-app utils import\n// EZ web-app components import\n\n// EZ web-app styles and assets import\n\nconst { Panel } = Collapse;\n\nexport const UploadProgress: React.FC<{\n // fileUploadList: UploadFile<any>[];\n fileUploadList: EZUploadFileProps[];\n setFileUploadList: React.Dispatch<React.SetStateAction<UploadFile<any>[]>>;\n}> = ({ setFileUploadList, fileUploadList }) => {\n const _removeFileUpload = (file: UploadFile) => {\n if (file.status === 'error' || file.status === 'removed') {\n setFileUploadList(fileUploadList.filter(f => f.uid !== file.uid));\n }\n };\n\n // const _getFileUploadList = () => {\n // return fileList;\n // };\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Row className=\"home-file-upload-wrapper\">\n {fileUploadList.filter(file => ['error', 'uploading'].includes(file.status || ''))\n .length ? (\n <Col span={24}>\n <div className=\"file-uploads-progress-wrapper\">\n <Collapse defaultActiveKey={['1']}>\n <Panel\n header={`File upload window`}\n // header={`Uploading ${\n // fileList?.filter(file => file.status === 'uploading').length\n // } of ${fileList.length}`}\n key=\"1\"\n extra={\n fileUploadList.filter(file => file.status === 'uploading')\n .length ? (\n ''\n ) : (\n <CloseOutlined\n onClick={event => {\n setFileUploadList([]);\n // If you don't want click extra trigger collapse, you can prevent this:\n event.stopPropagation();\n }}\n />\n )\n }\n >\n <Row gutter={[6, 8]}>\n {fileUploadList\n .filter(file =>\n ['error', 'uploading'].includes(file.status || '')\n )\n .map(file => (\n <React.Fragment key={`fileList__${file.uid}`}>\n <Col span={16} style={{ lineHeight: '28px' }}>\n <Typography.Text ellipsis>\n {file.name}\n </Typography.Text>\n </Col>\n <Col span={8} style={{ textAlign: 'right' }}>\n <span\n className=\"cursor-pointer\"\n title=\"Remove from Upload\"\n onClick={() => _removeFileUpload(file)}\n >\n <Progress\n type=\"circle\"\n percent={file.percent}\n width={28}\n status={\n file.error ? 'exception' : undefined\n }\n />\n </span>\n </Col>\n </React.Fragment>\n ))}\n </Row>\n </Panel>\n </Collapse>\n </div>\n </Col>\n ) : (\n ''\n )}\n </Row>\n );\n};\n","import { EmailCodeTreeDataChildType } from 'types/email';\nimport { COMMA_TEMPLATE } from './consts';\n\nconst _getPartyChilds = (title: string, parent: string): { title: string; value: string }[] => {\n const gen_template = (field: string) =>\n `#${parent}}}{{#${field}}}{{${field}}}{{/${field}}}${COMMA_TEMPLATE}{{/${parent}`;\n\n return [\n {\n title: `${title} Names`,\n value: gen_template(`${title.toLowerCase()}_name`),\n },\n {\n title: `${title} Emails`,\n value: gen_template('email'),\n },\n {\n title: `${title} Phones`,\n value: gen_template('telephone'),\n },\n ];\n};\n\nexport const EMAIL_TEMPLATE_CODES: EmailCodeTreeDataChildType[] = [\n {\n title: 'Transaction - Basic',\n value: 'Transaction - Basic',\n selectable: false,\n children: [\n {\n title: 'Address',\n value: 'address',\n },\n {\n title: 'City',\n value: 'city',\n },\n {\n title: 'State',\n value: 'state',\n },\n {\n title: 'ZIP',\n value: 'zip',\n },\n {\n title: 'ESCROW',\n value: 'escrow',\n },\n {\n title: 'MIS',\n value: 'mis',\n },\n {\n title: 'Year Built',\n value: 'year_built',\n },\n ],\n },\n {\n title: 'Lease - Basic',\n value: 'Lease - Basic',\n selectable: false,\n children: [\n {\n title: 'Lease Term(s)',\n value: 'lease_term',\n },\n {\n title: 'Lease Signed Date',\n value: 'lease_signed_date',\n },\n {\n title: 'Lease Start Date',\n value: 'lease_start_date',\n },\n\n {\n title: 'Lease End Date',\n value: 'lease_end_date',\n },\n {\n title: 'Marketed Price',\n value: 'marketedprice',\n },\n {\n title: 'Credits',\n value: 'credits',\n },\n {\n title: 'Move In Date',\n value: 'move_in_date',\n },\n ],\n },\n {\n title: 'Transaction - Dates',\n value: 'Transaction - Dates',\n selectable: false,\n children: [\n {\n title: 'Contract Date',\n value: 'contract_date',\n },\n {\n title: 'Close Date',\n value: 'close_date',\n },\n {\n title: 'Inspection Contingency Date',\n value: 'inspection_contingency_date',\n },\n {\n title: 'Financing Contingency Date',\n value: 'financing_contingency_date',\n },\n {\n title: 'Appraisal Contingency Date',\n value: 'appraisal_contingency_date',\n },\n {\n title: 'Expiration Date',\n value: 'expiration_date',\n },\n {\n title: 'Application Date',\n value: 'application_date',\n },\n {\n title: 'Listing Date',\n value: 'listing_date',\n },\n {\n title: 'Effective Date',\n value: 'effective_date',\n },\n {\n title: 'Listing Agreement Date',\n value: 'listing_agreement_date',\n },\n {\n title: 'Listing Live Date',\n value: 'listing_live_date',\n },\n ],\n },\n {\n title: 'Transaction - Prices',\n value: 'Transaction - Prices',\n selectable: false,\n children: [\n {\n title: 'Listing Price',\n value: 'listprice',\n },\n {\n title: 'Sales Price',\n value: 'salesprice',\n },\n {\n title: 'Closing Cost Credit',\n value: 'cccredit',\n },\n {\n title: 'Deposit',\n value: 'deposits',\n },\n ],\n },\n {\n title: 'Transaction - Parties',\n value: 'Transaction - Parties',\n selectable: false,\n children: [\n {\n title: 'Listing',\n value: 'listing',\n children: [\n {\n title: 'Buyers',\n value: 'buyers',\n children: _getPartyChilds('Buyer', 'contract_buyers'),\n },\n {\n title: `Buyer's Agents`,\n value: 'buyers_agents',\n children: _getPartyChilds('Buyer Agent', 'contract_buyer_agents'),\n },\n {\n title: 'Sellers',\n value: 'sellers',\n children: _getPartyChilds('Seller', 'contract_sellers'),\n },\n {\n title: `Seller's Agents`,\n value: 'sellers_agents',\n children: _getPartyChilds('Seller Agent', 'contract_seller_agents'),\n },\n ],\n },\n {\n title: `Rental`,\n value: 'rental',\n children: [\n {\n title: 'Tenants',\n value: 'tenants',\n children: _getPartyChilds('Tenant', 'contract_tenants'),\n },\n {\n title: `Referral Sources`,\n value: 'referral_source',\n children: _getPartyChilds('Referral Source', 'contract_referral_sources'),\n },\n {\n title: 'Landlords',\n value: 'landlords',\n children: _getPartyChilds('Landlord', 'contract_landlords'),\n },\n {\n title: `Leasing Agents`,\n value: 'leasing_agents',\n children: _getPartyChilds('Leasing Agent', 'contract_leasing_agents'),\n },\n ],\n },\n ],\n },\n];\n","import React, {\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport ReactQuill from 'react-quill';\nimport { TeamOutlined } from '@ant-design/icons';\nimport { Form, Select, TreeSelect } from 'antd';\nimport { HomeContext } from 'context/EZContext';\nimport { EMAIL_TEMPLATE_CODES } from 'static/emailCodes';\nimport { DataTableQueryType } from 'types/base';\nimport { EmailCodeTreeDataChildType, TemplateListTreeDataChildType } from 'types/email';\nimport { EmailSignatureType } from 'types/emailSignature';\nimport { EmailTemplateFolderType, EmailTemplateType } from 'types/emailTemplate';\nimport { getEmailSignatures } from 'utils/ez_api/emailSignatureAPIs';\nimport { getFoldersWithEmailTemplates } from 'utils/ez_api/emailTemplateAPIs';\nimport { EZRichTextEditorForwardedRefProps, EZRichTextEditorProps } from './richTextEditor';\n\nimport 'react-quill/dist/quill.snow.css';\nimport {\n AdditionalInfoFieldType,\n ContactRoleType,\n contractAdditionalInfoCategoryType,\n} from 'types/transaction';\nimport { getContactRoles } from 'utils/ez_api/contactAPIs';\nimport { COMMA_TEMPLATE } from 'static/consts';\nimport { getContractCustomFields } from 'utils/ez_api/AdminAPIs';\n\nconst defaultToolbar: any = {\n container: '#toolbar',\n handlers: {},\n};\n\nlet contactRoles: ContactRoleType[] = [];\nlet customSections: contractAdditionalInfoCategoryType[] = [];\n\nconst emailTemplateCodes: EmailCodeTreeDataChildType[] = [...EMAIL_TEMPLATE_CODES];\n\ntype EmailEditorFormItemProps = EZRichTextEditorProps & {\n onSelectTemplate?: (emailTemplate: EmailTemplateType) => void;\n hideToolbar?: boolean;\n hideToolbarInsertCode?: boolean;\n excludedTemplateIDs?: number[];\n formMode?: 'ADD' | 'EDIT';\n};\n\nexport const EmailEditorFormItem = React.forwardRef<\n EZRichTextEditorForwardedRefProps,\n EmailEditorFormItemProps | undefined\n>(\n (\n {\n showTemplateDropdown,\n showEmailSignatureDropdown,\n isRequired = false,\n onSelectTemplate,\n excludedTemplateIDs,\n hideToolbar = false,\n hideToolbarInsertCode = false,\n formMode = 'ADD',\n ...props\n },\n forwardedRef\n ) => {\n const reactQuillRef = useRef<ReactQuill>(null);\n const HomeCtx = useContext(HomeContext);\n const UserInfo = HomeCtx.userInfo;\n\n const [signatureListData, setSignatureListData] = useState<EmailSignatureType[]>([]);\n const [templateListTreeData, setTemplateListTreeData] = useState<\n TemplateListTreeDataChildType[]\n >([]);\n const [emailCodesTreeData, setEmailCodesTreeData] = useState<EmailCodeTreeDataChildType[]>(\n []\n );\n const [selectedSignature, setSelectedSignature] = useState<{\n length: number;\n content: any;\n }>({\n length: 0,\n content: null,\n });\n\n const activeSignature = signatureListData.find(el => el.is_active);\n\n useImperativeHandle(forwardedRef, () => ({\n getEditorInstance: () => reactQuillRef.current?.getEditor(),\n }));\n\n const [editorLastIndex, setEditorLastIndex] = useState(0);\n\n if (showTemplateDropdown) {\n }\n\n const modules = useMemo(\n () => ({\n toolbar: !hideToolbar ? defaultToolbar : false,\n }),\n []\n );\n\n const _fetchEmailTemplates = () => {\n const whereParams: DataTableQueryType = {};\n\n if (excludedTemplateIDs && excludedTemplateIDs.length) {\n whereParams.where = {\n '!$email_templates.email_template_id$': excludedTemplateIDs,\n };\n }\n\n getFoldersWithEmailTemplates(\n {\n ...whereParams,\n },\n true\n ).then(({ data }) => {\n let folderWithEmailTemplates = data as EmailTemplateFolderType[];\n\n // const myFolders: EmailTemplateFolderType[] = [];\n // const foldersOwnedByOthers: EmailTemplateFolderType[] = [];\n\n // for (let index = 0; index < folderWithEmailTemplates.length; index++) {\n // const folder = folderWithEmailTemplates[index];\n\n // if (folder.account_id === UserInfo?.account_id) {\n // myFolders.push(folder);\n // } else {\n // foldersOwnedByOthers.push(folder);\n // }\n // }\n\n // folderWithEmailTemplates = [...myFolders, ...foldersOwnedByOthers];\n\n const templateListData: TemplateListTreeDataChildType[] =\n folderWithEmailTemplates?.map(folder => ({\n title: (\n <>\n {folder.is_shared && <TeamOutlined className=\"mr-2\" />}\n {folder.folder_name}\n {folder.is_shared ? ` - shared by ${folder.account?.fullname}` : ``}\n </>\n ),\n value: `folder_${folder.folder_id}`,\n key: `folder_${folder.folder_id}`,\n selectable: false,\n children: folder.email_templates?.map(emailTemplate => ({\n title: emailTemplate.template_name,\n key: emailTemplate.email_template_id,\n value: emailTemplate.template_name,\n meta: emailTemplate,\n })),\n }));\n setTemplateListTreeData(templateListData);\n });\n };\n\n const _fetchEmailSignatures = () => {\n getEmailSignatures().then(({ data }) => {\n const emailSignatures = data as EmailSignatureType[];\n setSignatureListData(emailSignatures);\n });\n };\n\n const loadSelectedTemplate = (selectedNode: TemplateListTreeDataChildType) => {\n const quill = reactQuillRef.current?.getEditor();\n if (quill) {\n if (selectedNode.meta?.msg_body) {\n const delta = quill.clipboard.convert(selectedNode.meta?.msg_body || '');\n\n const start_idx_sign =\n selectedNode.meta?.msg_body.indexOf('<p><br></p><p>---</p>');\n const existing_signature =\n selectedNode.meta?.msg_body.substring(start_idx_sign);\n\n if (start_idx_sign !== -1) {\n setSelectedSignature({\n length: start_idx_sign,\n content: existing_signature,\n });\n } else {\n setSelectedSignature({\n length: 0,\n content: '',\n });\n }\n\n quill.setContents(delta, 'silent');\n } else {\n quill.setText('');\n }\n }\n\n if (selectedNode.meta) onSelectTemplate?.(selectedNode.meta);\n };\n\n const loadSelectedSignature = (value: any, option: any) => {\n const quill = reactQuillRef.current?.getEditor();\n\n if (quill) {\n if (option.data?.signature_body) {\n const content = { index: 0, body: '' };\n\n const quillContent = quill.root.innerHTML;\n const startIdxSign = quillContent.indexOf('<p><br></p><p>---</p>');\n const signature = `<p><br></p><p>---</p>${option.data?.signature_body}` || '';\n\n if (\n startIdxSign === -1 ||\n selectedSignature.length === 0 ||\n !quillContent.includes(selectedSignature.content)\n ) {\n const existing_signature = quillContent.substring(startIdxSign);\n\n // Append the signature at the end of the Quill content.\n content.body = signature;\n content.index = quill.getLength();\n\n if (startIdxSign !== -1) {\n // Replace the existing signature with the new one.\n content.index = 0;\n content.body = quillContent.replace(existing_signature, signature);\n\n // Clear Quill content before inserting the new signature.\n quill.deleteText(0, quill.getLength());\n }\n } else {\n // Replace the existing signature with the new one.\n content.index = 0;\n content.body = quillContent.replace(selectedSignature.content, signature);\n\n // Clear Quill content before inserting the new signature.\n quill.deleteText(0, quill.getLength());\n }\n\n // Insert signature HTML into Quill.\n quill.clipboard.dangerouslyPasteHTML(content.index, content.body, 'silent');\n\n // Set the selected siganture\n setSelectedSignature({\n length: signature.length,\n content: signature,\n });\n } else {\n quill.setText('');\n }\n }\n };\n\n const insertChosenValue = (originalVal: string, node: EmailCodeTreeDataChildType) => {\n const quill = reactQuillRef.current?.getEditor();\n if (quill) {\n const strValue = `{{ ${originalVal} }}`;\n const cursorPosition = quill.getSelection()?.index;\n\n if (cursorPosition) {\n // quill.insertText(cursorPosition, strValue);\n // quill.setSelection(cursorPosition + strValue.length, 0);\n quill.insertEmbed(\n cursorPosition,\n //Insert the TemplateMarker in the same range as the cursor is\n\n 'CodeTemplateMarker',\n //This is the name of the Embed\n\n {\n colour: 'yellow',\n marker: strValue,\n title: strValue,\n }\n //These are the variables to enter\n );\n } else {\n // quill.insertText(editorLastIndex, strValue);\n\n quill.insertEmbed(\n editorLastIndex,\n //Insert the TemplateMarker in the same range as the cursor is\n\n 'CodeTemplateMarker',\n //This is the name of the Embed\n\n {\n colour: 'code',\n marker: strValue,\n title: node.title,\n }\n //These are the variables to enter\n );\n }\n }\n };\n\n const _fetchContactRoles = () => {\n return new Promise<EmailCodeTreeDataChildType>((resolve, reject) => {\n getContactRoles()\n .then(({ data }) => {\n contactRoles = (data as ContactRoleType[]) || [];\n resolve({\n title: 'Additional Contact',\n value: 'Additional Contact',\n selectable: false,\n children: [\n {\n title: 'Roles',\n value: 'roles',\n children: contactRoles.map((el: ContactRoleType) => {\n return {\n title: el.role,\n value: el.role_id,\n selectable: false,\n children: [\n {\n title: `Contact ${el.role} - Full Name`,\n value: `#contract_contacts}}{{#role_id_${el.role_id}}}{{contactname}}${COMMA_TEMPLATE}{{/role_id_${el.role_id}}}{{/contract_contacts`,\n },\n {\n title: `Contact ${el.role} - First Name`,\n value: `#contract_contacts}}{{#role_id_${el.role_id}}}{{firstname}}${COMMA_TEMPLATE}{{/role_id_${el.role_id}}}{{/contract_contacts`,\n },\n {\n title: `Contact ${el.role} - Main Email`,\n value: `#contract_contacts}}{{#role_id_${el.role_id}}}{{email}}${COMMA_TEMPLATE}{{/role_id_${el.role_id}}}{{/contract_contacts`,\n },\n {\n title: `Contact ${el.role} - Main Phone`,\n value: `#contract_contacts}}{{#role_id_${el.role_id}}}{{telephone}}${COMMA_TEMPLATE}{{/role_id_${el.role_id}}}{{/contract_contacts`,\n },\n {\n title: `Contact ${el.role} - Company`,\n value: `#contract_contacts}}{{#role_id_${el.role_id}}}{{company}}${COMMA_TEMPLATE}{{/role_id_${el.role_id}}}{{/contract_contacts`,\n },\n ],\n };\n }),\n },\n ],\n });\n })\n .catch(error => {\n console.log('error _fetchContactRoles :', error);\n reject(error);\n });\n });\n };\n\n const _fetchContractCustomFields = () => {\n return new Promise<EmailCodeTreeDataChildType>((resolve, reject) => {\n getContractCustomFields()\n .then(({ data }) => {\n customSections = (data as contractAdditionalInfoCategoryType[]) || [];\n resolve({\n title: 'Custom Section & Fields',\n value: 'Custom Section & Fields',\n selectable: false,\n children: customSections.map(\n (el: contractAdditionalInfoCategoryType) => {\n return {\n title: el.category,\n value: el.category,\n selectable: false,\n children: el.contract_additional_info_preferences.map(\n (el: AdditionalInfoFieldType) => {\n return {\n title: `${el.newname}`,\n value: `contract_additional_info_values.${el.additional_info_field_id}`,\n };\n }\n ),\n };\n }\n ),\n });\n })\n .catch(error => {\n console.log('error _fetchContractCustomFields :', error);\n reject(error);\n });\n });\n };\n\n useEffect(() => {\n if (showTemplateDropdown) {\n _fetchEmailTemplates();\n }\n\n if (showEmailSignatureDropdown) {\n _fetchEmailSignatures();\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n Promise.all([_fetchContactRoles(), _fetchContractCustomFields()])\n .then(results => {\n console.log('Email Codes Tree Data:', results);\n setEmailCodesTreeData([...emailTemplateCodes, ...results]);\n })\n .catch(error => {\n console.error('Error in Promise.all:', error);\n });\n }, []);\n\n useEffect(() => {\n if (activeSignature && formMode === 'ADD') {\n const { value, option } = {\n value: activeSignature.email_signature_id,\n option: {\n data: activeSignature,\n },\n };\n\n loadSelectedSignature(value, option);\n }\n }, [activeSignature]);\n\n return (\n <div className=\"ezrichtext-placeholder\">\n <label className=\"required-label\" title=\"Email Body\">\n {' '}\n Email Body{' '}\n </label>\n\n {!hideToolbar && (\n <div id=\"toolbar\">\n <span className=\"ql-formats\">\n <select className=\"ql-header\" defaultValue=\"3\">\n <option value=\"1\">Heading</option>\n <option value=\"2\">Subheading</option>\n <option value=\"3\">Normal</option>\n </select>\n </span>\n <span className=\"ql-formats\">\n <button className=\"ql-bold\" />\n <button className=\"ql-italic\" />\n <button className=\"ql-underline\" />\n <button className=\"ql-strike\" />\n <button className=\"ql-blockquote\" />\n </span>\n <span className=\"ql-formats\">\n <button className=\"ql-list\" value=\"ordered\" />\n <button className=\"ql-list\" value=\"bullet\" />\n <button className=\"ql-indent\" value=\"-1\" />\n <button className=\"ql-indent\" value=\"+1\" />\n </span>\n\n <span className=\"ql-formats\">\n <button className=\"ql-link\" />\n <button className=\"ql-image\" />\n </span>\n <span className=\"ql-formats\">\n <button className=\"ql-clean\" />\n </span>\n\n <span className=\"ql-formats custom-margin-right\">\n <div className=\"email-msg-editor-toolbar\">\n {showTemplateDropdown && (\n <TreeSelect\n style={{ width: '180px', marginRight: '8px' }}\n value={null}\n dropdownStyle={{\n maxHeight: 400,\n width: '500px',\n maxWidth: '500px',\n overflow: 'auto',\n }}\n placeholder={<b>Load from Template</b>}\n allowClear\n showSearch\n treeDefaultExpandAll={false}\n disabled={props.readOnly}\n onSelect={(\n value: any,\n node: TemplateListTreeDataChildType\n ) => {\n if (node.children?.length) {\n return;\n }\n loadSelectedTemplate(node);\n }}\n treeData={templateListTreeData}\n treeLine={{ showLeafIcon: false }}\n />\n )}\n {!hideToolbarInsertCode && (\n <TreeSelect\n style={{ width: '250px', marginRight: '8px' }}\n value={null}\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n placeholder={<b>Insert Code</b>}\n allowClear\n showSearch\n treeDefaultExpandAll={false}\n disabled={props.readOnly}\n onSelect={(\n value: any,\n node: EmailCodeTreeDataChildType\n ) => {\n if (node.children?.length) {\n return;\n }\n\n insertChosenValue(value as string, node);\n }}\n treeData={emailCodesTreeData}\n treeLine={{ showLeafIcon: false }}\n />\n )}\n </div>\n </span>\n <span className=\"ql-formats\">\n <div className=\"email-msg-editor-toolbar\">\n {showEmailSignatureDropdown && (\n <Select\n style={{ width: '180px' }}\n showSearch\n placeholder={<b>Select Signature</b>}\n value={[]}\n optionFilterProp=\"label\"\n options={signatureListData?.map(el => ({\n label: el.signature_name,\n value: el.email_signature_id,\n data: el,\n }))}\n disabled={props.readOnly}\n onSelect={loadSelectedSignature}\n ></Select>\n )}\n </div>\n </span>\n </div>\n )}\n\n <Form.Item\n name=\"msg_body\"\n rules={[\n { required: isRequired, message: 'Email body is required' },\n {\n validator: (_, value) => {\n const parser = new DOMParser();\n\n const { textContent } = parser.parseFromString(\n value,\n 'text/html'\n ).documentElement;\n\n if (!textContent?.trim()) {\n return Promise.reject(\"Email body can't be empty\");\n } else {\n return Promise.resolve();\n }\n },\n },\n ]}\n >\n <ReactQuill\n ref={reactQuillRef}\n style={{ width: '100%' }}\n modules={modules}\n theme=\"snow\"\n onBlur={previousSelection => {\n setEditorLastIndex(previousSelection?.index || 0);\n }}\n {...props}\n />\n </Form.Item>\n </div>\n );\n }\n);\n","import React from 'react';\n\nimport { DatePicker, DatePickerProps } from 'antd';\n\ntype EZDatePickerProps = Omit<DatePickerProps, 'mask'> & {};\n\nexport const EZDatePicker: React.FC<EZDatePickerProps> = ({ ...props }) => {\n return <DatePicker {...props} showTime={false} />;\n};\n","import { updateOnboardingCompleted } from './ez_api/onboardingAPIs';\n\nexport type onboardingCodeLearner =\n | 'add_new_transaction'\n | 'add_new_task_template'\n | 'add_additional_contacts'\n | 'add_documents_or_files'\n | 'add_notes'\n | 'check_daily_task'\n | 'load_templates_on_transaction'\n | 'add_new_sub_account';\n\nexport type onboardingCodeMaster =\n | 'use_advanced_search'\n | 'use_quick_search'\n | 'add_new_custom_section'\n | 'customize_transaction_status'\n | 'customize_property_status'\n | 'customize_sales_type'\n | 'customize_document_folder';\n\nexport const updateOnboardingStep = (\n onboardingCode: onboardingCodeLearner | onboardingCodeMaster,\n onSuccess?: () => void\n) => {\n const payload = {\n onboarding_code: onboardingCode,\n };\n\n updateOnboardingCompleted(payload).then(() => {\n if (onSuccess) {\n onSuccess();\n }\n });\n};\n","import qs from 'qs';\n\nimport { apiUrl } from '../../envUtil';\nimport { APIRequest } from '../../apiUtil';\nimport { DataTableQueryType } from 'types/base';\nimport { ProspectDetailType, ProspectOptionType } from 'types/prospect';\nimport { Mixpanel } from 'utils/mixPanelUtil';\n\nexport const generateDefaultQuestions = () => {\n return APIRequest({\n method: 'post',\n url: apiUrl + `prospects/generate-default-questions`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getProspectMetaOptions = (\n option_type: ProspectOptionType,\n active_only: boolean = false\n) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `prospect-option/${option_type}?${active_only && 'active_only=yes'}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getAllProspects = (params?: string | DataTableQueryType) => {\n return APIRequest({\n method: 'get',\n url:\n apiUrl +\n `prospects` +\n (params ? `?${typeof params === 'string' ? params : qs.stringify(params)}` : ''),\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getProspectDetail = (\n prospect_id: number,\n detail_type: ProspectDetailType = 'basic_info'\n) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `prospect/${prospect_id}?detail_type=${detail_type}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getProspectQuickStats = (prospect_id: number) => {\n return APIRequest({\n method: 'get',\n url: apiUrl + `prospect/${prospect_id}?detail_type=quick_stats`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const addNewProspect = (payload: any) => {\n Mixpanel.track('app.add_prospect', {});\n\n return APIRequest({\n method: 'post',\n url: apiUrl + `prospects`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateProspectDetail = (prospect_id: number, payload: any) => {\n Mixpanel.track('app.edit_prospect', {\n prospect_id,\n sub_tab: 'basic',\n action: 'edit',\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `prospect/${prospect_id}/basic-detail`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const updateProspectQuestionValues = (prospect_id: number, payload: any) => {\n Mixpanel.track('app.edit_prospect', {\n prospect_id,\n sub_tab: 'preference_household_profile',\n action: 'edit_question_values',\n });\n\n return APIRequest({\n method: 'put',\n url: apiUrl + `prospect/${prospect_id}/questions`,\n data: payload,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const getProspectQuickStatsByIDs = (prospect_ids: number[]) => {\n const params: string = qs.stringify({\n prospect_ids: prospect_ids,\n });\n\n return APIRequest({\n method: 'get',\n url: apiUrl + `prospects/quick-stat-by-ids?${params}`,\n useDefaultErrorNotif: true,\n });\n};\n\nexport const archiveProspect = (prospect_id: number) => {\n Mixpanel.track('app.archive_prospect', {\n prospect_id,\n });\n\n return APIRequest({\n method: 'delete',\n url: apiUrl + `prospect/${prospect_id}`,\n useDefaultErrorNotif: true,\n });\n};\n"],"sourceRoot":""}