{"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?&nbsp;\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.&nbsp;\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.&nbsp;\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                                                                {/* &nbsp;(Uploaded by&nbsp;\n                                                {item.account?.fullname} on&nbsp;\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 || '-'},&nbsp;\n                        {record.task_list?.contract?.city || '-'},&nbsp;\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                                &nbsp;\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                                &nbsp;\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                                &nbsp;\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                                &nbsp;\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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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}&nbsp;/&nbsp;\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}&nbsp;/&nbsp;\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' }}>&nbsp;</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&nbsp;\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&nbsp;\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&nbsp;\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&nbsp;\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                                                        &nbsp;\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 &#9679;{' '}\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&nbsp;\n                                    <b>{docusignCredential?.docusign_email}</b>&nbsp;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                                        &nbsp;/&nbsp;\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                                        &nbsp;/&nbsp;\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                            :&nbsp;\n                            <EZDateFormat noTimezone value={record.contract_date?.close_date} />\n                        </Col>\n                        <Col span={14}>Contract Date</Col>\n                        <Col span={10}>\n                            :&nbsp;\n                            <EZDateFormat noTimezone value={record.contract_date?.contract_date} />\n                        </Col>\n                        <Col span={14}>Contract Effective Date</Col>\n                        <Col span={10}>\n                            :&nbsp;\n                            <EZDateFormat noTimezone value={record.contract_date?.effective_date} />\n                        </Col>\n                        <Col span={14}>Inspection Contingency</Col>\n                        <Col span={10}>\n                            :&nbsp;\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                            :&nbsp;\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                            :&nbsp;\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                            :&nbsp;\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                            :&nbsp;\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                            :&nbsp;\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                            :&nbsp;\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                            :&nbsp;\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                            :&nbsp;\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                            :&nbsp;\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                            :&nbsp;\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                            :&nbsp;\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                            :&nbsp;\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                            :&nbsp;\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 || '-'}&nbsp;\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                                                                                            &nbsp;\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&nbsp;\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.&nbsp;\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                    :&nbsp;\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                    :&nbsp;\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                    :&nbsp;\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                            :&nbsp;\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":""}