{"version":3,"sources":["tasksSummary/selectors/DueSelector.tsx","tasksSummary/selectors/CreatedSelector.tsx","tasksSummary/TasksSummaryAdvanceFilter.tsx","tasksSummary/AllocatedToEntityType.tsx","tasksSummary/board/BoardCardDraggable.tsx","tasksSummary/selectors/TaskAssignedBySelector.tsx","tasksSummary/selectors/TaskCategorySelector.tsx","tasksSummary/selectors/TaskStatusSelector.tsx","tasksSummary/common/TaskHistoryActivity.tsx","tasksSummary/dialog/TasksSummaryFormDialog.tsx","tasksSummary/cellRenderer/MatterTaskRenderer.tsx","tasksSummary/TasksSummaryContext.tsx","tasksSummary/selectors/PhoneNumberSelector.tsx","tasksSummary/panels/PhoneMessageDetailsPanel.tsx","tasksSummary/panels/PhoneMatterDetailsPanel.tsx","tasksSummary/panels/PhoneContactDetailsPanel.tsx","tasksSummary/dialog/PhoneFormDialog.tsx","tasksSummary/dialog/StatusFormDialog.tsx","tasksSummary/selectors/TaskAssignedByUserTeamSelector.tsx","tasksSummary/selectors/PrioritySelector.tsx","tasksSummary/menu/ActionMenu.tsx","tasksSummary/dialog/StartFormDialog.tsx","tasksSummary/dialog/PriorityFormDialog.tsx","tasksSummary/dialog/CompleteFormDialog.tsx","tasksSummary/dialog/DueFormDialog.tsx","tasksSummary/dialog/AllocateFormDialog.tsx","tasksSummary/dialog/CategoryFormDialog.tsx","tasksSummary/dialog/OwnerFormDialog.tsx","tasksSummary/dialog/MessageFormDialog.tsx","tasksSummary/cards/AssignmentTaskDetailViewFields.tsx","tasksSummary/viewDialog/BillTheMatterViewDialog.tsx","tasksSummary/viewDialog/WriteOffWipViewDialog.tsx","tasksSummary/viewDialog/WriteOffDebtorsViewDialog.tsx","tasksSummary/viewDialog/TransferTrustToPayInvoiceViewDialog.tsx","tasksSummary/viewDialog/ArchiveMatterViewDialog.tsx","tasksSummary/viewDialog/CloseMatterViewDialog.tsx","tasksSummary/viewDialog/GeneralViewDialog.tsx","tasksSummary/cellRenderer/MatterTaskViewRender.tsx","tasksSummary/TasksSummaryRepository.tsx","tasksSummary/cards/StatusCard.tsx","tasksSummary/TasksSummaryControlPanel.tsx"],"names":["DueSelectorEnum","useStyles","makeStyles","theme","createStyles","root","minWidth","CreatedSelectorEnum","DueSelector","props","classes","state","isLoading","error","options","label","value","todayAndEarlier","today","next3Days","next7Days","all","handleChange","event","onSelection","tempValue","hasOwnProperty","name","getInputProps","params","InputProps","endAdornment","Fragment","CircularProgress","color","size","className","multiple","Autocomplete","disabled","onChange","disablePortal","getOptionLabel","option","renderInput","TextField","variant","fullWidth","margin","required","helperText","renderOption","inputValue","matches","parts","map","part","index","key","style","fontWeight","highlight","text","loading","getOptionSelected","CreatedSelector","last3Days","last7Days","display","flex","alignItems","col1","justifyContent","flexFlow","padding","col2","formControl","TasksSummaryAdvanceFilter","due","advancedFilter","created","priority","status","allocatedTo","allocatedBy","updatedFrom","updatedTo","completedFrom","completedTo","team","taskTypes","matterList","clientList","setState","onSearch","onHasFilter","hasFilter","undefined","length","handleDateChange","field","date","prevState","format","_value","onSingleSelection","LightTooltip","withStyles","tooltip","backgroundColor","palette","common","white","boxShadow","shadows","fontSize","Tooltip","utils","PrioritySelector","TaskStatusSelector","isRefresh","isIncludeCount","UserAutocompleteSelector","id","visible","role","isExternal","isAuthorized","MatterAutoCompleteSelector","textLimit","description","title","ClientAutoCompleteSelector","email","onError","console","log","clearable","autoOk","allowKeyboardControl","animateYearScrolling","minDate","FirmTeamSelector","isMyTeamOnly","UserFeature","HasAccess","hasTaskViewAll","hasTaskViewMyTeamOnly","taskOnly","enquiryOnly","financialOnly","TaskTypeSelector","arrow","Button","onClick","matter","client","IconButton","onClose","AllocatedToEntityType","userSelect","position","contentContainer","content","paddingBottom","otherDetails","textTransform","borderRadius","userContainer","cursor","avatar","width","height","optionContainer","phoneTaskCardContent","marginBottom","marginRight","textAlign","matterDescription","matterDescriptionContent","clientDescription","clientDescriptionContent","openNewWindowIcon","marginLeft","taskContentDescription","confidential","infoIcon","Colors","hashString","input","i","hash","charCodeAt","BoardCardDraggable","assignedTo","groupBy","isDeleteConfirm","isTaskFormOpen","isStartDateOpen","isPriorityFormOpen","isCompletionFormOpen","isDueFormOpen","isAllocatedFormOpen","isStatusFormOpen","isTaskViewOpen","isCategoryFormOpen","isOwnerFormOpen","isPhoneFormOpen","isEnquiryFormOpen","isMessageFormOpen","isDuplicate","matterId","nameId","isPrioritySelected","setIsPrioritySelected","isStatusSelected","setIsStatusSelected","isAssignedToSelected","setIsAssignedToSelected","refPriority","useRef","refStatus","refAssignedTo","bColor","stringInitials","split","n","join","slice","dueDate","endOf","fromNow","isOverDue","diff","handleClickPriority","handleClickStatus","handleClickAssignedTo","handleChangePriority","data","mutate","mutation","variables","guid","item","taskStatusGuidID","then","results","catch","reason","handleChangeStatus","guidId","statusGuidId","handleChangeAssignedTo","taskGuidID","assignedBy","UserId","allocatedToEntityType","user","onOpen","isAdhoc","entityType","onView","onStart","startDate","Date","onDelete","deleteTask","onDialogForm","form","open","TooltipUI","BrandColors","TemplatePrimary","maxWidth","border","quickActions","toLowerCase","taskType","completedDate","isTaskTypeMatter","isSystemTask","enquiryText","isKeyOpportunity","KeyOpportunity","Enquiry","taskTypeDescription","isFromDataSource","replace","callType","Object","entries","isReturnedCall","isPhoneCall","isWillCallAgain","filter","val","isDuplicateEnabled","onShowMatterDetails","addUserMatterAccessActivity","window","onShowClientAndContactDetails","nameAccessActivityMutation","getTooltipTitle","contentBlock","contentState","createFromBlockArray","contentBlocks","editorState","createWithContent","readOnly","toolbarHidden","ref","draggableProvided","innerRef","draggableProps","dragHandleProps","isDraggable","taskDescription","show","isAgree","agree","disAgreeLabel","agreeLabel","isOpen","isCreate","defaultPriority","loggedInUser","loggedInuser","initialStatus","taskStatusDescription","destinationStatus","defaultCategory","onDialogClose","taskGuid","entityGuidID","formAction","assignedByName","homeCountry","pOBoxType","taskSummary","enquiryDefaultConfig","isConfidential","taskTypeNotes","onAllocate","onStatus","onPriority","onStartDate","onDueDate","onCompletionDate","onComplete","onCategory","onOwner","onMessage","onDuplicate","disabledMenu","start","complete","completionDate","view","duplicate","enquiryGuid","category","isIncludeFollowUpTasksOnly","formattedDate","createdDate","defaultCard","onCreateEnquiry","createEnquiry","hasCreateLead","fromName","organisation","phoneNumber","notes","dangerouslySetInnerHTML","__html","priorityLevel","phoneTaskCard","textField","iconSelected","flexShrink","marginTop","flexGrow","close","opacity","renderWrapper","customRenderWrapper","fontFamily","lineHeight","letterSpacing","TaskAssignedBySelector","hasNextPage","isNextPageLoading","offset","items","delayedonInputChange","fetchData","isClear","query","refreshData","onSuccess","fetchPolicy","UserListQuery","first","isStaff","retrieveUserListData","isStaffOnly","onRetrieveUserList","userData","administrator","users","recordCount","itemsList","source","staffName","friendlyName","userID","roleName","includes","push","itemSize","isMultiple","loadNextPage","disableListWrap","selection","onInputChange","onBlur","TaskCategorySelector","taskStatus","taskSummaryQueryParams","isIncludeCrmTasks","isMyTasksOnly","isPersonalTask","groupByValue","completedFromDate","completedToDate","updatedFromDate","updatedToDate","priorityList","statusList","allocatedToList","allocatedByList","teamList","isIncludeHasTasks","onRetrieveTaskCategory","task","categories","taskStatusQueryParams","taskStatusType","includeCount","onRetrieveTaskStatus","taskStatusList","statuses","forEach","TaskHistoryActivityWidth","overflowY","historyContainer","borderLeft","top","bottom","left","historyIcon","taskDetails","minHeight","fontStyle","createClient","assignedEnquiry","followUp","enquiryCreated","contentDetails","detailsContainer","dialogRoot","header","dialogPaper","emailContentButton","right","emailDetails","paddingRight","newLine","TaskHistoryActivity","messagesEndRef","stringToColour","str","showDateEndOfFromNow","formatDate","getWidth","NORMAL","FULL_WIDTH","convertMentionInCommentToHtml","comment","regex","displayRegex","idRegex","match","arr","m","newComment","output","c","activityContent","taskActivityHistory","taskDetail","activityTextCreatedByName","allocatedUserName","allocatedTeamName","activitytypeId","getHistoryAvatar","message","allocatedByName","allocatedTeamID","getDescription","getHistoryDate","getDetailContent","elevation","messagedTo","whiteSpace","activityTypeDescription","activityByUser","completionNotes","activityTexts","JSON","parse","stringify","allocationHistoryList","taskActivityList","taskActivity","taskHistoryData","activityText","activityDate","activityTextCreatedByGuid","createdByGuid","createdByName","allocationHistory","allocatedByUserID","allocatedUserID","activityTypeID","activityByUserId","taskHistoryDataList","sortBy","history","autoScroll","setTimeout","current","scrollIntoView","behavior","TaskOptionEnum","TaskFormTab","divider","formControlWrapper","radioRoot","icon","backgroundImage","outline","outlineOffset","background","checkedIcon","radioGroup","clientContainer","chips","flexWrap","chip","clientRowRadio","clientSelector","matterForm","clientForm","buttonContainer","button","spacing","heading","headerDetails","paddingTop","hidden","editorClassName","wrapperClassName","toolbarClassName","formLabel","loaderWrapper","tabs","commentField","customFieldGrid","dropZone","dropZoneFont","dialogPaperWithActivity","activityTab","taskHistorykContentWrapper","historyActivityContainer","historyActivityWrapper","dialogContent","dialongInsideContentWrapper","tabWrapper","taskDetailsField","transformNone","clientMaterLabel","secondaryDescription","overflow","subTitle","textOverflow","taskTypeWrapper","gap","taskTypeSelector","taskTypeNotesWrapper","maxHeight","mainContent","verticialDivider","activityContentHeader","acitivityContentTitle","titleWrapper","StyledRadio","disableRipple","TasksSummaryFormDialog","onClickFormOpen","onClickFormClosed","isContextRefreshData","isContextRefreshTaskForm","setIsContextRefreshTaskForm","setRefreshDataOnFormClose","filesKey","setKey","handleCreateAndClose","handleCreateAndNew","handleUpdate","handleUpdateAndClose","duration","estimatedEffort","matterGuid","matterTitle","defaultMatter","assignTo","createEmpty","files","owner","reminderOffset","reminderDefaultConfig","reminder","taskSummaryForm","setTaskSummaryForm","none","partyMessage","partyClientGuid","hideToolbar","showDiscard","isChanged","isUserLoading","onSubmitLoading","isMatterLoading","tab","details","appUser","matterData","setMatterData","fetchTaskDetails","fetchUser","getTaskType","taskTypeInternalDescription","taskDetailsParams","onTaskDetailsRetrieved","detail","__typename","fetchMatterDetails","taskTypeGuid","prevTaskSummaryForm","toDate","clientGuid","categoryDescription","userId","assignedToName","priorityDescription","ownerName","handleMatterDataFetch","onUserRetrieved","handleOption","parseInt","target","GetFiles","document","file","guidID","formReset","values","setConfig","tempValues","reset","createTask","taskMatter","taskClient","isForceClosed","isCreatAndNew","createGeneralTask","createMatterTask","createClientTask","updateTask","updateGeneralTask","updateMatterTask","updateClientTask","parentNameTextId","parentNameCrmTextId","onFocusEditor","onBlurEditor","actionButton","submitting","pristine","type","change","closePanel","onReset","onFileClicked","url","win","focus","handleTabChange","newValue","detailsTab","container","xs","md","lg","sm","component","onFocus","onEditorStateChange","subscription","meta","touched","isUser","batch","onDropDownSelect","placeholder","inputProps","autoComplete","InputLabelProps","shrink","initialFocusedDate","setHours","showIcon","validate","validating","inputComponent","multiline","control","checked","documentsTab","documents","filteredFiles","getFileItems","maxFileSize","showFileNames","useChipsForPreview","filesLimit","dropzoneText","dropzoneClass","existingFiles","newFiles","some","documentFile","onDrop","initialFiles","scroll","paper","dividers","onSubmit","html","getCurrentContent","ownerGuid","taskInput","userDefinedTaskType","initialValues","initialValuesEqual","keepDirtyOnReinitialize","render","handleSubmit","e","justify","fileNumber","Boolean","getClientAndMatter","defaultValue","getTaskTypeControl","indicatorColor","textColor","invisible","orientation","flexItem","doneIcon","MatterTaskRenderer","currencyData","setCurrencyData","taskData","setTaskData","setIsLoading","isBillMatterOpen","isWriteOffUnbilledFeesOpen","isTransferTrustToPayInvoiceOpen","isWriteOffDebtorsOpen","isCloseMatterOpen","isArchiveMatterOpen","fetchCurrencyDetails","fetchPriority","handleCurrencyFetch","currencySymbol","localCurrency","currency","symbol","handleUserDataFetch","handleTaskDetailsFetch","handlePriorityDataFetch","priorityData","lookup","unBilledFees","financials","unbilledTimeAndFees","unbilledDisbursements","outstandingDebtors","debtors","currentTrustBalance","trustBalance","billedFees","billedTimeAndFees","feeEstimate","percentageEstimate","pendingWriteOffFeesAmountInBillMatterTask","actions","pendingWriteOffFeesAmountInWriteOffWipTask","pendingWriteOffDisbAmountInBillMatterTask","pendingWriteOffDisbAmountInWriteOffWipTask","currencyDetails","pendingWriteOffFeesAmount","pendingWriteOffDisbAmount","feesAmount","billFeesAmount","disbursementAmount","billDisbursementsAmount","applyTrustAmount","writeOffFeesAmount","writeOffDisbursementAmount","writeOffDisbursementsAmount","comments","taskCategory","canClose","canCloseMatter","closeMatterAfterWriteOff","debtorsAmount","writeOffDebtorsAmount","trustAmount","trustTransferAmount","invoiceNumber","invoiceToApply","closedDate","archiveMatter","archive","closeMatter","getMatterTaskActions","TasksSummaryContext","createContext","TasksSummaryContextProvider","isFormOpen","setIsFormOpen","isContextRefreshDataOnFormClose","setIsContextRefreshDataOnFormClose","Provider","isRefreshData","setIsContextRefreshData","children","PhoneNumberSelector","PHONE_NUMBER_QUERY","retrievePhoneNumberData","onRetrievePhoneNumber","partydetails","phoneNumbers","number","currentTarget","Paper","Typography","messagesReceived","messagesNotResponded","typography","pxToRem","gridWrapper","otherInfo","tableContainer","tableHeader","tableHeaderColumn","tableBody","tableBodyRow","tableBodyColumn","otherCurrentMatter","totalMatters","matterSummary","matterType","personActing","closedMatters","lastUpdate","address","Chip","clickable","location","href","preventDefault","mobile","phone","Array","isArray","chipData","getTagsChip","tags","PhoneFormTab","switcherWrapper","selector","paperWidthMd","optionWrapper","optionField","reminderInput","Radio","PhoneFormDialog","useCreateEnquiryMutation","set","isFromSwitched","from","to","isOrganisationSwitched","messageTitle","isEmailNotification","isSentAcknowledgementEmail","isShowReferrer","areaOfLaw","office","referrer","sourceNotes","followUpDueDate","assignmentFollowUpDueReminder","cc","phoneForm","setPhoneForm","getExtendPhoneTaskDetails","extendPhoneTaskDetailsQuery","fromNameGuid","nameGuid","isFromNameFromDataSource","prevPhoneForm","fromNameId","organisationGuid","isOrganisationFromDataSource","ccUserList","ccUser","optionValue","enquiry","getPhoneNameId","onSwitch","onDropDownTeamAndUserSelect","followUpDueValue","outcomeDate","hours","minutes","validTimeOfDay","timeOfDay","timeOfDaySplit","Number","isCalculatedDays","addDays","isCalculatedHours","addhours","addHours","add","getFollowUpDueDefaultValue","phoneFields","Grid","FormLabel","ReminderSelector","party","phoneTaskDetails","messageDetails","matterDetails","contactDetails","extendPhoneTaskDetails","getOutcomeDefaultTime","defaultTime","isManualEntry","detilsTypeTab","AreaOfLawSelector","SourceSelector","secondaryValue","onSourceChanged","isLocationFieldMandatory","OfficeSelector","ClientAndContactSelector","includeNonPmsContacts","includePmsContacts","autocomplete","enquiryCheckboxes","enquiryFields","FormControlLabel","Checkbox","DialogBox","Dialog","DialogTitle","DialogContent","create","firstName","lastName","natureOfEnquiry","referrerGuid","sendNotification","isSendEnquiryResponse","initialEnquiryDate","isNameFromDataSource","ccUserIds","IndividualSelector","organisationName","organisationSelectorValue","emailAddress","tempPhoneNumber","enableSecondary","TaskAssignedByUserTeamSelector","excludeTeams","OrganisationSelector","Divider","FormControl","RadioGroup","Tabs","Tab","activity","rows","DialogActions","commendField","StatusFormDialog","draggedToUnallocated","draggedToWaiting","draggedToInProgress","draggedToComplete","statusForm","setStatusForm","prevStatusForm","getAssignedToRequired","getStartDateRequired","getCompletionDateRequired","changedStatus","errors","spyProps","formState","getState","startOf","toISOString","onStatusChange","fetchUserData","fetchTeamData","FirmTeamDataQuery","retrieveFirmTeamListData","onRetrieveTeamList","firm","teams","autoSelect","deleteIcon","ActionMenu","useState","setOpen","anchorRef","archorEvent","contains","handleClose","handleStatus","handlePriority","handleStartDate","handleDueDate","handleStart","handleCompletionDate","handleCategory","handleListKeyDown","prevOpen","useEffect","anchorEl","transition","TransitionProps","placement","transformOrigin","onClickAway","autoFocusItem","onKeyDown","handleCreateEnquiry","handleMessage","hasModifyTask","handleOpen","handleDuplicate","hasViewMatterTask","handleView","hasAllocateTask","handleAllocate","allocate","handleOwner","parentMenuOpen","handleComplete","hasDeleteTask","handleDelete","delete","StartFormDialog","startForm","setStartForm","prevStartForm","getFieldState","PriorityFormDialog","priorityForm","setPriorityForm","prevPriorityForm","CompleteFormDialog","completeForm","setCompleteForm","prevCompleteForm","DueFormDialog","dueForm","setDueForm","prevDueForm","AllocateFormDialog","allocateForm","setAllocateForm","prevAllocateForm","CategoryFormDialog","categoryForm","setCategoryForm","OwnerFormDialog","ownerForm","setOwnerForm","prevOwnerForm","headerCol","alignRight","MessageFormDialog","currentUser","messageForm","isOwnerAssignor","isAssignee","ownerGuidID","assignedByGuidID","assignedToGuidID","onAssignedTypeChangedCheckbox","formApi","MESSAGE_TASK_MUTATION","includeOwnerOrAssignor","includeAssignee","labelPlacement","headerIcon","fieldContainer","AssignmentTaskDetailViewFields","Accordion","defaultExpanded","AccordionSummary","expandIcon","AccordionDetails","completion","BillTheMatterViewDialog","DialogTitleExtension","FormattedCurrency","displayStyle","Decimal","WriteOffWipViewDialog","WriteOffDebtorsViewDialog","TransferTrustToPayInvoiceViewDialog","ArchiveMatterViewDialog","CloseMatterViewDialog","GeneralViewDialog","MatterTaskViewRender","isGeneralOpen","taskNotes","TaskStatusEnum","retrieveTasksSummaryData","TaskSummaryListData","sortColumn","sortDirection","fetchAppUserData","UserData","retrieveTaskStatusData","TaskStatusQuery","retrievePriorityData","PriorityQuery","retrieveTaskCategoryData","TaskCategoryQuery","retrieveTaskDueDateData","TaskDueDatesQuery","retrieveTaskTeamData","TeamTaskQuery","isIncludeTaskCount","ChangeStatus","TaskSubscription","CreateGeneralTask","CreateClientTask","CreateMatterTask","UpdateGeneralTask","UpdateClientTask","UpdateMatterTask","DeleteTask","StartTask","CompleteTask","ChangeTaskPriority","ChangeTaskCategory","ChangeTaskAllocation","ChangeTaskOwner","ChangeTaskStatus","ChangeDueTask","retrieveTaskDetailsData","TASK_DETAILS_QUERY","retrieveTaskTypeData","taskTypeQuery","includeTask","includeTaskAssignedBy","CreatePhoneTaskMutation","UpdatePhoneTaskMutation","retrieveTimesheetScopeQueryData","timesheetScopeQuery","EXTEND_PHONE_TASK_DETAILS","TASK_AND_PHONE_MESSAGE_DEFAULT_QUERY","StatusCard","isInclude","convertArrayToStringFromat","onRetrieveStatus","_values","x","Card","count","ViewTypeEnum","GroupByType","searchContentWrapper","searchWrapper","NeutralColors","BackgroundGrey1","BackgroundGrey2","checkboxWrapper","checkboxContainer","showingWrapper","breakpoints","down","up","menuWrapper","stroke","download","viewType","advancedFilterButton","advanceFilterContainer","TasksSummaryControlPanel","downloadTaskLink","delayedSearch","debounce","isInMemory","isDownloading","isPaused","isToolPanelShow","isDeleteDisabled","isEditDisabled","isRowGroupPanelShow","isShowRowGroupPanel","isViewShow","showAdvancedFilter","search","isIncludeOpen","isIncludeClosed","setValue","setAdvancedFilter","viewCount","viewMenuItems","Open","All","Closed","None","onSearchFilterChanged","hasAccessToAdHocTask","onCloseAdvancedFilter","prevValue","onAdd","handleTaskDownload","onDownloadChanged","onClickViewType","onViewType","toggleTaskAndPhone","hasAdHocTask","TASKS","hasPhoneTask","PHONE_CALLS","HIDDEN","views","config","configId","onViewSelected","onSaveCurrentView","isDisableSave","hint","MatterTerminology","SearchTasks","searchAction","showClear","showCheckbox","hasLeadsDetail","hasLeapTask","sourceSystem","Badge","LIST","InputLabel","htmlFor","Select","MenuItem","dueDates","loadedCount","Tasks","totalCount","TasksFound","hasCreateTask","hideControls","adhocTask","rvKey","rvbuttonType","rvClassName","rvIcon","phoneTask","hasArchiveMatter","hasBillMatter","hasCloseMatter","hasDeleteMatterTask","hasWriteOffDebtors","hasWriteOffWIP","hasTransferMatterTrust","matterFinancialTask","onAddMatterFinancial","edit","onEdit","onRefreshData","rvMenuProps","onPrint","onExport","savedView","primary","onToggleConfigs","BOARD","COMPRESS_BOARD","prevAdvancedFilter","onSearchAdvanced"],"mappings":"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","file":"static/js/main~a153908c.68bb365d.chunk.js","sourcesContent":["import React, { useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n })\r\n);\r\n\r\ninterface DueSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n disablePortal?: boolean;\r\n}\r\n\r\ninterface DueSelectorState {\r\n isLoading: boolean;\r\n error?: boolean;\r\n options: IAutoCompleteItem[];\r\n}\r\n\r\nexport enum DueSelectorEnum {\r\n todayAndEarlier = 0,\r\n today,\r\n next3Days,\r\n next7Days,\r\n all\r\n}\r\n\r\nexport const DueSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state] = useState({\r\n isLoading: false,\r\n error: props.error,\r\n options: [\r\n {\r\n label: 'Today and earlier',\r\n value: DueSelectorEnum[DueSelectorEnum.todayAndEarlier]\r\n },\r\n {\r\n label: 'Today',\r\n value: DueSelectorEnum[DueSelectorEnum.today]\r\n },\r\n {\r\n label: 'Next 3 Days',\r\n value: DueSelectorEnum[DueSelectorEnum.next3Days]\r\n },\r\n {\r\n label: 'Next 7 Days',\r\n value: DueSelectorEnum[DueSelectorEnum.next7Days]\r\n },\r\n {\r\n label: 'All',\r\n value: DueSelectorEnum[DueSelectorEnum.all]\r\n },\r\n ],\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n\r\n const tempValue = value && value.hasOwnProperty('value') ? value : { label: '', value: ''};\r\n\r\n props.onSelection(tempValue, props.name ? props.name : 'followUpDue');\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n { props.multiple ? \r\n (\r\n option.label} \r\n // getOptionSelected={(option, value) => value.value === option.value} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n })\r\n);\r\n\r\ninterface CreatedSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n disablePortal?: boolean;\r\n}\r\n\r\ninterface CreatedSelectorState {\r\n isLoading: boolean;\r\n error?: boolean;\r\n options: IAutoCompleteItem[];\r\n}\r\n\r\nexport enum CreatedSelectorEnum {\r\n today = 0,\r\n last3Days,\r\n last7Days,\r\n all\r\n}\r\n\r\nexport const CreatedSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state] = useState({\r\n isLoading: false,\r\n error: props.error,\r\n options: [\r\n {\r\n label: 'Today',\r\n value: CreatedSelectorEnum[CreatedSelectorEnum.today]\r\n },\r\n {\r\n label: 'Last 3 Days',\r\n value: CreatedSelectorEnum[CreatedSelectorEnum.last3Days]\r\n },\r\n {\r\n label: 'Last 7 Days',\r\n value: CreatedSelectorEnum[CreatedSelectorEnum.last7Days]\r\n },\r\n {\r\n label: 'All',\r\n value: CreatedSelectorEnum[CreatedSelectorEnum.all]\r\n },\r\n ],\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n // tslint:disable-next-line: no-console\r\n if (props.onSelection) {\r\n\r\n const tempValue = value && value.hasOwnProperty('value') ? value : { label: '', value: ''};\r\n\r\n props.onSelection(tempValue, props.name ? props.name : 'newEnquriry');\r\n \r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n { props.multiple ? \r\n (\r\n option.label} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { makeStyles, Theme, createStyles, withStyles } from '@material-ui/core/styles';\r\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\r\nimport { KeyboardDatePicker } from '@material-ui/pickers/DatePicker/DatePicker';\r\n// import MergeTypeIcon from '@material-ui/icons/MergeType';\r\nimport MomentUtils from '@date-io/moment';\r\nimport { MaterialUiPickersDate } from '@material-ui/pickers/typings/date';\r\nimport moment from 'moment';\r\nimport { PrioritySelector } from './selectors/PrioritySelector';\r\nimport { IAutoCompleteItem } from '../typings/autoComplete';\r\nimport { TaskStatusSelector } from './selectors/TaskStatusSelector';\r\nimport { UserAutocompleteSelector } from '../components/UserAutocompleteSelector';\r\nimport { DueSelector } from './selectors/DueSelector';\r\nimport { CreatedSelector } from './selectors/CreatedSelector';\r\nimport { FirmTeamSelector } from '../lookupConfiguration/selectors/FirmTeamSelector';\r\nimport { UserFeature, UserFeatureEnum } from '../types/UserFeature';\r\nimport { TaskTypeSelector } from '../lookupConfiguration/selectors/TaskTypeSelector';\r\nimport { TaskSummaryAdvancedFilter } from './TasksSummaryPage';\r\nimport { Button, IconButton, Tooltip } from '@material-ui/core';\r\n// import ClearAllIcon from '@material-ui/icons/ClearAll';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { MatterAutoCompleteSelector } from '../components/MatterAutoCompleteSelector';\r\nimport { ClientAutoCompleteSelector } from '../components/ClientAutoCompleteSelector';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n flex: 1,\r\n alignItems: 'center',\r\n margin: '0 -10px',\r\n },\r\n col1: {\r\n flex: 1,\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n margin: '0 -10px',\r\n alignItems: 'center',\r\n flexFlow: 'row wrap',\r\n padding: '0 10px',\r\n '& > div': {\r\n padding: '10px'\r\n }\r\n },\r\n col2: {\r\n padding: '0 10px',\r\n },\r\n formControl: {\r\n minWidth: '100px',\r\n }\r\n })\r\n);\r\n\r\ninterface TasksSummaryAdvanceFilterProps {\r\n advancedFilter: TaskSummaryAdvancedFilter;\r\n onSearch?: (\r\n due: IAutoCompleteItem | undefined,\r\n created: IAutoCompleteItem | undefined,\r\n priority: IAutoCompleteItem[] | undefined,\r\n status: IAutoCompleteItem[] | undefined,\r\n allocatedTo: IAutoCompleteItem[] | undefined,\r\n allocatedBy: IAutoCompleteItem[] | undefined,\r\n updatedFrom: Date | undefined,\r\n updatedTo: Date | undefined,\r\n completedFrom: Date | undefined,\r\n completedTo: Date | undefined,\r\n team: IAutoCompleteItem[] | undefined,\r\n taskTypes: IAutoCompleteItem[] | undefined,\r\n matterList: IAutoCompleteItem[] | undefined,\r\n clientList: IAutoCompleteItem[] | undefined,\r\n ) => void;\r\n onClose?: () => void;\r\n onHasFilter?: (value: boolean) => void;\r\n}\r\n\r\ninterface TasksSummaryAdvanceFilterState {\r\n due: IAutoCompleteItem | undefined;\r\n created: IAutoCompleteItem | undefined;\r\n priority: IAutoCompleteItem[] | undefined;\r\n status: IAutoCompleteItem[] | undefined;\r\n allocatedTo: IAutoCompleteItem[] | undefined;\r\n allocatedBy: IAutoCompleteItem[] | undefined;\r\n updatedFrom: Date | undefined;\r\n updatedTo: Date | undefined;\r\n completedFrom: Date | undefined;\r\n completedTo: Date | undefined;\r\n team: IAutoCompleteItem[] | undefined;\r\n taskTypes: IAutoCompleteItem[] | undefined;\r\n matterList: IAutoCompleteItem[] | undefined;\r\n clientList: IAutoCompleteItem[] | undefined;\r\n}\r\n\r\nexport const TasksSummaryAdvanceFilter: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n due: props.advancedFilter.due,\r\n created: props.advancedFilter.created,\r\n priority: props.advancedFilter.priority,\r\n status: props.advancedFilter.status,\r\n allocatedTo: props.advancedFilter.allocatedTo,\r\n allocatedBy: props.advancedFilter.allocatedBy,\r\n updatedFrom: props.advancedFilter.updatedFrom,\r\n updatedTo: props.advancedFilter.updatedTo,\r\n completedFrom: props.advancedFilter.completedFrom,\r\n completedTo: props.advancedFilter.completedTo,\r\n team: props.advancedFilter.team,\r\n taskTypes: props.advancedFilter.taskTypes,\r\n matterList: props.advancedFilter.matterList,\r\n clientList: props.advancedFilter.clientList,\r\n });\r\n\r\n useEffect(() => {\r\n \r\n // tslint:disable-next-line: no-console\r\n // console.log('filter', state);\r\n\r\n if (props.onSearch) {\r\n props.onSearch(\r\n state.due,\r\n state.created,\r\n state.priority,\r\n state.status,\r\n state.allocatedTo,\r\n state.allocatedBy,\r\n state.updatedFrom,\r\n state.updatedTo,\r\n state.completedFrom,\r\n state.completedTo,\r\n state.team,\r\n state.taskTypes,\r\n state.matterList,\r\n state.clientList\r\n );\r\n }\r\n\r\n if (props.onHasFilter) {\r\n\r\n let hasFilter = false;\r\n\r\n if (\r\n (state.due !== undefined && state.due !== null) ||\r\n (state.created !== undefined && state.created !== null) ||\r\n (state.priority && state.priority.length > 0) ||\r\n (state.status && state.status.length > 0) ||\r\n (state.allocatedTo && state.allocatedTo.length > 0) ||\r\n (state.allocatedBy && state.allocatedBy.length > 0) ||\r\n state.updatedFrom ||\r\n state.updatedTo ||\r\n state.completedFrom ||\r\n state.completedTo ||\r\n (state.team && state.team.length > 0) ||\r\n (state.taskTypes && state.taskTypes.length > 0) ||\r\n (state.matterList && state.matterList.length > 0) ||\r\n (state.clientList && state.clientList.length > 0)\r\n ) {\r\n hasFilter = true;\r\n }\r\n\r\n props.onHasFilter(hasFilter);\r\n }\r\n // tslint:disable-next-line: align\r\n }, [state]);\r\n\r\n const handleDateChange = (field: string) => (date: MaterialUiPickersDate, value?: string | null | undefined) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n [field]: date ? moment(date).format('YYYY-MM-DD') : null\r\n };\r\n });\r\n };\r\n\r\n const onSelection = (_value: IAutoCompleteItem[], name: string) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n [name]: _value\r\n };\r\n });\r\n };\r\n\r\n const onSingleSelection = (value: IAutoCompleteItem, name: string) => {\r\n\r\n const _value = value.label.length > 0 ? value : undefined;\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n [name]: _value\r\n };\r\n });\r\n };\r\n\r\n const onClear = () => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n due: undefined,\r\n created: undefined,\r\n priority: undefined,\r\n status: undefined,\r\n allocatedTo: undefined,\r\n allocatedBy: undefined,\r\n updatedFrom: undefined,\r\n updatedTo: undefined,\r\n completedFrom: undefined,\r\n completedTo: undefined,\r\n team: undefined,\r\n taskTypes: undefined,\r\n matter: undefined,\r\n client: undefined\r\n };\r\n });\r\n };\r\n\r\n const LightTooltip = withStyles((theme: Theme) => ({\r\n tooltip: {\r\n backgroundColor: theme.palette.common.white,\r\n color: 'rgba(0, 0, 0, 0.87)',\r\n boxShadow: theme.shadows[1],\r\n fontSize: 11,\r\n },\r\n }))(Tooltip);\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n );\r\n};\r\n","export enum AllocatedToEntityType {\r\n user = 0,\r\n team = 1\r\n}","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles, withStyles } from '@material-ui/core/styles';\r\nimport { DraggableProvided, DraggableStateSnapshot } from 'react-beautiful-dnd';\r\nimport { Avatar, IconButton, Tooltip } from '@material-ui/core';\r\nimport { SemanticCOLORS } from 'semantic-ui-react';\r\nimport moment from 'moment';\r\nimport { PrioritySelector } from '../selectors/PrioritySelector';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport useOnClickOutside from 'use-onclickoutside';\r\nimport { TaskStatusSelector } from '../selectors/TaskStatusSelector';\r\nimport { client } from '../..';\r\nimport { showNotification } from '../../App';\r\nimport { GroupByType } from '../TasksSummaryControlPanel';\r\nimport { UserAutocompleteSelector } from '../../components/UserAutocompleteSelector';\r\nimport { ActionMenu } from '../menu/ActionMenu';\r\nimport { \r\n ChangeStatus,\r\n ChangeTaskAllocation,\r\n ChangeTaskPriority,\r\n DeleteTask,\r\n StartTask \r\n} from '../TasksSummaryRepository';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\nimport { TasksSummaryFormDialog } from '../dialog/TasksSummaryFormDialog';\r\nimport { StartFormDialog } from '../dialog/StartFormDialog';\r\nimport { PriorityFormDialog } from '../dialog/PriorityFormDialog';\r\nimport { CompleteFormDialog } from '../dialog/CompleteFormDialog';\r\nimport { DueFormDialog } from '../dialog/DueFormDialog';\r\nimport { AllocateFormDialog } from '../dialog/AllocateFormDialog';\r\nimport { StatusFormDialog } from '../dialog/StatusFormDialog';\r\nimport { UserFeature, UserFeatureEnum } from '../../types/UserFeature';\r\nimport { EnquiryTaskAction } from '../../enquirySummary/EnquiryTaskAction';\r\nimport { MatterTaskRenderer } from '../cellRenderer/MatterTaskRenderer';\r\nimport { MatterTaskViewRender } from '../cellRenderer/MatterTaskViewRender';\r\nimport PersonIcon from '@material-ui/icons/Person';\r\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\r\nimport CheckIcon from '@material-ui/icons/Check';\r\nimport { mainTheme } from '../../Theme';\r\nimport { CategoryFormDialog } from '../dialog/CategoryFormDialog';\r\nimport { MatterTerminology } from '../../MatterTerminology';\r\nimport { PhoneFormDialog } from '../dialog/PhoneFormDialog';\r\nimport PhoneIcon from '@material-ui/icons/Phone';\r\nimport { OwnerFormDialog } from '../dialog/OwnerFormDialog';\r\nimport { AllocatedToEntityType } from '../AllocatedToEntityType';\r\nimport { EnquiryFormDrawer } from '../../enquirySummary/drawers/EnquiryFormDrawer';\r\n// import { fetchEnquiryDetailsData } from '../../enquirySummary/EnquirySummaryRepository';\r\n// import { Enquiry, EnquiryData } from '../../enquirySummary/models/Enquiry';\r\nimport { MessageFormDialog } from '../dialog/MessageFormDialog';\r\nimport LockOutlinedIcon from '@material-ui/icons/LockOutlined';\r\nimport InfoIcon from '@material-ui/icons/InfoOutlined';\r\nimport OpenInNew from '@material-ui/icons/OpenInNewOutlined';\r\nimport htmlToDraft from 'html-to-draftjs';\r\nimport { ContentState, EditorState } from 'draft-js';\r\nimport { Editor } from 'react-draft-wysiwyg';\r\nimport { LightTooltip } from '../../helpers/commonHelper';\r\nimport { AddUserMatterAccessActivity } from '../../matterSummary/MatterSummaryPageX';\r\nimport { nameAccessActivityMutation } from '../../ClientAndContactDetails/ClientAndContactDetailsRepositories';\r\nimport { EnquiryDefaultsConfig } from '../../hooks/useEnquiryConfigSettingsQuery';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n userSelect: 'none',\r\n padding: 8,\r\n margin: '0 0 8px 0',\r\n color: '#000',\r\n display: 'flex',\r\n position: 'relative',\r\n backgroundColor: '#fff'\r\n },\r\n option: {\r\n // position: 'absolute',\r\n // top: 0,\r\n // right: 0,\r\n display: 'flex',\r\n flex: 1,\r\n justifyContent: 'flex-end',\r\n alignItems: 'center'\r\n },\r\n contentContainer: {\r\n // padding: '0 10px',\r\n display: 'flex',\r\n flexFlow: 'column',\r\n flex: 1,\r\n },\r\n content: {\r\n paddingBottom: '10px',\r\n flex: 1,\r\n // paddingRight: '30px',\r\n },\r\n otherDetails: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n fontSize: '12px',\r\n '& > div': {\r\n flex: 1,\r\n },\r\n '& .session': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n },\r\n '& .user': {\r\n backgroundColor: 'yellow',\r\n padding: '3px 5px',\r\n textTransform: 'capitalize',\r\n borderRadius: '3px',\r\n }\r\n },\r\n userContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n fontSize: '12px',\r\n padding: '10px 0',\r\n cursor: 'pointer',\r\n '& .user': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '0 5px',\r\n margin: '0 -5px',\r\n '& > div': {\r\n padding: '0 5px',\r\n }\r\n },\r\n '& .name': {\r\n fontWeight: 600,\r\n },\r\n '& .category': {\r\n padding: '0 5px',\r\n fontWeight: 600,\r\n }\r\n },\r\n avatar: {\r\n width: '20px',\r\n height: '20px',\r\n fontSize: '10px',\r\n },\r\n priority: {\r\n cursor: 'pointer'\r\n },\r\n status: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n cursor: 'pointer',\r\n },\r\n optionContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n margin: '-8px -8px 0px -8px',\r\n },\r\n phoneTaskCardContent: {\r\n '& .user': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '0 5px',\r\n margin: '0 -5px',\r\n '& > div': {\r\n padding: '0 5px',\r\n }\r\n },\r\n '& .card-heading': {\r\n fontSize: 16,\r\n fontWeight: 600,\r\n marginBottom: 5,\r\n },\r\n '& .card-fromAndOrganisation': {\r\n marginBottom: 5,\r\n '& span': {\r\n fontWeight: 600,\r\n }\r\n },\r\n '& .card-phoneNumber': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n '& svg': {\r\n marginRight: 5,\r\n }\r\n },\r\n '& .card-message': {\r\n marginBottom: 5,\r\n },\r\n '& .card-callType': {\r\n marginBottom: 5,\r\n },\r\n '& .card-bottom': {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n },\r\n '& .card-bottom-left': {\r\n },\r\n '& .card-to': {\r\n fontWeight: 600,\r\n display: 'flex',\r\n paddingBottom: 5,\r\n },\r\n '& .card-bottom-right': {\r\n textAlign: 'right'\r\n },\r\n '& .card-callNumberWrapper': {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n marginBottom: 5,\r\n },\r\n '& .card-status': {\r\n fontSize: 12\r\n }\r\n },\r\n matterDescription: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start'\r\n },\r\n matterDescriptionContent: {\r\n display: 'flex',\r\n },\r\n clientDescription: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex'\r\n },\r\n clientDescriptionContent: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n },\r\n openNewWindowIcon: {\r\n marginLeft: '5px',\r\n cursor: 'pointer'\r\n },\r\n taskContentDescription: {\r\n fontWeight: 600\r\n },\r\n confidential: {\r\n flex: 2,\r\n },\r\n infoIcon: {\r\n cursor: 'pointer'\r\n }\r\n })\r\n);\r\n\r\nexport const Colors: SemanticCOLORS[] = ['red', 'orange', 'olive', 'green', 'teal', 'blue',\r\n 'purple', 'pink', 'brown', 'grey'];\r\n\r\nexport function hashString(input: string): number {\r\n var hash = 0, i, chr;\r\n if (input.length === 0) {\r\n return hash;\r\n }\r\n for (i = 0; i < input.length; i++) {\r\n chr = input.charCodeAt(i);\r\n // tslint:disable-next-line:no-bitwise\r\n hash = ((hash << 5) - hash) + chr - 1;\r\n // tslint:disable-next-line:no-bitwise\r\n hash |= 0; // Convert to 32bit integer\r\n }\r\n return hash;\r\n}\r\n\r\ninterface BoardCardDraggableProps {\r\n key: string;\r\n assignedTo: IAutoCompleteItem;\r\n content: string | null;\r\n dueDate: Date | null;\r\n category?: string | null;\r\n priority: IAutoCompleteItem;\r\n status: IAutoCompleteItem;\r\n draggableProvided: DraggableProvided;\r\n draggableSnapshot: DraggableStateSnapshot;\r\n // tslint:disable-next-line: no-any\r\n item?: any;\r\n groupBy: GroupByType;\r\n entityType: number;\r\n isDraggable: boolean;\r\n loggedInuser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n homeCountry: string;\r\n pOBoxType: string | null;\r\n matterId: number | null;\r\n nameId: number | null;\r\n enquiryDefaultConfig?: EnquiryDefaultsConfig;\r\n isIncludeFollowUpTasksOnly: boolean | null;\r\n}\r\n\r\ninterface TaskFormState {\r\n isDuplicate: boolean;\r\n isTaskFormOpen: boolean;\r\n isStartDateOpen: boolean;\r\n isPriorityFormOpen: boolean;\r\n isCompletionFormOpen: boolean;\r\n isDueFormOpen: boolean;\r\n isAllocatedFormOpen: boolean;\r\n isStatusFormOpen: boolean;\r\n isTaskViewOpen: boolean;\r\n isCategoryFormOpen: boolean;\r\n isOwnerFormOpen: boolean;\r\n isPhoneFormOpen: boolean;\r\n isEnquiryFormOpen: boolean;\r\n isMessageFormOpen: boolean;\r\n}\r\n\r\ninterface BoardCardDraggableState extends TaskFormState {\r\n priority: IAutoCompleteItem;\r\n status: IAutoCompleteItem;\r\n assignedTo: IAutoCompleteItem;\r\n groupBy: GroupByType;\r\n isDeleteConfirm: boolean;\r\n matterId: number | null;\r\n nameId: number | null;\r\n}\r\n\r\nexport const BoardCardDraggable: React.FC = props => {\r\n \r\n const classes = useStyles();\r\n\r\n // const [enquiryData, setEnquiryData] = useState();\r\n\r\n const [state, setState] = useState({\r\n priority: props.priority,\r\n status: props.status,\r\n assignedTo: props.assignedTo,\r\n groupBy: props.groupBy,\r\n isDeleteConfirm: false,\r\n isTaskFormOpen: false,\r\n isStartDateOpen: false,\r\n isPriorityFormOpen: false,\r\n isCompletionFormOpen: false,\r\n isDueFormOpen: false,\r\n isAllocatedFormOpen: false,\r\n isStatusFormOpen: false,\r\n isTaskViewOpen: false,\r\n isCategoryFormOpen: false,\r\n isOwnerFormOpen: false,\r\n isPhoneFormOpen: false,\r\n isEnquiryFormOpen: false,\r\n isMessageFormOpen: false,\r\n isDuplicate: false,\r\n matterId: props.matterId,\r\n nameId: props.nameId\r\n });\r\n \r\n useEffect(() => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n groupBy: props.groupBy\r\n };\r\n });\r\n\r\n // tslint:disable-next-line: align\r\n }, [props.groupBy]);\r\n\r\n const [isPrioritySelected, setIsPrioritySelected] = useState(false);\r\n const [isStatusSelected, setIsStatusSelected] = useState(false);\r\n const [isAssignedToSelected, setIsAssignedToSelected] = useState(false);\r\n\r\n const refPriority = React.useRef(null);\r\n\r\n const refStatus = React.useRef(null);\r\n const refAssignedTo = React.useRef(null);\r\n\r\n // click outside hide the selector\r\n useOnClickOutside(refPriority, () => setIsPrioritySelected(false));\r\n\r\n // click outside hide the selectoras\r\n useOnClickOutside(refStatus, () => setIsStatusSelected(false));\r\n\r\n // click outside hide the selector\r\n useOnClickOutside(refAssignedTo, () => setIsAssignedToSelected(false));\r\n\r\n // useEffect(() => {\r\n // if (state.isEnquiryFormOpen) {\r\n // fetchEnquiryDetails();\r\n // } \r\n // // tslint:disable-next-line: align\r\n // }, [state.isEnquiryFormOpen]);\r\n\r\n // const fetchEnquiryDetails = () => {\r\n // fetchEnquiryDetailsData(true, // This should always be a new request.\r\n // props.item.entityGuidID,\r\n // (data: EnquiryData) => {\r\n // handleEnquiryDataFetch(data);\r\n // }, \r\n // (reason) => {\r\n // showNotification('Failed to Fetch App User Settings', reason, 'error'); \r\n // });\r\n // };\r\n\r\n // const handleEnquiryDataFetch = (data: EnquiryData) => {\r\n // if (data && !data.loading && data.enquiry) {\r\n // if (data.enquiry) {\r\n // setEnquiryData(data.enquiry);\r\n // }\r\n // }\r\n // };\r\n\r\n const avatar = () => {\r\n let bColor: SemanticCOLORS = Colors[(state.assignedTo.label === '' || state.assignedTo.label === null) ? \r\n Colors[Colors.length] : (hashString(state.assignedTo.label) % Colors.length) - 1];\r\n // tslint:disable-next-line: no-any\r\n let stringSplit = state.assignedTo.label.split(' ').map((n: any) => n[0]).join('');\r\n\r\n let stringInitials = stringSplit.slice(0, 2);\r\n\r\n return (\r\n \r\n {stringInitials}\r\n \r\n );\r\n };\r\n\r\n const dueDate = () => {\r\n if (props.dueDate) {\r\n return `Due ${moment(props.dueDate, 'YYYY-MM-DD HH:mm:ss').endOf('second').fromNow()}`; \r\n } else {\r\n return '';\r\n } \r\n };\r\n\r\n const formattedDate = (date: Date | null, format: string) => {\r\n if (date) {\r\n return moment(date).format(format);\r\n }\r\n return undefined;\r\n };\r\n\r\n const isOverDue = () => {\r\n if (props.dueDate) {\r\n return moment().diff(props.dueDate, 'second');\r\n } else {\r\n return 0;\r\n } \r\n };\r\n\r\n const handleClickPriority = () => {\r\n setIsPrioritySelected(true);\r\n };\r\n\r\n const handleClickStatus = () => {\r\n setIsStatusSelected(true);\r\n };\r\n\r\n const handleClickAssignedTo = () => {\r\n setIsAssignedToSelected(true);\r\n };\r\n\r\n const handleChangePriority = (data: IAutoCompleteItem, name: string) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n [name]: data\r\n };\r\n });\r\n\r\n client\r\n .mutate({\r\n mutation: ChangeTaskPriority,\r\n variables: {\r\n guid: props.item.taskStatusGuidID,\r\n priority: data.value\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification( 'Failed to Change Priority', results.data.error, 'error');\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Change Priority', reason, 'error');\r\n });\r\n };\r\n\r\n const handleChangeStatus = (data: IAutoCompleteItem, name: string) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n [name]: data\r\n };\r\n });\r\n\r\n client\r\n .mutate({\r\n mutation: ChangeStatus,\r\n variables: {\r\n guidId: props.item.taskStatusGuidID,\r\n statusGuidId: data.value\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification( 'Failed to Change Status', results.data.error, 'error');\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Change Status', reason, 'error');\r\n });\r\n };\r\n\r\n const handleChangeAssignedTo = (data: IAutoCompleteItem, name: string) => {\r\n // tslint:disable-next-line: no-console\r\n // console.log('assigned To', data, name, props.item.taskStatusGuidID);\r\n if (!data) {\r\n return;\r\n }\r\n \r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n [name]: data\r\n };\r\n });\r\n\r\n client\r\n .mutate({\r\n mutation: ChangeTaskAllocation,\r\n variables: {\r\n guidId: props.item.taskGuidID,\r\n assignedTo: data.value,\r\n assignedBy: UserFeature.UserId,\r\n allocatedToEntityType: AllocatedToEntityType.user\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification( 'Failed to Change Assigned To', results.data.error, 'error');\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Change Assigned To', reason, 'error');\r\n });\r\n };\r\n\r\n const onOpen = (isAdhoc: boolean, isDuplicate: boolean) => () => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isTaskFormOpen: isAdhoc && props.entityType !== 1 ? true : false,\r\n isPhoneFormOpen: !isAdhoc && props.entityType !== 1 ? true : false,\r\n isEnquiryFormOpen: props.entityType === 1 ? true : false,\r\n isDuplicate: isDuplicate\r\n };\r\n });\r\n };\r\n\r\n const onView = () => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isTaskViewOpen: true\r\n };\r\n });\r\n };\r\n\r\n const onStart = () => {\r\n client\r\n .mutate({\r\n mutation: StartTask,\r\n variables: { \r\n guid: props.item.taskGuidID, \r\n startDate: new Date(), \r\n // dueDate: null, \r\n // estimatedEffort: null\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully started', 'info');\r\n } else {\r\n showNotification('Failed to start', results.data.error, 'error');\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to start', reason, 'error');\r\n });\r\n };\r\n\r\n const onDelete = () => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isDeleteConfirm: true\r\n };\r\n });\r\n };\r\n\r\n const onDeleteConfirm = (agree: boolean) => {\r\n if (agree) {\r\n // tslint:disable-next-line: no-console\r\n // console.log('delete task');\r\n\r\n deleteTask(props.item.taskGuidID);\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isDeleteConfirm: false\r\n };\r\n });\r\n };\r\n\r\n const deleteTask = (guid: string) => {\r\n client\r\n .mutate({\r\n mutation: DeleteTask,\r\n variables: { \r\n guid\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully deleted', 'info');\r\n } else {\r\n showNotification('Failed to delete task', results.data.error, 'error');\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to delete task', reason, 'error');\r\n });\r\n };\r\n\r\n const onDialogForm = (form: keyof TaskFormState, open: boolean) => () => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n [form]: open\r\n };\r\n });\r\n };\r\n\r\n const TooltipUI = withStyles((theme: Theme) => ({\r\n tooltip: {\r\n backgroundColor: mainTheme.BrandColors.TemplatePrimary,\r\n color: '#ffffff',\r\n maxWidth: 220,\r\n fontSize: 14,\r\n border: '1px solid #dadde9',\r\n },\r\n }))(Tooltip);\r\n \r\n const quickActions = () => {\r\n if (props.status && props.status!.label.toLowerCase() === 'unallocated') {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else if (props.status && props.status!.label.toLowerCase() === 'not started' && props.item.taskType !== 'PhoneTask' &&\r\n props.item.allocatedToEntityType === AllocatedToEntityType.user ) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else if (props.item.completedDate === null || props.item.allocatedToEntityType === AllocatedToEntityType.user) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else if (props.status && props.status!.label.toLowerCase() === 'unassigned' \r\n && props.item.allocatedToEntityType === AllocatedToEntityType.user) {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n return
;\r\n };\r\n\r\n const isTaskTypeMatter = props.item.taskType === 'ArchiveMatterRequested' ||\r\n props.item.taskType === 'BillMatterRequested' ||\r\n props.item.taskType === 'WriteOffMatterWIPRequested' ||\r\n props.item.taskType === 'WriteOffMatterDebtorsRequested' ||\r\n props.item.taskType === 'TransferMatterTrustToInvoiceRequested' ||\r\n props.item.taskType === 'CloseMatterRequested' || \r\n props.item.taskType === 'General' ||\r\n props.item.isSystemTask === false;\r\n\r\n const enquiryText = props.item.isKeyOpportunity ? MatterTerminology.KeyOpportunity : MatterTerminology.Enquiry;\r\n\r\n const taskTypeDescription = props.item.isFromDataSource === true \r\n ? 'LEAP' \r\n : props.item.taskTypeDescription.replace('Enquiry', enquiryText);\r\n\r\n const callType = Object.entries({\r\n isReturnedCall: props.item.isReturnedCall,\r\n isPhoneCall: props.item.isPhoneCall,\r\n isWillCallAgain: props.item.isWillCallAgain,\r\n })\r\n .map(([key, value]) => {\r\n if (value) {\r\n if (key === 'isPhoneCall') {\r\n return 'Please Call';\r\n } else if (key === 'isReturnedCall') {\r\n return 'Returned Call';\r\n } else {\r\n return 'Will Call Again';\r\n }\r\n }\r\n return undefined;\r\n })\r\n // tslint:disable-next-line: no-any\r\n .filter((val: any) => val !== undefined)\r\n .join(' - ');\r\n\r\n const isDuplicateEnabled = props.item.taskType !== 'BillMatterRequested' &&\r\n props.item.taskType !== 'WriteOffMatterWIPRequested' &&\r\n props.item.taskType !== 'TransferMatterTrustToInvoiceRequested' &&\r\n props.item.taskType !== 'WriteOffMatterDebtorsRequested' &&\r\n props.item.taskType !== 'CloseMatterRequested' &&\r\n props.item.taskType !== 'ArchiveMatterRequested' &&\r\n props.item.taskType !== 'PhoneTask';\r\n\r\n const getMatterDescription = () => {\r\n\r\n if (\r\n (props.item.taskType !== 'BillMatterRequested' &&\r\n props.item.taskType !== 'WriteOffMatterWIPRequested' &&\r\n props.item.taskType !== 'TransferMatterTrustToInvoiceRequested' &&\r\n props.item.taskType !== 'WriteOffMatterDebtorsRequested' &&\r\n props.item.taskType !== 'CloseMatterRequested' &&\r\n props.item.taskType !== 'ArchiveMatterRequested') && props.item.matterDescription\r\n ) {\r\n return (\r\n
\r\n
\r\n {`${props.item.matterDescription}`}\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n if (\r\n (props.item.client !== undefined || props.item.client !== null) && props.item.client \r\n ) {\r\n return (\r\n
\r\n
\r\n {`${props.item.client}`}\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n const onShowMatterDetails = () => () => {\r\n client\r\n .mutate({\r\n mutation: AddUserMatterAccessActivity,\r\n variables: {\r\n matterId: props.matterId\r\n },\r\n })\r\n .then(\r\n (results: {\r\n data: {\r\n addUserMatterAccessActivity: boolean;\r\n };\r\n }) => {\r\n if (results.data.addUserMatterAccessActivity === false) {\r\n // tslint:disable-next-line:no-console\r\n console.log('AddUserMatterAccessActivity mutation failed');\r\n }\r\n },\r\n );\r\n\r\n window.open('/matterDetail/' + props.matterId);\r\n };\r\n\r\n const onShowClientAndContactDetails = () => () => {\r\n client\r\n .mutate({\r\n mutation: nameAccessActivityMutation,\r\n variables: {\r\n matterId: props.nameId,\r\n isFromDataSource: true\r\n },\r\n })\r\n .then(\r\n (results: {\r\n data: {\r\n nameAccessActivityMutation: boolean;\r\n };\r\n }) => {\r\n if (results.data.nameAccessActivityMutation === false) {\r\n // tslint:disable-next-line:no-console\r\n console.log('nameAccessActivityMutation mutation failed');\r\n }\r\n },\r\n );\r\n window.open(`/clientAndContactDetail/${props.nameId}?isFromDataSource=true`);\r\n };\r\n\r\n const getTooltipTitle = (description: string): NonNullable => {\r\n\r\n const contentBlock = htmlToDraft(description);\r\n\r\n const contentState = ContentState.createFromBlockArray(contentBlock.contentBlocks);\r\n \r\n const editorState = EditorState.createWithContent(contentState);\r\n\r\n return (\r\n <>\r\n \r\n \r\n );\r\n };\r\n\r\n const defaultCard = () => {\r\n return (\r\n
\r\n
\r\n {/* {state.groupBy !== GroupByType.taskType && ( */}\r\n
\r\n
\r\n {taskTypeDescription}\r\n
\r\n
\r\n {/* )} */}\r\n {props.entityType !== 1 && (\r\n
\r\n {!!props.item.isConfidential && (\r\n \r\n \r\n \r\n )}\r\n {props.item.taskTypeNotes && (\r\n \r\n \r\n \r\n )}\r\n {quickActions()}\r\n \r\n
\r\n )} \r\n\r\n {props.entityType === 1 && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n
\r\n
\r\n {props.content}\r\n
\r\n {getMatterDescription()}\r\n
\r\n
\r\n { \r\n state.groupBy !== GroupByType.allocatedTo \r\n ? (\r\n
\r\n {\r\n isAssignedToSelected ? \r\n (\r\n \r\n )\r\n :\r\n (\r\n <>\r\n {state.assignedTo.label && (\r\n
\r\n {avatar()}\r\n
{state.assignedTo.label}
\r\n
\r\n )}\r\n \r\n )\r\n }\r\n
\r\n ) \r\n : \r\n (\r\n
\r\n {\r\n isPrioritySelected ? \r\n (\r\n \r\n ) \r\n : \r\n (\r\n
{state.priority.label}
\r\n )\r\n }\r\n
\r\n )\r\n }\r\n {\r\n props.category && props.groupBy !== GroupByType.category && (\r\n
\r\n {props.category}\r\n
\r\n )\r\n }\r\n
\r\n
\r\n
\r\n { \r\n state.groupBy !== GroupByType.priority && state.groupBy !== GroupByType.allocatedTo \r\n &&\r\n (\r\n
\r\n {\r\n isPrioritySelected ? \r\n (\r\n \r\n ) \r\n : \r\n (\r\n
\r\n {state.priority.label}\r\n
\r\n )\r\n }\r\n
\r\n ) \r\n }\r\n {state.groupBy !== GroupByType.status && \r\n (\r\n
\r\n {\r\n isStatusSelected ? \r\n (\r\n (\r\n \r\n ) \r\n )\r\n :\r\n (\r\n
Status: {state.status.label}
\r\n )\r\n }\r\n
\r\n ) \r\n }\r\n
\r\n {props.item.completedDate === null && state.status.label.toLowerCase() !== 'complete' && (\r\n
0 ? 'red' : '#000'}}\r\n >\r\n {dueDate()}\r\n
\r\n )}\r\n {props.item.completedDate && (\r\n
0 ? 'red' : '#000'}}\r\n >\r\n {formattedDate(props.item.createdDate, 'DD MMM YYYY')}\r\n
\r\n )}\r\n
\r\n
\r\n );\r\n };\r\n\r\n const phoneTaskCard = () => {\r\n return (\r\n
\r\n
\r\n {/* {state.groupBy !== GroupByType.taskType && ( */}\r\n
\r\n
\r\n {taskTypeDescription}\r\n
\r\n
\r\n {/* )} */}\r\n {props.entityType !== 1 && (\r\n
\r\n {props.item.taskTypeNotes && (\r\n \r\n \r\n \r\n )}\r\n {quickActions()}\r\n \r\n
\r\n )} \r\n\r\n {props.entityType === 1 && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n
\r\n
\r\n {props.item.fromName} {props.item.organisation ? (<>from {props.item.organisation}) : undefined} \r\n
\r\n {!!props.item.matterDescription && (\r\n
\r\n
\r\n {`${props.item.matterDescription}`}\r\n \r\n \r\n \r\n
\r\n
\r\n )}\r\n
\r\n {props.item.phoneNumber && (\r\n
\r\n \r\n {props.item.phoneNumber}\r\n
\r\n )}\r\n
\r\n
\r\n {callType}\r\n
\r\n {!!props.item.notes && (\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n {\r\n isAssignedToSelected ? \r\n (\r\n \r\n )\r\n :\r\n (\r\n <>\r\n {state.assignedTo.label && (\r\n
\r\n {avatar()}\r\n
{state.assignedTo.label}
\r\n
\r\n )}\r\n \r\n )\r\n }\r\n
\r\n {state.groupBy !== GroupByType.status && \r\n (\r\n
\r\n {\r\n isStatusSelected ? \r\n (\r\n (\r\n \r\n ) \r\n )\r\n :\r\n (\r\n
Status: {state.status.label}
\r\n )\r\n }\r\n
\r\n ) \r\n }\r\n
\r\n
\r\n {props.item.priorityLevel !== 0 && (\r\n
\r\n {\r\n isPrioritySelected ? \r\n (\r\n \r\n ) \r\n : \r\n (\r\n
{state.priority.label}
\r\n )\r\n }\r\n
\r\n )}\r\n {state.status.label.toLowerCase() !== 'complete' && (\r\n
0 ? 'red' : '#000'}}\r\n >\r\n {dueDate()}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n {state.isDeleteConfirm && (\r\n \r\n )}\r\n {/* All IsSystemTask = 0 are user defined and should be opened in Task Form Dialog */}\r\n {state.isTaskFormOpen && (props.item.taskType === 'General' || props.item.taskType === 'TaskFollowUp' || props.item.isSystemTask === false ) && (\r\n \r\n )}\r\n\r\n {state.isPhoneFormOpen && props.item.taskType === 'PhoneTask' && (\r\n \r\n )}\r\n\r\n {state.isStartDateOpen && (\r\n \r\n )}\r\n\r\n {state.isPriorityFormOpen && (\r\n \r\n )}\r\n\r\n {state.isCompletionFormOpen && (\r\n \r\n )}\r\n\r\n {state.isDueFormOpen && (\r\n \r\n )}\r\n\r\n {state.isAllocatedFormOpen && (\r\n \r\n )}\r\n\r\n {state.isStatusFormOpen && (\r\n \r\n )}\r\n\r\n {state.isCategoryFormOpen && (\r\n \r\n )}\r\n\r\n {state.isOwnerFormOpen && (\r\n \r\n )}\r\n\r\n {state.isMessageFormOpen && (\r\n \r\n )}\r\n\r\n {state.isTaskFormOpen && isTaskTypeMatter && props.item.isSystemTask === true && props.item.taskType !== 'General' && (\r\n \r\n )}\r\n\r\n {state.isTaskViewOpen && isTaskTypeMatter && (\r\n \r\n )}\r\n\r\n {state.isEnquiryFormOpen && props.loggedInuser && (\r\n <>\r\n \r\n \r\n )} \r\n\r\n {props.item.taskType !== 'PhoneTask' ? defaultCard() : phoneTaskCard()}\r\n
\r\n );\r\n};","import React, { useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\n// import { name, random } from 'faker';\r\nimport gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport PersonIcon from '@material-ui/icons/Person';\r\nimport PersonOutlinedIcon from '@material-ui/icons/PersonOutlined';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { client } from '../..';\r\nimport { InfiniteAutocomplete } from '../../components/InfiniteAutocomplete';\r\nimport { RenderInputParams } from '@material-ui/lab';\r\nimport { useDebouncedCallback } from 'use-debounce/lib';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n iconSelected: {\r\n width: 17,\r\n height: 17,\r\n marginRight: 5,\r\n marginLeft: -2,\r\n },\r\n color: {\r\n width: 14,\r\n height: 14,\r\n flexShrink: 0,\r\n borderRadius: 3,\r\n marginRight: 8,\r\n marginTop: 2,\r\n },\r\n text: {\r\n flexGrow: 1,\r\n },\r\n close: {\r\n opacity: 0.6,\r\n width: 18,\r\n height: 18,\r\n },\r\n renderWrapper: {\r\n padding: '15px 0'\r\n },\r\n customRenderWrapper: {\r\n display: 'flex',\r\n margin: '0 -10px',\r\n width: '100%',\r\n '& > div': {\r\n padding: '0 10px',\r\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\r\n fontWeight: 400,\r\n },\r\n '& .icon-wrapper': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .other': {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n '& .primary': {\r\n fontSize: '1rem',\r\n lineHeight: 1.5,\r\n letterSpacing: '0.00938em',\r\n },\r\n '& .secondary': {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n fontSize: '0.875rem',\r\n lineHeight: 1.43,\r\n letterSpacing: '0.01071em',\r\n },\r\n '& .third': {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n fontSize: '0.675rem',\r\n lineHeight: 1.43,\r\n letterSpacing: '0.01071em',\r\n fontWeight: 600\r\n }\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface TaskAssignedBySelectorProps {\r\n isStaffOnly?: boolean;\r\n multiple?: boolean;\r\n isExternal?: boolean;\r\n label?: string;\r\n name: string;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n id?: string;\r\n required?: boolean;\r\n helperText?: string;\r\n error?: boolean;\r\n className?: string;\r\n disablePortal?: boolean;\r\n visible?: {\r\n role: boolean;\r\n };\r\n isAuthorized?: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n}\r\n\r\ninterface TaskAssignedBySelectorState {\r\n hasNextPage: boolean;\r\n isNextPageLoading: boolean;\r\n offset: number;\r\n filter: string;\r\n // tslint:disable-next-line: no-any\r\n items: any;\r\n}\r\n\r\nexport const TaskAssignedBySelector: React.FC = props => {\r\n const classes = useStyles();\r\n\r\n const loadBlockLimit = 20;\r\n \r\n const [state, setState] = useState({\r\n hasNextPage: true,\r\n isNextPageLoading: false,\r\n offset: 0,\r\n filter: '',\r\n items: []\r\n });\r\n\r\n const [delayedonInputChange] = useDebouncedCallback(\r\n // function\r\n (event: React.ChangeEvent<{}>, value: string, reason: 'input' | 'reset' | 'clear') => {\r\n\r\n let isClear = false;\r\n let offset = 0;\r\n let filter = '';\r\n\r\n if (reason === 'input') {\r\n filter = value;\r\n isClear = true;\r\n\r\n fetchData(filter, offset, isClear);\r\n }\r\n },\r\n // delay in ms\r\n 500\r\n );\r\n\r\n const fetchData = (filter: string, offset: number, isClear: boolean) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: true,\r\n };\r\n });\r\n\r\n const userQueryParams: UserQueryParams = {\r\n filter: filter,\r\n first: loadBlockLimit,\r\n offset: offset,\r\n isStaff: props.isStaffOnly ? props.isStaffOnly : undefined,\r\n isExternal: props.isExternal ? props.isExternal : false, // by default this should always return internal users\r\n isAuthorized: props.isAuthorized\r\n };\r\n\r\n retrieveUserListData(\r\n userQueryParams,\r\n false, // this.state.isRefresh, \r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveUserList(data, filter, offset, isClear),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n };\r\n });\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveUserList = (data: UserListData, filter: string, offset: number, isClear: boolean) => {\r\n\r\n const userData = data.administrator.users.user;\r\n const recordCount = data.administrator.users.recordCount;\r\n\r\n // tslint:disable-next-line: no-any\r\n let itemsList: any = [];\r\n\r\n let items = state.items;\r\n\r\n if (!isClear) {\r\n itemsList = [...state.items];\r\n } else {\r\n items = [];\r\n }\r\n\r\n if (items.length === 0) {\r\n\r\n itemsList = userData.map( (source: User) => ({\r\n label: source.isStaff ? source.staffName : source.friendlyName,\r\n value: source.userID, \r\n isStaff: source.isStaff,\r\n email: source.email,\r\n roleName: source.roleName\r\n }));\r\n \r\n // items = userData.map( (source: User) => ({value: source.userID, label: source.isStaff ? source.staffName : source.friendlyName }));\r\n } else {\r\n for (const user of userData) {\r\n // tslint:disable-next-line: no-any\r\n const isExists = items.filter((item: any) => item.value.toLowerCase().includes(user.userID.toLowerCase())).length;\r\n\r\n if (isExists === 0) {\r\n itemsList.push({\r\n label: user.isStaff ? user.staffName : user.friendlyName,\r\n value: user.userID,\r\n isStaff: user.isStaff,\r\n email: user.email,\r\n roleName: user.roleName\r\n });\r\n }\r\n }\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n filter: filter,\r\n // items: itemsList,\r\n isNextPageLoading: false,\r\n items: itemsList,\r\n offset: offset + loadBlockLimit,\r\n hasNextPage: userData.length !== 0 && (offset + loadBlockLimit) < recordCount,\r\n };\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const loadNextPage = (...args: any) => {\r\n if (state.hasNextPage && !state.isNextPageLoading) {\r\n fetchData(state.filter, state.offset, false);\r\n }\r\n };\r\n\r\n const onClose = (event: React.ChangeEvent<{}>) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n hasNextPage: true,\r\n filter: '',\r\n offset: 0,\r\n items: []\r\n };\r\n });\r\n };\r\n\r\n const onOpen = (event: React.ChangeEvent<{}>) => { \r\n fetchData(state.filter, 0, true);\r\n };\r\n\r\n const onSelection = (selection: IAutoCompleteItem, name: string) => {\r\n if (props.onSelection) {\r\n props.onSelection(selection, name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n option.label}\r\n getOptionSelected={(option, value) => value.value === option.value}\r\n onInputChange={delayedonInputChange}\r\n onBlur={props.onBlur}\r\n renderOption={(option, { selected }) => {\r\n return (\r\n
\r\n
\r\n {option.isStaff ? : }\r\n
\r\n
\r\n
{option.label}
\r\n
{option.email}
\r\n {!!props.visible && props.visible!.role && (\r\n
{option.roleName}
\r\n )}\r\n
\r\n
\r\n );\r\n }}\r\n renderInput={params => (\r\n \r\n )}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport function retrieveUserListData(\r\n query: UserQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: UserListData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: UserListQuery,\r\n variables: {\r\n filter: query.filter,\r\n first: query.first,\r\n offset: query.offset,\r\n isStaff: query.isStaff,\r\n isExternal: query.isExternal,\r\n isAuthorized: query.isAuthorized\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface UserQueryParams {\r\n offset?: number; \r\n first?: number;\r\n filter?: string;\r\n isStaff?: boolean;\r\n isExternal?: boolean;\r\n isAuthorized?: boolean;\r\n}\r\n\r\nexport interface UserListData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n administrator: Administrator;\r\n}\r\n\r\nexport interface Administrator {\r\n users: UserList; \r\n}\r\n\r\nexport interface UserList {\r\n recordCount: number;\r\n user: User[];\r\n}\r\n\r\nexport interface User {\r\n userID: string;\r\n email: string;\r\n friendlyName: string;\r\n roleName: boolean;\r\n isStaff: boolean;\r\n staffName: string;\r\n isExternal: boolean;\r\n}\r\n\r\nconst UserListQuery = gql`\r\n query userQuery($offset: Int, $first: Int, $filter: String, $isStaff: Boolean, $isExternal: Boolean, $isAuthorized: Boolean){\r\n administrator{\r\n users(offset:$offset, first:$first, filter:$filter, isStaff: $isStaff, isExternal: $isExternal, isAuthorized: $isAuthorized){\r\n recordCount,\r\n user{\r\n userID,\r\n email,\r\n friendlyName,\r\n roleName\r\n isStaff,\r\n staffName,\r\n isExternal\r\n }\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { showNotification } from '../../App';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { retrieveTaskCategoryData, TaskCategoryData, TaskCategory, TasksSummaryQueryParams } from '../TasksSummaryRepository';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '150px',\r\n },\r\n })\r\n);\r\n\r\ninterface TaskCategorySelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n label: string;\r\n name: string;\r\n disablePortal?: boolean;\r\n isIncludeFollowUpTasksOnly?: boolean | null;\r\n}\r\n\r\ninterface TaskCategorySelectorState {\r\n isLoading: boolean;\r\n taskStatus: IAutoCompleteItem[];\r\n}\r\n\r\nexport const TaskCategorySelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n taskStatus: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n \r\n var taskSummaryQueryParams: TasksSummaryQueryParams = {\r\n offset: null,\r\n first: null,\r\n filter: null,\r\n taskStatus: null,\r\n isIncludeCrmTasks: null,\r\n isMyTasksOnly: null,\r\n isFromDataSource: null,\r\n isPersonalTask: null,\r\n groupBy: null,\r\n groupByValue: null, // This is the GuidId of group by\r\n completedFromDate: null,\r\n completedToDate: null,\r\n updatedFromDate: null,\r\n updatedToDate: null,\r\n priorityList: null,\r\n statusList: null,\r\n allocatedToList: null,\r\n allocatedByList: null,\r\n created: null,\r\n due: null,\r\n teamList: null,\r\n taskTypes: null,\r\n clientList: null,\r\n matterList: null,\r\n isIncludeFollowUpTasksOnly: props.isIncludeFollowUpTasksOnly ?? null,\r\n isIncludeHasTasks: false\r\n }; \r\n\r\n retrieveTaskCategoryData(\r\n taskSummaryQueryParams,\r\n false, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveTaskCategory(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveTaskCategory = (data: TaskCategoryData) => {\r\n setState({\r\n ...state,\r\n taskStatus: data.task.categories.map( (source: TaskCategory) => ({value: source.guidId, label: source.description })),\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n { props.multiple ? \r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { retrieveTaskStatusData, TaskStatusQueryParams, TaskData, TaskStatus } from '../TasksSummaryRepository';\r\nimport { showNotification } from '../../App';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n })\r\n);\r\n\r\ninterface TaskStatusSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n label?: string;\r\n name?: string;\r\n disablePortal?: boolean;\r\n isIncludeFollowUpTasksOnly?: boolean;\r\n isIncludeCount: boolean;\r\n isRefresh?: boolean;\r\n}\r\n\r\ninterface TaskStatusSelectorState {\r\n isLoading: boolean;\r\n error?: boolean;\r\n taskStatus: IAutoCompleteItem[];\r\n}\r\n\r\nexport const TaskStatusSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n error: props.error,\r\n taskStatus: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n var taskStatusQueryParams: TaskStatusQueryParams = {\r\n taskStatusType: 'User',\r\n includeCount: null,\r\n\r\n offset: null,\r\n first: null,\r\n filter: null,\r\n taskStatus: null,\r\n isIncludeCrmTasks: null,\r\n isMyTasksOnly: null,\r\n groupBy: null,\r\n groupByValue: null, // This is the GuidId of group by\r\n completedFromDate: null,\r\n completedToDate: null,\r\n updatedFromDate: null,\r\n updatedToDate: null,\r\n priorityList: null,\r\n statusList: null,\r\n allocatedToList: null,\r\n allocatedByList: null,\r\n created: null,\r\n due: null,\r\n teamList: null,\r\n taskTypes: null,\r\n isPersonalTask: null,\r\n isFromDataSource: null,\r\n matterList: null,\r\n isIncludeFollowUpTasksOnly: props.isIncludeFollowUpTasksOnly ?? true,\r\n isIncludeCount: props.isIncludeCount\r\n };\r\n\r\n retrieveTaskStatusData(\r\n taskStatusQueryParams,\r\n true, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveTaskStatus(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveTaskStatus = (data: TaskData) => {\r\n\r\n let taskStatusList: IAutoCompleteItem[] = [];\r\n\r\n data.task.statuses.forEach((source: TaskStatus) => {\r\n if (source.description.toLowerCase() !== 'queued') {\r\n taskStatusList.push({value: source.guidId, label: source.description});\r\n }\r\n });\r\n \r\n setState({\r\n ...state,\r\n taskStatus: taskStatusList,\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name ? props.name : 'status');\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n { props.multiple ? \r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useRef } from 'react';\r\nimport { makeStyles, Theme, createStyles, Avatar, Tooltip, withStyles, Paper } from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { mainTheme } from '../../Theme';\r\nimport CheckOutlinedIcon from '@material-ui/icons/CheckOutlined';\r\nimport { Colors, hashString } from '../board/BoardCardDraggable';\r\nimport HistoryOutlinedIcon from '@material-ui/icons/HistoryOutlined';\r\nimport TextsmsOutlinedIcon from '@material-ui/icons/TextsmsOutlined';\r\nimport AssignmentIndOutlinedIcon from '@material-ui/icons/AssignmentIndOutlined';\r\nimport PeopleOutlineOutlinedIcon from '@material-ui/icons/PeopleOutlineOutlined';\r\nimport { ActivityText, AllocationHistory, TaskActivity, Detail } from '../TasksSummaryRepository';\r\nimport _ from 'lodash';\r\nimport PlayArrowOutlinedIcon from '@material-ui/icons/PlayArrowOutlined';\r\nimport Clear from '@material-ui/icons/Clear';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n padding: '20px 0',\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n overflowY: 'auto',\r\n marginBottom: '10px',\r\n // maxWidth: '500px',\r\n position: 'relative',\r\n },\r\n historyContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n margin: '0 -10px',\r\n width: '100%',\r\n padding: '10px 0',\r\n position: 'relative',\r\n '& > div': {\r\n padding: '0 10px',\r\n },\r\n '& .connector': {\r\n borderLeft: '1px solid #bdbdbd',\r\n position: 'absolute',\r\n top: 0,\r\n bottom: 0,\r\n left: '30px',\r\n }\r\n },\r\n historyIcon: {\r\n \r\n },\r\n taskDetails: {\r\n // flex: 1,\r\n // maxWidth: '150px',\r\n minWidth: '130px',\r\n minHeight: '100%',\r\n display: 'flex',\r\n flexFlow: 'column',\r\n justifyContent: 'center',\r\n '& .description': {\r\n fontWeight: 600,\r\n marginBottom: '3px',\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n },\r\n '& .date': {\r\n fontStyle: 'italic',\r\n color: '#a7a7a7'\r\n },\r\n '& .due-date': {\r\n color: '#fcba03'\r\n },\r\n '& .overdue': {\r\n color: 'red',\r\n },\r\n '& .status': {\r\n fontStyle: 'italic',\r\n color: '#a7a7a7'\r\n }\r\n },\r\n createClient: {\r\n // backgroundColor: mainTheme.UtilityColors.Positive\r\n backgroundColor: '#cfa2a1'\r\n },\r\n assignedEnquiry: {\r\n // backgroundColor: mainTheme.UtilityColors.Neutral\r\n backgroundColor: '#a8dda8'\r\n },\r\n followUp: {\r\n // backgroundColor: mainTheme.UtilityColors.Negative\r\n backgroundColor: '#bdb2d1'\r\n },\r\n enquiryCreated: {\r\n backgroundColor: 'orange'\r\n },\r\n contentDetails: {\r\n flex: 1,\r\n '& .title': {\r\n fontSize: 14,\r\n fontWeight: 300,\r\n color: '#000',\r\n marginBottom: 5,\r\n },\r\n '& .description': {\r\n marginTop: 10,\r\n fontSize: 14,\r\n color: '#000'\r\n },\r\n '& .author': {\r\n fontStyle: 'italic',\r\n fontSize: 12,\r\n '& span': {\r\n fontWeight: 600\r\n }\r\n }\r\n },\r\n detailsContainer: {\r\n padding: '10px !important',\r\n width: '100%',\r\n position: 'relative',\r\n // '& span': {\r\n // fontWeight: 600,\r\n // fontStyle: 'italic'\r\n // }\r\n },\r\n dialogRoot: {\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n padding: 0,\r\n }\r\n },\r\n header: {\r\n textTransform: 'capitalize',\r\n '& .MuiTypography-root': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n }\r\n },\r\n dialogPaper: {\r\n height: '100%',\r\n },\r\n emailContentButton: {\r\n textAlign: 'end',\r\n position: 'absolute',\r\n right: 10,\r\n top: 10,\r\n },\r\n emailDetails: {\r\n textAlign: 'start',\r\n paddingRight: 80,\r\n '& .emailDescription': {\r\n color: '#000',\r\n fontSize: 14\r\n }\r\n },\r\n newLine: {\r\n 'white-space': 'pre-line !important'\r\n }\r\n })\r\n);\r\n\r\nexport enum TaskHistoryActivityWidth {\r\n FULL_WIDTH = 0,\r\n NORMAL\r\n}\r\n\r\ninterface TaskHistoryActivityProps {\r\n className?: string;\r\n taskGuid?: string;\r\n taskDetail: Detail;\r\n width?: TaskHistoryActivityWidth;\r\n autoScroll?: boolean;\r\n}\r\n\r\ninterface TaskActivityHistory {\r\n // Activity Text\r\n activityDate?: Date | null;\r\n activityTextCreatedByGuid?: string | null;\r\n activityTextCreatedByName?: string | null;\r\n text?: string | null; \r\n message?: string | null;\r\n messagedTo?: string | null;\r\n\r\n // Allocation History\r\n createdDate: Date;\r\n allocatedByUserID?: string | null;\r\n allocatedByName?: string | null;\r\n allocatedUserID?: string | null;\r\n allocatedUserName?: string | null;\r\n allocatedTeamID?: string | null;\r\n allocatedTeamName?: string | null;\r\n\r\n // Task Activity\r\n activitytypeId?: string | null;\r\n activityTypeDescription?: string | null;\r\n activityByUserId?: string | null;\r\n activityByUser?: string | null;\r\n}\r\n\r\n// tslint:disable-next-line: no-anyW\r\nexport const TaskHistoryActivity: React.FC = props => {\r\n \r\n const classes = useStyles();\r\n\r\n // tslint:disable-next-line: no-any\r\n const messagesEndRef = useRef(null);\r\n\r\n const scrollToBottom = () => {\r\n if (messagesEndRef && messagesEndRef.current) {\r\n messagesEndRef.current.scrollIntoView({ \r\n behavior: 'smooth',\r\n });\r\n }\r\n };\r\n \r\n const stringToColour = (str: string | null) => {\r\n return Colors[(str === '' || str === null) ? Colors[Colors.length] : (hashString(str) % Colors.length) - 1];\r\n };\r\n\r\n const showDateEndOfFromNow = (value: Date | string) => {\r\n return moment(value).fromNow();\r\n };\r\n\r\n const formatDate = (date: Date | string, format: string) => {\r\n return moment(date).format(format);\r\n };\r\n\r\n const getWidth = () => {\r\n if (props.width === TaskHistoryActivityWidth.NORMAL) {\r\n return 'initial';\r\n } else if (props.width === TaskHistoryActivityWidth.FULL_WIDTH) {\r\n return 'auto';\r\n } else {\r\n return 'initial';\r\n }\r\n };\r\n\r\n const LightTooltip = withStyles((theme: Theme) => ({\r\n arrow: {\r\n color: theme.palette.common.white,\r\n '&::before': {\r\n // backgroundColor: 'blue',\r\n boxShadow: theme.shadows[1],\r\n }\r\n },\r\n tooltip: {\r\n backgroundColor: theme.palette.common.white,\r\n color: 'rgba(0, 0, 0, 0.87)',\r\n boxShadow: theme.shadows[1],\r\n fontSize: 11,\r\n },\r\n }))(Tooltip);\r\n\r\n const convertMentionInCommentToHtml = (comment: string, label?: string) => {\r\n let regex = /@\\[.+?\\]\\(.+?\\)/gm;\r\n let displayRegex = /@\\[.+?\\]/g;\r\n let idRegex = /\\(.+?\\)/g;\r\n let matches = comment.match(regex);\r\n // tslint:disable-next-line: no-any\r\n let arr: any = [];\r\n \r\n // tslint:disable-next-line: no-unused-expression\r\n matches &&\r\n // tslint:disable-next-line: no-any\r\n matches.forEach((m: any) => {\r\n let id = m.match(idRegex)[0].replace('(', '').replace(')', '');\r\n let display = m.match(displayRegex)[0].replace('@[', '').replace(']', '');\r\n\r\n arr.push({ id: id, display: display });\r\n });\r\n let newComment = comment.split(regex);\r\n let output = label ? label + ': ' : '';\r\n for (let i = 0; i < newComment.length; i++) {\r\n const c = newComment[i];\r\n if (i === newComment.length - 1) {\r\n output += c;\r\n } else {\r\n output += c + `${arr[i].display.split('|')[0]}`;\r\n }\r\n }\r\n\r\n return output;\r\n }; \r\n \r\n const getHistoryAvatar = (taskActivityHistory?: TaskActivityHistory, taskDetail?: Detail) => {\r\n if (taskActivityHistory && taskActivityHistory.text && taskActivityHistory.activityTextCreatedByName) {\r\n return (\r\n \r\n \r\n \r\n ); \r\n } else if (taskActivityHistory && taskActivityHistory.activityTextCreatedByName) {\r\n return (\r\n \r\n \r\n \r\n );\r\n } else if (taskActivityHistory && taskActivityHistory.allocatedUserName) {\r\n return (\r\n \r\n \r\n \r\n ); \r\n } else if (taskActivityHistory && taskActivityHistory.allocatedTeamName) {\r\n return (\r\n \r\n \r\n \r\n ); \r\n } else if (taskDetail && taskActivityHistory?.activitytypeId === '2') {\r\n return (\r\n \r\n \r\n \r\n );\r\n } else if (taskDetail && taskActivityHistory?.activitytypeId === '0') {\r\n return (\r\n \r\n \r\n \r\n );\r\n } else if (taskDetail && taskActivityHistory?.activitytypeId === '1') {\r\n return (\r\n \r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n };\r\n\r\n const getHistoryDate = (taskActivityHistory?: TaskActivityHistory, taskDetail?: Detail) => {\r\n if (taskActivityHistory && taskActivityHistory.createdDate) {\r\n return (\r\n \r\n
\r\n {showDateEndOfFromNow(taskActivityHistory.createdDate)}\r\n
\r\n
\r\n );\r\n } else {\r\n return '';\r\n }\r\n };\r\n\r\n const getDescription = (taskActivityHistory?: TaskActivityHistory, taskDetail?: Detail) => {\r\n if (taskActivityHistory && taskActivityHistory.message) {\r\n return 'Message';\r\n } else if (taskActivityHistory && taskActivityHistory.text) {\r\n return 'Notes';\r\n } else if (taskActivityHistory && taskActivityHistory.allocatedByName && (taskActivityHistory.allocatedUserName || taskActivityHistory.allocatedTeamID)) {\r\n return 'Assigned to';\r\n } else if (taskActivityHistory && taskActivityHistory.activitytypeId === '2') {\r\n return 'Completed';\r\n } else if (taskActivityHistory && taskActivityHistory.activitytypeId === '0') {\r\n return 'Started';\r\n } else if (taskActivityHistory && taskActivityHistory.activitytypeId === '1') {\r\n return 'Stopped';\r\n } else {\r\n return '';\r\n }\r\n };\r\n\r\n const activityContent = (taskActivityHistory?: TaskActivityHistory, taskDetail?: Detail) => { \r\n return (\r\n <> \r\n
\r\n
\r\n
\r\n {getHistoryAvatar(taskActivityHistory, taskDetail)}\r\n
\r\n
\r\n
\r\n {getDescription(taskActivityHistory, taskDetail)}\r\n
\r\n {getHistoryDate(taskActivityHistory, taskDetail)}\r\n
\r\n
\r\n {getDetailContent(taskActivityHistory, taskDetail)}\r\n
\r\n
\r\n \r\n );\r\n };\r\n\r\n const getDetailContent = (taskActivityHistory?: TaskActivityHistory, taskDetail?: Detail) => {\r\n\r\n if (taskActivityHistory && taskActivityHistory.message) {\r\n return (\r\n \r\n
\r\n {taskActivityHistory.messagedTo}\r\n
\r\n
\r\n {taskActivityHistory.message}\r\n
\r\n
\r\n );\r\n } else if (taskActivityHistory && taskActivityHistory.text) {\r\n return (\r\n \r\n {/*
\r\n Activity log\r\n
*/}\r\n
\r\n {taskActivityHistory.messagedTo}\r\n
\r\n
\r\n {taskActivityHistory.text}\r\n
\r\n
\r\n );\r\n } else if (taskActivityHistory && taskActivityHistory.allocatedByName && taskActivityHistory.allocatedUserName) {\r\n return (\r\n \r\n
\r\n Assigned to {taskActivityHistory.allocatedUserName} by {taskActivityHistory.allocatedByName}\r\n
\r\n
\r\n );\r\n } else if (taskActivityHistory && taskActivityHistory.allocatedByName && taskActivityHistory.allocatedTeamName) {\r\n return (\r\n \r\n
\r\n Assigned to {taskActivityHistory.allocatedTeamName} by {taskActivityHistory.allocatedByName}\r\n
\r\n
\r\n );\r\n } else if (taskDetail && taskActivityHistory?.activitytypeId === '2') {\r\n return (\r\n <>\r\n \r\n
\r\n {taskActivityHistory.activityTypeDescription} by {taskActivityHistory.activityByUser}\r\n
\r\n
\r\n Completion Notes:\r\n
\r\n
\r\n {taskDetail.completionNotes ?? 'None'}\r\n
\r\n
\r\n \r\n );\r\n } else if (taskDetail && (taskActivityHistory?.activitytypeId === '0' || taskActivityHistory?.activitytypeId === '1')) {\r\n return (\r\n \r\n
\r\n {taskActivityHistory.activityTypeDescription} by {taskActivityHistory.activityByUser}\r\n
\r\n
\r\n );\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n\r\n const taskCreated = () => {\r\n return (\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n Created\r\n
\r\n {props.taskDetail && props.taskDetail.createdDate && (\r\n \r\n
\r\n {showDateEndOfFromNow(props.taskDetail.createdDate)}\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n \r\n {props.taskDetail.notes && (\r\n

\r\n )}\r\n

Created by: {props.taskDetail.createdByName}
\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const activityTexts = JSON.parse(JSON.stringify(props.taskDetail.activityTexts));\r\n const allocationHistoryList = JSON.parse(JSON.stringify(props.taskDetail.allocationHistoryList));\r\n const taskActivityList = JSON.parse(JSON.stringify(props.taskDetail.taskActivity));\r\n\r\n // Combine into 1 List\r\n let taskHistoryData: TaskActivityHistory[] = [];\r\n\r\n activityTexts.forEach((activityText: ActivityText) => {\r\n taskHistoryData.push({\r\n activityDate: activityText.activityDate,\r\n activityTextCreatedByGuid: activityText.createdByGuid,\r\n activityTextCreatedByName: activityText.createdByName,\r\n text: activityText.text,\r\n createdDate: activityText.activityDate,\r\n message: activityText.message,\r\n messagedTo: activityText.messagedTo\r\n });\r\n });\r\n\r\n allocationHistoryList.forEach((allocationHistory: AllocationHistory) => {\r\n if (allocationHistory.allocatedUserName !== null || allocationHistory.allocatedTeamName !== null) {\r\n taskHistoryData.push({\r\n createdDate: allocationHistory.createdDate,\r\n allocatedByUserID: allocationHistory.allocatedByUserID,\r\n allocatedByName: allocationHistory.allocatedByName,\r\n allocatedUserID: allocationHistory.allocatedUserID,\r\n allocatedUserName: allocationHistory.allocatedUserName,\r\n allocatedTeamID: allocationHistory.allocatedTeamID,\r\n allocatedTeamName: allocationHistory.allocatedTeamName,\r\n activityDate: allocationHistory.createdDate \r\n });\r\n }\r\n });\r\n\r\n taskActivityList.forEach((taskActivity: TaskActivity) => {\r\n if (taskActivity.activityDate && taskActivity.activityByUser && taskActivity.activityTypeID && taskActivity.activityTypeDescription ) {\r\n taskHistoryData.push({\r\n createdDate: taskActivity.activityDate,\r\n activitytypeId: taskActivity.activityTypeID,\r\n activityTypeDescription: taskActivity.activityTypeDescription,\r\n activityByUserId: taskActivity.activityByUserId,\r\n activityByUser: taskActivity.activityByUser,\r\n });\r\n }\r\n\r\n });\r\n\r\n const taskHistoryDataList = _.sortBy(taskHistoryData, (history: TaskActivityHistory) => {\r\n return new Date(history.createdDate);\r\n });\r\n\r\n // const taskHistoryDataList = taskHistoryData.sort((a: TaskActivityHistory, b: TaskActivityHistory) => {\r\n // var dateA = new Date(a.createdDate);\r\n // var dateB = new Date(b.createdDate);\r\n // return dateA - dateB;\r\n // });\r\n\r\n if (props.autoScroll !== undefined && props.autoScroll === true) {\r\n setTimeout(scrollToBottom, 1000);\r\n }\r\n\r\n return (\r\n
\r\n {taskCreated()}\r\n \r\n {\r\n taskHistoryDataList.map((taskActivityHistory: TaskActivityHistory) => activityContent(taskActivityHistory, props.taskDetail))\r\n }\r\n {/* {activityTexts.map((activityText: ActivityText) => activityContent(activityText, props.taskDetail))} */}\r\n\r\n {/* Display Completed details */}\r\n {activityContent(undefined, props.taskDetail)}\r\n
\r\n
\r\n );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect, useContext } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n FormControl,\r\n RadioGroup,\r\n FormControlLabel,\r\n Radio,\r\n RadioProps,\r\n TextField,\r\n Grid,\r\n Button,\r\n // FormLabel,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n FormLabel,\r\n Chip,\r\n Typography,\r\n Tabs,\r\n Tab,\r\n Divider,\r\n Checkbox,\r\n Badge,\r\n} from '@material-ui/core';\r\nimport clsx from 'clsx';\r\nimport { Form, Field, FormSpy, FieldInputProps } from 'react-final-form';\r\nimport { FormApi, AnyObject } from 'final-form';\r\nimport { Editor, SyntheticEvent } from 'react-draft-wysiwyg';\r\nimport 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css';\r\nimport { ContentState, convertToRaw, EditorState } from 'draft-js';\r\nimport { PrioritySelector } from '../selectors/PrioritySelector';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport {\r\n AppUser,\r\n AppUserData,\r\n CreateClientTask,\r\n CreateGeneralTask,\r\n CreateMatterTask,\r\n Detail,\r\n fetchAppUserData,\r\n retrieveTaskDetailsData,\r\n TaskAndPhoneMessageConfig,\r\n TaskDetailsData,\r\n TaskDetailsParam,\r\n // TaskSubscription,\r\n UpdateClientTask,\r\n UpdateGeneralTask,\r\n UpdateMatterTask,\r\n} from '../TasksSummaryRepository';\r\nimport { TaskCategorySelector } from '../selectors/TaskCategorySelector';\r\nimport { TaskAssignedBySelector } from '../selectors/TaskAssignedBySelector';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\nimport { client } from '../..';\r\n// import moment from 'moment';\r\nimport draftToHtml from 'draftjs-to-html';\r\nimport { ClientAutoCompleteSelector } from '../../components/ClientAutoCompleteSelector';\r\nimport htmlToDraft from 'html-to-draftjs';\r\nimport { MatterAutoCompleteSelector } from '../../components/MatterAutoCompleteSelector';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { mainTheme } from '../../Theme';\r\nimport { KeyboardDateTimePicker } from '@material-ui/pickers/DateTimePicker/DateTimePicker';\r\nimport { TimeNumberFormatCustom } from '../../components/TimeNumberFormat';\r\nimport moment from 'moment';\r\nimport { TaskTypeGroupAutoCompleteItem, TaskTypeGroupSelector } from '../../lookupConfiguration/selectors/TaskTypeGroupSelector';\r\nimport { DropzoneArea } from 'material-ui-dropzone';\r\nimport { DocumentFile } from '../../types/DocumentFile';\r\nimport { TaskAssignedByUserTeamSelector } from '../selectors/TaskAssignedByUserTeamSelector';\r\nimport { AllocatedToEntityType } from '../AllocatedToEntityType';\r\nimport { TaskHistoryActivity, TaskHistoryActivityWidth } from '../common/TaskHistoryActivity';\r\nimport { TasksSummaryContext } from '../TasksSummaryContext';\r\nimport { MatterData, MatterDetails } from '../../matterSummary/models/Matter';\r\nimport { fetchBasicMatterDetailsData } from '../../matterSummary/MatterSummaryRepository';\r\nimport { ReminderSelector } from '../../components/ReminderSelector';\r\nimport { Message } from '../../ClientAndContactDetails/clientNotes/ClientNotesDetails';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n dialogRoot: {\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n padding: 0,\r\n },\r\n },\r\n divider: {\r\n // marginTop: 10,\r\n width: '100%',\r\n height: '1px',\r\n },\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n formControlWrapper: {\r\n // height: '100%',\r\n display: 'flex',\r\n alignItems: 'flex-end',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n radioRoot: {\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n icon: {\r\n borderRadius: '50%',\r\n width: 16,\r\n height: 16,\r\n boxShadow: 'inset 0 0 0 1px rgba(16,22,26,.2), inset 0 -1px 0 rgba(16,22,26,.1)',\r\n backgroundColor: '#f5f8fa',\r\n backgroundImage: 'linear-gradient(180deg,hsla(0,0%,100%,.8),hsla(0,0%,100%,0))',\r\n '$root.Mui-focusVisible &': {\r\n outline: '2px auto rgba(19,124,189,.6)',\r\n outlineOffset: 2,\r\n },\r\n 'input:hover ~ &': {\r\n backgroundColor: '#ebf1f5',\r\n },\r\n 'input:disabled ~ &': {\r\n boxShadow: 'none',\r\n background: 'rgba(206,217,224,.5)',\r\n },\r\n },\r\n checkedIcon: {\r\n backgroundColor: '#137cbd',\r\n backgroundImage: 'linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0))',\r\n '&:before': {\r\n display: 'block',\r\n width: 16,\r\n height: 16,\r\n backgroundImage: 'radial-gradient(#fff,#fff 28%,transparent 32%)',\r\n content: '\"\"',\r\n },\r\n 'input:hover ~ &': {\r\n backgroundColor: '#106ba3',\r\n },\r\n },\r\n radioGroup: {\r\n flexFlow: 'row',\r\n },\r\n clientContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n },\r\n },\r\n chips: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n chip: {\r\n marginLeft: '8px',\r\n },\r\n clientRowRadio: {},\r\n clientSelector: {\r\n flex: 1,\r\n },\r\n content: {\r\n flex: 1,\r\n },\r\n matterForm: {},\r\n clientForm: {},\r\n formControl: {\r\n '& .MuiFormGroup-root': {\r\n padding: '6px 7px',\r\n },\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n // paddingBottom: '20px'\r\n },\r\n button: {\r\n margin: theme.spacing(1),\r\n },\r\n heading: {\r\n textTransform: 'capitalize',\r\n },\r\n headerDetails: {\r\n paddingTop: '20px',\r\n fontSize: '16px',\r\n },\r\n hidden: {\r\n display: 'none',\r\n },\r\n editorClassName: {\r\n padding: '0 10px',\r\n minHeight: '100px',\r\n },\r\n wrapperClassName: {\r\n border: '1px solid #949494',\r\n display: 'flex',\r\n flexFlow: 'column-reverse',\r\n },\r\n toolbarClassName: {\r\n border: 0,\r\n // borderBottom: '1px solid #F1F1F1',\r\n margin: 0,\r\n padding: 0,\r\n },\r\n formLabel: {\r\n paddingBottom: '10px',\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n padding: '20px 0',\r\n },\r\n status: {\r\n flex: 1,\r\n display: 'flex',\r\n alignItems: 'flex-end',\r\n height: '100%',\r\n justifyContent: 'flex-start',\r\n color: 'grey',\r\n '& > span': {\r\n color: mainTheme.BrandColors.TemplatePrimary,\r\n marginLeft: '10px',\r\n },\r\n },\r\n tabs: {\r\n marginBottom: 10,\r\n padding: '10px 0',\r\n },\r\n commentField: {\r\n width: '100%',\r\n },\r\n customFieldGrid: {\r\n paddingTop: '0px !important',\r\n },\r\n dropZone: {\r\n minHeight: 'fit-content !important',\r\n '& .MuiDropzoneArea-root': {\r\n minHeight: 'fit-content !important',\r\n },\r\n },\r\n dropZoneFont: {\r\n '& .MuiDropzoneArea-text': {\r\n fontSize: '1em',\r\n },\r\n },\r\n marginBottom: {\r\n marginBottom: '16px',\r\n },\r\n dialogPaper: {\r\n // height: '100%',\r\n // maxHeight: '920px'\r\n maxWidth: '700px',\r\n },\r\n dialogPaperWithActivity: {\r\n maxWidth: '1400px',\r\n },\r\n activityTab: {\r\n flex: 1,\r\n flexFlow: 'column',\r\n display: 'flex',\r\n padding: '0 10px'\r\n },\r\n taskHistorykContentWrapper: {\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column',\r\n },\r\n historyActivityContainer: {\r\n flex: 1,\r\n position: 'relative',\r\n flexFlow: 'column',\r\n minHeight: 267,\r\n },\r\n historyActivityWrapper: {\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n left: 0,\r\n bottom: 0,\r\n },\r\n form: {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'row wrap',\r\n },\r\n dialogContent: {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n },\r\n dialongInsideContentWrapper: {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n },\r\n tabWrapper: {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n },\r\n taskDetailsField: {\r\n fontSize: '1.25rem',\r\n fontWeight: 500,\r\n },\r\n transformNone: {\r\n textTransform: 'none',\r\n },\r\n clientMaterLabel: {\r\n fontWeight: 300\r\n },\r\n secondaryDescription: {\r\n flex: 1,\r\n maxWidth: '100%',\r\n overflow: 'hidden',\r\n },\r\n subTitle: {\r\n fontSize: 14,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n maxWidth: '97%',\r\n color: '#000000DE',\r\n },\r\n description: {\r\n fontSize: 12,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n maxWidth: '97%',\r\n color: '#000000DE',\r\n },\r\n taskTypeWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '5px'\r\n },\r\n taskTypeSelector: {\r\n flex: 1\r\n },\r\n taskTypeNotesWrapper: {\r\n maxHeight: ' 543.083px', \r\n overflowY: 'auto'\r\n },\r\n mainContent: {\r\n width: '700px',\r\n minHeight: ' 919.594px',\r\n display: 'flex',\r\n flexFlow: 'column',\r\n },\r\n activityContent: {\r\n width: '700px',\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column',\r\n },\r\n verticialDivider: {\r\n // margin: '0 10px',\r\n },\r\n activityContentHeader: {\r\n height: '81.7812px', \r\n display: 'flex', \r\n padding: '0 10px',\r\n alignItems: 'center', \r\n justifyContent: 'center',\r\n },\r\n acitivityContentTitle: {\r\n fontSize: '17.5px', \r\n },\r\n titleWrapper: {\r\n display: 'flex',\r\n gap: '10px',\r\n justifyContent: 'space-between',\r\n }\r\n }),\r\n);\r\n\r\nexport enum TaskOptionEnum {\r\n none = 0,\r\n matter,\r\n client,\r\n}\r\n\r\nexport interface TaskInput {\r\n guid: string | null;\r\n description: string | null;\r\n notes: string | null;\r\n // tslint:disable-next-line: no-any\r\n files: any;\r\n assignedTo: string | null;\r\n allocatedToEntityType: number | null;\r\n assignedBy: string | null;\r\n priority: string | null;\r\n category: string | null;\r\n dueDate: Date | null;\r\n estimatedEffort: string | null;\r\n startDate: Date | null;\r\n completionDate: Date | null;\r\n completionNotes: string | null;\r\n duration: string | null;\r\n owner: string | null;\r\n userDefinedTaskType: string | null;\r\n activityText: string | null;\r\n reminderOffset: string | null;\r\n isConfidential: boolean | null;\r\n}\r\n\r\n// export interface UploadFile {\r\n// name: string | null;\r\n// tempFileName?: string | null;\r\n// guidID: string | null;\r\n// status: string | null;\r\n// // tslint:disable-next-line: no-any\r\n// file: any;\r\n// }\r\n\r\ninterface TasksSummaryProps {\r\n isOpen: boolean;\r\n onClose?: () => void;\r\n isCreate: boolean;\r\n guid?: string | null;\r\n matterFileNumber?: string;\r\n matterGuid?: string;\r\n matterTitle?: string;\r\n status?: string | null;\r\n defaultPriority?: IAutoCompleteItem | null;\r\n reminderDefaultConfig?: TaskAndPhoneMessageConfig;\r\n isDuplicate?: boolean;\r\n defaultMatter?: IAutoCompleteItem;\r\n partyMessage?: Message;\r\n isFromDataSource?: boolean;\r\n partyClientGuid?: string;\r\n}\r\n\r\ninterface TaskSummaryForm {\r\n handleCreateAndClose: boolean | undefined;\r\n handleCreateAndNew: boolean | undefined;\r\n handleUpdate: boolean | undefined;\r\n handleUpdateAndClose: boolean | undefined;\r\n\r\n description: string | null;\r\n startDate: Date | null;\r\n completionDate: Date | null;\r\n completionNotes: string | null;\r\n duration: string | null;\r\n dueDate: Date | null;\r\n estimatedEffort: string | null;\r\n matter: IAutoCompleteItem | null;\r\n client: IAutoCompleteItem | null;\r\n category: IAutoCompleteItem | null;\r\n assignedBy: IAutoCompleteItem | null;\r\n // taskOwner: string | null;\r\n notes: EditorState;\r\n files: DocumentFile[];\r\n assignTo: IAutoCompleteItem | null;\r\n priority?: IAutoCompleteItem | null;\r\n owner: IAutoCompleteItem | null;\r\n allocatedToEntityType: number | null;\r\n activityText: string | null;\r\n taskType: TaskTypeGroupAutoCompleteItem | null;\r\n matterDescription: string | null;\r\n reminderOffset: IAutoCompleteItem | null;\r\n isConfidential: boolean | null;\r\n}\r\n\r\ninterface TaskSummaryFormState {\r\n option: TaskOptionEnum;\r\n hideToolbar: boolean;\r\n isOpen: boolean;\r\n showDiscard?: boolean;\r\n isCreate: boolean;\r\n isChanged: boolean;\r\n isUserLoading: boolean;\r\n isLoading: boolean;\r\n onSubmitLoading: boolean;\r\n isMatterLoading: boolean;\r\n\r\n // taskTypeDescription: string | null;\r\n // taskTypeGuid: string | null;\r\n taskDetails?: Detail;\r\n isSystemTask: boolean;\r\n tab: TaskFormTab;\r\n\r\n appUser?: AppUser;\r\n}\r\n\r\nexport enum TaskFormTab {\r\n details = 0,\r\n documents = 1,\r\n activity = 2,\r\n taskTypeNotes = 3\r\n}\r\n\r\nfunction StyledRadio(props: RadioProps) {\r\n const classes = useStyles();\r\n\r\n return (\r\n }\r\n icon={}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport const TasksSummaryFormDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const {\r\n onClickFormOpen,\r\n onClickFormClosed,\r\n isContextRefreshData,\r\n isContextRefreshTaskForm,\r\n setIsContextRefreshTaskForm,\r\n setRefreshDataOnFormClose,\r\n }: // tslint:disable-next-line: no-any\r\n any = useContext(TasksSummaryContext);\r\n\r\n const [filesKey, setKey] = useState('');\r\n\r\n const [taskSummaryForm, setTaskSummaryForm] = useState({\r\n handleCreateAndClose: false,\r\n handleCreateAndNew: false,\r\n handleUpdate: false,\r\n handleUpdateAndClose: false,\r\n\r\n description: null,\r\n startDate: null,\r\n completionDate: null,\r\n completionNotes: null,\r\n dueDate: null,\r\n duration: null,\r\n estimatedEffort: null,\r\n matter: props.matterGuid && props.matterTitle ? { label: props.matterTitle, value: props.matterGuid } : props.defaultMatter ? props.defaultMatter : null,\r\n client: null,\r\n category: null,\r\n assignedBy: null,\r\n assignTo: null,\r\n priority: props.defaultPriority,\r\n // taskOwner: null,\r\n notes: EditorState.createEmpty(),\r\n files: [],\r\n owner: null,\r\n allocatedToEntityType: null,\r\n activityText: null,\r\n taskType: null,\r\n matterDescription: null,\r\n reminderOffset: props.reminderDefaultConfig\r\n ? { label: props.reminderDefaultConfig.reminder, value: props.reminderDefaultConfig.reminder }\r\n : { label: 'None', value: 'None' },\r\n isConfidential: false,\r\n });\r\n\r\n const [state, setState] = useState({\r\n option: props.defaultMatter ? TaskOptionEnum.matter : TaskOptionEnum.none,\r\n ...(props.partyMessage && props.partyClientGuid && {\r\n option: TaskOptionEnum.client\r\n }),\r\n hideToolbar: true,\r\n isOpen: props.isOpen,\r\n showDiscard: false,\r\n isCreate: props.isCreate,\r\n isChanged: false,\r\n isUserLoading: false,\r\n isLoading: false,\r\n onSubmitLoading: false,\r\n isMatterLoading: false,\r\n // taskTypeDescription: null,\r\n // taskTypeGuid: null,\r\n tab: TaskFormTab.details,\r\n isSystemTask: true,\r\n taskDetails: undefined,\r\n appUser: undefined,\r\n });\r\n\r\n const [matterData, setMatterData] = useState();\r\n\r\n useEffect(() => {\r\n onClickFormOpen();\r\n\r\n // const taskSubscriptionObj = subscribeToTask();\r\n\r\n // // Cleanup\r\n // return () => {\r\n // taskSubscriptionObj.unsubscribe();\r\n // };\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (props.matterGuid) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n option: TaskOptionEnum.matter,\r\n };\r\n });\r\n }\r\n // tslint:disable-next-line: align\r\n }, [props.matterGuid]);\r\n\r\n useEffect(() => {\r\n // tslint:disable-next-line: no-console\r\n console.log('Task Form - isContextRefreshTaskForm', isContextRefreshTaskForm);\r\n if (isContextRefreshTaskForm === true && props.guid) {\r\n setRefreshDataOnFormClose(true);\r\n // Refresh the Task Details on subscription.\r\n fetchTaskDetails(props.guid, props.isDuplicate);\r\n }\r\n // tslint:disable-next-line: align\r\n }, [isContextRefreshTaskForm]);\r\n\r\n useEffect(() => {\r\n if (!state.isCreate && props.guid) {\r\n fetchTaskDetails(props.guid, props.isDuplicate);\r\n } else {\r\n fetchUser();\r\n }\r\n // tslint:disable-next-line: align\r\n }, [props.guid, props.isOpen]);\r\n\r\n const getTaskType = (taskDetails: Detail) => {\r\n if (!taskDetails.taskTypeInternalDescription && !taskDetails.taskTypeDescription) {\r\n return null;\r\n }\r\n if (taskDetails.isSystemTask === false) {\r\n return {\r\n label: taskDetails.taskTypeDescription,\r\n value: taskDetails.taskTypeInternalDescription,\r\n notes: taskDetails.taskTypeNotes ?? null,\r\n } as TaskTypeGroupAutoCompleteItem;\r\n } else if (props.partyMessage) {\r\n return {\r\n label: taskDetails.taskTypeDescription,\r\n value: taskDetails.taskTypeInternalDescription,\r\n notes: taskDetails.taskTypeNotes ?? null,\r\n } as TaskTypeGroupAutoCompleteItem;\r\n } else {\r\n return null;\r\n }\r\n };\r\n\r\n const fetchTaskDetails = (guid: string, isDuplicate?: boolean) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: true,\r\n };\r\n });\r\n\r\n const taskDetailsParams: TaskDetailsParam = {\r\n guid: guid,\r\n };\r\n\r\n retrieveTaskDetailsData(\r\n taskDetailsParams,\r\n true,\r\n // tslint:disable-next-line: no-console\r\n (data: TaskDetailsData) => onTaskDetailsRetrieved(data, isDuplicate),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n setIsContextRefreshTaskForm(false);\r\n },\r\n );\r\n };\r\n\r\n const onTaskDetailsRetrieved = (data: TaskDetailsData, isDuplicate?: boolean) => {\r\n // tslint:disable-next-line: no-console\r\n\r\n if (data && data.task && data.task.detail) {\r\n const taskDetails = data.task.detail;\r\n const appUser = data.appUser;\r\n\r\n let tempOption = TaskOptionEnum.none;\r\n\r\n switch (taskDetails.__typename) {\r\n case 'ClientTask': {\r\n tempOption = TaskOptionEnum.client;\r\n break;\r\n }\r\n case 'MatterTask': {\r\n tempOption = TaskOptionEnum.matter;\r\n if (!props.isCreate && taskDetails.matterId) {\r\n fetchMatterDetails(taskDetails.matterId);\r\n }\r\n break;\r\n }\r\n default: {\r\n tempOption = TaskOptionEnum.none;\r\n break;\r\n }\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n option: tempOption,\r\n taskType: taskDetails.taskType,\r\n taskTypeGuid: taskDetails.isSystemTask === false ? taskDetails.taskTypeInternalDescription : null,\r\n taskTypeDescription: taskDetails.isSystemTask === false ? taskDetails.taskTypeDescription : null,\r\n taskDetails: taskDetails,\r\n isSystemTask: taskDetails.isSystemTask,\r\n appUser: appUser,\r\n };\r\n });\r\n\r\n let editorState = EditorState.createEmpty();\r\n\r\n if (taskDetails.notes !== null && !props.isDuplicate) {\r\n const contentBlock = htmlToDraft(taskDetails.notes);\r\n if (contentBlock) {\r\n const contentState = ContentState.createFromBlockArray(contentBlock.contentBlocks);\r\n editorState = EditorState.createWithContent(contentState);\r\n }\r\n }\r\n\r\n setKey('' + taskDetails.guid);\r\n\r\n let reminderOffset: IAutoCompleteItem | null = taskSummaryForm.reminderOffset;\r\n\r\n if (taskDetails.reminderOffset) {\r\n reminderOffset = { label: taskDetails.reminderOffset, value: taskDetails.reminderOffset };\r\n }\r\n\r\n // else if (props.enquiryDefaultConfig && props.enquiryDefaultConfig.reminder) {\r\n // reminderOffset = { label: props.enquiryDefaultConfig.reminder, value: props.enquiryDefaultConfig.reminder };\r\n // }\r\n\r\n setTaskSummaryForm((prevTaskSummaryForm) => {\r\n return {\r\n ...prevTaskSummaryForm,\r\n description: taskDetails.description,\r\n startDate: taskDetails.startDate ? moment(taskDetails.startDate).toDate() : null,\r\n completionDate: taskDetails.completionDate ? moment(taskDetails.completionDate).toDate() : null,\r\n completionNotes: taskDetails.completionNotes,\r\n dueDate: taskDetails.dueDate ? moment(taskDetails.dueDate).toDate() : null,\r\n duration: taskDetails.duration ? taskDetails.duration : '00:00', // moment(taskDetails.duration, 'HH:mm').toString()\r\n // tslint:disable-next-line: max-line-length\r\n estimatedEffort: taskDetails.estimatedEffort ? taskDetails.estimatedEffort : '00:00', // moment(taskDetails.estimatedEffort, 'HH:mm').toString()\r\n // tslint:disable-next-line: max-line-length\r\n matter: taskDetails.matterGuid && taskDetails.matterDescription ? { label: taskDetails.matterDescription, value: taskDetails.matterGuid } : null,\r\n // tslint:disable-next-line: max-line-length\r\n client: taskDetails.clientGuid && taskDetails.clientDescription ? { label: taskDetails.clientDescription, value: taskDetails.clientGuid } : null,\r\n // tslint:disable-next-line: max-line-length\r\n category: taskDetails.category && taskDetails.categoryDescription ? { label: taskDetails.categoryDescription, value: taskDetails.category } : null,\r\n // tslint:disable-next-line: max-line-length\r\n assignedBy:\r\n taskDetails.assignedBy && taskDetails.assignedByName\r\n ? { label: taskDetails.assignedByName, value: taskDetails.assignedBy }\r\n : { label: appUser.name, value: appUser.userId },\r\n // tslint:disable-next-line: max-line-length\r\n assignTo: taskDetails.assignedTo && taskDetails.assignedToName ? { label: taskDetails.assignedToName, value: taskDetails.assignedTo } : null,\r\n // tslint:disable-next-line: max-line-length\r\n priority: taskDetails.priority && taskDetails.priorityDescription ? { label: taskDetails.priorityDescription, value: taskDetails.priority } : null,\r\n notes: editorState,\r\n owner: taskDetails.owner && taskDetails.ownerName ? { label: taskDetails.ownerName, value: taskDetails.owner } : null,\r\n files: taskDetails.files ? taskDetails.files : [],\r\n allocatedToEntityType: taskDetails.allocatedToEntityType,\r\n // tslint:disable-next-line: max-line-length\r\n taskType: getTaskType(taskDetails),\r\n matterDescription: taskDetails.matterDescription ? taskDetails.matterDescription : null,\r\n reminderOffset: reminderOffset,\r\n isConfidential: taskDetails.isConfidential,\r\n };\r\n });\r\n }\r\n\r\n setIsContextRefreshTaskForm(false);\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: false,\r\n };\r\n });\r\n };\r\n\r\n const fetchMatterDetails = (matterId: number) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isMatterLoading: true,\r\n };\r\n });\r\n\r\n fetchBasicMatterDetailsData(\r\n true, // This should always be a new request.\r\n matterId,\r\n (data: MatterData) => {\r\n handleMatterDataFetch(data);\r\n },\r\n (reason) => {\r\n showNotification('Failed to Fetch App User Settings', reason, 'error');\r\n },\r\n );\r\n };\r\n\r\n const handleMatterDataFetch = (data: MatterData) => {\r\n if (data && !data.loading && data.matter) {\r\n if (data.matter) {\r\n setMatterData(data.matter);\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isMatterLoading: false,\r\n };\r\n });\r\n }\r\n }\r\n };\r\n\r\n const fetchUser = () => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isUserLoading: true,\r\n };\r\n });\r\n\r\n fetchAppUserData(\r\n false,\r\n // tslint:disable-next-line: no-console\r\n (data: AppUserData) => onUserRetrieved(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n },\r\n );\r\n };\r\n\r\n const onUserRetrieved = (data: AppUserData) => {\r\n\r\n if (props.partyMessage) {\r\n // Only for Follow Up Tasks, set the Assign To to logged in User.\r\n setTaskSummaryForm({\r\n ...taskSummaryForm,\r\n assignTo: {\r\n label: data.appUser.name,\r\n value: data.appUser.userId,\r\n },\r\n assignedBy: {\r\n label: data.appUser.name,\r\n value: data.appUser.userId,\r\n }\r\n });\r\n } else {\r\n setTaskSummaryForm({\r\n ...taskSummaryForm,\r\n assignedBy: {\r\n label: data.appUser.name,\r\n value: data.appUser.userId,\r\n },\r\n });\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isUserLoading: false,\r\n appUser: data.appUser,\r\n };\r\n });\r\n };\r\n\r\n const handleOption = (event: React.ChangeEvent) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n // tslint:disable-next-line: radix\r\n option: parseInt((event.target as HTMLInputElement).value),\r\n };\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const required = (value: any) => {\r\n return value ? undefined : 'Required';\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onSubmit = (form: FormApi, values: TaskSummaryForm) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true,\r\n };\r\n });\r\n\r\n const html = draftToHtml(convertToRaw(values.notes.getCurrentContent()));\r\n\r\n // Check if we have new Files\r\n // const newFiles = values.files.filter((documentFile: DocumentFile) => {\r\n // return documentFile.status === 1;\r\n // });\r\n\r\n let ownerGuid = values.owner ? values.owner.value : state.appUser ? state.appUser!.userId : '';\r\n\r\n const taskInput: TaskInput = {\r\n guid: props.guid && !props.isDuplicate ? props.guid : null,\r\n description: values.description ? values.description : null,\r\n notes: html,\r\n files: GetFiles(values.files),\r\n assignedTo: values.assignTo ? values.assignTo.value : null,\r\n assignedBy: values.assignedBy ? values.assignedBy.value : null,\r\n priority: values.priority ? values.priority.label : null,\r\n category: values.category ? values.category.label : null,\r\n dueDate: values.dueDate ? values.dueDate : null,\r\n estimatedEffort: values.estimatedEffort ? values.estimatedEffort : null, // moment(values.estimatedEffort).format('HH:mm')\r\n startDate: values.startDate ? values.startDate : null,\r\n completionDate: values.completionDate ? values.completionDate : null,\r\n duration: values.duration ? values.duration : null, // moment(values.duration).format('HH:mm')\r\n completionNotes: values.completionDate ? values.completionNotes : null, // Only pass completion notes if we have value in completion date\r\n owner: ownerGuid,\r\n userDefinedTaskType: props.partyMessage ? 'TaskFollowUp' : values.taskType ? values.taskType.label : null,\r\n allocatedToEntityType: values.allocatedToEntityType,\r\n activityText: values.activityText,\r\n reminderOffset: values.reminderOffset ? values.reminderOffset.value : null,\r\n isConfidential: values.isConfidential,\r\n };\r\n\r\n const taskMatter = values.matter ? values.matter : null;\r\n const taskClient = values.client ? values.client : null;\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isChanged: false,\r\n };\r\n });\r\n\r\n if (values.handleCreateAndClose) {\r\n // tslint:disable-next-line: no-console\r\n // console.log('handleCreateAndClose', form, values);\r\n\r\n createTask(taskInput, taskMatter, taskClient, true, form, false, values);\r\n } else if (values.handleCreateAndNew) {\r\n // tslint:disable-next-line: no-console\r\n // console.log('handleCreateAndNew', form, values);\r\n\r\n createTask(taskInput, taskMatter, taskClient, false, form, true, values);\r\n } else {\r\n // tslint:disable-next-line: no-console\r\n // console.log('handleUpdate', form, values);\r\n\r\n updateTask(taskInput, taskMatter, taskClient, values.handleUpdateAndClose ? values.handleUpdateAndClose : false);\r\n }\r\n };\r\n\r\n const GetFiles = (files: DocumentFile[]) => {\r\n return files.map((document: DocumentFile) => {\r\n return {\r\n file: document.file,\r\n name: document.name,\r\n guidID: document.guidID,\r\n status: document.status,\r\n };\r\n });\r\n };\r\n\r\n const formReset = (form: FormApi, values: TaskSummaryForm) => {\r\n form.setConfig('keepDirtyOnReinitialize', false);\r\n const tempValues: TaskSummaryForm = {\r\n ...values,\r\n files: [],\r\n description: null,\r\n // notes: EditorState.createEmpty(),\r\n };\r\n form.reset(tempValues);\r\n // form.change('notes', EditorState.createEmpty());\r\n form.setConfig('keepDirtyOnReinitialize', true);\r\n };\r\n\r\n const createTask = (\r\n input: TaskInput,\r\n taskMatter: IAutoCompleteItem | null,\r\n taskClient: IAutoCompleteItem | null,\r\n isForceClosed: boolean,\r\n form: FormApi,\r\n isCreatAndNew: boolean,\r\n values: TaskSummaryForm,\r\n ) => {\r\n if (state.option === TaskOptionEnum.none) {\r\n createGeneralTask(input, isForceClosed, form, isCreatAndNew, values);\r\n } else if (state.option === TaskOptionEnum.matter) {\r\n createMatterTask(input, taskMatter, isForceClosed, form, isCreatAndNew, values);\r\n } else {\r\n createClientTask(input, taskClient, isForceClosed, form, isCreatAndNew, values);\r\n }\r\n };\r\n\r\n const updateTask = (input: TaskInput, taskMatter: IAutoCompleteItem | null, taskClient: IAutoCompleteItem | null, isForceClosed: boolean) => {\r\n if (state.option === TaskOptionEnum.none) {\r\n updateGeneralTask(input, isForceClosed);\r\n } else if (state.option === TaskOptionEnum.matter) {\r\n updateMatterTask(input, taskMatter, isForceClosed);\r\n } else {\r\n updateClientTask(input, taskClient, isForceClosed);\r\n }\r\n };\r\n\r\n const createGeneralTask = (task: TaskInput, isForceClosed: boolean, form: FormApi, isCreatAndNew: boolean, values: TaskSummaryForm) => {\r\n client\r\n .mutate({\r\n mutation: CreateGeneralTask,\r\n variables: {\r\n input: task,\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info');\r\n\r\n if (isCreatAndNew) {\r\n formReset(form, values);\r\n } else {\r\n if (isForceClosed && props.onClose) {\r\n onClickFormClosed(false);\r\n props.onClose();\r\n }\r\n }\r\n } else {\r\n showNotification('Failed to save general task', results.data.error, 'error');\r\n }\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to save general task', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n });\r\n };\r\n\r\n const updateGeneralTask = (task: TaskInput, isForceClosed: boolean) => {\r\n client\r\n .mutate({\r\n mutation: UpdateGeneralTask,\r\n variables: {\r\n input: task,\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info');\r\n if (isForceClosed && props.onClose) {\r\n onClickFormClosed(true);\r\n props.onClose();\r\n }\r\n } else {\r\n showNotification('Failed to update general task', results.data.error, 'error');\r\n }\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update general task', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: max-line-length\r\n const createClientTask = (\r\n task: TaskInput,\r\n taskClient: IAutoCompleteItem | null,\r\n isForceClosed: boolean,\r\n form: FormApi,\r\n isCreatAndNew: boolean,\r\n values: TaskSummaryForm,\r\n ) => {\r\n client\r\n .mutate({\r\n mutation: CreateClientTask,\r\n variables: {\r\n input: task,\r\n clientGuid: props.partyMessage && props.partyClientGuid ? props.partyClientGuid : taskClient && taskClient.value.length > 0 ? taskClient.value : null,\r\n ...(props.partyMessage && props.isFromDataSource && {\r\n parentNameTextId: props.partyMessage.id,\r\n }),\r\n ...(props.partyMessage && !props.isFromDataSource && {\r\n parentNameCrmTextId: !props.isFromDataSource ? props.partyMessage.id : null,\r\n })\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info');\r\n if (isCreatAndNew) {\r\n formReset(form, values);\r\n } else {\r\n if (isForceClosed && props.onClose) {\r\n onClickFormClosed(true);\r\n props.onClose();\r\n }\r\n }\r\n } else {\r\n showNotification('Failed to save client task', results.data.error, 'error');\r\n }\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to save client task', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n });\r\n };\r\n\r\n const updateClientTask = (task: TaskInput, taskClient: IAutoCompleteItem | null, isForceClosed: boolean) => {\r\n client\r\n .mutate({\r\n mutation: UpdateClientTask,\r\n variables: {\r\n input: task,\r\n clientGuid: taskClient && taskClient.value.length > 0 ? taskClient.value : null,\r\n ...(state.taskDetails && state.taskDetails.taskTypeInternalDescription === 'TaskFollowUp' && {\r\n parentNameTextId: state.taskDetails.parentNameTextId,\r\n parentNameCrmTextId: state.taskDetails.parentNameCrmTextId\r\n })\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info');\r\n if (isForceClosed && props.onClose) {\r\n onClickFormClosed(true);\r\n props.onClose();\r\n }\r\n } else {\r\n showNotification('Failed to update client task', results.data.error, 'error');\r\n }\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update client task', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: max-line-length\r\n const createMatterTask = (\r\n task: TaskInput,\r\n taskMatter: IAutoCompleteItem | null,\r\n isForceClosed: boolean,\r\n form: FormApi,\r\n isCreatAndNew: boolean,\r\n values: TaskSummaryForm,\r\n ) => {\r\n client\r\n .mutate({\r\n mutation: CreateMatterTask,\r\n variables: {\r\n input: task,\r\n matterGuid: taskMatter && taskMatter.value.length > 0 ? taskMatter.value : null,\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info');\r\n\r\n if (isCreatAndNew) {\r\n formReset(form, values);\r\n } else {\r\n if (isForceClosed && props.onClose) {\r\n onClickFormClosed(true);\r\n props.onClose();\r\n }\r\n }\r\n } else {\r\n showNotification('Failed to save matter task', results.data.error, 'error');\r\n }\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to save matter task', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n });\r\n };\r\n\r\n const updateMatterTask = (task: TaskInput, taskMatter: IAutoCompleteItem | null, isForceClosed: boolean) => {\r\n client\r\n .mutate({\r\n mutation: UpdateMatterTask,\r\n variables: {\r\n input: task,\r\n matterGuid: taskMatter && taskMatter.value.length > 0 ? taskMatter.value : null,\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info');\r\n if (isForceClosed && props.onClose) {\r\n onClickFormClosed(true);\r\n props.onClose();\r\n }\r\n } else {\r\n showNotification('Failed to update matter task', results.data.error, 'error');\r\n }\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update matter task', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const closePanel = (form: FormApi, values: any, pristine: boolean) => {\r\n if (!pristine) {\r\n // code here...\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true,\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n onClickFormClosed(isContextRefreshData);\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const onReset = (form: FormApi, values: TaskSummaryForm) => {\r\n formReset(form, values);\r\n };\r\n\r\n const onFocusEditor = (event: SyntheticEvent) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n hideToolbar: false,\r\n };\r\n });\r\n };\r\n\r\n const onBlurEditor = (event: SyntheticEvent) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n hideToolbar: true,\r\n };\r\n });\r\n };\r\n\r\n const onClose = () => {\r\n if (state.isChanged) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true,\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const onDiscardChanges = (agree: boolean) => {\r\n if (agree) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n } else {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any no-shadowed-variable\r\n const onFormValueChanged = (form: FormApi, changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isChanged: true,\r\n };\r\n });\r\n }\r\n };\r\n\r\n const getClientAndMatter = () => {\r\n if (state.option === TaskOptionEnum.client && taskSummaryForm.client) {\r\n return (\r\n \r\n
\r\n

{`${taskSummaryForm.client!.label}`}

\r\n {state.taskDetails?.isFromDataSource && (\r\n }\r\n label=\"LEAP\"\r\n color=\"primary\"\r\n />\r\n )}\r\n
\r\n
\r\n );\r\n } else if (state.option === TaskOptionEnum.matter) {\r\n\r\n const description = [matterData?.fileNumber, matterData?.title].filter(Boolean).join(' - ');\r\n\r\n return (\r\n \r\n
\r\n
\r\n {matterData?.client ? (\r\n
{matterData?.client}
\r\n ) : null}\r\n {description.length > 0 ? (\r\n
{description}
\r\n ) : null}\r\n
\r\n {state.taskDetails?.isFromDataSource && (\r\n }\r\n label=\"LEAP\"\r\n color=\"primary\"\r\n />\r\n )}\r\n
\r\n
\r\n );\r\n }\r\n return undefined;\r\n };\r\n\r\n const showEntitySelection = () => {\r\n if (state.isCreate) {\r\n if (props.matterGuid) {\r\n return false; // We coming from matter, then don't. Matter should be pre-selected\r\n } else if (props.partyMessage) {\r\n return false;\r\n } else if (state.taskDetails && state.taskDetails.taskTypeInternalDescription === 'TaskFollowUp') {\r\n return false;\r\n } else {\r\n return true; // by default show\r\n }\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n const getTaskTypeHeader = () => {\r\n return (\r\n state.taskDetails && state.taskDetails.taskTypeInternalDescription === 'TaskFollowUp' && state.taskDetails.isFromDataSource === false && (\r\n \r\n Task Type: {state.taskDetails.taskTypeDescription}\r\n \r\n )\r\n );\r\n };\r\n\r\n const getTaskTypeControl = (form: FormApi) => {\r\n if ( \r\n (props.partyMessage || \r\n (state.taskDetails && state.taskDetails.taskTypeInternalDescription !== 'TaskFollowUp') ||\r\n (state.taskDetails && state.taskDetails.isFromDataSource === false)\r\n )) {\r\n // If this is a Follow Up task created from the Client & Contact, OR \r\n // Editing a follow up Task OR the task is from the data source (e.g. Leap) then don't display the selector\r\n return
;\r\n } else {\r\n return (\r\n \r\n \r\n {({ input, meta }) => (\r\n
\r\n {\r\n input.onChange(selection);\r\n form.change('estimatedEffort', selection ? selection.estimatedEffort : null);\r\n if (!selection.notes) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n tab: TaskFormTab.details\r\n };\r\n });\r\n } \r\n }}\r\n className={classes.taskTypeSelector}\r\n />\r\n
\r\n )}\r\n \r\n
\r\n );\r\n }\r\n };\r\n\r\n const actionButton = (\r\n // tslint:disable-next-line: no-any\r\n form: FormApi,\r\n submitting: boolean,\r\n pristine: boolean,\r\n // tslint:disable-next-line: no-any\r\n values: any,\r\n ) => {\r\n return (\r\n
\r\n {/* */}\r\n {!state.isCreate && !props.isDuplicate ? (\r\n
\r\n {\r\n form.change('handleCreateAndClose', false);\r\n form.change('handleCreateAndNew', false);\r\n form.change('handleUpdate', true);\r\n form.change('handleUpdateAndClose', false);\r\n }}\r\n disabled={submitting || /*pristine ||*/ state.onSubmitLoading || !state.isChanged || state.taskDetails?.isFromDataSource}\r\n >\r\n Update\r\n \r\n {\r\n form.change('handleCreateAndClose', false);\r\n form.change('handleCreateAndNew', false);\r\n form.change('handleUpdate', false);\r\n form.change('handleUpdateAndClose', true);\r\n }}\r\n disabled={submitting || /*pristine ||*/ state.onSubmitLoading || !state.isChanged || state.taskDetails?.isFromDataSource}\r\n >\r\n Save and Close\r\n \r\n
\r\n ) : (\r\n
\r\n {\r\n form.change('handleCreateAndClose', true);\r\n form.change('handleCreateAndNew', false);\r\n form.change('handleUpdate', false);\r\n form.change('handleUpdateAndClose', false);\r\n }}\r\n disabled={submitting || /*pristine ||*/ state.onSubmitLoading || !state.isChanged || state.taskDetails?.isFromDataSource}\r\n >\r\n Save and Close\r\n \r\n {\r\n form.change('handleCreateAndNew', true);\r\n form.change('handleCreateAndClose', false);\r\n form.change('handleUpdate', false);\r\n form.change('handleUpdateAndClose', false);\r\n }}\r\n disabled={submitting || /*pristine ||*/ state.onSubmitLoading || !state.isChanged || state.taskDetails?.isFromDataSource}\r\n >\r\n Save and New\r\n \r\n
\r\n )}\r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n // const heading = (option: TaskOptionEnum, isCreate: boolean) => {\r\n\r\n // if (option === TaskOptionEnum.none) {\r\n // if (isCreate) {\r\n // return 'Create Task';\r\n // }\r\n // return 'Edit Task';\r\n // } else {\r\n // if (isCreate) {\r\n // return `Create ${TaskOptionEnum[option]} Task`;\r\n // }\r\n // return `Edit ${TaskOptionEnum[option]} Task`;\r\n // }\r\n // };\r\n\r\n const filteredField = (option: TaskOptionEnum, form: FormApi) => {\r\n if (option === TaskOptionEnum.matter) {\r\n return (\r\n \r\n \r\n {({ input, meta }) => (\r\n input.onChange(selection)}\r\n value={input.value ? input.value : null}\r\n textLimit={{\r\n description: 40,\r\n title: 40,\r\n }}\r\n error={meta.error && meta.touched}\r\n helperText={meta.error && meta.touched ? 'required' : ''}\r\n />\r\n )}\r\n \r\n \r\n );\r\n } else if (option === TaskOptionEnum.client) {\r\n return (\r\n \r\n \r\n {({ input, meta }) => (\r\n input.onChange(selection)}\r\n value={input.value ? input.value : null}\r\n textLimit={{\r\n email: 40,\r\n label: 40,\r\n }}\r\n error={meta.error && meta.touched}\r\n helperText={meta.error && meta.touched ? 'required' : ''}\r\n />\r\n )}\r\n \r\n \r\n );\r\n }\r\n\r\n return
;\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onDropDownSelect = (\r\n form: FormApi,\r\n values: AnyObject,\r\n // tslint:disable-next-line: no-any\r\n input: FieldInputProps,\r\n // tslint:disable-next-line: no-any\r\n selection: IAutoCompleteItem | any,\r\n name: string,\r\n isUser: boolean,\r\n ) => {\r\n if (name === 'assignTo') {\r\n let assignedTo = selection && selection.value && selection.label ? { value: selection.value, label: selection.label } : null;\r\n form.batch(() => {\r\n form.change('assignTo', assignedTo);\r\n form.change('allocatedToEntityType', isUser ? AllocatedToEntityType.user : AllocatedToEntityType.team);\r\n });\r\n }\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const getFileItems = (files?: DocumentFile[]) => {\r\n if (files) {\r\n const filteredFiles = files.filter((file: DocumentFile) => {\r\n return file.status !== 2 && file.url;\r\n });\r\n\r\n if (filteredFiles) {\r\n const chip = (\r\n
\r\n {filteredFiles.length > 0 ? {'Click on the following to open the uploaded files'} : null}\r\n
\r\n {filteredFiles.map((file: DocumentFile, index: number) => {\r\n return onFileClicked(file)} />;\r\n })}\r\n
\r\n
\r\n );\r\n\r\n return chip;\r\n } else {\r\n return
;\r\n }\r\n } else {\r\n return
;\r\n }\r\n };\r\n\r\n const onFileClicked = (file: DocumentFile) => {\r\n if (file && file.url) {\r\n var win = window.open(file.url, '_blank');\r\n if (win) {\r\n win.focus();\r\n }\r\n }\r\n };\r\n\r\n const handleTabChange = (event: React.ChangeEvent<{}>, newValue: TaskFormTab) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n tab: newValue,\r\n };\r\n });\r\n };\r\n\r\n const detailsTab = (form: FormApi, pristine: boolean, values: AnyObject) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n <>\r\n \r\n Notes\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n onDropDownSelect(form, values, input, selection, name, isUser)\r\n }\r\n helperText={meta.error && meta.touched ? 'Assigned to is required' : ''}\r\n visible={{\r\n role: true,\r\n }}\r\n isAuthorized={true}\r\n />\r\n )}\r\n \r\n )}\r\n \r\n \r\n\r\n \r\n \r\n {({ input, meta }) => (\r\n input.onChange(selection)}\r\n helperText={meta.error && meta.touched ? 'Assigned by is required' : ''}\r\n visible={{\r\n role: true,\r\n }}\r\n isAuthorized={true}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n error={meta.error && meta.touched}\r\n helperText={meta.error && meta.touched ? meta.error : ''}\r\n showIcon={true}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n input.onChange(selection)}\r\n helperText={meta.error && meta.touched ? 'Priority is required' : ''}\r\n disablePortal={false}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n input.onChange(selection)}\r\n helperText={meta.error && meta.touched ? 'Category is required' : ''}\r\n disablePortal={false}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n input.onChange(selection)}\r\n helperText={meta.error && meta.touched ? 'Owner to is required' : ''}\r\n visible={{\r\n role: true,\r\n }}\r\n isAuthorized={true}\r\n />\r\n )}\r\n \r\n \r\n {props.guid && !props.isDuplicate && (\r\n \r\n
\r\n Status:\r\n {props.status ? props.status : state.taskDetails && state.taskDetails.taskStatus ? state.taskDetails.taskStatus : ''}\r\n
\r\n
\r\n )}\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) =>\r\n values.completionDate ? (\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n } label=\"Confidential\" />\r\n )}\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const documentsTab = (form: FormApi, pristine: boolean, values: AnyObject) => {\r\n return (\r\n \r\n \r\n
\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => getFileItems(values.files)}\r\n \r\n
\r\n
\r\n \r\n \r\n {({ input, meta }) => (\r\n {\r\n let existingFiles: DocumentFile[] = [...input.value];\r\n const newFiles = files.filter((file: File) => {\r\n return !existingFiles.some((item: DocumentFile) => {\r\n return item.name === file.name && item.status !== 2;\r\n });\r\n });\r\n if (newFiles && newFiles.length > 0) {\r\n newFiles.forEach((file: File) => {\r\n const documentFile: DocumentFile = {\r\n guidID: null,\r\n file: file,\r\n status: 1,\r\n name: file.name,\r\n url: '',\r\n };\r\n existingFiles.push(documentFile);\r\n });\r\n input.onChange(existingFiles);\r\n }\r\n }}\r\n onDelete={(file: File) => {\r\n let existingFiles: DocumentFile[] = [...input.value];\r\n // eslint-disable-next-line array-callback-return\r\n existingFiles.map((item: DocumentFile) => {\r\n if (file.name === item.name) {\r\n item.file = file;\r\n item.status = 2; // deleted\r\n }\r\n });\r\n // tslint:disable-next-line: max-line-length\r\n const filteredFiles = existingFiles.filter((item: DocumentFile) => {\r\n return item.status !== 2 || item.guidID !== null;\r\n });\r\n input.onChange(filteredFiles);\r\n }}\r\n // tslint:disable-next-line\r\n onDrop={(files: File[], event: any) => {\r\n // let existingFiles: DocumentFile[] = [...input.value];\r\n // tslint:disable-next-line: max-line-length\r\n // const existingFile = existingFiles.find((item: DocumentFile) => item.name === file)\r\n }}\r\n initialFiles={input.value.map((file: { url: string }) => file.url)}\r\n />\r\n )}\r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n const activityTab = (form: FormApi, pristine: boolean, values: AnyObject, submitting: boolean) => {\r\n return (\r\n
\r\n <>\r\n {state.taskDetails && (\r\n
\r\n
\r\n \r\n
\r\n
\r\n )}\r\n {/* */}\r\n\r\n
\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n {\r\n form.change('handleCreateAndClose', false);\r\n form.change('handleCreateAndNew', false);\r\n form.change('handleUpdate', true);\r\n form.change('handleUpdateAndClose', false);\r\n }}\r\n disabled={submitting || /*pristine ||*/ state.onSubmitLoading || !state.isChanged}\r\n >\r\n Update\r\n \r\n
\r\n \r\n
\r\n );\r\n };\r\n\r\n const taskTypeNotesTab = (form: FormApi, pristine: boolean) => {\r\n return (\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => {\r\n\r\n if (values.taskType && values.taskType.notes) {\r\n const contentBlock = htmlToDraft(values.taskType.notes);\r\n\r\n const contentState = ContentState.createFromBlockArray(contentBlock.contentBlocks);\r\n \r\n const editorState = EditorState.createWithContent(contentState);\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n \r\n return null;\r\n }}\r\n
\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {\r\n if (reason !== 'backdropClick') {\r\n onClose();\r\n }\r\n }}\r\n // maxWidth=\"md\"\r\n fullWidth={true}\r\n className={classes.dialogRoot}\r\n scroll={'paper'}\r\n classes={{\r\n paper: props.isCreate ? classes.dialogPaper : classes.dialogPaperWithActivity,\r\n }}\r\n >\r\n {state.isMatterLoading || state.isUserLoading || (state.isLoading && !state.isCreate) ? (\r\n \r\n
\r\n \r\n
\r\n
\r\n ) : (\r\n ) => onSubmit(form, values)}\r\n initialValues={taskSummaryForm}\r\n initialValuesEqual={() => true}\r\n keepDirtyOnReinitialize={true}\r\n subscription={{ submitting: true, pristine: true, values: true}}\r\n render={({ handleSubmit, form, submitting, pristine, values }) => (\r\n
handleSubmit(e)} id=\"taskForm\" className={classes.form}>\r\n \r\n {\r\n onFormValueChanged(form, props);\r\n }}\r\n />\r\n\r\n
\r\n \r\n <>\r\n \r\n {/* \r\n {heading(state.option, state.isCreate)} \r\n */}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n {showEntitySelection() ? ( \r\n <>\r\n \r\n
\r\n \r\n \r\n } label=\"None\" />\r\n } label=\"Matter\" />\r\n } label=\"Client\" />\r\n \r\n \r\n
\r\n
\r\n {filteredField(state.option, form)}\r\n \r\n ) : (\r\n <>{getClientAndMatter()}\r\n )}\r\n
\r\n
\r\n \r\n {getTaskTypeHeader()}\r\n {getTaskTypeControl(form)}\r\n \r\n {/* {state.taskDetails && state.taskDetails.taskTypeInternalDescription === 'TaskFollowUp' && (\r\n \r\n Task Type: {state.taskDetails.taskTypeDescription}\r\n \r\n )}\r\n {!props.partyMessage && (state.taskDetails && state.taskDetails.taskTypeInternalDescription !== 'TaskFollowUp') && (\r\n \r\n \r\n {({ input, meta }) => (\r\n
\r\n {\r\n input.onChange(selection);\r\n form.change('estimatedEffort', selection ? selection.estimatedEffort : null);\r\n if (!selection.notes) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n tab: TaskFormTab.details\r\n };\r\n });\r\n } \r\n }}\r\n className={classes.taskTypeSelector}\r\n />\r\n
\r\n )}\r\n \r\n
\r\n )}\r\n */}\r\n
\r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n \r\n \r\n Documents\r\n }\r\n value={TaskFormTab.documents}\r\n />\r\n {/* */}\r\n {values.taskType && values.taskType.notes && (\r\n \r\n )}\r\n \r\n )}\r\n \r\n
\r\n {detailsTab(form, pristine, values)}\r\n {documentsTab(form, pristine, values)}\r\n {taskTypeNotesTab(form, pristine)}\r\n
\r\n
\r\n {/*
\r\n {printJson(values)}\r\n
*/}\r\n
\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => {actionButton(form, submitting, pristine, values)}}\r\n \r\n
\r\n {!props.isCreate ? (\r\n <>\r\n \r\n
\r\n
\r\n
Activity
\r\n
\r\n \r\n {activityTab(form, pristine, values, submitting)}\r\n
\r\n \r\n ) : null}\r\n \r\n )}\r\n />\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\n// tslint:disable-next-line: no-any\r\n// function printJson(values: TaskSummaryForm) {\r\n// if (values) {\r\n// return (\r\n// <>\r\n//
\r\n//                     {JSON.stringify(values, undefined, 2)}\r\n//                 
\r\n// \r\n// );\r\n// } else {\r\n// return (\r\n// <>\r\n// \r\n// {/* tslint:disable-next-line: no-shadowed-variable */}\r\n// {({ values }) => (\r\n//
\r\n//                             {JSON.stringify(values, undefined, 2)}\r\n//                             {/*  */}\r\n//                         
\r\n// )}\r\n//
\r\n// \r\n// );\r\n// }\r\n// }\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { CurrencyOptionData, fetchAppUserData, fetchCurrencyData } from '../../matterManagement/MatterManagementRepository';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { AppUserData } from '../../enquirySummary/EnquirySummaryRepository';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { Detail, PriorityData, retrievePriorityData, retrieveTaskDetailsData, TaskDetailsData, TaskDetailsParam } from '../../tasksSummary/TasksSummaryRepository';\r\nimport { fetchMatterDetailsData } from '../../matterSummary/MatterSummaryRepository';\r\nimport { MatterData, MatterDetails } from '../../matterSummary/models/Matter';\r\nimport { BillTheMatterDialog } from '../../matterSummary/dialogs/BillTheMatterDialog';\r\nimport { WriteOffWipDialog } from '../../matterSummary/dialogs/WriteOffWipDialog';\r\nimport { WriteOffDebtorsDialog } from '../../matterSummary/dialogs/WriteOffDebtorsDialog';\r\nimport { TransferTustToPayInvoiceDialog } from '../../matterSummary/dialogs/TransferTustToPayInvoiceDialog';\r\nimport { ArchiveMatterDialog } from '../../matterSummary/dialogs/ArchiveMatterDialog';\r\nimport { CloseMatterDialog } from '../../matterSummary/dialogs/CloseMatterDialog';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n },\r\n doneIcon: {\r\n marginRight: '10px',\r\n },\r\n loaderWrapper: {\r\n position: 'absolute',\r\n top: 0,\r\n bottom: 0,\r\n right: 0,\r\n left: 0,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }\r\n })\r\n);\r\n\r\nexport interface CurrencyDetails {\r\n currencySymbol: string;\r\n currency: string;\r\n}\r\n\r\ninterface MatterTaskRendererProps /* extends ICellRendererParams,*/ /*WithStyles*/ {\r\n taskGuid: string;\r\n taskType: string;\r\n onDialogClose?: () => void;\r\n}\r\n\r\ninterface MatterTaskRendererState {\r\n isBillMatterOpen: boolean;\r\n isWriteOffUnbilledFeesOpen: boolean;\r\n isTransferTrustToPayInvoiceOpen: boolean;\r\n isWriteOffDebtorsOpen: boolean;\r\n isCloseMatterOpen: boolean;\r\n isArchiveMatterOpen: boolean;\r\n\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport const MatterTaskRenderer: React.FC = ( props ) => {\r\n const classes = useStyles();\r\n\r\n const [currencyData, setCurrencyData] = useState();\r\n const [taskData, setTaskData] = useState();\r\n const [matterData, setMatterData] = useState();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [state, setState] = useState({\r\n isBillMatterOpen: props.taskType === 'BillMatterRequested' ? true : false,\r\n isWriteOffUnbilledFeesOpen: props.taskType === 'WriteOffMatterWIPRequested' ? true : false,\r\n isTransferTrustToPayInvoiceOpen: props.taskType === 'TransferMatterTrustToInvoiceRequested' ? true : false,\r\n isWriteOffDebtorsOpen: props.taskType === 'WriteOffMatterDebtorsRequested' ? true : false,\r\n isCloseMatterOpen: props.taskType === 'CloseMatterRequested' ? true : false,\r\n isArchiveMatterOpen: props.taskType === 'ArchiveMatterRequested' ? true : false,\r\n loggedInUser: null,\r\n defaultPriority: null\r\n });\r\n\r\n useEffect(() => {\r\n setIsLoading(true);\r\n fetchCurrencyDetails();\r\n fetchUser();\r\n fetchPriority();\r\n fetchTaskDetails(props.taskGuid);\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchCurrencyDetails = () => {\r\n if (currencyData === undefined) {\r\n fetchCurrencyData(false,\r\n (data: CurrencyOptionData) => {\r\n handleCurrencyFetch(data);\r\n }, \r\n (reason) => {\r\n showNotification('Failed to Fetch App User Settings', reason, 'error'); \r\n });\r\n }\r\n };\r\n\r\n const handleCurrencyFetch = (data: CurrencyOptionData) => {\r\n if (data && !data.loading && data.options) {\r\n if (data.options.currencySymbol && data.options.localCurrency) {\r\n setCurrencyData({\r\n currency: data.options.localCurrency.currency,\r\n currencySymbol: data.options.currencySymbol.symbol\r\n });\r\n }\r\n }\r\n };\r\n\r\n const fetchUser = () => {\r\n fetchAppUserData(\r\n false,\r\n (data: AppUserData) => handleUserDataFetch(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const handleUserDataFetch = (data: AppUserData) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n loggedInUser: { label: data.appUser.name, value: data.appUser.userId },\r\n };\r\n });\r\n };\r\n\r\n const fetchTaskDetails = (guid: string) => {\r\n const taskDetailsParams: TaskDetailsParam = {\r\n guid: guid\r\n };\r\n\r\n retrieveTaskDetailsData(\r\n taskDetailsParams,\r\n true,\r\n // tslint:disable-next-line: no-console\r\n (data: TaskDetailsData) => handleTaskDetailsFetch(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const handleTaskDetailsFetch = (data: TaskDetailsData) => {\r\n // tslint:disable-next-line: no-console\r\n\r\n if (data && data.task && data.task.detail) {\r\n setTaskData(data.task.detail);\r\n if (data.task.detail.matterId) {\r\n fetchMatterDetails(data.task.detail.matterId);\r\n }\r\n\r\n setIsLoading(false);\r\n\r\n } \r\n };\r\n\r\n const fetchMatterDetails = (matterId: number) => {\r\n fetchMatterDetailsData(true, // This should always be a new request.\r\n matterId,\r\n (data: MatterData) => {\r\n handleMatterDataFetch(data);\r\n }, \r\n (reason) => {\r\n showNotification('Failed to Fetch App User Settings', reason, 'error'); \r\n });\r\n \r\n };\r\n\r\n const handleMatterDataFetch = (data: MatterData) => {\r\n if (data && !data.loading && data.matter) {\r\n if (data.matter) {\r\n setMatterData(data.matter);\r\n\r\n setIsLoading(false);\r\n }\r\n }\r\n };\r\n\r\n const fetchPriority = () => {\r\n retrievePriorityData(\r\n false,\r\n // tslint:disable-next-line: no-console\r\n (data) => handlePriorityDataFetch(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const handlePriorityDataFetch = (data: PriorityData) => {\r\n // set the priority default data\r\n const priorityData = data.lookup.priority.filter(value => {\r\n return value.description === 'No Priority';\r\n });\r\n\r\n if (priorityData && priorityData.length > 0) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n defaultPriority: { label: priorityData[0].description, value: priorityData[0].guidId },\r\n };\r\n });\r\n } \r\n };\r\n\r\n const onDialogClose = () => {\r\n if (props.onDialogClose) {\r\n props.onDialogClose();\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-shadowed-variable\r\n const getMatterTaskActions = () => {\r\n if (taskData && matterData && currencyData) {\r\n const unBilledFees = matterData.financials ? matterData.financials.unbilledTimeAndFees : 0;\r\n const unbilledDisbursements = matterData.financials ? matterData.financials.unbilledDisbursements : 0;\r\n const outstandingDebtors = matterData.financials ? matterData.financials.debtors : 0;\r\n const currentTrustBalance = matterData.financials ? matterData.financials.trustBalance : 0;\r\n const billedFees = matterData.financials ? matterData.financials.billedTimeAndFees : 0;\r\n const feeEstimate = matterData.financials ? matterData.financials.feeEstimate : 0;\r\n const percentageEstimate = matterData.financials ? matterData.financials.percentageEstimate : 0;\r\n const pendingWriteOffFeesAmountInBillMatterTask = matterData.financials \r\n ? matterData.actions.pendingWriteOffFeesAmountInBillMatterTask \r\n : 0;\r\n const pendingWriteOffFeesAmountInWriteOffWipTask = matterData.financials \r\n ? matterData.actions.pendingWriteOffFeesAmountInWriteOffWipTask \r\n : 0; \r\n const pendingWriteOffDisbAmountInBillMatterTask = matterData.financials \r\n ? matterData.actions.pendingWriteOffFeesAmountInBillMatterTask \r\n : 0;\r\n const pendingWriteOffDisbAmountInWriteOffWipTask = matterData.financials \r\n ? matterData.actions.pendingWriteOffFeesAmountInWriteOffWipTask \r\n : 0; \r\n\r\n const matterTitle = `${matterData.fileNumber} - ${matterData.title}`;\r\n\r\n const assignedTo = taskData.assignedTo && taskData.assignedToName ? {label: taskData.assignedToName, value: taskData.assignedTo} : null;\r\n const owner = taskData.owner && taskData.ownerName ? {label: taskData.ownerName, value: taskData.owner} : null;\r\n const allocatedToEntityType = taskData.allocatedToEntityType;\r\n\r\n const priority = taskData.priority && taskData.priorityDescription \r\n ? {label: taskData.priorityDescription, value: taskData.priority} \r\n : state.defaultPriority;\r\n const category = taskData.category && taskData.categoryDescription \r\n ? {label: taskData.categoryDescription, value: taskData.category} \r\n : null;\r\n const dueDate = taskData.dueDate;\r\n const estimatedEffort = taskData.estimatedEffort ? taskData.estimatedEffort : null;\r\n const startDate = taskData.startDate;\r\n const completionDate = taskData.completionDate;\r\n const duration = taskData.duration ? taskData.duration : null;\r\n const assignedBy = taskData.assignedBy && taskData.assignedByName \r\n ? {label: taskData.assignedByName, value: taskData.assignedBy} \r\n : state.loggedInUser;\r\n return (\r\n \r\n {state.isBillMatterOpen && (\r\n \r\n )}\r\n \r\n {state.isWriteOffUnbilledFeesOpen && (\r\n \r\n )}\r\n \r\n {state.isWriteOffDebtorsOpen && (\r\n \r\n )}\r\n \r\n {state.isTransferTrustToPayInvoiceOpen && (\r\n \r\n )}\r\n \r\n {state.isArchiveMatterOpen && (\r\n \r\n )}\r\n \r\n {state.isCloseMatterOpen && (\r\n \r\n )} \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n };\r\n\r\n const getLoader = () => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n };\r\n\r\n return (\r\n \r\n {\r\n isLoading\r\n ? getLoader()\r\n : getMatterTaskActions() \r\n }\r\n \r\n );\r\n};\r\n","import React, { useState } from 'react';\r\n\r\nexport const TasksSummaryContext = React.createContext>({});\r\n\r\nexport interface TasksSummaryTypes {\r\n isFormOpen: boolean;\r\n isContextRefreshData: boolean;\r\n isContextRefreshTaskForm?: boolean;\r\n isContextRefreshDataOnFormClose: boolean;\r\n // tslint:disable-next-line: no-any\r\n onClickFormOpen(): void;\r\n onClickFormClosed(isRefreshData: boolean): void;\r\n setIsContextRefreshData(isRefreshData: boolean): void;\r\n setIsContextRefreshTaskForm(isRefreshData: boolean): void;\r\n setRefreshDataOnFormClose(isRefreshData: boolean): void;\r\n}\r\n\r\ninterface ContextProps {}\r\n\r\nexport interface ContextState {\r\n isContextRefreshData: boolean;\r\n // isContextRefreshTaskForm?: boolean;\r\n}\r\n\r\nexport const TasksSummaryContextProvider: React.FC = (props) => {\r\n\r\n const [state, setState] = useState({\r\n isContextRefreshData: false,\r\n // isContextRefreshTaskForm: undefined\r\n });\r\n\r\n const [isFormOpen, setIsFormOpen] = useState(false);\r\n const [isContextRefreshDataOnFormClose, setIsContextRefreshDataOnFormClose] = useState(false);\r\n const [isContextRefreshTaskForm, setIsContextRefreshTaskForm] = useState(false);\r\n\r\n // tslint:disable-next-line: no-any\r\n const onClickFormOpen = () => {\r\n // tslint:disable-next-line: no-console\r\n console.log('onClickFormOpen - true');\r\n // tslint:disable-next-line: no-console\r\n\r\n setIsFormOpen(true);\r\n };\r\n\r\n const onClickFormClosed = (isRefreshData: boolean) => {\r\n // tslint:disable-next-line: no-console\r\n console.log('onClickFormOpen - fa;se');\r\n setIsFormOpen(false);\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isContextRefreshData: isRefreshData\r\n };\r\n });\r\n };\r\n\r\n const setIsContextRefreshData = (isRefreshData: boolean) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isContextRefreshData: isRefreshData\r\n };\r\n });\r\n };\r\n\r\n // const setIsContextRefreshTaskForm = (isRefreshData: boolean) => {\r\n // setState((prevState) => {\r\n // return {\r\n // ...prevState,\r\n // isContextRefreshTaskForm: isRefreshData\r\n // };\r\n // });\r\n // };\r\n\r\n const setRefreshDataOnFormClose = (isRefreshData: boolean) => {\r\n setIsContextRefreshDataOnFormClose(isRefreshData);\r\n };\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n ); \r\n};","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { showNotification } from '../../App';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport { client } from '../..';\r\nimport gql from 'graphql-tag';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n })\r\n);\r\n\r\ninterface PhoneNumberSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n disablePortal?: boolean;\r\n nameId: number;\r\n isFromDataSource: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n}\r\n\r\ninterface PhoneNumberSelectorState {\r\n isLoading: boolean;\r\n options: IAutoCompleteItem[];\r\n}\r\n\r\nexport const PhoneNumberSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n options: [],\r\n });\r\n\r\n useEffect(() => { \r\n if (props.nameId) {\r\n fetchData(props.nameId, props.isFromDataSource);\r\n }\r\n // tslint:disable-next-line: align\r\n }, [props.nameId, props.isFromDataSource]);\r\n\r\n const fetchData = (nameId: number, isFromDataSource: boolean) => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n const phoneNumberDataParams: PhoneNumberDataParams = {\r\n nameId: nameId,\r\n isFromDataSource: isFromDataSource\r\n };\r\n\r\n retrievePhoneNumberData(\r\n phoneNumberDataParams,\r\n true, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data: PhoneNumberData) => onRetrievePhoneNumber(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrievePhoneNumber = (data: PhoneNumberData) => {\r\n setState({\r\n ...state,\r\n options: data && data.partydetails ? data.partydetails.phoneNumbers.map( (source: PhoneNumber) => ({ ...source, value: source.number, label: source.number })) : [],\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name ? props.name : 'phoneNumber');\r\n }\r\n };\r\n\r\n const handleOnClose = (event: React.ChangeEvent<{}>) => {\r\n\r\n // tslint:disable-next-line: no-string-literal\r\n if (event.currentTarget && event.currentTarget['value']) {\r\n // tslint:disable-next-line: no-string-literal\r\n let newValue = event.currentTarget['value'];\r\n\r\n if (props.onSelection) {\r\n // tslint:disable-next-line: no-string-literal\r\n let tempValue = { value: newValue, label: newValue };\r\n props.onSelection(tempValue, props.name ? props.name : 'phoneNumber');\r\n }\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n { props.multiple ? \r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport interface PhoneNumberDataParams {\r\n nameId: number;\r\n isFromDataSource: boolean;\r\n}\r\n\r\nexport interface PhoneNumberData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n partydetails: Partydetails;\r\n}\r\n\r\nexport interface Partydetails {\r\n phoneNumbers: PhoneNumber[];\r\n}\r\n\r\nexport interface PhoneNumber {\r\n extension: string;\r\n number: string;\r\n partyId: number;\r\n phoneNumberId: number;\r\n sequence: number;\r\n}\r\n\r\nexport function retrievePhoneNumberData(\r\n query: PhoneNumberDataParams,\r\n refreshData: boolean,\r\n onSuccess: (data: PhoneNumberData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: PHONE_NUMBER_QUERY,\r\n variables: {\r\n nameId: query.nameId,\r\n isFromDataSource: query.isFromDataSource\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst PHONE_NUMBER_QUERY = gql`\r\n query PhoneNumbers($nameId: Int!, $isFromDataSource: Boolean) {\r\n partydetails(nameId: $nameId, isFromDataSource: $isFromDataSource) {\r\n ... on Individual {\r\n phoneNumbers {\r\n extension\r\n number\r\n partyId\r\n phoneNumberId\r\n sequence\r\n }\r\n }\r\n ... on Organisation {\r\n phoneNumbers {\r\n extension\r\n number\r\n partyId\r\n phoneNumberId\r\n sequence\r\n }\r\n }\r\n }\r\n }\r\n`;","import React from 'react';\r\nimport { makeStyles, Theme, createStyles, Typography, Paper } from '@material-ui/core';\r\nimport { formatNumber } from '../../helpers/ChartHelper';\r\nimport { MessageDetails } from '../TasksSummaryRepository';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n paper: {\r\n padding: '10px'\r\n },\r\n message: {\r\n padding: '10px'\r\n }\r\n }),\r\n);\r\n\r\ninterface PhoneMessageDetailsPanelProps {\r\n data: MessageDetails;\r\n}\r\n\r\nexport const PhoneMessageDetailsPanel: React.FC = (props) => {\r\n\r\n const classes = useStyles();\r\n \r\n // if (!props.data || (props.data && props.data.messagesNotResponded === 0 && props.data.messagesReceived === 0)) {\r\n // return
;\r\n // }\r\n\r\n return (\r\n \r\n \r\n {`${formatNumber(props.data.messagesReceived)} messages received in the last 7 days, ${formatNumber(props.data.messagesNotResponded)} unanswered`} \r\n \r\n \r\n );\r\n};\r\n\r\nexport default PhoneMessageDetailsPanel;","import React from 'react';\r\nimport { makeStyles, Theme, createStyles, Paper } from '@material-ui/core';\r\n// import { AgGridReact } from '@ag-grid-community/react';\r\n// import { AgGridStyle, AgGridTableWrapper } from '../../components/AgGridStyle';\r\n// import { AllModules } from '@ag-grid-enterprise/all-modules';\r\nimport { formatNumber } from '../../helpers/ChartHelper';\r\nimport moment from 'moment';\r\nimport { MatterDetails, MatterSummary } from '../TasksSummaryRepository';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {},\r\n heading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n fontWeight: 'normal',\r\n },\r\n gridWrapper: {\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column wrap',\r\n minHeight: '220px'\r\n },\r\n otherInfo: {\r\n padding: '10px',\r\n },\r\n paper: {\r\n padding: '15px 10px 10px 10px'\r\n },\r\n tableContainer: {\r\n display: 'flex',\r\n flexFlow: 'column',\r\n flex: 1,\r\n padding: '0 10px'\r\n },\r\n tableHeader: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n margin: '0 -10px',\r\n backgroundColor: '#F5F6FF'\r\n },\r\n tableHeaderColumn: {\r\n flex: 1,\r\n padding: '10px'\r\n },\r\n tableBody: {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n },\r\n tableBodyRow: {\r\n display: 'flex',\r\n flex: 1,\r\n margin: '0 -10px',\r\n '&:nth-child(odd)': {\r\n\r\n },\r\n '&:nth-child(even)': {\r\n backgroundColor: '#F5F6FF'\r\n }\r\n },\r\n tableBodyColumn: {\r\n flex: 1,\r\n padding: '10px'\r\n }\r\n }),\r\n);\r\n\r\ninterface PhoneMatterDetailsPanelProps {\r\n data: MatterDetails;\r\n}\r\n\r\nexport const PhoneMatterDetailsPanel: React.FC = (props) => {\r\n\r\n const classes = useStyles();\r\n\r\n const otherCurrentMatter = props.data.totalMatters - props.data.matterSummary.length;\r\n\r\n // const columnDefs = [\r\n // { headerName: 'Matter Type', field: 'matterType' },\r\n // { headerName: 'Matter No', field: 'fileNumber' },\r\n // { headerName: 'Matter Title', field: 'matterTitle' },\r\n // { headerName: 'Person Acting', field: 'personActing' }\r\n // ];\r\n\r\n // const gridOptions = {\r\n // defaultColDef: {\r\n // // suppressResize: true,\r\n // menuTabs: ['filterMenuTab', 'generalMenuTab', 'columnsMenuTab'],\r\n // resizable: true,\r\n // sortable: true,\r\n // filter: true\r\n // },\r\n // rowBuffer: 0,\r\n // cacheOverflowSize: 5,\r\n // maxConcurrentDatasourceRequests: 1, \r\n // maxBlocksInCache: 100, // How many blocks to cache in the client.\r\n // suppressPropertyNamesCheck: true,\r\n // };\r\n\r\n // if (!props.data) {\r\n // return
;\r\n // }\r\n\r\n // if (props.data.closedMatters === 0 && props.data.totalMatters === 0) {\r\n // return
;\r\n // }\r\n \r\n return (\r\n \r\n {props.data.totalMatters > 0 ? (\r\n <>\r\n
\r\n
\r\n
\r\n Matter Type\r\n
\r\n
\r\n Matter No.\r\n
\r\n
\r\n Matter Title\r\n
\r\n
\r\n Person Acting\r\n
\r\n
\r\n
\r\n {props.data.matterSummary.map((matter: MatterSummary) => (\r\n
\r\n
\r\n {matter.matterType}\r\n
\r\n
\r\n {matter.fileNumber}\r\n
\r\n
\r\n {matter.matterTitle}\r\n
\r\n
\r\n {matter.personActing}\r\n
\r\n
\r\n ))}\r\n
\r\n
\r\n {(otherCurrentMatter > 0 || props.data.closedMatters > 0) && (\r\n
{`Plus ${formatNumber(otherCurrentMatter)} other current matters, ${formatNumber(props.data.closedMatters)} closed matters`}
\r\n )}\r\n \r\n ) : (\r\n
\r\n {`${formatNumber(props.data.closedMatters)} closed matters, last active ${moment(props.data.lastUpdate).format('DD MMMM, YYYY')}`}\r\n
\r\n )}\r\n {/* {props.data.totalMatters > 0 ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
{`Plus ${formatNumber(props.data.totalMatters - props.data.matterSummary.length)}\r\n other current matters, ${formatNumber(props.data.closedMatters)} closed matters`}
\r\n
\r\n ) : (\r\n
\r\n {`${formatNumber(props.data.closedMatters)} closed matters, last active ${moment(props.data.lastUpdate).format('DD MMMM, YYYY')}`}\r\n
\r\n )} */}\r\n
\r\n );\r\n};\r\n\r\nexport default PhoneMatterDetailsPanel;","import React from 'react';\r\nimport { makeStyles, Theme, createStyles, Paper, Chip } from '@material-ui/core';\r\n// import { AgGridStyle, AgGridTableWrapper } from '../../components/AgGridStyle';\r\n// import { AgGridReact } from '@ag-grid-community/react';\r\n// import { ChipCellRenderer } from '../../matterSummary/MatterSummaryCellRenderer';\r\nimport { ContactDetails } from '../TasksSummaryRepository';\r\nimport EmailIcon from '@material-ui/icons/Email';\r\nimport SmartphoneIcon from '@material-ui/icons/Smartphone';\r\nimport PhoneIcon from '@material-ui/icons/Phone';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n paper: {\r\n padding: '10px'\r\n },\r\n gridWrapper: {\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column wrap',\r\n minHeight: '100px'\r\n },\r\n chip: {\r\n margin: theme.spacing() / 4,\r\n },\r\n chips: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n tableContainer: {\r\n display: 'flex',\r\n flexFlow: 'column',\r\n flex: 1,\r\n padding: '0 10px'\r\n },\r\n tableHeader: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n margin: '0 -10px',\r\n backgroundColor: '#F5F6FF'\r\n },\r\n tableHeaderColumn: {\r\n flex: 1,\r\n padding: '10px'\r\n },\r\n tableBody: {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n },\r\n tableBodyRow: {\r\n display: 'flex',\r\n flex: 1,\r\n margin: '0 -10px',\r\n '&:nth-child(odd)': {\r\n\r\n },\r\n '&:nth-child(even)': {\r\n backgroundColor: '#F5F6FF'\r\n }\r\n },\r\n tableBodyColumn: {\r\n flex: 1,\r\n padding: '10px'\r\n }\r\n }),\r\n);\r\n\r\ninterface PhoneContactDetailsPanelProps {\r\n data: ContactDetails;\r\n}\r\n\r\nexport const PhoneContactDetailsPanel: React.FC = (props) => {\r\n\r\n const classes = useStyles();\r\n\r\n // const columnDefs = [\r\n // { headerName: 'Address', field: 'address' },\r\n // { headerName: 'Email', field: 'email' },\r\n // { headerName: 'Mobile', field: 'mobile' },\r\n // { headerName: 'Phone', field: 'phone' },\r\n // { \r\n // headerName: 'Tags', \r\n // field: 'tags',\r\n // cellRendererFramework: ChipCellRenderer,\r\n // width: 400,\r\n // },\r\n // ];\r\n\r\n // const rowData = [\r\n // {\r\n // address: props.data?.address,\r\n // email: props.data?.email,\r\n // mobile: props.data?.mobile,\r\n // phone: props.data?.phone,\r\n // tags: props.data?.tags,\r\n // }\r\n // ];\r\n\r\n // const gridOptions = {\r\n // defaultColDef: {\r\n // // suppressResize: true,\r\n // menuTabs: ['filterMenuTab', 'generalMenuTab', 'columnsMenuTab'],\r\n // resizable: true,\r\n // sortable: true,\r\n // filter: true\r\n // },\r\n // rowBuffer: 0,\r\n // cacheOverflowSize: 5,\r\n // maxConcurrentDatasourceRequests: 1, \r\n // maxBlocksInCache: 100, // How many blocks to cache in the client.\r\n // suppressPropertyNamesCheck: true,\r\n // };\r\n \r\n // if (!props.data) {\r\n // return
;\r\n // }\r\n \r\n // tslint:disable-next-line: no-any\r\n const getTagsChip = (value: any) => {\r\n\r\n if (value) {\r\n let chipsArray = [];\r\n if (!Array.isArray(value)) {\r\n // tslint:disable-next-line: no-any\r\n JSON.parse(value).forEach( (item: any) => {\r\n chipsArray.push(item);\r\n });\r\n } else {\r\n chipsArray = value;\r\n }\r\n\r\n const chips: React.ReactNode = (\r\n
\r\n {\r\n // tslint:disable-next-line: no-any\r\n chipsArray.map((chipData: any) => { \r\n return (\r\n // tslint:disable-next-line: no-unused-expression\r\n \r\n );\r\n })\r\n }\r\n
\r\n );\r\n return chips;\r\n } else {\r\n return null;\r\n } \r\n };\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n Address\r\n
\r\n
\r\n Contact Details\r\n
\r\n
\r\n Tags\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {props.data?.address}\r\n
\r\n
\r\n
\r\n {props.data && props.data.email && (\r\n }\r\n clickable={true}\r\n label={props.data.email}\r\n onClick={(e) => {\r\n window.location.href = `mailto:${props!.data!.email}`;\r\n e.preventDefault();\r\n }}\r\n // onDelete={handleDelete}\r\n variant=\"outlined\"\r\n className={classes.chip}\r\n />\r\n )}\r\n {props.data.mobile && (\r\n }\r\n clickable={true}\r\n label={props.data.mobile}\r\n onClick={(e) => {\r\n window.location.href = `tel:${props!.data!.mobile}`;\r\n e.preventDefault();\r\n }}\r\n // onDelete={handleDelete}\r\n variant=\"outlined\"\r\n className={classes.chip}\r\n />\r\n )}\r\n {props.data.phone && (\r\n }\r\n clickable={true}\r\n label={props.data.phone}\r\n onClick={(e) => {\r\n window.location.href = `tel:${props!.data!.phone}`;\r\n e.preventDefault();\r\n }}\r\n // onDelete={handleDelete}\r\n variant=\"outlined\"\r\n className={classes.chip}\r\n />\r\n )}\r\n
\r\n
\r\n
\r\n {getTagsChip(props.data?.tags)}\r\n
\r\n
\r\n
\r\n
\r\n {/*
\r\n \r\n \r\n \r\n \r\n \r\n
*/}\r\n \r\n );\r\n};\r\n\r\nexport default PhoneContactDetailsPanel;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n FormControl,\r\n RadioGroup,\r\n FormControlLabel,\r\n Radio,\r\n RadioProps,\r\n Grid,\r\n Button,\r\n // FormLabel,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n FormLabel,\r\n TextField,\r\n Checkbox,\r\n Tooltip,\r\n Typography,\r\n IconButton,\r\n Tabs,\r\n Tab,\r\n Chip,\r\n Divider,\r\n} from '@material-ui/core';\r\nimport clsx from 'clsx';\r\nimport { Form, Field, FormSpy, FieldInputProps } from 'react-final-form';\r\nimport { FormApi, AnyObject } from 'final-form';\r\nimport { Editor, SyntheticEvent } from 'react-draft-wysiwyg';\r\nimport 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css';\r\nimport { \r\n ContentState, \r\n convertToRaw, \r\n EditorState \r\n} from 'draft-js';\r\nimport { PrioritySelector } from '../selectors/PrioritySelector';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { \r\n AppUserData,\r\n CreatePhoneTaskMutation, \r\n Detail, \r\n ExtendPhoneTaskDetailsData, \r\n ExtendPhoneTaskDetailsParams, \r\n EXTEND_PHONE_TASK_DETAILS, \r\n fetchAppUserData, \r\n retrieveTaskDetailsData, \r\n TaskAndPhoneMessageConfig, \r\n TaskDetailsData, \r\n TaskDetailsParam,\r\n UpdatePhoneTaskMutation,\r\n CcUserList\r\n} from '../TasksSummaryRepository';\r\nimport { TaskCategorySelector } from '../selectors/TaskCategorySelector';\r\nimport { TaskAssignedBySelector } from '../selectors/TaskAssignedBySelector';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\nimport { client } from '../..';\r\nimport moment from 'moment';\r\nimport draftToHtml from 'draftjs-to-html';\r\nimport { ClientAutoCompleteSelector } from '../../components/ClientAutoCompleteSelector';\r\nimport htmlToDraft from 'html-to-draftjs';\r\nimport { MatterAutoCompleteSelector } from '../../components/MatterAutoCompleteSelector';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { mainTheme } from '../../Theme';\r\nimport { KeyboardDateTimePicker } from '@material-ui/pickers/DateTimePicker/DateTimePicker';\r\nimport { OrganisationSelector } from '../../enquirySummary/selectors/OrganisationSelector';\r\nimport { IndividualNameSummary, IndividualSelector } from '../../enquirySummary/selectors/IndividualSelector';\r\nimport SyncAltIcon from '@material-ui/icons/SyncAlt';\r\nimport { PhoneNumberSelector } from '../selectors/PhoneNumberSelector';\r\nimport { DropzoneArea } from 'material-ui-dropzone';\r\nimport { DocumentFile } from '../../types/DocumentFile';\r\nimport { TaskHistoryActivity, TaskHistoryActivityWidth } from '../common/TaskHistoryActivity';\r\nimport { AllocatedToEntityType } from '../AllocatedToEntityType';\r\nimport { fetchBasicMatterDetailsData } from '../../matterSummary/MatterSummaryRepository';\r\nimport { MatterData, MatterDetails } from '../../matterSummary/models/Matter';\r\nimport { useLazyQuery } from 'react-apollo';\r\nimport PhoneMessageDetailsPanel from '../panels/PhoneMessageDetailsPanel';\r\nimport PhoneMatterDetailsPanel from '../panels/PhoneMatterDetailsPanel';\r\nimport PhoneContactDetailsPanel from '../panels/PhoneContactDetailsPanel';\r\nimport { ReminderSelector } from '../../components/ReminderSelector';\r\nimport { TaskAssignedByUserTeamSelector } from '../selectors/TaskAssignedByUserTeamSelector';\r\nimport { UserFeature, UserFeatureEnum } from '../../types/UserFeature';\r\nimport { AreaOfLawSelector, IAreaOfLawAutoCompleteItem } from '../../enquirySummary/selectors/AreaOfLawSelector';\r\nimport { SourceSelector } from '../../enquirySummary/selectors/SourceSelector';\r\nimport { OfficeSelector } from '../../MailingList/selectors/OfficeSelector';\r\nimport { ClientAndContactSelector } from '../../components/ClientAndContactSelector';\r\nimport { useCreateEnquiryMutation } from '../../enquirySummary/hooks/useCreateEnquiryMutation';\r\nimport { addBusinessDays, finalFormValidateEmail, removeTagsAndStyles, separateName } from '../../helpers/commonHelper';\r\nimport { EnquiryDefaultConfig } from '../../enquirySummary/hooks/useEnquirySettingsQuery';\r\nimport { UserAutocompleteSelector } from '../../components/UserAutocompleteSelector';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n dialogRoot: {\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n padding: 0,\r\n }\r\n },\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n formControlWrapper: {\r\n height: '100%',\r\n display: 'flex',\r\n alignItems: 'flex-end',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n radioRoot: {\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n icon: {\r\n borderRadius: '50%',\r\n width: 16,\r\n height: 16,\r\n boxShadow:\r\n 'inset 0 0 0 1px rgba(16,22,26,.2), inset 0 -1px 0 rgba(16,22,26,.1)',\r\n backgroundColor: '#f5f8fa',\r\n backgroundImage:\r\n 'linear-gradient(180deg,hsla(0,0%,100%,.8),hsla(0,0%,100%,0))',\r\n '$root.Mui-focusVisible &': {\r\n outline: '2px auto rgba(19,124,189,.6)',\r\n outlineOffset: 2,\r\n },\r\n 'input:hover ~ &': {\r\n backgroundColor: '#ebf1f5',\r\n },\r\n 'input:disabled ~ &': {\r\n boxShadow: 'none',\r\n background: 'rgba(206,217,224,.5)',\r\n },\r\n },\r\n checkedIcon: {\r\n backgroundColor: '#137cbd',\r\n backgroundImage:\r\n 'linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0))',\r\n '&:before': {\r\n display: 'block',\r\n width: 16,\r\n height: 16,\r\n backgroundImage:\r\n 'radial-gradient(#fff,#fff 28%,transparent 32%)',\r\n content: '\"\"',\r\n },\r\n 'input:hover ~ &': {\r\n backgroundColor: '#106ba3',\r\n },\r\n },\r\n radioGroup: {\r\n flexFlow: 'row'\r\n },\r\n clientContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n }\r\n },\r\n clientRowRadio: {\r\n\r\n },\r\n clientSelector: {\r\n flex: 1\r\n },\r\n content: {\r\n flex: 1\r\n },\r\n matterForm: {},\r\n clientForm: {},\r\n formControl: {\r\n '& .MuiFormGroup-root': {\r\n padding: '6px 7px'\r\n }\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n // paddingBottom: '20px'\r\n },\r\n button: {\r\n margin: theme.spacing(1),\r\n },\r\n heading: {\r\n textTransform: 'capitalize'\r\n },\r\n headerDetails: {\r\n paddingTop: '20px',\r\n fontSize: '16px'\r\n },\r\n hidden: {\r\n display: 'none',\r\n },\r\n editorClassName: {\r\n padding: '0 10px',\r\n minHeight: '100px',\r\n },\r\n wrapperClassName: {\r\n border: '1px solid #949494',\r\n display: 'flex',\r\n flexFlow: 'column-reverse',\r\n },\r\n toolbarClassName: {\r\n border: 0,\r\n // borderBottom: '1px solid #F1F1F1',\r\n margin: 0,\r\n padding: 0,\r\n },\r\n formLabel: {\r\n paddingBottom: '10px',\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n padding: '20px 0',\r\n },\r\n status: {\r\n flex: 1,\r\n display: 'flex',\r\n alignItems: 'flex-end',\r\n height: '100%',\r\n justifyContent: 'flex-start',\r\n color: 'grey',\r\n '& > span': {\r\n color: mainTheme.BrandColors.TemplatePrimary,\r\n marginLeft: '10px',\r\n }\r\n },\r\n commentField: {\r\n width: '100%',\r\n },\r\n margin: {\r\n margin: theme.spacing(1),\r\n },\r\n switcherWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n '& > div:first-child': {\r\n flex: 1\r\n }\r\n },\r\n selector: {\r\n flex: 1,\r\n },\r\n paperWidthMd: {\r\n maxWidth: '750px',\r\n },\r\n tabs: {\r\n marginBottom: 10,\r\n padding: '10px 0',\r\n },\r\n tabWrapper: {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n },\r\n chips: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n chip: {\r\n marginLeft: '8px'\r\n },\r\n dropZone: {\r\n minHeight: 'fit-content !important' ,\r\n '& .MuiDropzoneArea-root' : {\r\n minHeight: 'fit-content !important'\r\n }\r\n },\r\n dropZoneFont: { \r\n '& .MuiDropzoneArea-text': {\r\n fontSize: '1em',\r\n }\r\n },\r\n taskHistorykContentWrapper: {\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column',\r\n },\r\n historyActivityContainer: {\r\n flex: 1,\r\n position: 'relative',\r\n flexFlow: 'column',\r\n minHeight: 267,\r\n },\r\n historyActivityWrapper: {\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n left: 0,\r\n bottom: 0,\r\n },\r\n divider: {\r\n // marginTop: 10,\r\n width: '100%',\r\n },\r\n marginBottom: {\r\n marginBottom: '16px',\r\n },\r\n secondaryDescription: {\r\n flex: 1,\r\n maxWidth: '100%',\r\n overflow: 'hidden',\r\n },\r\n subTitle: {\r\n fontSize: 14,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n maxWidth: '97%',\r\n color: '#000000DE'\r\n },\r\n description: {\r\n fontSize: 12,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n maxWidth: '97%',\r\n color: '#000000DE'\r\n },\r\n optionWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n optionField: {\r\n flex: 1\r\n },\r\n reminderInput: {\r\n padding: '6px 0 6px !important'\r\n }\r\n })\r\n);\r\n\r\nexport enum PhoneFormTab {\r\n details = 0,\r\n documents = 1,\r\n activity = 2\r\n}\r\n\r\nexport enum TaskOptionEnum {\r\n none = 0,\r\n matter,\r\n client,\r\n phone,\r\n enquiry\r\n}\r\n\r\nexport interface TaskInput {\r\n guid: string | null;\r\n description: string | null;\r\n notes: string | null;\r\n // tslint:disable-next-line: no-any\r\n files: any;\r\n assignedTo: string | null;\r\n allocatedToEntityType: number | null;\r\n assignedBy: string | null;\r\n priority: string | null;\r\n category: string | null;\r\n dueDate: Date | null;\r\n estimatedEffort: string | null;\r\n startDate: Date | null;\r\n completionDate: Date | null;\r\n completionNotes: string | null;\r\n duration: string | null;\r\n activityText: string | null;\r\n reminderOffset: string | null;\r\n ccUserIds: string | null;\r\n}\r\n\r\ninterface PhoneFormDialogProps {\r\n isOpen: boolean;\r\n onClose?: () => void;\r\n isCreate: boolean;\r\n guid?: string | null;\r\n matterFileNumber?: string;\r\n matterGuid?: string;\r\n matterTitle?: string;\r\n defaultPriority?: IAutoCompleteItem | null;\r\n reminderDefaultConfig?: TaskAndPhoneMessageConfig;\r\n enquiryDefaultConfig?: EnquiryDefaultConfig;\r\n defaultMatter?: IAutoCompleteItem;\r\n}\r\n\r\ninterface EnquiryForm {\r\n isEmailNotification: boolean;\r\n isSentAcknowledgementEmail: boolean;\r\n isShowReferrer: boolean;\r\n areaOfLaw: IAreaOfLawAutoCompleteItem | null;\r\n email: string | null;\r\n source: IAutoCompleteItem | null;\r\n office: IAutoCompleteItem | null;\r\n referrer: IAutoCompleteItem | null;\r\n sourceNotes: string | null;\r\n followUpDueDate: Date | null;\r\n assignmentFollowUpDueReminder: IAutoCompleteItem | null;\r\n}\r\ninterface PhoneForm extends EnquiryForm {\r\n option: TaskOptionEnum;\r\n handleCreateAndClose: boolean | undefined;\r\n handleCreateAndNew: boolean | undefined;\r\n handleUpdate: boolean | undefined;\r\n dueDate: Date | null;\r\n matter: IAutoCompleteItem | null;\r\n client: IAutoCompleteItem | null;\r\n category: IAutoCompleteItem | null;\r\n assignedBy: IAutoCompleteItem | null;\r\n // taskOwner: string | null;\r\n notes: EditorState;\r\n priority?: IAutoCompleteItem | null;\r\n // tslint:disable-next-line: no-any\r\n from: IndividualNameSummary | string | null | any;\r\n to: IAutoCompleteItem | null;\r\n phoneNumber: IAutoCompleteItem | null;\r\n isFromSwitched: boolean;\r\n isOrganisationSwitched: boolean;\r\n isPhoneCall: boolean;\r\n isReturnedCall: boolean;\r\n isWillCallAgain: boolean;\r\n // tslint:disable-next-line: no-any\r\n organisation: IAutoCompleteItem | string | null | any;\r\n files: DocumentFile[];\r\n\r\n allocatedToEntityType: number | null;\r\n activityText: string | null;\r\n reminderOffset: IAutoCompleteItem | null;\r\n cc: IAutoCompleteItem[] | null;\r\n messageTitle: string | null;\r\n}\r\n\r\ninterface PhoneFormState {\r\n hideToolbar: boolean;\r\n isOpen: boolean;\r\n showDiscard?: boolean;\r\n isCreate: boolean;\r\n isChanged: boolean;\r\n isUserLoading: boolean;\r\n isLoading: boolean;\r\n onSubmitLoading: boolean;\r\n tab: PhoneFormTab;\r\n taskDetails?: Detail;\r\n}\r\n\r\nfunction StyledRadio(props: RadioProps) {\r\n const classes = useStyles();\r\n\r\n return (\r\n }\r\n icon={}\r\n {...props}\r\n />\r\n );\r\n}\r\n \r\nexport const PhoneFormDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n \r\n const [filesKey, setKey] = useState('');\r\n\r\n const createEnquiry = useCreateEnquiryMutation();\r\n\r\n const [phoneForm, setPhoneForm] = useState({\r\n option: props.matterGuid || props.defaultMatter ? TaskOptionEnum.matter : TaskOptionEnum.none,\r\n handleCreateAndClose: false,\r\n handleCreateAndNew: false,\r\n handleUpdate: false,\r\n \r\n dueDate: moment().set('hours', 17).set('minutes', 0).set('seconds', 0).set('milliseconds', 0).toDate(),\r\n matter: props.matterGuid && props.matterTitle ? {label: props.matterTitle, value: props.matterGuid} : props.defaultMatter ? props.defaultMatter : null,\r\n client: null,\r\n category: null,\r\n assignedBy: null,\r\n priority: props.defaultPriority,\r\n // taskOwner: null,\r\n notes: EditorState.createEmpty(),\r\n isFromSwitched: true,\r\n from: null,\r\n to: null,\r\n phoneNumber: null,\r\n isOrganisationSwitched: false,\r\n isPhoneCall: false,\r\n isReturnedCall: false,\r\n isWillCallAgain: false,\r\n organisation: null,\r\n files: [],\r\n\r\n allocatedToEntityType: null,\r\n activityText: null,\r\n reminderOffset: props.reminderDefaultConfig\r\n ? { label: props.reminderDefaultConfig.reminder, value: props.reminderDefaultConfig.reminder }\r\n : { label: 'None', value: 'None' },\r\n messageTitle: null,\r\n\r\n // enquiry\r\n isEmailNotification: true,\r\n isSentAcknowledgementEmail: false,\r\n isShowReferrer: false,\r\n areaOfLaw: null,\r\n email: null,\r\n source: null,\r\n office: null,\r\n referrer: null,\r\n sourceNotes: null,\r\n followUpDueDate: null,\r\n assignmentFollowUpDueReminder: props.enquiryDefaultConfig ? { label: props.enquiryDefaultConfig.reminder, value: props.enquiryDefaultConfig.reminder } : null,\r\n cc: [],\r\n });\r\n\r\n const [state, setState] = useState({\r\n hideToolbar: true,\r\n isOpen: props.isOpen,\r\n showDiscard: false,\r\n isCreate: props.isCreate,\r\n isChanged: false,\r\n isUserLoading: false,\r\n isLoading: false,\r\n onSubmitLoading: false,\r\n tab: PhoneFormTab.details\r\n });\r\n \r\n const [getExtendPhoneTaskDetails, extendPhoneTaskDetailsQuery] = \r\n useLazyQuery(EXTEND_PHONE_TASK_DETAILS);\r\n\r\n const [matterData, setMatterData] = useState();\r\n\r\n useEffect(() => {\r\n if (createEnquiry.data && !createEnquiry.loading && !createEnquiry.error) {\r\n if (createEnquiry.data.createEnquiry.status) {\r\n showNotification(null, 'Successfully submitted', 'info');\r\n } else {\r\n showNotification('Failed to Save Enquiry', createEnquiry.data.createEnquiry.error, 'error');\r\n }\r\n }\r\n if (createEnquiry.error) {\r\n showNotification('Failed to Save Enquiry', createEnquiry.error.message, 'error');\r\n }\r\n }, [createEnquiry.data, createEnquiry.loading, createEnquiry.error]);\r\n\r\n // useEffect(() => {\r\n // if (props.matterGuid) {\r\n // setState((prevState) => {\r\n // return {\r\n // ...prevState,\r\n // option: TaskOptionEnum.matter\r\n // };\r\n // });\r\n // }\r\n // // tslint:disable-next-line: align\r\n // }, [props.matterGuid]);\r\n\r\n useEffect(() => {\r\n if (!state.isCreate && props.guid) {\r\n fetchTaskDetails(props.guid);\r\n } else {\r\n fetchUser();\r\n }\r\n // tslint:disable-next-line: align\r\n }, [props.guid, props.isOpen]);\r\n\r\n const fetchTaskDetails = (guid: string) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: true\r\n };\r\n });\r\n\r\n const taskDetailsParams: TaskDetailsParam = {\r\n guid: guid\r\n };\r\n\r\n retrieveTaskDetailsData(\r\n taskDetailsParams,\r\n true,\r\n // tslint:disable-next-line: no-console\r\n (data: TaskDetailsData) => onTaskDetailsRetrieved(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n\r\n };\r\n\r\n const onTaskDetailsRetrieved = (data: TaskDetailsData) => {\r\n // tslint:disable-next-line: no-console\r\n \r\n if (data && data.task && data.task.detail) {\r\n\r\n const taskDetails = data.task.detail;\r\n const appUser = data.appUser;\r\n\r\n if (!props.isCreate && taskDetails.matterId) {\r\n fetchMatterDetails(taskDetails.matterId);\r\n }\r\n\r\n let tempOption = TaskOptionEnum.none;\r\n\r\n switch (taskDetails.__typename) {\r\n case 'ClientTask': {\r\n tempOption = TaskOptionEnum.client;\r\n break;\r\n }\r\n case 'MatterTask': {\r\n tempOption = TaskOptionEnum.matter;\r\n break;\r\n }\r\n case 'PhoneTask': {\r\n tempOption = TaskOptionEnum.phone;\r\n break;\r\n }\r\n default: {\r\n tempOption = TaskOptionEnum.none;\r\n break;\r\n }\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n // option: tempOption,\r\n taskDetails: taskDetails\r\n };\r\n });\r\n \r\n let editorState = EditorState.createEmpty();\r\n\r\n if (taskDetails.notes && taskDetails.notes !== null) {\r\n const contentBlock = htmlToDraft(taskDetails.notes);\r\n if (contentBlock) {\r\n const contentState = ContentState.createFromBlockArray(contentBlock.contentBlocks);\r\n editorState = EditorState.createWithContent(contentState);\r\n }\r\n }\r\n\r\n if (taskDetails.fromNameGuid) {\r\n // get extend phone task details\r\n getExtendPhoneTaskDetails({\r\n variables: {\r\n nameGuid: taskDetails.fromNameGuid,\r\n // to cater for old records. If there is no data for IsFromDataSource, always pass true\r\n isFromDataSource: taskDetails.isFromNameFromDataSource ? taskDetails.isFromNameFromDataSource : true \r\n }\r\n });\r\n }\r\n\r\n setKey('' + taskDetails.guid);\r\n\r\n let reminderOffset: IAutoCompleteItem = { label: 'None', value: 'None'};\r\n \r\n if (taskDetails.reminderOffset) {\r\n reminderOffset = { label: taskDetails.reminderOffset, value: taskDetails.reminderOffset };\r\n } \r\n\r\n setPhoneForm((prevPhoneForm) => {\r\n return {\r\n ...prevPhoneForm,\r\n option: tempOption,\r\n dueDate: taskDetails.dueDate ? moment(taskDetails.dueDate).toDate() : null,\r\n // duration: taskDetails.duration ? taskDetails.duration : '00:00', // moment(taskDetails.duration, 'HH:mm').toString()\r\n // tslint:disable-next-line: max-line-length\r\n matter: taskDetails.matterGuid && taskDetails.matterDescription ? {label: taskDetails.matterDescription, value: taskDetails.matterGuid} : null,\r\n // tslint:disable-next-line: max-line-length\r\n client: taskDetails.clientGuid && taskDetails.clientDescription ? {label: taskDetails.clientDescription, value: taskDetails.clientGuid} : null,\r\n // tslint:disable-next-line: max-line-length\r\n category: taskDetails.category && taskDetails.categoryDescription ? {label: taskDetails.categoryDescription, value: taskDetails.category} : null,\r\n // tslint:disable-next-line: max-line-length\r\n assignedBy: taskDetails.assignedBy && taskDetails.assignedByName ? {label: taskDetails.assignedByName, value: taskDetails.assignedBy} : {label: appUser.name, value: appUser.userId},\r\n // tslint:disable-next-line: max-line-length\r\n priority: taskDetails.priority && taskDetails.priorityDescription ? {label: taskDetails.priorityDescription, value: taskDetails.priority} : null,\r\n \r\n // tslint:disable-next-line: max-line-length\r\n from: taskDetails.fromName && taskDetails.fromNameGuid \r\n ? {\r\n label: taskDetails.fromName, \r\n value: taskDetails.fromNameGuid, \r\n nameId: taskDetails.fromNameId, \r\n guidID: taskDetails.fromNameGuid,\r\n isFromDataSource: taskDetails.isFromNameFromDataSource\r\n } \r\n : taskDetails.fromName ? taskDetails.fromName : null,\r\n // tslint:disable-next-line: max-line-length\r\n to: taskDetails.assignedTo && taskDetails.assignedToName ? {label: taskDetails.assignedToName, value: taskDetails.assignedTo} : null,\r\n phoneNumber: taskDetails.phoneNumber ? { label: taskDetails.phoneNumber, value: taskDetails.phoneNumber } : null,\r\n \r\n isPhoneCall: taskDetails.isPhoneCall,\r\n isReturnedCall: taskDetails.isReturnedCall,\r\n isWillCallAgain: taskDetails.isWillCallAgain,\r\n // tslint:disable-next-line: max-line-length\r\n organisation: taskDetails.organisationGuid && taskDetails.organisation \r\n ? {\r\n label: taskDetails.organisation, \r\n value: taskDetails.organisationGuid,\r\n isFromDataSource: taskDetails.isOrganisationFromDataSource\r\n } \r\n : taskDetails.organisation ? taskDetails.organisation : null,\r\n \r\n isOrganisationSwitched: taskDetails.organisationGuid && taskDetails.organisation ? true : false,\r\n isFromSwitched: (taskDetails.fromName && taskDetails.fromNameGuid) ? true : false,\r\n \r\n notes: editorState,\r\n\r\n files: taskDetails.files ? taskDetails.files : [],\r\n\r\n allocatedToEntityType: taskDetails.allocatedToEntityType, \r\n\r\n reminderOffset: reminderOffset,\r\n\r\n cc: taskDetails.ccUserList ? taskDetails.ccUserList.map((ccUser: CcUserList) => {\r\n return {\r\n value: ccUser.userID, \r\n label: ccUser.isStaff ? ccUser.staffName : ccUser.friendlyName,\r\n email: ccUser.email,\r\n roleName: ccUser.roleName\r\n // tslint:disable-next-line: no-any\r\n } as any;\r\n }) : [],\r\n\r\n messageTitle: taskDetails.messageTitle\r\n };\r\n });\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: false,\r\n };\r\n });\r\n };\r\n\r\n const fetchMatterDetails = (matterId: number) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isMatterLoading: true\r\n };\r\n });\r\n\r\n fetchBasicMatterDetailsData(\r\n true, // This should always be a new request.\r\n matterId,\r\n (data: MatterData) => handleMatterDataFetch(data), \r\n (reason) => {\r\n showNotification('Failed to basic matter details', reason, 'error'); \r\n }\r\n );\r\n \r\n };\r\n\r\n const handleMatterDataFetch = (data: MatterData) => {\r\n if (data && !data.loading && data.matter) {\r\n if (data.matter) {\r\n setMatterData(data.matter);\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isMatterLoading: false\r\n };\r\n });\r\n }\r\n }\r\n\r\n };\r\n\r\n const fetchUser = () => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isUserLoading: true\r\n };\r\n });\r\n\r\n fetchAppUserData(\r\n false,\r\n // tslint:disable-next-line: no-console\r\n (data: AppUserData) => onUserRetrieved(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onUserRetrieved = (data: AppUserData) => {\r\n setPhoneForm({\r\n ...phoneForm,\r\n assignedBy: {\r\n label: data.appUser.name,\r\n value: data.appUser.userId\r\n }\r\n });\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isUserLoading: false\r\n };\r\n });\r\n };\r\n\r\n const handleOption = (input: FieldInputProps, form: FormApi, values: AnyObject) => (event: React.ChangeEvent) => {\r\n \r\n // tslint:disable-next-line: radix\r\n const optionValue = parseInt((event.target as HTMLInputElement).value);\r\n\r\n input.onChange(optionValue);\r\n \r\n if (optionValue === TaskOptionEnum.enquiry && values.to && values.to.isUser === false) {\r\n // clear to fields when options is changed\r\n form.change('to', null);\r\n form.change('followUpDueDate', null);\r\n form.change('allocatedToEntityType', null);\r\n }\r\n\r\n if (optionValue === TaskOptionEnum.enquiry) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n tab: PhoneFormTab.details\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const required = (value: any) => {\r\n return value ? undefined : 'Required';\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onSubmit = async (form: FormApi, values: PhoneForm) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true\r\n };\r\n });\r\n \r\n const html = draftToHtml(convertToRaw(values.notes.getCurrentContent()));\r\n\r\n if (values.option === TaskOptionEnum.enquiry) {\r\n // create enquiry\r\n\r\n try {\r\n await createEnquiry.create({\r\n variables: {\r\n input: {\r\n nameGuid: values.from ? values.from.value : undefined,\r\n firstName: values.isFromSwitched ? values.from.firstName : separateName(values.from).firstName,\r\n lastName: values.isFromSwitched ? values.from.lastName : separateName(values.from).lastName,\r\n phone: values.phoneNumber ? values.phoneNumber.value : undefined,\r\n organisation: values.isOrganisationSwitched ? values.organisation ? values.organisation.label : undefined : values.organisation ?? undefined,\r\n organisationGuid: values.isOrganisationSwitched ? values.organisation.value : undefined,\r\n natureOfEnquiry: removeTagsAndStyles(html),\r\n areaOfLaw: values.areaOfLaw?.label,\r\n // practiceAreaGuidID: values.areaOfLaw?.value,\r\n email: values.email ?? undefined,\r\n source: values.source?.label,\r\n office: values.office?.label, // location\r\n referrerGuid: values.referrer?.value, // contact\r\n sourceNotes: values.sourceNotes ?? undefined,\r\n assignedTo: values.to?.value,\r\n followUpDueDate: values.to ? values.followUpDueDate ?? undefined : undefined,\r\n reminderOffset: values.to && values.assignmentFollowUpDueReminder ? values.assignmentFollowUpDueReminder.value : undefined,\r\n assignedBy: values.assignedBy?.value,\r\n sendNotification: values.isEmailNotification,\r\n isSendEnquiryResponse: values.isSentAcknowledgementEmail,\r\n initialEnquiryDate: moment().toDate(),\r\n ...(values.isFromSwitched && values.from && typeof values.from !== 'string' && {\r\n isNameFromDataSource: values.from.isFromDataSource,\r\n }),\r\n ...(values.isOrganisationSwitched && values.organisation && typeof values.organisation !== 'string' && {\r\n isOrganisationFromDataSource: values.organisation.isFromDataSource,\r\n })\r\n }\r\n }\r\n });\r\n \r\n if (values.handleCreateAndClose) {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n } \r\n \r\n if (values.handleCreateAndNew) {\r\n setTimeout(() => formReset(form), 1000);\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n }\r\n } catch (error) {\r\n showNotification('Failed to Save Enquiry', error, 'error');\r\n }\r\n\r\n } else {\r\n const taskInput: TaskInput = {\r\n guid: props.guid ? props.guid : null,\r\n notes: html,\r\n files: GetFiles(values.files),\r\n assignedBy: values.assignedBy ? values.assignedBy.value : null,\r\n priority: values.priority ? values.priority.label : null,\r\n category: values.category ? values.category.label : null,\r\n dueDate: values.dueDate ? values.dueDate : null,\r\n \r\n // adhoc parametter\r\n assignedTo: values.to ? values.to.value : null,\r\n completionDate: null,\r\n completionNotes: null,\r\n description: '',\r\n duration: null,\r\n estimatedEffort: null,\r\n startDate: null,\r\n allocatedToEntityType: values.allocatedToEntityType,\r\n activityText: values.activityText,\r\n reminderOffset: values.reminderOffset ? values.reminderOffset.value : null,\r\n ccUserIds: values.cc ? values.cc.map((cc: IAutoCompleteItem) => cc.value).join(',') : null\r\n };\r\n \r\n // tslint:disable-next-line: no-console\r\n // console.log('reminder offset', values.reminderOffset ? values.reminderOffset.value : null);\r\n \r\n const taskMatter = values.matter ? values.matter : null;\r\n const taskClient = values.client ? values.client : null;\r\n\r\n let isFromNameFromDataSource = values.isFromSwitched && values.from && typeof values.from !== 'string' ? values.from.isFromDataSource : false;\r\n let isOrganisationFromDataSource =\r\n values.isOrganisationSwitched && values.organisation && typeof values.organisation !== 'string' ? values.organisation.isFromDataSource : false; \r\n \r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isChanged: false\r\n };\r\n });\r\n \r\n if (values.handleCreateAndClose) {\r\n // tslint:disable-next-line: no-console\r\n console.log('handleCreateAndClose', form, values);\r\n \r\n createTask(\r\n taskInput, \r\n values.option,\r\n taskMatter, \r\n taskClient,\r\n !values.isFromSwitched ? values.from : values.from.label,\r\n values.isFromSwitched ? values.from ? values.from.guidID : null : null,\r\n values.phoneNumber,\r\n !values.isOrganisationSwitched ? values.organisation : null,\r\n values.isOrganisationSwitched ? values.organisation ? values.organisation.value : null : null,\r\n values.isPhoneCall,\r\n values.isReturnedCall,\r\n values.isWillCallAgain,\r\n isFromNameFromDataSource,\r\n isOrganisationFromDataSource,\r\n true, \r\n form, \r\n false,\r\n values.messageTitle\r\n );\r\n \r\n } else if (values.handleCreateAndNew) {\r\n // tslint:disable-next-line: no-console\r\n console.log('handleCreateAndNew', form, values);\r\n \r\n createTask(\r\n taskInput, \r\n values.option,\r\n taskMatter, \r\n taskClient, \r\n !values.isFromSwitched ? values.from : values.from.label,\r\n values.isFromSwitched ? (values.from ? values.from.guidID : null) : null,\r\n values.phoneNumber,\r\n !values.isOrganisationSwitched ? values.organisation : null,\r\n values.isOrganisationSwitched ? values.organisation ? values.organisation.value : null : null,\r\n values.isPhoneCall,\r\n values.isReturnedCall,\r\n values.isWillCallAgain,\r\n isFromNameFromDataSource,\r\n isOrganisationFromDataSource,\r\n false, \r\n form, \r\n true,\r\n values.messageTitle\r\n );\r\n \r\n } else {\r\n // tslint:disable-next-line: no-console\r\n console.log('handleUpdate', form, values);\r\n \r\n updateTask(\r\n taskInput, \r\n values.option,\r\n taskMatter, \r\n taskClient, \r\n !values.isFromSwitched ? values.from : null,\r\n values.isFromSwitched ? values.from ? values.from.guidID : null : null,\r\n values.phoneNumber,\r\n !values.isOrganisationSwitched ? values.organisation : null,\r\n values.isOrganisationSwitched ? values.organisation ? values.organisation.value : null : null,\r\n values.isPhoneCall,\r\n values.isReturnedCall,\r\n values.isWillCallAgain,\r\n isFromNameFromDataSource,\r\n isOrganisationFromDataSource,\r\n true,\r\n values.messageTitle\r\n );\r\n }\r\n }\r\n };\r\n\r\n const GetFiles = (files: DocumentFile[]) => {\r\n return files.map((document: DocumentFile) => {\r\n return {\r\n file: document.file,\r\n name: document.name,\r\n guidID: document.guidID,\r\n status: document.status\r\n };\r\n });\r\n };\r\n\r\n const formReset = (form: FormApi) => {\r\n form.setConfig('keepDirtyOnReinitialize', false);\r\n form.reset();\r\n form.setConfig('keepDirtyOnReinitialize', true);\r\n };\r\n\r\n const createTask = (\r\n input: TaskInput, \r\n option: TaskOptionEnum,\r\n taskMatter: IAutoCompleteItem | null, \r\n taskClient: IAutoCompleteItem | null, \r\n fromName: string | null,\r\n fromNameGuid: string | null,\r\n phoneNumber: IAutoCompleteItem | null,\r\n organisation: string | null,\r\n organisationGuid: string | null,\r\n isPhoneCall: boolean | null,\r\n isReturnedCall: boolean | null,\r\n isWillCallAgain: boolean | null,\r\n isFromNameFromDataSource: boolean | null,\r\n isOrganisationFromDataSource: boolean | null,\r\n isForceClosed: boolean, \r\n form: FormApi,\r\n isCreatAndNew: boolean,\r\n messageTitle: string | null\r\n ) => {\r\n\r\n client\r\n .mutate({\r\n mutation: CreatePhoneTaskMutation,\r\n variables: { \r\n // tslint:disable-next-line: max-line-length\r\n clientGuid: (option !== TaskOptionEnum.none && option !== TaskOptionEnum.matter) ? taskClient ? taskClient.value : null : null,\r\n // tslint:disable-next-line: max-line-length\r\n matterGuid: (option !== TaskOptionEnum.none && option !== TaskOptionEnum.client) ? taskMatter ? taskMatter.value : null : null,\r\n fromName,\r\n fromNameGuid,\r\n phoneNumber: phoneNumber ? phoneNumber.value : null,\r\n organisation,\r\n organisationGuid,\r\n isPhoneCall,\r\n isReturnedCall,\r\n isWillCallAgain,\r\n isFromNameFromDataSource: isFromNameFromDataSource,\r\n isOrganisationFromDataSource: isOrganisationFromDataSource,\r\n input: input,\r\n messageTitle\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n \r\n if (isCreatAndNew) {\r\n formReset(form);\r\n } else {\r\n if (isForceClosed && props.onClose) {\r\n props.onClose();\r\n } \r\n }\r\n \r\n } else {\r\n showNotification('Failed to save phone task', results.data.error, 'error');\r\n }\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to save phone task', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n const updateTask = (\r\n input: TaskInput, \r\n option: TaskOptionEnum,\r\n taskMatter: IAutoCompleteItem | null, \r\n taskClient: IAutoCompleteItem | null, \r\n fromName: string | null,\r\n fromNameGuid: string | null,\r\n phoneNumber: IAutoCompleteItem | null,\r\n organisation: string | null,\r\n organisationGuid: string | null,\r\n isPhoneCall: boolean | null,\r\n isReturnedCall: boolean | null,\r\n isWillCallAgain: boolean | null,\r\n isFromNameFromDataSource: boolean | null,\r\n isOrganisationFromDataSource: boolean | null,\r\n isForceClosed: boolean,\r\n messageTitle: string | null\r\n ) => {\r\n \r\n client\r\n .mutate({\r\n mutation: UpdatePhoneTaskMutation,\r\n variables: { \r\n // tslint:disable-next-line: max-line-length\r\n clientGuid: (option !== TaskOptionEnum.none && option !== TaskOptionEnum.matter) ? taskClient ? taskClient.value : null : null,\r\n // tslint:disable-next-line: max-line-length\r\n matterGuid: (option !== TaskOptionEnum.none && option !== TaskOptionEnum.client) ? taskMatter ? taskMatter.value : null : null,\r\n fromName,\r\n fromNameGuid,\r\n phoneNumber: phoneNumber ? phoneNumber.value : null,\r\n organisation,\r\n organisationGuid,\r\n isPhoneCall,\r\n isReturnedCall,\r\n isWillCallAgain,\r\n isFromNameFromDataSource: isFromNameFromDataSource,\r\n isOrganisationFromDataSource: isOrganisationFromDataSource,\r\n input: input,\r\n messageTitle: messageTitle\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n if (isForceClosed && props.onClose) {\r\n props.onClose();\r\n } \r\n } else {\r\n showNotification('Failed to update general task', results.data.error, 'error');\r\n }\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update general task', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const closePanel = (form: FormApi, values: any, pristine: boolean) => { \r\n if (!pristine) {\r\n // code here...\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const onReset = (form: FormApi, values: AnyObject) => {\r\n formReset(form);\r\n };\r\n\r\n const onFocusEditor = (event: SyntheticEvent) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n hideToolbar: false\r\n };\r\n });\r\n };\r\n\r\n const onBlurEditor = (event: SyntheticEvent) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n hideToolbar: true\r\n };\r\n });\r\n };\r\n\r\n const onClose = () => {\r\n if (state.isChanged) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const onDiscardChanges = (agree: boolean) => {\r\n if (agree) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n\r\n } else {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any no-shadowed-variable\r\n const onFormValueChanged = (form: FormApi, changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n const getPhoneNameId = (values: AnyObject) => {\r\n if (values.from && typeof values.from === 'object') {\r\n return values.from.nameId;\r\n }\r\n if (values.from && typeof values.from === 'string') {\r\n return 0;\r\n }\r\n return 0;\r\n };\r\n\r\n const onSwitch = (form: FormApi, values: AnyObject, name: string) => {\r\n if (name === 'from') {\r\n form.batch(() => {\r\n form.change('from', null); // clear the selector value\r\n \r\n form.change('isFromSwitched', !values.isFromSwitched); \r\n \r\n });\r\n } else if (name === 'organisation') {\r\n form.batch(() => {\r\n form.change('isOrganisationSwitched', !values.isOrganisationSwitched);\r\n // form.change('organisationSelector', null); \r\n // form.change('organisationGuid', null);\r\n // form.change('organisation', '');\r\n });\r\n }\r\n };\r\n\r\n const handleTabChange = (event: React.ChangeEvent<{}>, newValue: PhoneFormTab) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n tab: newValue\r\n };\r\n });\r\n };\r\n\r\n const onFileClicked = (file: DocumentFile) => {\r\n if (file && file.url) {\r\n var win = window.open(file.url, '_blank');\r\n if (win) {\r\n win.focus();\r\n } \r\n }\r\n };\r\n\r\n const getFollowUpDueDefaultValue = () => {\r\n // check outcome date (FollowUpDue)\r\n let outcomeDate: Date | null = null;\r\n\r\n if (props.enquiryDefaultConfig) {\r\n\r\n let hours = 0;\r\n let minutes = 0;\r\n let validTimeOfDay = false;\r\n\r\n if (props.enquiryDefaultConfig.timeOfDay && props.enquiryDefaultConfig.timeOfDay.toLowerCase() !== 'invalid date') {\r\n var timeOfDaySplit = props.enquiryDefaultConfig.timeOfDay ? props.enquiryDefaultConfig.timeOfDay.split(':') : null;\r\n\r\n if (timeOfDaySplit) {\r\n validTimeOfDay = true;\r\n hours = Number(timeOfDaySplit[0]);\r\n minutes = Number(timeOfDaySplit[1]);\r\n }\r\n }\r\n\r\n if (props.enquiryDefaultConfig.isCalculatedDays) {\r\n\r\n let date = addBusinessDays(moment().toDate(), props.enquiryDefaultConfig.addDays ? props.enquiryDefaultConfig.addDays : 0);\r\n\r\n if (validTimeOfDay) {\r\n outcomeDate = date\r\n .set('hour', hours)\r\n .set('minute', minutes)\r\n .toDate();\r\n } else {\r\n outcomeDate = date.toDate();\r\n }\r\n } else if (props.enquiryDefaultConfig.isCalculatedHours) {\r\n let addhours = props.enquiryDefaultConfig.addHours ? props.enquiryDefaultConfig.addHours : 0;\r\n\r\n outcomeDate = moment()\r\n .add(addhours, 'hour')\r\n .toDate();\r\n }\r\n }\r\n\r\n return outcomeDate;\r\n };\r\n \r\n const onDropDownTeamAndUserSelect = (\r\n form: FormApi,\r\n values: AnyObject,\r\n // tslint:disable-next-line: no-any\r\n input: FieldInputProps,\r\n // tslint:disable-next-line: no-any\r\n selection: IAutoCompleteItem | any,\r\n name: string,\r\n isUser: boolean,\r\n ) => {\r\n if (name === 'to') {\r\n \r\n let assignedTo = selection && selection.value && selection.label ? { value: selection.value, label: selection.label, isUser: isUser } : null;\r\n \r\n form.batch(() => {\r\n \r\n form.change('to', assignedTo);\r\n form.change('allocatedToEntityType', isUser ? AllocatedToEntityType.user : AllocatedToEntityType.team);\r\n \r\n if ((values.followUpDueDate === undefined || values.followUpDueDate === null) && values.option === TaskOptionEnum.enquiry) {\r\n // only set assignment's follow up due value when we select assigned to value\r\n let followUpDueValue = getFollowUpDueDefaultValue();\r\n form.change('followUpDueDate', followUpDueValue);\r\n }\r\n\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any max-line-length\r\n const onDropDownSelect = (form: FormApi, values: AnyObject, input: FieldInputProps, selection: IndividualNameSummary | IAutoCompleteItem | any, name: string) => {\r\n // input.OnChange(selection.value);\r\n if (name === 'from') {\r\n form.batch(() => {\r\n // Update required fields\r\n if (selection) {\r\n\r\n // query extend phone details base on selector id using lazyQuery\r\n getExtendPhoneTaskDetails({\r\n variables: {\r\n nameGuid: selection.value,\r\n isFromDataSource: selection.isFromDataSource\r\n }\r\n });\r\n\r\n if (selection && selection.organisationName && selection.organisationGuid) {\r\n // Only change if the selected individual has an organisation. \r\n const organisationSelectorValue: IAutoCompleteItem = {\r\n label: selection.organisationName, \r\n value: selection.organisationGuid\r\n };\r\n if (values && !values.organisation) {\r\n // tslint:disable-next-line: max-line-length\r\n form.change('organisation', selection && selection.organisationName ? organisationSelectorValue : null);\r\n form.change('isOrganisationSwitched', true);\r\n }\r\n }\r\n\r\n if (selection && selection.emailAddress) {\r\n form.change('email', selection.emailAddress);\r\n } else {\r\n form.change('email', null);\r\n }\r\n\r\n if (selection && selection.phone !== null && selection.phone.length) {\r\n\r\n // if (values && !values.phoneNumber) {\r\n const tempPhoneNumber: IAutoCompleteItem = {\r\n label: selection.phone,\r\n value: selection.phone,\r\n };\r\n form.change('phoneNumber', tempPhoneNumber);\r\n // }\r\n } else {\r\n form.change('phoneNumber', null);\r\n }\r\n } \r\n });\r\n }\r\n };\r\n\r\n const getClientAndMatter = () => {\r\n \r\n if (phoneForm.matter !== null && phoneForm.client === null && matterData) {\r\n return (\r\n \r\n
\r\n
{matterData?.client}
\r\n
{`${matterData?.fileNumber} - ${matterData?.title}`}
\r\n
\r\n
\r\n );\r\n } else if (phoneForm.matter === null && phoneForm.client !== null) {\r\n return (\r\n \r\n

{`${phoneForm.client!.label}`}

\r\n
\r\n );\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n const extendPhoneTaskDetails = (values: AnyObject) => {\r\n\r\n if (!values.isFromSwitched) {\r\n return
;\r\n } else if (!values.from) {\r\n return
;\r\n } else if (extendPhoneTaskDetailsQuery.data && extendPhoneTaskDetailsQuery.data.party && \r\n !extendPhoneTaskDetailsQuery.loading && !extendPhoneTaskDetailsQuery.error) {\r\n\r\n const { messageDetails, matterDetails, contactDetails } = extendPhoneTaskDetailsQuery.data.party.phoneTaskDetails;\r\n\r\n return (\r\n <>\r\n {messageDetails && (messageDetails.messagesNotResponded > 0 || messageDetails.messagesReceived > 0) && (\r\n \r\n \r\n \r\n )}\r\n {matterDetails && (matterDetails.closedMatters > 0 || matterDetails.totalMatters > 0) && (\r\n \r\n \r\n \r\n )}\r\n {contactDetails && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n return
;\r\n };\r\n\r\n const actionButton = (\r\n // tslint:disable-next-line: no-any\r\n form: FormApi,\r\n submitting: boolean,\r\n pristine: boolean,\r\n // tslint:disable-next-line: no-any\r\n values: any\r\n ) => {\r\n return (\r\n
\r\n {/* */}\r\n {!state.isCreate ? (\r\n
\r\n {\r\n form.change('handleCreateAndClose', false);\r\n form.change('handleCreateAndNew', false);\r\n form.change('handleUpdate', true);\r\n }}\r\n disabled={submitting || pristine || state.onSubmitLoading}\r\n >\r\n Update\r\n \r\n
\r\n ) : (\r\n
\r\n {\r\n form.change('handleCreateAndClose', true);\r\n form.change('handleCreateAndNew', false);\r\n form.change('handleUpdate', false);\r\n }}\r\n disabled={submitting || pristine || state.onSubmitLoading}\r\n >\r\n Save and Close\r\n \r\n {\r\n form.change('handleCreateAndNew', true);\r\n form.change('handleCreateAndClose', false);\r\n form.change('handleUpdate', false);\r\n }}\r\n disabled={submitting || pristine || state.onSubmitLoading}\r\n >\r\n Save and New\r\n \r\n
\r\n )}\r\n
\r\n closePanel(form, values, pristine)}\r\n >\r\n Cancel\r\n \r\n onReset(form, values)}\r\n disabled={submitting || pristine}\r\n className={classes.hidden}\r\n >\r\n Reset\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n const heading = (option: TaskOptionEnum, isCreate: boolean) => {\r\n\r\n if (option === TaskOptionEnum.none) {\r\n if (isCreate) {\r\n return 'Create Phone Message';\r\n }\r\n return 'Edit Phone Message';\r\n } else {\r\n if (isCreate) {\r\n return `Create ${TaskOptionEnum[option]} Message`;\r\n }\r\n return `Edit ${TaskOptionEnum[option]} Message`;\r\n }\r\n };\r\n \r\n const filteredField = (option: TaskOptionEnum, form: FormApi) => {\r\n if (option === TaskOptionEnum.matter) {\r\n return (\r\n
\r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n value={input.value ? input.value : null}\r\n error={meta.error && meta.touched}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Matter is required'\r\n : ''\r\n }\r\n />\r\n )}\r\n \r\n
\r\n );\r\n } else if (option === TaskOptionEnum.client) {\r\n return (\r\n
\r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n value={input.value ? input.value : null}\r\n error={meta.error && meta.touched}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Client is required'\r\n : ''\r\n }\r\n />\r\n )}\r\n \r\n
\r\n );\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n const phoneFields = (form: FormApi, values: AnyObject) => {\r\n return (\r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n <>\r\n Message\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Priority is required'\r\n : ''\r\n }\r\n disablePortal={false}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Category is required'\r\n : ''\r\n }\r\n disablePortal={false}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n error={meta.error && meta.touched}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? meta.error\r\n : ''\r\n }\r\n showIcon={true}\r\n classes={{\r\n input: classes.reminderInput\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Assigned by is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n isAuthorized={true}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => extendPhoneTaskDetails(values)}\r\n \r\n \r\n );\r\n };\r\n\r\n const onSourceChanged = (form: FormApi, values: AnyObject, selection: IAutoCompleteItem) => {\r\n if (selection && selection.secondaryValue === true) {\r\n form.batch(() => {\r\n form.change('isShowReferrer', true);\r\n form.change('referrer', null);\r\n });\r\n } else {\r\n // Check against the previously selected referrer values, if there are any\r\n form.batch(() => {\r\n form.change('isShowReferrer', false);\r\n form.change('referrer', null);\r\n });\r\n }\r\n };\r\n\r\n const getOutcomeDefaultTime = () => {\r\n\r\n let defaultTime = new Date().setHours(17, 0, 0, 0);\r\n\r\n let hours = 0;\r\n let minutes = 0;\r\n\r\n if (props.enquiryDefaultConfig && props.enquiryDefaultConfig.isManualEntry\r\n && props.enquiryDefaultConfig.timeOfDay && props.enquiryDefaultConfig.timeOfDay.toLowerCase() !== 'invalid date') {\r\n var timeOfDaySplit = props.enquiryDefaultConfig.timeOfDay ? props.enquiryDefaultConfig.timeOfDay.split(':') : null;\r\n\r\n if (timeOfDaySplit) {\r\n hours = Number(timeOfDaySplit[0]);\r\n minutes = Number(timeOfDaySplit[1]);\r\n }\r\n\r\n defaultTime = new Date().setHours(hours, minutes, 0, 0);\r\n }\r\n\r\n return defaultTime;\r\n };\r\n \r\n const enquiryFields = (form: FormApi, values: AnyObject) => {\r\n return (\r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n <>\r\n Message\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n input.onChange(selection)}\r\n onBlur={input.onBlur}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Area of law is required'\r\n : ''\r\n }\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n onSourceChanged(form, values, selection);\r\n }}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Source is required'\r\n : ''\r\n }\r\n onBlur={input.onBlur}\r\n />\r\n )}\r\n \r\n \r\n\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={meta.error && meta.touched\r\n ? 'Location is required'\r\n : ''\r\n }\r\n onBlur={input.onBlur}\r\n />\r\n )}\r\n \r\n \r\n\r\n {!!values.isShowReferrer && (\r\n \r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n // onReferrerChanged(form, values, selection);\r\n }}\r\n includeNonPmsContacts={false}\r\n includePmsContacts={true}\r\n />\r\n )}\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n\r\n \r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n error={meta.error && meta.touched}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? meta.error\r\n : ''\r\n }\r\n showIcon={true}\r\n classes={{\r\n input: classes.reminderInput\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Assigned by is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n isAuthorized={true}\r\n />\r\n )}\r\n \r\n \r\n {enquiryCheckboxes(form, values)}\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n const detilsTypeTab = (form: FormApi, values: AnyObject) => {\r\n if (values.option === TaskOptionEnum.enquiry) {\r\n return enquiryFields(form, values);\r\n } else {\r\n return phoneFields(form, values);\r\n }\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const getFileItems = (files?: DocumentFile[]) => {\r\n if (files) {\r\n const filteredFiles = files.filter((file: DocumentFile) => {\r\n return file.status !== 2 && file.url;\r\n });\r\n\r\n if (filteredFiles) {\r\n const chip = (\r\n
\r\n {\r\n filteredFiles.length > 0 \r\n ? {'Click on the following to open the uploaded files'} \r\n : null\r\n }\r\n
\r\n {\r\n filteredFiles.map((file: DocumentFile, index: number) => {\r\n return (\r\n onFileClicked(file)}\r\n />\r\n );\r\n } \r\n ) \r\n }\r\n
\r\n
\r\n );\r\n\r\n return chip;\r\n } else {\r\n return (
);\r\n }\r\n } else {\r\n return (
);\r\n }\r\n };\r\n\r\n const documentsTab = (form: FormApi, values: AnyObject) => {\r\n return (\r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n getFileItems(values.files)\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n {\r\n let existingFiles: DocumentFile[] = [...input.value];\r\n const newFiles = files.filter((file: File) => {\r\n return !existingFiles.some((item: DocumentFile) => {\r\n return item.name === file.name && item.status !== 2;\r\n });\r\n });\r\n if (newFiles && newFiles.length > 0) {\r\n newFiles.forEach((file: File) => {\r\n const documentFile: DocumentFile = {\r\n guidID: null,\r\n file: file,\r\n status: 1,\r\n name: file.name,\r\n url: ''\r\n };\r\n existingFiles.push(documentFile);\r\n }); \r\n input.onChange(existingFiles);\r\n }\r\n }}\r\n onDelete={(file: File) => {\r\n let existingFiles: DocumentFile[] = [...input.value];\r\n // eslint-disable-next-line array-callback-return\r\n existingFiles.map((item: DocumentFile) => {\r\n if (file.name === item.name) {\r\n item.file = file;\r\n item.status = 2; // deleted\r\n }\r\n }); \r\n // tslint:disable-next-line: max-line-length\r\n const filteredFiles = existingFiles.filter((item: DocumentFile) => {\r\n return item.status !== 2 || item.guidID !== null;\r\n });\r\n input.onChange(filteredFiles);\r\n }} \r\n // tslint:disable-next-line\r\n onDrop={(files: File[], event: any) => {\r\n // let existingFiles: DocumentFile[] = [...input.value];\r\n // tslint:disable-next-line: max-line-length\r\n // const existingFile = existingFiles.find((item: DocumentFile) => item.name === file)\r\n }} \r\n initialFiles={input.value.map((file: { url: string; }) => file.url)}\r\n />\r\n )}\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n const activityTab = (form: FormApi, values: AnyObject) => {\r\n return (\r\n \r\n \r\n {state.taskDetails && (\r\n
\r\n
\r\n \r\n
\r\n
\r\n )}\r\n \r\n
\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => ( \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const phoneCheckboxes = (form: FormApi, values: AnyObject) => {\r\n return (\r\n \r\n \r\n {({ input, meta }) => (\r\n ) => {\r\n input.onChange(event.target.checked);\r\n }}\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Returned Call\"\r\n />\r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n ) => {\r\n input.onChange(event.target.checked);\r\n }}\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Please Call\"\r\n />\r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n ) => {\r\n input.onChange(event.target.checked);\r\n }}\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Will Call Again\"\r\n />\r\n )}\r\n \r\n \r\n );\r\n };\r\n\r\n const enquiryCheckboxes = (form: FormApi, values: AnyObject) => {\r\n return (\r\n \r\n \r\n {({ input, meta }) => (\r\n ) => {\r\n input.onChange(event.target.checked);\r\n }}\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Email Notification\"\r\n />\r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n ) => {\r\n input.onChange(event.target.checked);\r\n }}\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Send Acknowledgement\"\r\n />\r\n )}\r\n \r\n \r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {state.isUserLoading || (state.isLoading && !state.isCreate) ? (\r\n <>\r\n {heading(TaskOptionEnum.none, state.isCreate)}\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={phoneForm}\r\n initialValuesEqual={() => true}\r\n keepDirtyOnReinitialize={true}\r\n subscription={{ submitting: true, pristine: true }}\r\n render={({handleSubmit, form, submitting, pristine, values}) => (\r\n
handleSubmit(e)} id=\"taskForm\">\r\n {\r\n onFormValueChanged(form, props);\r\n }}\r\n />\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n {heading(values.option, state.isCreate)}\r\n )}\r\n \r\n \r\n \r\n {!state.isCreate && props.matterGuid ? (\r\n \r\n {getClientAndMatter()}\r\n \r\n ) : undefined}\r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n
\r\n {values.isFromSwitched ? (\r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n onDropDownSelect(form, values, input, selection, name);\r\n }}\r\n enableSecondary={true}\r\n required={true}\r\n // value={input.value}\r\n />\r\n )}\r\n \r\n ) : (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n
\r\n \r\n Switch to enter the last name\r\n \r\n ) :\r\n (\r\n \r\n Switch to select an existing client & contact\r\n \r\n )\r\n }\r\n >\r\n {\r\n // Another approach.\r\n onSwitch(form, values, 'from');\r\n }}\r\n >\r\n \r\n \r\n \r\n
\r\n
\r\n )}\r\n
\r\n
\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n <>\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n onDropDownTeamAndUserSelect(form, values, input, selection, name, isUser)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'To is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n isAuthorized={true}\r\n // exclude teams if it is enquiry\r\n excludeTeams={values.option === TaskOptionEnum.enquiry}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n nameId={getPhoneNameId(values)}\r\n isFromDataSource={\r\n values.from && values.from.isFromDataSource \r\n ? values.from.isFromDataSource \r\n : true}\r\n required={true}\r\n />\r\n )}\r\n \r\n \r\n \r\n
\r\n {values.isOrganisationSwitched ? (\r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n />\r\n )}\r\n \r\n ) : (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n
\r\n \r\n Switch to select an existing organisation\r\n \r\n ) :\r\n (\r\n \r\n Switch to enter a new organisation name\r\n \r\n )\r\n }\r\n >\r\n {\r\n // Another approach.\r\n onSwitch(form, values, 'organisation');\r\n }}\r\n >\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'CC is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n isAuthorized={true}\r\n isExternal={false}\r\n multiple={true}\r\n />\r\n )}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {state.isCreate && !props.matterGuid ? (\r\n \r\n \r\n
\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n <>\r\n \r\n {({ input }) => (\r\n
\r\n \r\n In relation to\r\n \r\n }\r\n label=\"General Call\"\r\n />\r\n }\r\n label=\"Matter\"\r\n />\r\n }\r\n label=\"Client\"\r\n />\r\n {UserFeature.HasAccess(UserFeatureEnum.hasCreateLead) && (\r\n }\r\n label=\"New Enquiry\"\r\n />\r\n )}\r\n \r\n \r\n
\r\n )}\r\n \r\n {filteredField(values.option, form)}\r\n \r\n )}\r\n
\r\n
\r\n
\r\n ) : undefined}\r\n\r\n {state.isCreate && (\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n
\r\n
\r\n
\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n <>\r\n {values.option !== TaskOptionEnum.enquiry && phoneCheckboxes(form, values)}\r\n {values.option === TaskOptionEnum.enquiry ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {detilsTypeTab(form, values)}\r\n {documentsTab(form, values)}\r\n {activityTab(form, values)}\r\n \r\n \r\n )}\r\n \r\n
\r\n {/*
\r\n {printJson(values)}\r\n
*/}\r\n
\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {actionButton(form, submitting, pristine, values)}\r\n \r\n )}\r\n \r\n {/* \r\n {actionButton(form, submitting, pristine, values)}\r\n */}\r\n \r\n {/* {printJson(values)} */}\r\n \r\n )} \r\n />\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\n// // tslint:disable-next-line: no-any\r\nexport function printJson(values: PhoneForm) {\r\n if (values) {\r\n return (\r\n <>\r\n
\r\n                    {JSON.stringify(values, undefined, 2)}\r\n                
\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n
\r\n                            {JSON.stringify(values, undefined, 2)}\r\n                            {/*  */}\r\n                        
\r\n )}\r\n
\r\n \r\n );\r\n }\r\n}","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n Grid,\r\n TextField,\r\n} from '@material-ui/core';\r\nimport { AnyObject, Field, FieldInputProps, Form, FormSpy } from 'react-final-form';\r\nimport { FormApi } from 'final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { client } from '../..';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { ChangeTaskStatus, retrieveTaskDetailsData, TaskDetailsData, TaskDetailsParam } from '../TasksSummaryRepository';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\nimport { TaskAssignedBySelector } from '../selectors/TaskAssignedBySelector';\r\nimport moment from 'moment';\r\nimport { TaskStatusSelector } from '../selectors/TaskStatusSelector';\r\nimport { KeyboardDateTimePicker } from '@material-ui/pickers/DateTimePicker/DateTimePicker';\r\nimport { TimeNumberFormatCustom } from '../../components/TimeNumberFormat';\r\nimport { AllocatedToEntityType } from '../AllocatedToEntityType';\r\nimport { TaskAssignedByUserTeamSelector } from '../selectors/TaskAssignedByUserTeamSelector';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n dialogRoot: {\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n padding: 0,\r\n }\r\n },\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n content: {\r\n flex: 1\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n // paddingBottom: '20px'\r\n },\r\n button: {\r\n margin: theme.spacing(1),\r\n minWidth: '83px',\r\n },\r\n hidden: {\r\n display: 'none',\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n padding: '20px 0',\r\n },\r\n clientSelector: {\r\n flex: 1\r\n }, \r\n commendField: {\r\n width: '100%',\r\n }\r\n })\r\n);\r\n\r\ninterface StatusFormDialogProps {\r\n open: boolean;\r\n onClose?: () => void;\r\n title?: string;\r\n guid: string;\r\n initialStatus: IAutoCompleteItem | null;\r\n destinationStatus: IAutoCompleteItem | null;\r\n}\r\n\r\ninterface StatusFormDialogState {\r\n open: boolean;\r\n isLoading: boolean;\r\n onSubmitLoading: boolean;\r\n showDiscard: boolean;\r\n isChanged: boolean;\r\n isUserLoading: boolean;\r\n}\r\n\r\ninterface StatusForm {\r\n assignTo: IAutoCompleteItem | null;\r\n assignedBy: IAutoCompleteItem | null;\r\n startDate: Date | null;\r\n completionDate: Date | null;\r\n duration: string | null;\r\n estimatedEffort: string | null;\r\n status: IAutoCompleteItem | null;\r\n title: string | null;\r\n completionNotes: string | null;\r\n owner: IAutoCompleteItem | null;\r\n allocatedToEntityType: number | null;\r\n dueDate: Date | null;\r\n}\r\n\r\nexport const StatusFormDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n let draggedToUnallocated = props.destinationStatus?.label === 'Unassigned';\r\n let draggedToWaiting = props.destinationStatus?.label === 'Not Started';\r\n let draggedToInProgress = props.destinationStatus?.label === 'In Progress';\r\n let draggedToComplete = props.destinationStatus?.label === 'Complete';\r\n \r\n const [state, setState] = useState({\r\n open: false,\r\n isLoading: false,\r\n onSubmitLoading: false,\r\n showDiscard: false,\r\n isChanged: false,\r\n isUserLoading: false,\r\n });\r\n\r\n const [statusForm, setStatusForm] = useState({\r\n assignTo: null,\r\n assignedBy: null,\r\n startDate: null,\r\n completionDate: null,\r\n duration: null,\r\n estimatedEffort: null,\r\n status: props.initialStatus,\r\n title: null,\r\n completionNotes: null,\r\n owner: null,\r\n allocatedToEntityType: null,\r\n dueDate: null,\r\n });\r\n\r\n useEffect(() => {\r\n\r\n if (props.guid) {\r\n fetchTaskDetails(props.guid);\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n open: props.open\r\n };\r\n });\r\n // tslint:disable-next-line: align\r\n }, [props.open, props.guid]);\r\n\r\n const fetchTaskDetails = (guid: string) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: true\r\n };\r\n });\r\n\r\n const taskDetailsParams: TaskDetailsParam = {\r\n guid: guid\r\n };\r\n\r\n retrieveTaskDetailsData(\r\n taskDetailsParams,\r\n true,\r\n // tslint:disable-next-line: no-console\r\n (data: TaskDetailsData) => onTaskDetailsRetrieved(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n\r\n };\r\n\r\n const onTaskDetailsRetrieved = (data: TaskDetailsData) => {\r\n // tslint:disable-next-line: no-console\r\n if (data && data.task && data.task.detail) {\r\n\r\n const taskDetails = data.task.detail;\r\n const appUser = data.appUser;\r\n\r\n let completionDate: Date | null = null;\r\n let startDate: Date | null = null;\r\n\r\n if (draggedToUnallocated) {\r\n startDate = null;\r\n completionDate = null;\r\n } else if (draggedToWaiting) {\r\n startDate = null;\r\n completionDate = null;\r\n } else if (draggedToInProgress) {\r\n startDate = moment().toDate();\r\n completionDate = taskDetails.completionDate ? moment(taskDetails.completionDate).toDate() : null;\r\n } else if (draggedToComplete) {\r\n startDate = taskDetails.startDate ? moment(taskDetails.startDate).toDate() : null;\r\n completionDate = moment().toDate();\r\n } else {\r\n startDate = taskDetails.startDate ? moment(taskDetails.startDate).toDate() : null;\r\n completionDate = taskDetails.completionDate ? moment(taskDetails.completionDate).toDate() : null; \r\n }\r\n\r\n setStatusForm((prevStatusForm) => {\r\n return {\r\n ...prevStatusForm,\r\n startDate: startDate,\r\n completionDate: completionDate, \r\n // tslint:disable-next-line: max-line-length\r\n estimatedEffort: taskDetails.estimatedEffort ? taskDetails.estimatedEffort : null,\r\n // tslint:disable-next-line: max-line-length\r\n assignedBy: taskDetails.assignedBy && taskDetails.assignedByName ? {label: taskDetails.assignedByName, value: taskDetails.assignedBy} : {label: appUser.name, value: appUser.userId},\r\n // tslint:disable-next-line: max-line-length\r\n assignTo: taskDetails.assignedTo && taskDetails.assignedToName ? {label: taskDetails.assignedToName, value: taskDetails.assignedTo} : null,\r\n duration: taskDetails.duration ? taskDetails.duration : null,\r\n title: taskDetails.description,\r\n completionNotes: taskDetails.completionNotes,\r\n owner: taskDetails.owner && taskDetails.ownerName ? {label: taskDetails.ownerName, value: taskDetails.owner} : null,\r\n allocatedToEntityType: taskDetails.allocatedToEntityType, \r\n dueDate: taskDetails.dueDate ? moment(taskDetails.dueDate).toDate() : null,\r\n };\r\n });\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: false\r\n };\r\n });\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true\r\n };\r\n });\r\n\r\n client.mutate({\r\n mutation: ChangeTaskStatus,\r\n variables: {\r\n guid: props.guid, \r\n startDate: values.startDate ? values.startDate : null,\r\n completionDate: values.completionDate ? values.completionDate : null,\r\n dueDate: statusForm.dueDate ? moment(statusForm.dueDate).toDate() : null, // values.dueDate ? values.dueDate : null,\r\n estimatedEffort: values.estimatedEffort ? values.estimatedEffort : null,\r\n duration: values.duration ? values.duration : null,\r\n assignedTo: values.assignTo ? values.assignTo.value : null,\r\n assignedBy: values.assignedBy ? values.assignedBy.value : null,\r\n completionNotes: values.completionDate ? values.completionNotes : null,\r\n changedStatus: values.status ? values.status.label : null,\r\n owner: values.owner ? values.owner.value : null,\r\n allocatedToEntityType: values.allocatedToEntityType,\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n closePanel(); \r\n } else {\r\n showNotification('Failed to update priority', results.data.error, 'error');\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update priority', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n const closePanel = () => {\r\n // codepanel\r\n if (props.onClose) {\r\n return props.onClose();\r\n }\r\n };\r\n\r\n const onReset = () => {\r\n // reset\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (form: FormApi, changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isChanged: true\r\n };\r\n }); \r\n }\r\n };\r\n\r\n const onClose = () => {\r\n if (state.isChanged) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const onDiscardChanges = (agree: boolean) => {\r\n if (agree) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n\r\n } else {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const required = (value: any) => {\r\n return value ? undefined : 'Required';\r\n };\r\n\r\n const actionButton = (\r\n // tslint:disable-next-line: no-any\r\n form: FormApi,\r\n submitting: boolean,\r\n pristine: boolean,\r\n // tslint:disable-next-line: no-any\r\n values: AnyObject\r\n ) => {\r\n return (\r\n
\r\n {/* */}\r\n
\r\n {\r\n // code here..\r\n }}\r\n disabled={(submitting || pristine || state.onSubmitLoading)}\r\n >\r\n Update\r\n \r\n
\r\n
\r\n \r\n Reset\r\n \r\n \r\n Cancel\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onDropDownSelect = (form: FormApi, values: AnyObject, input: FieldInputProps, \r\n // tslint:disable-next-line: no-any\r\n selection: IAutoCompleteItem | any, name: string, isUser: boolean) => {\r\n if (name === 'assignTo') {\r\n let assignedTo = selection && selection.value && selection.label \r\n ? { value : selection.value, label: selection.label }\r\n : null;\r\n form.batch(() => {\r\n form.change('assignTo', assignedTo);\r\n form.change('allocatedToEntityType', isUser \r\n ? AllocatedToEntityType.user \r\n : AllocatedToEntityType.team\r\n ); \r\n });\r\n }\r\n };\r\n\r\n const getAssignedToRequired = (values: AnyObject) => {\r\n // Do the validation on Existing form values\r\n if (values.status) {\r\n if (values.status.label === 'Not Started' || values.status.label === 'In Progress' || values.status.label === 'Complete') {\r\n return true;\r\n }\r\n }\r\n\r\n // Not requried for any other status\r\n return false;\r\n };\r\n\r\n const getStartDateRequired = (values: AnyObject) => {\r\n // Do the validation on Existing form values\r\n if (values.status) {\r\n if (values.status.label === 'In Progress' || values.status.label === 'Complete') {\r\n return true;\r\n }\r\n }\r\n\r\n // Not requried for any other status\r\n return false;\r\n };\r\n\r\n const getCompletionDateRequired = (values: AnyObject) => {\r\n // Do the validation on Existing form values\r\n if (values.status) {\r\n if (values.status.label === 'Complete') {\r\n return true;\r\n }\r\n }\r\n\r\n // Not requried for any other status\r\n return false;\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onStatusChange = (input: FieldInputProps, selection: IAutoCompleteItem, form: FormApi) => {\r\n input.onChange(selection);\r\n\r\n // Get the current Form's state and do the logic on that value.\r\n const formState = form.getState();\r\n\r\n if (formState && formState.values.status) {\r\n if (formState.values.status.label === 'Unassigned') {\r\n form.change('assignTo', null);\r\n form.change('startDate', null);\r\n form.change('completionDate', null);\r\n form.change('duration', moment().startOf('day').toISOString());\r\n } else if (formState.values.status.label === 'Not Started') {\r\n form.change('startDate', null);\r\n form.change('completionDate', null);\r\n form.change('duration', moment().startOf('day').toISOString());\r\n } else if (formState.values.status.label === 'In Progress') {\r\n if (!formState.values.startDate) {\r\n form.change('startDate', moment().toDate());\r\n }\r\n \r\n form.change('completionDate', null);\r\n form.change('duration', moment().startOf('day').toISOString());\r\n } else if (formState.values.status.label === 'Complete') {\r\n form.change('completionDate', moment().toDate());\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {state.isLoading || state.isUserLoading ? (\r\n \r\n
\r\n \r\n
\r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={statusForm}\r\n subscription={{ submitting: true, pristine: true }}\r\n validate={(values) => {\r\n let errors = {\r\n assignTo: '',\r\n startDate: '',\r\n completionDate: '',\r\n owner: ''\r\n };\r\n\r\n if (statusForm.status?.label === 'Unassigned') {\r\n if (values.status?.label === 'Not Started' && !values.assignTo) {\r\n errors.assignTo = 'Assigned To is required';\r\n } else if (values.status?.label === 'Not Started' && !values.owner) {\r\n errors.owner = 'Owner is required';\r\n } else if (values.status?.label === 'In Progress' && !values.assignTo) {\r\n errors.assignTo = 'Assigned To is required';\r\n } else if (values.status?.label === 'In Progress' && !values.owner) {\r\n errors.owner = 'Owner is required';\r\n } else if (values.status?.label === 'Complete') {\r\n if (!values.assignTo) {\r\n errors.assignTo = 'Assigned To is required';\r\n }\r\n\r\n if (!values.owner) {\r\n errors.owner = 'Owner is required';\r\n }\r\n\r\n if (!values.startDate) {\r\n errors.startDate = 'Start date is required';\r\n }\r\n\r\n if (!values.completionDate) {\r\n errors.completionDate = 'Completion date is required';\r\n }\r\n }\r\n }\r\n\r\n if (statusForm.status?.label === 'Not Started') {\r\n if (values.status?.label === 'In Progress' && !values.startDate) {\r\n errors.startDate = 'Start date is required';\r\n } \r\n\r\n if (values.status?.label === 'Complete' && !values.completionDate) {\r\n errors.completionDate = 'Completion date is required';\r\n } \r\n }\r\n\r\n if (errors.assignTo === '' && errors.startDate === '' && errors.completionDate === '' && errors.owner === '') {\r\n return undefined;\r\n }\r\n\r\n // tslint:disable-next-line: no-console\r\n console.log('Errors', errors);\r\n return errors;\r\n }}\r\n render={({handleSubmit, form, submitting, pristine, values}) => (\r\n
\r\n \r\n {\r\n onFormValueChanged(form, spyProps);\r\n\r\n if (props.destinationStatus && props.initialStatus !== props.destinationStatus) {\r\n // this status change when from source to destination\r\n form.change('status', props.destinationStatus);\r\n }\r\n }}\r\n />\r\n\r\n {statusForm.title}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n {\r\n onStatusChange(input, selection, form);\r\n }}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Status is required'\r\n : ''\r\n }\r\n isRefresh={false}\r\n isIncludeCount={false}\r\n /> \r\n )}\r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? meta.error // 'Assigned to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n onDropDownSelect(form, values, input, selection, name, isUser)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? meta.error\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Assigned by is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => ( \r\n values.completionDate ? (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )\r\n : null \r\n )}\r\n \r\n \r\n \r\n \r\n {/*
\r\n {printJson(values)}\r\n
*/}\r\n
\r\n \r\n {actionButton(form, submitting, pristine, values)}\r\n \r\n \r\n )} \r\n />\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\n// tslint:disable-next-line: no-any\r\n// function printJson(values: StatusForm) {\r\n// if (values) {\r\n// return (\r\n// <>\r\n//
\r\n//                     {JSON.stringify(values, undefined, 2)}\r\n//                 
\r\n// \r\n// );\r\n// } else {\r\n// return (\r\n// <>\r\n// \r\n// {/* tslint:disable-next-line: no-shadowed-variable */}\r\n// {({ values }) => (\r\n//
\r\n//                             {JSON.stringify(values, undefined, 2)}\r\n//                             {/*  */}\r\n//                         
\r\n// )}\r\n//
\r\n// \r\n// );\r\n// }\r\n// }","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\n// import { name, random } from 'faker';\r\nimport gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport PersonIcon from '@material-ui/icons/Person';\r\nimport PersonOutlinedIcon from '@material-ui/icons/PersonOutlined';\r\nimport PeopleOutlineOutlinedIcon from '@material-ui/icons/PeopleOutlineOutlined';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { client } from '../..';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\n// import match from 'autosuggest-highlight/match';\r\n// import parse from 'autosuggest-highlight/parse';\r\nimport { FirmData, Team } from '../../lookupConfiguration/models/Firm';\r\nimport clsx from 'clsx';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n iconSelected: {\r\n width: 17,\r\n height: 17,\r\n marginRight: 5,\r\n marginLeft: -2,\r\n },\r\n color: {\r\n width: 14,\r\n height: 14,\r\n flexShrink: 0,\r\n borderRadius: 3,\r\n marginRight: 8,\r\n marginTop: 2,\r\n },\r\n text: {\r\n flexGrow: 1,\r\n },\r\n close: {\r\n opacity: 0.6,\r\n width: 18,\r\n height: 18,\r\n },\r\n renderWrapper: {\r\n padding: '15px 0'\r\n },\r\n customRenderWrapper: {\r\n display: 'flex',\r\n margin: '0 -10px',\r\n width: '100%',\r\n '& > div': {\r\n padding: '0 10px',\r\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\r\n fontWeight: 400,\r\n },\r\n '& .icon-wrapper': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .other': {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n '& .primary': {\r\n fontSize: '1rem',\r\n lineHeight: 1.5,\r\n letterSpacing: '0.00938em',\r\n },\r\n '& .secondary': {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n fontSize: '0.875rem',\r\n lineHeight: 1.43,\r\n letterSpacing: '0.01071em',\r\n },\r\n '& .third': {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n fontSize: '0.675rem',\r\n lineHeight: 1.43,\r\n letterSpacing: '0.01071em',\r\n fontWeight: 600\r\n }\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface TaskAssignedByUserTeamSelectorProps {\r\n isStaffOnly?: boolean;\r\n multiple?: boolean;\r\n isExternal?: boolean;\r\n label?: string;\r\n name: string;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string, isUser: boolean) => void;\r\n id?: string;\r\n required?: boolean;\r\n helperText?: string;\r\n error?: boolean;\r\n className?: string;\r\n disablePortal?: boolean;\r\n disabled?: boolean;\r\n visible?: {\r\n role: boolean;\r\n };\r\n isAuthorized?: boolean;\r\n excludeTeams?: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n}\r\n\r\ninterface TaskAssignedByUserTeamSelectorState {\r\n // tslint:disable-next-line: no-any\r\n items: any;\r\n isLoading: boolean;\r\n}\r\n\r\nexport const TaskAssignedByUserTeamSelector: React.FC = props => {\r\n const classes = useStyles();\r\n\r\n // fetch all records. \r\n const loadBlockLimit = 20000;\r\n \r\n const [state, setState] = useState({\r\n items: [],\r\n isLoading: true\r\n });\r\n\r\n useEffect(() => {\r\n if (props.excludeTeams) {\r\n fetchUserData(undefined);\r\n } else {\r\n fetchTeamData();\r\n }\r\n // tslint:disable-next-line: align\r\n }, [props.excludeTeams]);\r\n\r\n // tslint:disable-next-line: no-any\r\n const fetchTeamData = () => {\r\n retrieveFirmTeamListData(\r\n false, // fetch from cache\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveTeamList(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: false,\r\n };\r\n });\r\n }\r\n );\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onRetrieveTeamList = (data: FirmData) => {\r\n const teamsData = data.firm.teams.team;\r\n\r\n // tslint:disable-next-line: no-any\r\n let itemsList: any = [];\r\n \r\n itemsList = teamsData.map( (team: Team) => ({\r\n label: team.description,\r\n value: team.guidID,\r\n isStaff: false,\r\n email: null,\r\n roleName: null,\r\n isUser: false\r\n }));\r\n\r\n fetchUserData(itemsList);\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const fetchUserData = (itemsList: any) => {\r\n\r\n const userQueryParams: UserQueryParams = {\r\n filter: undefined,\r\n first: loadBlockLimit,\r\n offset: 0,\r\n isStaff: props.isStaffOnly ? props.isStaffOnly : undefined,\r\n isExternal: props.isExternal ? props.isExternal : false, // by default this should always return internal users\r\n isAuthorized: props.isAuthorized\r\n };\r\n\r\n retrieveUserListData(\r\n userQueryParams,\r\n false, // fetch from cache\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveUserList(data, itemsList),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: false,\r\n };\r\n });\r\n }\r\n );\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onRetrieveUserList = (data: UserListData, itemsList: any) => {\r\n\r\n const userData = data.administrator.users.user;\r\n\r\n if (itemsList === undefined || itemsList === null) {\r\n itemsList = [];\r\n } \r\n\r\n userData.forEach((source: User) => {\r\n itemsList.push({\r\n label: source.isStaff ? source.staffName : source.friendlyName,\r\n value: source.userID, \r\n isStaff: source.isStaff,\r\n email: source.email,\r\n roleName: source.roleName,\r\n isUser: true\r\n });\r\n });\r\n \r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n items: itemsList,\r\n isLoading: false\r\n };\r\n });\r\n }; \r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: object, item: any) => {\r\n if (props.onSelection) {\r\n props.onSelection({label: item ? item.label : '', value: item ? item.value : ''}, props.name, item ? item.isUser : true);\r\n } \r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n // const matches = match(option.label, inputValue);\r\n // const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n
\r\n { option.isUser \r\n ? option.isStaff ? : \r\n : \r\n }\r\n
\r\n
\r\n
{option.label}
\r\n {option.isUser && \r\n
\r\n
{option.email}
\r\n {!!props.visible && props.visible!.role && (\r\n
{option.roleName}
\r\n )}\r\n
\r\n }\r\n
\r\n {/* {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))} */}\r\n
\r\n );\r\n }}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport function retrieveUserListData(\r\n query: UserQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: UserListData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: UserListQuery,\r\n variables: {\r\n filter: query.filter,\r\n first: query.first,\r\n offset: query.offset,\r\n isStaff: query.isStaff,\r\n isExternal: query.isExternal,\r\n isAuthorized: query.isAuthorized\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface UserQueryParams {\r\n offset?: number; \r\n first?: number;\r\n filter?: string;\r\n isStaff?: boolean;\r\n isExternal?: boolean;\r\n isAuthorized?: boolean;\r\n}\r\n\r\nexport interface UserListData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n administrator: Administrator;\r\n}\r\n\r\nexport interface Administrator {\r\n users: UserList; \r\n}\r\n\r\nexport interface UserList {\r\n recordCount: number;\r\n user: User[];\r\n}\r\n\r\nexport interface User {\r\n userID: string;\r\n email: string;\r\n friendlyName: string;\r\n roleName: boolean;\r\n isStaff: boolean;\r\n staffName: string;\r\n isExternal: boolean;\r\n}\r\n\r\nconst UserListQuery = gql`\r\n query userQuery($offset: Int, $first: Int, $filter: String, $isStaff: Boolean, $isExternal: Boolean, $isAuthorized: Boolean){\r\n administrator{\r\n users(offset:$offset, first:$first, filter:$filter, isStaff: $isStaff, isExternal: $isExternal, isAuthorized: $isAuthorized){\r\n recordCount,\r\n user{\r\n userID,\r\n email,\r\n friendlyName,\r\n roleName\r\n isStaff,\r\n staffName,\r\n isExternal\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport function retrieveFirmTeamListData(\r\n refreshData: boolean,\r\n onSuccess: (data: FirmData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: FirmTeamDataQuery,\r\n variables: {},\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst FirmTeamDataQuery = gql`\r\nquery firmTeamData{\r\n firm{\r\n teams (onlyUsedByTasks: true){\r\n recordCount,\r\n team{\r\n guidID,\r\n description,\r\n staffCount\r\n }\r\n }\r\n }\r\n}`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { retrievePriorityData, PriorityData, Priority } from '../TasksSummaryRepository';\r\nimport { showNotification } from '../../App';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n })\r\n);\r\n\r\ninterface PrioritySelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n disablePortal?: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n}\r\n\r\ninterface PrioritySelectorState {\r\n isLoading: boolean;\r\n priority: IAutoCompleteItem[];\r\n}\r\n\r\nexport const PrioritySelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n priority: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchPriority();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchPriority = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n retrievePriorityData(\r\n false, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveTaskStatus(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveTaskStatus = (data: PriorityData) => {\r\n setState({\r\n ...state,\r\n priority: data.lookup.priority.map( (source: Priority) => ({value: source.guidId, label: source.description })),\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name ? props.name : 'priority');\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n { props.multiple ? \r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Popper,\r\n Grow,\r\n Paper,\r\n ClickAwayListener,\r\n MenuList,\r\n MenuItem,\r\n IconButton\r\n} from '@material-ui/core';\r\nimport MoreHorizOutlinedIcon from '@material-ui/icons/MoreHorizOutlined'; \r\nimport { UserFeature, UserFeatureEnum } from '../../types/UserFeature';\r\nimport RedoIcon from '@material-ui/icons/Redo';\r\nimport PersonIcon from '@material-ui/icons/Person';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport EqualizerIcon from '@material-ui/icons/Equalizer';\r\nimport PriorityHighIcon from '@material-ui/icons/PriorityHigh';\r\nimport TodayIcon from '@material-ui/icons/Today';\r\nimport EventNoteIcon from '@material-ui/icons/EventNote';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport NestedMenuItem from 'material-ui-nested-menu-item';\r\nimport { mainTheme } from '../../Theme';\r\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\r\nimport EventAvailableIcon from '@material-ui/icons/EventAvailable';\r\nimport CheckIcon from '@material-ui/icons/Check';\r\nimport VisibilityIcon from '@material-ui/icons/Visibility';\r\nimport CategoryIcon from '@material-ui/icons/Category';\r\nimport AccountBoxIcon from '@material-ui/icons/AccountBox';\r\nimport MessageIcon from '@material-ui/icons/Message';\r\nimport FileCopyOutlinedIcon from '@material-ui/icons/FileCopyOutlined';\r\nimport AssignmentIndIcon from '@material-ui/icons/AssignmentInd';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {},\r\n icon: {\r\n marginRight: '10px',\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n },\r\n deleteIcon: {\r\n marginRight: '10px',\r\n color: 'rgb(220, 0, 78)',\r\n }\r\n })\r\n);\r\n\r\ninterface ActionMenuProps {\r\n onOpen?: () => void;\r\n onAllocate?: () => void;\r\n onStatus?: () => void;\r\n onPriority?: () => void;\r\n onStartDate?: () => void;\r\n onDueDate?: () => void;\r\n onDelete?: () => void;\r\n onStart?: () => void;\r\n onCompletionDate?: () => void;\r\n onComplete?: () => void;\r\n onView?: () => void;\r\n onCategory?: () => void;\r\n onOwner?: () => void;\r\n onMessage?: () => void;\r\n onDuplicate?: () => void;\r\n onCreateEnquiry?: () => void;\r\n\r\n // onEnquiryAssign?: () => void;\r\n // onEnquiryFollowUp?: () => void;\r\n\r\n disabledMenu?: {\r\n open?: boolean;\r\n allocate?: boolean;\r\n status?: boolean;\r\n priority?: boolean;\r\n startDate?: boolean;\r\n dueDate?: boolean;\r\n delete?: boolean;\r\n start?: boolean;\r\n completionDate?: boolean;\r\n complete?: boolean;\r\n view?: boolean;\r\n category?: boolean;\r\n owner?: boolean;\r\n message?: boolean;\r\n duplicate?: boolean;\r\n createEnquiry?: boolean;\r\n\r\n isEnquiryClosed?: boolean;\r\n EnquiryTaskType?: string; \r\n };\r\n entityType: number;\r\n // entityGuidID: string;\r\n // assignedToEmailAddress?: string;\r\n // initialEnquiryDate?: Date;\r\n // enquiryFirstName?: string;\r\n // enquiryLastName?: string;\r\n // enquiryStatus?: string;\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport const ActionMenu: React.FC = ( props ) => {\r\n const classes = useStyles();\r\n const [open, setOpen] = React.useState(false);\r\n const anchorRef = React.useRef(null);\r\n // const history = useHistory();\r\n // const history = useHistory();\r\n\r\n const handleToggle = () => {\r\n // tslint:disable-next-line: no-shadowed-variable\r\n setOpen(prevOpen => !prevOpen);\r\n };\r\n\r\n const archorEvent = (event: React.MouseEvent) => {\r\n if (anchorRef.current &&\r\n anchorRef.current.contains(event.target as HTMLElement)) {\r\n return;\r\n }\r\n };\r\n\r\n const handleClose = (event: React.MouseEvent) => {\r\n // archorEvent(event);\r\n // setOpen(false);\r\n\r\n if (anchorRef.current &&\r\n anchorRef.current.contains(event.target as HTMLElement)\r\n ) {\r\n return;\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleOpen = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onOpen) {\r\n props.onOpen();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleDuplicate = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onDuplicate) {\r\n props.onDuplicate();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleView = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onView) {\r\n props.onView();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleAllocate = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onAllocate) {\r\n props.onAllocate();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleStatus = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onStatus) {\r\n props.onStatus();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handlePriority = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onPriority) {\r\n props.onPriority();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleStartDate = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onStartDate) {\r\n props.onStartDate();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleDueDate = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onDueDate) {\r\n props.onDueDate();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleComplete = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onComplete) {\r\n props.onComplete();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleStart = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onStart) {\r\n props.onStart();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleDelete = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onDelete) {\r\n props.onDelete();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleCompletionDate = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onCompletionDate) {\r\n props.onCompletionDate();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleCategory = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onCategory) {\r\n props.onCategory();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleOwner = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onOwner) {\r\n props.onOwner();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleCreateEnquiry = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onCreateEnquiry) {\r\n props.onCreateEnquiry();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n const handleMessage = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n\r\n if (props.onMessage) {\r\n props.onMessage();\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n // const handleAssign = (event: React.MouseEvent) => {\r\n // archorEvent(event);\r\n\r\n // if (props.onEnquiryAssign) {\r\n // props.onEnquiryAssign();\r\n // }\r\n\r\n // setOpen(false);\r\n // };\r\n\r\n // const handleEmailAssignee = (event: React.MouseEvent) => {\r\n // archorEvent(event);\r\n // setOpen(false);\r\n\r\n // var mail = document.createElement('a');\r\n // // tslint:disable-next-line:max-line-length\r\n // mail.href = `mailto:${props.assignedToEmailAddress}?subject=RE ${props.enquiryFirstName} ${props.enquiryLastName}, \r\n // new business enquiry received ${moment(props.initialEnquiryDate).format('DD MMM YYYY')}`;\r\n // mail.click();\r\n // };\r\n\r\n // const handleEnquiryView = (event: React.MouseEvent) => {\r\n // archorEvent(event);\r\n // setOpen(false);\r\n\r\n // var href = history.createHref({\r\n // pathname: `/enquiriesDetail/${props.entityGuidID}`\r\n // });\r\n\r\n // window.open(href, '_blank');\r\n // };\r\n\r\n // const handleFollowUp = (event: React.MouseEvent) => {\r\n // archorEvent(event);\r\n\r\n // if (props.onEnquiryFollowUp) {\r\n // props.onEnquiryFollowUp();\r\n // }\r\n\r\n // setOpen(false);\r\n // };\r\n\r\n // const handleCreateClient = (event: React.MouseEvent) => {\r\n // archorEvent(event);\r\n\r\n // setOpen(false);\r\n\r\n // // onCreateClientOpen(props.entityGuidID);\r\n // };\r\n\r\n function handleListKeyDown(event: React.KeyboardEvent) {\r\n if (event.key === 'Tab') {\r\n event.preventDefault();\r\n setOpen(false);\r\n }\r\n }\r\n\r\n // return focus to the button when we transitioned from !open -> open\r\n const prevOpen = React.useRef(open);\r\n React.useEffect(() => {\r\n if (prevOpen.current === true && open === false) {\r\n anchorRef.current!.focus();\r\n }\r\n\r\n prevOpen.current = open;\r\n // tslint:disable-next-line: align\r\n }, [open]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {({ TransitionProps, placement }) => (\r\n \r\n \r\n \r\n \r\n {props.onCreateEnquiry && UserFeature.HasAccess(UserFeatureEnum.hasCreateLead) && (\r\n handleCreateEnquiry(event)}\r\n disabled={props.disabledMenu?.createEnquiry}\r\n >\r\n Create Enquiry\r\n \r\n )}\r\n\r\n {props.entityType !== 1 && (\r\n handleMessage(event)}\r\n disabled={props.disabledMenu?.message}\r\n >\r\n Message\r\n \r\n )}\r\n \r\n {UserFeature.HasAccess(UserFeatureEnum.hasModifyTask) && props.entityType !== 1 && (\r\n handleOpen(event)}\r\n disabled={props.disabledMenu?.open}\r\n >\r\n Modify\r\n \r\n )}\r\n {UserFeature.HasAccess(UserFeatureEnum.hasModifyTask) && props.entityType !== 1 && props.onDuplicate && (\r\n handleDuplicate(event)}\r\n disabled={props.disabledMenu?.duplicate}\r\n >\r\n Duplicate\r\n \r\n )}\r\n {UserFeature.HasAccess(UserFeatureEnum.hasViewMatterTask) && (\r\n handleView(event)}\r\n disabled={props.disabledMenu?.view}\r\n >\r\n View\r\n \r\n )}\r\n {UserFeature.HasAccess(UserFeatureEnum.hasAllocateTask) && props.entityType !== 1 && (\r\n handleAllocate(event)}\r\n disabled={props.disabledMenu?.allocate}\r\n >\r\n Assign\r\n \r\n )}\r\n \r\n {props.entityType !== 1 && (\r\n handleOwner(event)}\r\n disabled={props.disabledMenu?.owner}\r\n >\r\n Owner\r\n \r\n )}\r\n {props.entityType !== 1 && (\r\n \r\n Start\r\n \r\n )}\r\n \r\n {props.entityType !== 1 && (\r\n \r\n Change\r\n \r\n )}\r\n parentMenuOpen={!!open}\r\n >\r\n \r\n Status...\r\n \r\n \r\n Priority...\r\n \r\n \r\n Start...\r\n \r\n \r\n Due...\r\n \r\n \r\n Completion...\r\n \r\n \r\n Category...\r\n \r\n \r\n )}\r\n \r\n {props.entityType !== 1 && (\r\n handleComplete(event)}\r\n disabled={props.disabledMenu?.complete}\r\n >\r\n Complete\r\n \r\n )}\r\n \r\n {UserFeature.HasAccess(UserFeatureEnum.hasDeleteTask) && (\r\n handleDelete(event)}\r\n disabled={props.disabledMenu?.delete}\r\n >\r\n Delete\r\n \r\n )}\r\n\r\n {/* Enquiry Related Tasks */}\r\n {/* {UserFeature.HasAccess(UserFeatureEnum.hasAssignLead) \r\n && props.entityType === 1\r\n ? \r\n \r\n Assign\r\n \r\n : null\r\n }\r\n\r\n {UserFeature.HasAccess(UserFeatureEnum.hasEmailLeadAssignee) \r\n && props.assignedToEmailAddress \r\n && props.entityType === 1\r\n ? \r\n \r\n Email Assignee\r\n \r\n : null\r\n }\r\n\r\n {UserFeature.HasAccess(UserFeatureEnum.hasFollowUpLead) && props.entityType === 1\r\n && props.enquiryStatus \r\n && props.enquiryStatus !== 'Unassigned'\r\n // && props.data.assignedTo !== null\r\n ?\r\n \r\n Follow Up\r\n \r\n : null\r\n }\r\n\r\n {UserFeature.HasAccess(UserFeatureEnum.hasCreateClient) && props.entityType === 1\r\n && props.enquiryStatus\r\n && props.enquiryStatus === 'Pending Client' // Create Client Pending\r\n ?\r\n \r\n Create Client\r\n \r\n : null\r\n }\r\n \r\n {UserFeature.HasAccess(UserFeatureEnum.hasLeadsDetail) && props.entityType === 1\r\n ? \r\n \r\n History\r\n \r\n : null\r\n } */}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n );\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n Grid,\r\n TextField,\r\n} from '@material-ui/core';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { FormApi } from 'final-form';\r\nimport { \r\n retrieveTaskDetailsData, \r\n StartTask, \r\n TaskDetailsData, \r\n TaskDetailsParam \r\n} from '../TasksSummaryRepository';\r\nimport { showNotification } from '../../App';\r\nimport moment from 'moment';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { client } from '../..';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\nimport { KeyboardDateTimePicker } from '@material-ui/pickers/DateTimePicker/DateTimePicker';\r\nimport { TimeNumberFormatCustom } from '../../components/TimeNumberFormat';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { ReminderSelector } from '../../components/ReminderSelector';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n dialogRoot: {\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n padding: 0,\r\n }\r\n },\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n content: {\r\n flex: 1\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n // paddingBottom: '20px'\r\n },\r\n button: {\r\n margin: theme.spacing(1),\r\n minWidth: '83px',\r\n },\r\n hidden: {\r\n display: 'none',\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n padding: '20px 0',\r\n },\r\n clientSelector: {\r\n flex: 1\r\n },\r\n })\r\n);\r\n\r\ninterface StartFormDialogProps {\r\n open: boolean;\r\n onClose?: () => void;\r\n title?: string;\r\n guid: string;\r\n}\r\n\r\ninterface StartFormDialogState {\r\n open: boolean;\r\n isLoading: boolean;\r\n onSubmitLoading: boolean;\r\n showDiscard: boolean;\r\n isChanged: boolean;\r\n}\r\n\r\ninterface StartForm {\r\n startDate: Date | null;\r\n dueDate: Date | null;\r\n estimatedEffort: string | null;\r\n reminderOffset: IAutoCompleteItem | null;\r\n}\r\n\r\nexport const StartFormDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n // const {\r\n // onClickFormClosed,\r\n // isFormOpen,\r\n // taskGuidId\r\n // }: // tslint:disable-next-line: no-any\r\n // any = useContext(TasksSummaryContext);\r\n\r\n const [state, setState] = useState({\r\n open: false,\r\n isLoading: false,\r\n onSubmitLoading: false,\r\n showDiscard: false,\r\n isChanged: false\r\n });\r\n\r\n const [startForm, setStartForm] = useState({\r\n startDate: null,\r\n dueDate: null,\r\n estimatedEffort: null,\r\n reminderOffset: { label: 'None', value: 'None'}\r\n });\r\n\r\n useEffect(() => {\r\n\r\n if (props.guid) {\r\n fetchTaskDetails(props.guid);\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n open: props.open\r\n };\r\n });\r\n // tslint:disable-next-line: align\r\n }, [props.open, props.guid]);\r\n\r\n const fetchTaskDetails = (guid: string) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: true\r\n };\r\n });\r\n\r\n const taskDetailsParams: TaskDetailsParam = {\r\n guid: guid\r\n };\r\n\r\n retrieveTaskDetailsData(\r\n taskDetailsParams,\r\n true,\r\n // tslint:disable-next-line: no-console\r\n (data: TaskDetailsData) => onTaskDetailsRetrieved(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n\r\n };\r\n\r\n const onTaskDetailsRetrieved = (data: TaskDetailsData) => {\r\n // tslint:disable-next-line: no-console\r\n\r\n if (data && data.task && data.task.detail) {\r\n\r\n const taskDetails = data.task.detail;\r\n\r\n let reminderOffset: IAutoCompleteItem = { label: 'None', value: 'None'};\r\n \r\n if (taskDetails.reminderOffset) {\r\n reminderOffset = { label: taskDetails.reminderOffset, value: taskDetails.reminderOffset };\r\n } \r\n\r\n setStartForm((prevStartForm) => {\r\n return {\r\n ...prevStartForm,\r\n startDate: taskDetails.startDate ? moment(taskDetails.startDate).toDate() : moment().toDate(),\r\n dueDate: taskDetails.dueDate ? moment(taskDetails.dueDate).toDate() : null,\r\n estimatedEffort: taskDetails.estimatedEffort \r\n ? taskDetails.estimatedEffort \r\n : null,\r\n reminderOffset: reminderOffset\r\n };\r\n });\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: false\r\n };\r\n });\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true\r\n };\r\n });\r\n\r\n client\r\n .mutate({\r\n mutation: StartTask,\r\n variables: {\r\n guid: props.guid, \r\n startDate: values.startDate ? values.startDate : null,\r\n dueDate: values.dueDate ? values.dueDate : null,\r\n estimatedEffort: values.estimatedEffort ? values.estimatedEffort : null,\r\n reminderOffset: values.reminderOffset ? values.reminderOffset.value : null\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n closePanel(); \r\n } else {\r\n showNotification('Failed to save start', results.data.error, 'error');\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to save start', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n const closePanel = () => {\r\n // codepanel\r\n if (props.onClose) {\r\n return props.onClose();\r\n }\r\n };\r\n\r\n const onReset = () => {\r\n // reset\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (form: FormApi, changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n const onClose = () => {\r\n if (state.isChanged) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const onDiscardChanges = (agree: boolean) => {\r\n if (agree) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n\r\n } else {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const required = (value: any) => {\r\n return value ? undefined : 'Required';\r\n };\r\n\r\n const actionButton = (\r\n // tslint:disable-next-line: no-any\r\n form: FormApi,\r\n submitting: boolean,\r\n pristine: boolean,\r\n // tslint:disable-next-line: no-any\r\n values: AnyObject\r\n ) => {\r\n return (\r\n
\r\n {/* */}\r\n
\r\n {\r\n // code here..\r\n }}\r\n disabled={submitting || pristine || state.onSubmitLoading}\r\n >\r\n Update\r\n \r\n
\r\n
\r\n \r\n Reset\r\n \r\n \r\n Cancel\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n {props.title}\r\n {state.isLoading ? (\r\n \r\n
\r\n \r\n
\r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={startForm}\r\n subscription={{ submitting: true, pristine: true }}\r\n render={({handleSubmit, form, submitting, pristine, values}) => (\r\n
\r\n {\r\n onFormValueChanged(form, props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n // \r\n\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n error={meta.error && meta.touched}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? meta.error\r\n : ''\r\n }\r\n showIcon={true}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {actionButton(form, submitting, pristine, values)}\r\n \r\n \r\n )} \r\n />\r\n )}\r\n \r\n \r\n );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n Grid,\r\n} from '@material-ui/core';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { FormApi } from 'final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { client } from '../..';\r\nimport { PrioritySelector } from '../selectors/PrioritySelector';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { ChangeTaskPriority, retrieveTaskDetailsData, TaskDetailsData, TaskDetailsParam } from '../TasksSummaryRepository';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n dialogRoot: {\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n padding: 0,\r\n }\r\n },\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n content: {\r\n flex: 1\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n // paddingBottom: '20px'\r\n },\r\n button: {\r\n margin: theme.spacing(1),\r\n minWidth: '83px',\r\n },\r\n hidden: {\r\n display: 'none',\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n padding: '20px 0',\r\n },\r\n clientSelector: {\r\n flex: 1\r\n },\r\n })\r\n);\r\n\r\ninterface PriorityFormDialogProps {\r\n open: boolean;\r\n onClose?: () => void;\r\n title?: string;\r\n guid: string;\r\n defaultPriority: IAutoCompleteItem | null;\r\n}\r\n\r\ninterface PriorityFormDialogState {\r\n open: boolean;\r\n isLoading: boolean;\r\n onSubmitLoading: boolean;\r\n showDiscard: boolean;\r\n isChanged: boolean;\r\n}\r\n\r\ninterface PriorityForm {\r\n priority: IAutoCompleteItem | null;\r\n}\r\n\r\nexport const PriorityFormDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n open: false,\r\n isLoading: false,\r\n onSubmitLoading: false,\r\n showDiscard: false,\r\n isChanged: false\r\n });\r\n\r\n const [priorityForm, setPriorityForm] = useState({\r\n priority: null,\r\n });\r\n\r\n useEffect(() => {\r\n\r\n if (props.guid) {\r\n fetchTaskDetails(props.guid);\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n open: props.open\r\n };\r\n });\r\n // tslint:disable-next-line: align\r\n }, [props.open, props.guid]);\r\n\r\n const fetchTaskDetails = (guid: string) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: true\r\n };\r\n });\r\n\r\n const taskDetailsParams: TaskDetailsParam = {\r\n guid: guid\r\n };\r\n\r\n retrieveTaskDetailsData(\r\n taskDetailsParams,\r\n true,\r\n // tslint:disable-next-line: no-console\r\n (data: TaskDetailsData) => onTaskDetailsRetrieved(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n\r\n };\r\n\r\n const onTaskDetailsRetrieved = (data: TaskDetailsData) => {\r\n // tslint:disable-next-line: no-console\r\n\r\n if (data && data.task && data.task.detail) {\r\n\r\n const taskDetails = data.task.detail;\r\n \r\n setPriorityForm((prevPriorityForm) => {\r\n return {\r\n ...prevPriorityForm,\r\n // tslint:disable-next-line: max-line-length\r\n priority: taskDetails.priority && taskDetails.priorityDescription \r\n ? {label: taskDetails.priorityDescription, value: taskDetails.priority} \r\n : props.defaultPriority,\r\n };\r\n });\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: false\r\n };\r\n });\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true\r\n };\r\n });\r\n\r\n client\r\n .mutate({\r\n mutation: ChangeTaskPriority,\r\n variables: {\r\n guid: props.guid, \r\n priority: values.priority ? values.priority.label : null,\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n closePanel(); \r\n } else {\r\n showNotification('Failed to update priority', results.data.error, 'error');\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update priority', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n const closePanel = () => {\r\n // codepanel\r\n if (props.onClose) {\r\n return props.onClose();\r\n }\r\n };\r\n\r\n const onReset = () => {\r\n // reset\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (form: FormApi, changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n const onClose = () => {\r\n if (state.isChanged) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const onDiscardChanges = (agree: boolean) => {\r\n if (agree) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n\r\n } else {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const required = (value: any) => {\r\n return value ? undefined : 'Required';\r\n };\r\n\r\n const actionButton = (\r\n // tslint:disable-next-line: no-any\r\n form: FormApi,\r\n submitting: boolean,\r\n pristine: boolean,\r\n // tslint:disable-next-line: no-any\r\n values: AnyObject\r\n ) => {\r\n return (\r\n
\r\n {/* */}\r\n
\r\n {\r\n // code here..\r\n }}\r\n disabled={submitting || pristine || state.onSubmitLoading}\r\n >\r\n Update\r\n \r\n
\r\n
\r\n \r\n Reset\r\n \r\n \r\n Cancel\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {props.title}\r\n {state.isLoading ? (\r\n \r\n
\r\n \r\n
\r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={priorityForm}\r\n subscription={{ submitting: true, pristine: true }}\r\n render={({handleSubmit, form, submitting, pristine, values}) => (\r\n
\r\n {\r\n onFormValueChanged(form, props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Priority is required'\r\n : ''\r\n }\r\n disablePortal={false}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {actionButton(form, submitting, pristine, values)}\r\n \r\n \r\n )} \r\n />\r\n )}\r\n \r\n \r\n );\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n Grid,\r\n TextField,\r\n} from '@material-ui/core';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { FormApi } from 'final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { client } from '../..';\r\nimport { CompleteTask, retrieveTaskDetailsData, TaskDetailsData, TaskDetailsParam } from '../TasksSummaryRepository';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\nimport moment from 'moment';\r\nimport { KeyboardDateTimePicker } from '@material-ui/pickers/DateTimePicker/DateTimePicker';\r\nimport { TimeNumberFormatCustom } from '../../components/TimeNumberFormat';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n dialogRoot: {\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n padding: 0,\r\n }\r\n },\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n content: {\r\n flex: 1\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n // paddingBottom: '20px'\r\n },\r\n button: {\r\n margin: theme.spacing(1),\r\n minWidth: '83px',\r\n },\r\n hidden: {\r\n display: 'none',\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n padding: '20px 0',\r\n },\r\n clientSelector: {\r\n flex: 1\r\n },\r\n commentField: {\r\n width: '100%',\r\n },\r\n })\r\n);\r\n\r\ninterface CompleteFormDialogProps {\r\n open: boolean;\r\n onClose?: () => void;\r\n title?: string;\r\n guid: string;\r\n}\r\n\r\ninterface CompleteFormDialogState {\r\n open: boolean;\r\n isLoading: boolean;\r\n onSubmitLoading: boolean;\r\n showDiscard: boolean;\r\n isChanged: boolean;\r\n}\r\n\r\ninterface CompleteForm {\r\n startDate: Date | null;\r\n completionDate: Date | null;\r\n duration: string | null;\r\n dueDate: Date | null;\r\n completionNotes: string | null;\r\n parentNameTextId: number | null;\r\n parentNameCrmTextId: number | null;\r\n}\r\n\r\nexport const CompleteFormDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n open: false,\r\n isLoading: false,\r\n onSubmitLoading: false,\r\n showDiscard: false,\r\n isChanged: false\r\n });\r\n\r\n const [completeForm, setCompleteForm] = useState({\r\n startDate: null,\r\n completionDate: null,\r\n duration: null,\r\n dueDate: null,\r\n completionNotes: null,\r\n parentNameTextId: null,\r\n parentNameCrmTextId: null\r\n });\r\n\r\n useEffect(() => {\r\n\r\n if (props.guid) {\r\n fetchTaskDetails(props.guid);\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n open: props.open\r\n };\r\n });\r\n // tslint:disable-next-line: align\r\n }, [props.open, props.guid]);\r\n\r\n const fetchTaskDetails = (guid: string) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: true\r\n };\r\n });\r\n\r\n const taskDetailsParams: TaskDetailsParam = {\r\n guid: guid\r\n };\r\n\r\n retrieveTaskDetailsData(\r\n taskDetailsParams,\r\n true,\r\n // tslint:disable-next-line: no-console\r\n (data: TaskDetailsData) => onTaskDetailsRetrieved(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n\r\n };\r\n\r\n const onTaskDetailsRetrieved = (data: TaskDetailsData) => {\r\n // tslint:disable-next-line: no-console\r\n\r\n if (data && data.task && data.task.detail) {\r\n\r\n const taskDetails = data.task.detail;\r\n\r\n let parentNameTextId = taskDetails.parentNameTextId !== null && taskDetails.parentNameTextId > 0 ? taskDetails.parentNameTextId : null;\r\n let parentNameCrmTextId = taskDetails.parentNameCrmTextId !== null && taskDetails.parentNameCrmTextId > 0 ? taskDetails.parentNameCrmTextId : null;\r\n \r\n setCompleteForm((prevCompleteForm) => {\r\n return {\r\n ...prevCompleteForm,\r\n startDate: taskDetails.startDate ? moment(taskDetails.startDate).toDate() : null,\r\n completionDate: taskDetails.completionDate ? moment(taskDetails.completionDate).toDate() : moment().toDate(),\r\n duration: taskDetails.duration ? taskDetails.duration : null,\r\n dueDate: taskDetails.dueDate ? moment(taskDetails.dueDate).toDate() : null,\r\n completionNotes: taskDetails.completionNotes ? taskDetails.completionNotes : null,\r\n parentNameTextId: parentNameTextId,\r\n parentNameCrmTextId: parentNameCrmTextId\r\n };\r\n });\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: false\r\n };\r\n });\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true\r\n };\r\n });\r\n\r\n client\r\n .mutate({\r\n mutation: CompleteTask,\r\n variables: {\r\n guid: props.guid, \r\n startDate: values.startDate ? values.startDate : null,\r\n completionDate: values.completionDate ? values.completionDate : null,\r\n dueDate: values.dueDate ? values.dueDate : null,\r\n duration: values.duration ? values.duration : null,\r\n completionNotes: values.completionDate ? values.completionNotes : null,\r\n parentNameTextId: values.parentNameTextId,\r\n parentNameCrmTextId: values.parentNameCrmTextId\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n closePanel(); \r\n } else {\r\n showNotification('Failed to update completion', results.data.error, 'error');\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update completion', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n const closePanel = () => {\r\n // codepanel\r\n if (props.onClose) {\r\n return props.onClose();\r\n }\r\n };\r\n\r\n const onReset = () => {\r\n // reset\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (form: FormApi, changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n const onClose = () => {\r\n if (state.isChanged) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const onDiscardChanges = (agree: boolean) => {\r\n if (agree) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n\r\n } else {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const required = (value: any) => {\r\n return value ? undefined : 'Required';\r\n };\r\n\r\n const actionButton = (\r\n // tslint:disable-next-line: no-any\r\n form: FormApi,\r\n submitting: boolean,\r\n pristine: boolean,\r\n // tslint:disable-next-line: no-any\r\n values: AnyObject\r\n ) => {\r\n return (\r\n
\r\n {/* */}\r\n
\r\n {\r\n // code here..\r\n }}\r\n disabled={submitting || state.onSubmitLoading}\r\n >\r\n Update\r\n \r\n
\r\n
\r\n \r\n Reset\r\n \r\n \r\n Cancel\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {props.title}\r\n {state.isLoading ? (\r\n \r\n
\r\n \r\n
\r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={completeForm}\r\n subscription={{ submitting: true, pristine: true }}\r\n render={({handleSubmit, form, submitting, pristine, values}) => (\r\n
\r\n {\r\n onFormValueChanged(form, props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => ( \r\n values.completionDate ? (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )\r\n : null \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {actionButton(form, submitting, pristine, values)}\r\n \r\n \r\n )} \r\n />\r\n )}\r\n \r\n \r\n );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n TextField,\r\n Grid,\r\n} from '@material-ui/core';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { FormApi } from 'final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { ChangeDueTask, retrieveTaskDetailsData, TaskDetailsData, TaskDetailsParam } from '../TasksSummaryRepository';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\nimport { client } from '../..';\r\nimport { KeyboardDateTimePicker } from '@material-ui/pickers/DateTimePicker/DateTimePicker';\r\nimport { TimeNumberFormatCustom } from '../../components/TimeNumberFormat';\r\nimport moment from 'moment';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { ReminderSelector } from '../../components/ReminderSelector';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n dialogRoot: {\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n padding: 0,\r\n }\r\n },\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n content: {\r\n flex: 1\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n // paddingBottom: '20px'\r\n },\r\n button: {\r\n margin: theme.spacing(1),\r\n minWidth: '83px',\r\n },\r\n hidden: {\r\n display: 'none',\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n padding: '20px 0',\r\n },\r\n clientSelector: {\r\n flex: 1\r\n },\r\n })\r\n);\r\n\r\ninterface DueFormDialogProps {\r\n open: boolean;\r\n onClose?: () => void;\r\n title?: string;\r\n guid: string;\r\n}\r\n\r\ninterface DueFormDialogState {\r\n open: boolean;\r\n isLoading: boolean;\r\n onSubmitLoading: boolean;\r\n showDiscard: boolean;\r\n isChanged: boolean;\r\n}\r\n\r\ninterface DueForm {\r\n startDate: Date | null;\r\n estimatedEffort: string | null;\r\n dueDate: Date | null;\r\n reminderOffset: IAutoCompleteItem | null;\r\n}\r\n\r\nexport const DueFormDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n open: false,\r\n isLoading: false,\r\n onSubmitLoading: false,\r\n showDiscard: false,\r\n isChanged: false\r\n });\r\n\r\n const [dueForm, setDueForm] = useState({\r\n startDate: null,\r\n estimatedEffort: null,\r\n dueDate: null,\r\n reminderOffset: { label: 'None', value: 'None'}\r\n });\r\n\r\n useEffect(() => {\r\n\r\n if (props.guid) {\r\n fetchTaskDetails(props.guid);\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n open: props.open\r\n };\r\n });\r\n // tslint:disable-next-line: align\r\n }, [props.open, props.guid]);\r\n\r\n const fetchTaskDetails = (guid: string) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: true\r\n };\r\n });\r\n\r\n const taskDetailsParams: TaskDetailsParam = {\r\n guid: guid\r\n };\r\n\r\n retrieveTaskDetailsData(\r\n taskDetailsParams,\r\n true,\r\n // tslint:disable-next-line: no-console\r\n (data: TaskDetailsData) => onTaskDetailsRetrieved(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n\r\n };\r\n\r\n const onTaskDetailsRetrieved = (data: TaskDetailsData) => {\r\n // tslint:disable-next-line: no-console\r\n if (data && data.task && data.task.detail) {\r\n\r\n const taskDetails = data.task.detail;\r\n\r\n let reminderOffset: IAutoCompleteItem = { label: 'None', value: 'None'};\r\n \r\n if (taskDetails.reminderOffset) {\r\n reminderOffset = { label: taskDetails.reminderOffset, value: taskDetails.reminderOffset };\r\n } \r\n\r\n setDueForm((prevDueForm) => {\r\n return {\r\n ...prevDueForm,\r\n startDate: taskDetails.startDate ? moment(taskDetails.startDate).toDate() : null,\r\n // tslint:disable-next-line: max-line-length\r\n estimatedEffort: taskDetails.estimatedEffort ? taskDetails.estimatedEffort : null,\r\n dueDate: taskDetails.dueDate ? moment(taskDetails.dueDate).toDate() : null,\r\n reminderOffset: reminderOffset\r\n };\r\n });\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: false\r\n };\r\n });\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true\r\n };\r\n });\r\n\r\n client\r\n .mutate({\r\n mutation: ChangeDueTask,\r\n variables: {\r\n guid: props.guid,\r\n startDate: values.startDate ? values.startDate : null,\r\n dueDate: values.dueDate ? values.dueDate : null,\r\n estimatedEffort: values.estimatedEffort ? values.estimatedEffort : null,\r\n reminderOffset: values.reminderOffset ? values.reminderOffset.value : null\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n closePanel(); \r\n } else {\r\n showNotification('Failed to update due', results.data.error, 'error');\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update due', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n const closePanel = () => {\r\n // codepanel\r\n if (props.onClose) {\r\n return props.onClose();\r\n }\r\n };\r\n\r\n const onReset = () => {\r\n // reset\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (form: FormApi, changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n const onClose = () => {\r\n if (state.isChanged) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const onDiscardChanges = (agree: boolean) => {\r\n if (agree) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n\r\n } else {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const required = (value: any) => {\r\n return value ? undefined : 'Required';\r\n };\r\n\r\n const actionButton = (\r\n // tslint:disable-next-line: no-any\r\n form: FormApi,\r\n submitting: boolean,\r\n pristine: boolean,\r\n // tslint:disable-next-line: no-any\r\n values: AnyObject\r\n ) => {\r\n return (\r\n
\r\n {/* */}\r\n
\r\n {\r\n // code here..\r\n }}\r\n disabled={submitting || pristine || state.onSubmitLoading}\r\n >\r\n Update\r\n \r\n
\r\n
\r\n \r\n Reset\r\n \r\n \r\n Cancel\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {props.title}\r\n {state.isLoading ? (\r\n \r\n
\r\n \r\n
\r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={dueForm}\r\n subscription={{ submitting: true, pristine: true }}\r\n render={({handleSubmit, form, submitting, pristine, values}) => (\r\n
\r\n {\r\n onFormValueChanged(form, props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n // \r\n\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n error={meta.error && meta.touched}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? meta.error\r\n : ''\r\n }\r\n showIcon={true}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {actionButton(form, submitting, pristine, values)}\r\n \r\n \r\n )} \r\n />\r\n )}\r\n \r\n \r\n );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n Grid,\r\n} from '@material-ui/core';\r\nimport { AnyObject, Field, FieldInputProps, Form, FormSpy } from 'react-final-form';\r\nimport { FormApi } from 'final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { client } from '../..';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { AppUserData, ChangeTaskAllocation, fetchAppUserData, retrieveTaskDetailsData, TaskDetailsData, TaskDetailsParam } from '../TasksSummaryRepository';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\nimport { TaskAssignedBySelector } from '../selectors/TaskAssignedBySelector';\r\nimport { AllocatedToEntityType } from '../AllocatedToEntityType';\r\nimport { TaskAssignedByUserTeamSelector } from '../selectors/TaskAssignedByUserTeamSelector';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n dialogRoot: {\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n padding: 0,\r\n }\r\n },\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n content: {\r\n flex: 1\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n // paddingBottom: '20px'\r\n },\r\n button: {\r\n margin: theme.spacing(1),\r\n minWidth: '83px',\r\n },\r\n hidden: {\r\n display: 'none',\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n padding: '20px 0',\r\n },\r\n clientSelector: {\r\n flex: 1\r\n },\r\n })\r\n);\r\n\r\ninterface AllocateFormDialogProps {\r\n open: boolean;\r\n onClose?: () => void;\r\n title?: string;\r\n guid: string;\r\n loggedInUser: IAutoCompleteItem | null;\r\n}\r\n\r\ninterface AllocateFormDialogState {\r\n open: boolean;\r\n isLoading: boolean;\r\n isUserLoading: boolean;\r\n onSubmitLoading: boolean;\r\n showDiscard: boolean;\r\n isChanged: boolean;\r\n}\r\n\r\ninterface AllocateForm {\r\n assignTo: IAutoCompleteItem | null;\r\n assignedBy: IAutoCompleteItem | null;\r\n allocatedToEntityType: number | null;\r\n}\r\n\r\nexport const AllocateFormDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n open: false,\r\n isLoading: false,\r\n isUserLoading: false,\r\n onSubmitLoading: false,\r\n showDiscard: false,\r\n isChanged: false\r\n });\r\n\r\n const [allocateForm, setAllocateForm] = useState({\r\n assignTo: null,\r\n assignedBy: null,\r\n allocatedToEntityType: null\r\n });\r\n\r\n useEffect(() => {\r\n\r\n if (props.guid) {\r\n fetchTaskDetails(props.guid);\r\n fetchUser();\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n open: props.open\r\n };\r\n });\r\n // tslint:disable-next-line: align\r\n }, [props.open, props.guid]);\r\n\r\n const fetchTaskDetails = (guid: string) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: true\r\n };\r\n });\r\n\r\n const taskDetailsParams: TaskDetailsParam = {\r\n guid: guid\r\n };\r\n\r\n retrieveTaskDetailsData(\r\n taskDetailsParams,\r\n true,\r\n // tslint:disable-next-line: no-console\r\n (data: TaskDetailsData) => onTaskDetailsRetrieved(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onTaskDetailsRetrieved = (data: TaskDetailsData) => {\r\n // tslint:disable-next-line: no-console\r\n\r\n if (data && data.task && data.task.detail) {\r\n \r\n const taskDetails = data.task.detail;\r\n\r\n setAllocateForm((prevAllocateForm) => {\r\n return {\r\n ...prevAllocateForm,\r\n // tslint:disable-next-line: max-line-length\r\n // assignTo will be empty. User has to select the value\r\n // assignTo: taskDetails.assignedTo && taskDetails.assignedToName ? {label: taskDetails.assignedToName, value: taskDetails.assignedTo} : null,\r\n // tslint:disable-next-line: max-line-length\r\n assignedBy: taskDetails.assignedBy && taskDetails.assignedByName ? {label: taskDetails.assignedByName, value: taskDetails.assignedBy} : props.loggedInUser,\r\n allocatedToEntityType: taskDetails.allocatedToEntityType, \r\n };\r\n });\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: false\r\n };\r\n });\r\n };\r\n\r\n const fetchUser = () => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isUserLoading: true\r\n };\r\n });\r\n\r\n fetchAppUserData(\r\n false,\r\n // tslint:disable-next-line: no-console\r\n (data: AppUserData) => onUserRetrieved(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onUserRetrieved = (data: AppUserData) => {\r\n setAllocateForm({\r\n ...allocateForm,\r\n assignedBy: {\r\n label: data.appUser.name,\r\n value: data.appUser.userId\r\n }\r\n });\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isUserLoading: false\r\n };\r\n });\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true\r\n };\r\n });\r\n\r\n client\r\n .mutate({\r\n mutation: ChangeTaskAllocation,\r\n variables: {\r\n guidId: props.guid, \r\n assignedTo: values.assignTo ? values.assignTo.value : null,\r\n assignedBy: values.assignedBy ? values.assignedBy.value : null,\r\n allocatedToEntityType: values.allocatedToEntityType,\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n closePanel(); \r\n } else {\r\n showNotification('Failed to update allocation', results.data.error, 'error');\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update allocation', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n const closePanel = () => {\r\n // codepanel\r\n if (props.onClose) {\r\n return props.onClose();\r\n }\r\n };\r\n\r\n const onReset = () => {\r\n // reset\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (form: FormApi, changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n const onClose = () => {\r\n if (state.isChanged) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const onDiscardChanges = (agree: boolean) => {\r\n if (agree) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n\r\n } else {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onDropDownSelect = (form: FormApi, values: AnyObject, input: FieldInputProps, \r\n // tslint:disable-next-line: no-any\r\n selection: IAutoCompleteItem | any, name: string, isUser: boolean) => {\r\n if (name === 'assignTo') {\r\n let assignedTo = selection && selection.value && selection.label \r\n ? { value : selection.value, label: selection.label }\r\n : null;\r\n form.batch(() => {\r\n form.change('assignTo', assignedTo);\r\n form.change('allocatedToEntityType', isUser \r\n ? AllocatedToEntityType.user \r\n : AllocatedToEntityType.team\r\n ); \r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const required = (value: any) => {\r\n return value ? undefined : 'Required';\r\n };\r\n\r\n const actionButton = (\r\n // tslint:disable-next-line: no-any\r\n form: FormApi,\r\n submitting: boolean,\r\n pristine: boolean,\r\n // tslint:disable-next-line: no-any\r\n values: AnyObject\r\n ) => {\r\n return (\r\n
\r\n {/* */}\r\n
\r\n {\r\n // code here..\r\n }}\r\n disabled={submitting || pristine || state.onSubmitLoading}\r\n >\r\n Update\r\n \r\n
\r\n
\r\n \r\n Reset\r\n \r\n \r\n Cancel\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {props.title}\r\n {(state.isLoading || state.isUserLoading) ? (\r\n \r\n
\r\n \r\n
\r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={allocateForm}\r\n subscription={{ submitting: true, pristine: true }}\r\n render={({handleSubmit, form, submitting, pristine, values}) => (\r\n
\r\n {\r\n onFormValueChanged(form, props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n onDropDownSelect(form, values, input, selection, name, isUser)\r\n }\r\n required={true}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Assigned to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Assigned by is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {actionButton(form, submitting, pristine, values)}\r\n \r\n \r\n )} \r\n />\r\n )}\r\n \r\n \r\n );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n Grid,\r\n} from '@material-ui/core';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { FormApi } from 'final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { client } from '../..';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { ChangeTaskCategory, retrieveTaskDetailsData, TaskDetailsData, TaskDetailsParam } from '../TasksSummaryRepository';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\nimport { TaskCategorySelector } from '../selectors/TaskCategorySelector';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n dialogRoot: {\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n padding: 0,\r\n }\r\n },\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n content: {\r\n flex: 1\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n // paddingBottom: '20px'\r\n },\r\n button: {\r\n margin: theme.spacing(1),\r\n minWidth: '83px',\r\n },\r\n hidden: {\r\n display: 'none',\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n padding: '20px 0',\r\n },\r\n clientSelector: {\r\n flex: 1\r\n },\r\n })\r\n);\r\n\r\ninterface CategoryFormDialogProps {\r\n open: boolean;\r\n onClose?: () => void;\r\n title?: string;\r\n guid: string;\r\n defaultCategory: IAutoCompleteItem | null;\r\n}\r\n\r\ninterface CategoryFormDialogState {\r\n open: boolean;\r\n isLoading: boolean;\r\n onSubmitLoading: boolean;\r\n showDiscard: boolean;\r\n isChanged: boolean;\r\n}\r\n\r\ninterface CategoryForm {\r\n category: IAutoCompleteItem | null;\r\n}\r\n\r\nexport const CategoryFormDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n open: false,\r\n isLoading: false,\r\n onSubmitLoading: false,\r\n showDiscard: false,\r\n isChanged: false\r\n });\r\n\r\n const [categoryForm, setCategoryForm] = useState({\r\n category: null,\r\n });\r\n\r\n useEffect(() => {\r\n\r\n if (props.guid) {\r\n fetchTaskDetails(props.guid);\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n open: props.open\r\n };\r\n });\r\n // tslint:disable-next-line: align\r\n }, [props.open, props.guid]);\r\n\r\n const fetchTaskDetails = (guid: string) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: true\r\n };\r\n });\r\n\r\n const taskDetailsParams: TaskDetailsParam = {\r\n guid: guid\r\n };\r\n\r\n retrieveTaskDetailsData(\r\n taskDetailsParams,\r\n true,\r\n // tslint:disable-next-line: no-console\r\n (data: TaskDetailsData) => onTaskDetailsRetrieved(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n\r\n };\r\n\r\n const onTaskDetailsRetrieved = (data: TaskDetailsData) => {\r\n // tslint:disable-next-line: no-console\r\n\r\n if (data && data.task && data.task.detail) {\r\n\r\n const taskDetails = data.task.detail;\r\n \r\n setCategoryForm((prevPriorityForm) => {\r\n return {\r\n ...prevPriorityForm,\r\n // tslint:disable-next-line: max-line-length\r\n category: taskDetails.category && taskDetails.categoryDescription \r\n ? {label: taskDetails.categoryDescription, value: taskDetails.category} \r\n : props.defaultCategory,\r\n };\r\n });\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: false\r\n };\r\n });\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true\r\n };\r\n });\r\n\r\n client\r\n .mutate({\r\n mutation: ChangeTaskCategory,\r\n variables: {\r\n guid: props.guid, \r\n category: values.category ? values.category.label : null,\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n closePanel(); \r\n } else {\r\n showNotification('Failed to update category', results.data.error, 'error');\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update category', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n const closePanel = () => {\r\n // codepanel\r\n if (props.onClose) {\r\n return props.onClose();\r\n }\r\n };\r\n\r\n const onReset = () => {\r\n // reset\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (form: FormApi, changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n const onClose = () => {\r\n if (state.isChanged) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const onDiscardChanges = (agree: boolean) => {\r\n if (agree) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n\r\n } else {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const required = (value: any) => {\r\n return value ? undefined : 'Required';\r\n };\r\n\r\n const actionButton = (\r\n // tslint:disable-next-line: no-any\r\n form: FormApi,\r\n submitting: boolean,\r\n pristine: boolean,\r\n // tslint:disable-next-line: no-any\r\n values: AnyObject\r\n ) => {\r\n return (\r\n
\r\n {/* */}\r\n
\r\n {\r\n // code here..\r\n }}\r\n disabled={submitting || pristine || state.onSubmitLoading}\r\n >\r\n Update\r\n \r\n
\r\n
\r\n \r\n Reset\r\n \r\n \r\n Cancel\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {props.title}\r\n {state.isLoading ? (\r\n \r\n
\r\n \r\n
\r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={categoryForm}\r\n subscription={{ submitting: true, pristine: true }}\r\n render={({handleSubmit, form, submitting, pristine, values}) => (\r\n
\r\n {\r\n onFormValueChanged(form, props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Category is required'\r\n : ''\r\n }\r\n disablePortal={false}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {actionButton(form, submitting, pristine, values)}\r\n \r\n \r\n )} \r\n />\r\n )}\r\n \r\n \r\n );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n Grid,\r\n} from '@material-ui/core';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { FormApi } from 'final-form';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\nimport { TaskAssignedBySelector } from '../selectors/TaskAssignedBySelector';\r\nimport { ChangeTaskOwner, retrieveTaskDetailsData, TaskDetailsData, TaskDetailsParam } from '../TasksSummaryRepository';\r\nimport { showNotification } from '../../App';\r\nimport { client } from '../..';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n dialogRoot: {\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n padding: 0,\r\n }\r\n },\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n content: {\r\n flex: 1\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n // paddingBottom: '20px'\r\n },\r\n button: {\r\n margin: theme.spacing(1),\r\n minWidth: '83px',\r\n },\r\n hidden: {\r\n display: 'none',\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n padding: '20px 0',\r\n },\r\n clientSelector: {\r\n flex: 1\r\n },\r\n })\r\n);\r\n\r\ninterface OwnerFormDialogProps {\r\n open: boolean;\r\n onClose?: () => void;\r\n title?: string;\r\n guid: string;\r\n}\r\n\r\ninterface OwnerFormDialogState {\r\n open: boolean;\r\n isLoading: boolean;\r\n onSubmitLoading: boolean;\r\n showDiscard: boolean;\r\n isChanged: boolean;\r\n}\r\n\r\ninterface OwnerForm {\r\n owner: IAutoCompleteItem | null;\r\n}\r\n\r\nexport const OwnerFormDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n open: false,\r\n isLoading: false,\r\n onSubmitLoading: false,\r\n showDiscard: false,\r\n isChanged: false\r\n });\r\n\r\n const [ownerForm, setOwnerForm] = useState({\r\n owner: null,\r\n });\r\n\r\n useEffect(() => {\r\n\r\n if (props.guid) {\r\n fetchTaskDetails(props.guid);\r\n }\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n open: props.open\r\n };\r\n });\r\n // tslint:disable-next-line: align\r\n }, [props.open, props.guid]);\r\n\r\n const fetchTaskDetails = (guid: string) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: true\r\n };\r\n });\r\n\r\n const taskDetailsParams: TaskDetailsParam = {\r\n guid: guid\r\n };\r\n\r\n retrieveTaskDetailsData(\r\n taskDetailsParams,\r\n true,\r\n // tslint:disable-next-line: no-console\r\n (data: TaskDetailsData) => onTaskDetailsRetrieved(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onTaskDetailsRetrieved = (data: TaskDetailsData) => {\r\n // tslint:disable-next-line: no-console\r\n\r\n if (data && data.task && data.task.detail) {\r\n\r\n const taskDetails = data.task.detail;\r\n \r\n setOwnerForm((prevOwnerForm) => {\r\n return {\r\n ...prevOwnerForm,\r\n // tslint:disable-next-line: max-line-length\r\n owner: taskDetails.owner && taskDetails.ownerName \r\n ? {label: taskDetails.ownerName, value: taskDetails.owner} \r\n : null\r\n };\r\n });\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: false\r\n };\r\n });\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true\r\n };\r\n });\r\n\r\n client\r\n .mutate({\r\n mutation: ChangeTaskOwner,\r\n variables: {\r\n guid: props.guid, \r\n owner: values.owner ? values.owner.value : null\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n closePanel(); \r\n } else {\r\n showNotification('Failed to update owner', results.data.error, 'error');\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update owner', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n const closePanel = () => {\r\n // codepanel\r\n if (props.onClose) {\r\n return props.onClose();\r\n }\r\n };\r\n\r\n const onReset = () => {\r\n // reset\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (form: FormApi, changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n const onClose = () => {\r\n if (state.isChanged) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const onDiscardChanges = (agree: boolean) => {\r\n if (agree) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n\r\n } else {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const required = (value: any) => {\r\n return value ? undefined : 'Required';\r\n };\r\n\r\n const actionButton = (\r\n // tslint:disable-next-line: no-any\r\n form: FormApi,\r\n submitting: boolean,\r\n pristine: boolean,\r\n // tslint:disable-next-line: no-any\r\n values: AnyObject\r\n ) => {\r\n return (\r\n
\r\n {/* */}\r\n
\r\n {\r\n // code here..\r\n }}\r\n disabled={submitting || pristine || state.onSubmitLoading}\r\n >\r\n Update\r\n \r\n
\r\n
\r\n \r\n Reset\r\n \r\n \r\n Cancel\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {props.title}\r\n {state.isLoading ? (\r\n \r\n
\r\n \r\n
\r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={ownerForm}\r\n subscription={{ submitting: true, pristine: true }}\r\n render={({handleSubmit, form, submitting, pristine, values}) => (\r\n
\r\n {\r\n onFormValueChanged(form, props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Assigned to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {actionButton(form, submitting, pristine, values)}\r\n \r\n \r\n )} \r\n />\r\n )}\r\n \r\n \r\n );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Button, Dialog, DialogTitle, DialogActions, DialogContent, Grid, TextField, FormControlLabel, Checkbox, Typography } from '@material-ui/core';\r\nimport { AnyObject, Field, FieldInputProps, Form, FormSpy } from 'react-final-form';\r\nimport { FormApi } from 'final-form';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\nimport CheckBoxIcon from '@material-ui/icons/CheckBox';\r\nimport gql from 'graphql-tag';\r\nimport { showNotification } from '../../App';\r\nimport { client } from '../..';\r\nimport { useCurrentUser } from '../../hooks/useCurrentUser';\r\nimport { RvLoader } from '../../components/Loader';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n dialogRoot: {\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n padding: 0,\r\n },\r\n },\r\n header: {\r\n '& > h2': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n },\r\n },\r\n headerCol: {\r\n flex: 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '0 10px',\r\n },\r\n alignRight: {\r\n justifyContent: 'flex-end',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n content: {\r\n flex: 1,\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n // paddingBottom: '20px'\r\n },\r\n button: {\r\n margin: theme.spacing(1),\r\n minWidth: '83px',\r\n },\r\n hidden: {\r\n display: 'none',\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n padding: '20px 0',\r\n },\r\n clientSelector: {\r\n flex: 1,\r\n },\r\n }),\r\n);\r\n\r\ninterface MessageFormDialogProps {\r\n open: boolean;\r\n onClose?: () => void;\r\n guid: string;\r\n // tslint:disable-next-line: no-any\r\n data?: any;\r\n}\r\n\r\ninterface MessageFormDialogState {\r\n onSubmitLoading: boolean;\r\n showDiscard: boolean;\r\n isChanged: boolean;\r\n}\r\n\r\ninterface MessageForm {\r\n message: string | null;\r\n isOwnerAssignor: boolean;\r\n isAssignee: boolean;\r\n}\r\n\r\nexport const MessageFormDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const currentUser = useCurrentUser();\r\n \r\n const [state, setState] = useState({\r\n onSubmitLoading: false,\r\n showDiscard: false,\r\n isChanged: false,\r\n });\r\n\r\n // const [messageForm] = useState({\r\n // message: null,\r\n // isOwnerAssignor: true,\r\n // isAssignee: false,\r\n // });\r\n\r\n const messageForm: MessageForm = {\r\n message: null,\r\n isOwnerAssignor: false,\r\n isAssignee: false,\r\n };\r\n\r\n if (!currentUser.loading && currentUser.data) {\r\n if (\r\n (props.data.ownerGuidID !== currentUser.data.appUser.userId && props.data.assignedByGuidID !== currentUser.data.appUser.userId) &&\r\n props.data.assignedToGuidID !== currentUser.data.appUser.userId\r\n ) {\r\n messageForm.isAssignee = true;\r\n messageForm.isOwnerAssignor = true;\r\n } else if (props.data.ownerGuidID === currentUser.data.appUser.userId || props.data.assignedByGuidID === currentUser.data.appUser.userId) {\r\n messageForm.isAssignee = true;\r\n messageForm.isOwnerAssignor = false;\r\n } else if (props.data.assignedToGuidID === currentUser.data.appUser.userId) {\r\n messageForm.isOwnerAssignor = true;\r\n messageForm.isAssignee = false;\r\n }\r\n }\r\n\r\n const onSubmit = (form: FormApi, values: MessageForm | AnyObject) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true,\r\n };\r\n });\r\n\r\n client\r\n .mutate({\r\n mutation: MESSAGE_TASK_MUTATION,\r\n variables: {\r\n guidId: props.guid,\r\n includeOwnerOrAssignor: values.isOwnerAssignor,\r\n includeAssignee: values.isAssignee,\r\n message: values.message,\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info');\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n } else {\r\n showNotification('Failed to send message', results.data.error, 'error');\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to send message', reason, 'error');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n });\r\n };\r\n\r\n const closePanel = () => {\r\n if (state.isChanged) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true,\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (form: FormApi, changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isChanged: true,\r\n };\r\n });\r\n }\r\n };\r\n\r\n const onClose = () => {\r\n if (state.isChanged) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true,\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const onDiscardChanges = (agree: boolean) => {\r\n if (agree) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n } else {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n }\r\n };\r\n\r\n const onAssignedTypeChangedCheckbox =\r\n // tslint:disable-next-line: no-any max-line-length\r\n (name: string, formApi: FormApi, input: FieldInputProps, values: MessageForm | AnyObject) =>\r\n (event: React.ChangeEvent, checked: boolean) => {\r\n input.onChange(checked);\r\n formApi.setConfig('keepDirtyOnReinitialize', false);\r\n\r\n formApi.batch(() => {\r\n if (name === 'isOwnerAssignor') {\r\n if (!values.isAssignee && !checked) {\r\n formApi.change('isAssignee', true);\r\n }\r\n } else {\r\n if (!values.isOwnerAssignor && !checked) {\r\n formApi.change('isOwnerAssignor', true);\r\n }\r\n }\r\n });\r\n\r\n formApi.setConfig('keepDirtyOnReinitialize', false);\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const required = (value: any) => {\r\n return value ? undefined : 'Required';\r\n };\r\n\r\n const actionButton = (\r\n // tslint:disable-next-line: no-any\r\n form: FormApi,\r\n submitting: boolean,\r\n pristine: boolean,\r\n // tslint:disable-next-line: no-any\r\n values: AnyObject,\r\n ) => {\r\n return (\r\n
\r\n {/* */}\r\n
\r\n {\r\n // code here..\r\n }}\r\n disabled={submitting || pristine || state.onSubmitLoading}\r\n >\r\n Send\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n const formComponent = () => {\r\n if (currentUser.loading) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n ) => onSubmit(form, values)}\r\n initialValues={messageForm}\r\n subscription={{ submitting: true, pristine: true }}\r\n validate={(values) => {\r\n let errors = {\r\n isOwnerAssignor: '',\r\n isAssignee: '',\r\n message: '',\r\n };\r\n\r\n if (!values.message) {\r\n errors.message = 'Required';\r\n }\r\n\r\n if (!values.isAssignee && !values.isOwnerAssignor) {\r\n errors.isAssignee = 'Atleast one is required';\r\n errors.isOwnerAssignor = 'Atleast one is required';\r\n }\r\n\r\n if (errors.isAssignee === '' && errors.isOwnerAssignor === '' && errors.message === '') {\r\n return undefined;\r\n }\r\n\r\n return errors;\r\n }}\r\n render={({ handleSubmit, form, submitting, pristine, values }) => (\r\n
\r\n {\r\n onFormValueChanged(form, props);\r\n }}\r\n />\r\n \r\n
\r\n
Message
\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }: { values: MessageForm }) => (\r\n <>\r\n \r\n {({ input, meta }) => (\r\n }\r\n />\r\n }\r\n label=\"Owner/Assignor\"\r\n labelPlacement=\"start\"\r\n />\r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n }\r\n />\r\n }\r\n label=\"Assignee\"\r\n labelPlacement=\"start\"\r\n />\r\n )}\r\n \r\n \r\n )}\r\n \r\n
\r\n {props.data.assignedToName && (\r\n
\r\n Assigned to {props.data.assignedToName}\r\n
\r\n )}\r\n
\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {actionButton(form, submitting, pristine, values)}\r\n \r\n )}\r\n />\r\n );\r\n };\r\n return (\r\n <>\r\n \r\n \r\n {formComponent()}\r\n \r\n \r\n );\r\n};\r\n\r\nconst MESSAGE_TASK_MUTATION = gql`\r\n mutation messageTask($guidId: String, $includeOwnerOrAssignor: Boolean, $includeAssignee: Boolean, $message: String) {\r\n messageTask(guidId: $guidId, includeOwnerOrAssignor: $includeOwnerOrAssignor, includeAssignee: $includeAssignee, message: $message)\r\n }\r\n`;\r\n","import React from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport AssignmentIcon from '@material-ui/icons/Assignment';\r\nimport {\r\n Grid,\r\n Accordion,\r\n AccordionSummary,\r\n AccordionDetails,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport { mainTheme } from '../../Theme';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {},\r\n heading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n // fontWeight: theme.typography.fontWeightRegular,\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n },\r\n headerIcon: {\r\n marginRight: 10,\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n },\r\n fieldContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n flex: 1,\r\n '& .col': {\r\n padding: '0 10px',\r\n },\r\n '& .value': {\r\n // fontWeight: 600,\r\n color: 'grey',\r\n },\r\n '& .text': {\r\n flex: 1,\r\n color: 'grey',\r\n },\r\n '& .status': {\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n }\r\n },\r\n })\r\n);\r\n\r\ninterface AssignmentTaskDetailViewFieldsProps {\r\n priority?: string;\r\n category?: string;\r\n due?: string;\r\n estimatedEffort?: string;\r\n start?: string;\r\n completion?: string;\r\n duration?: string;\r\n assignedBy?: string;\r\n status?: string;\r\n completionNotes?: string | null;\r\n}\r\n\r\nexport const AssignmentTaskDetailViewFields: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n \r\n }\r\n >\r\n \r\n Task Details\r\n \r\n \r\n \r\n \r\n \r\n {!!props.priority && (\r\n \r\n
\r\n
\r\n Priority:\r\n
\r\n
\r\n {props.priority}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.category && (\r\n \r\n
\r\n
\r\n Category:\r\n
\r\n
\r\n {props.category}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.due && (\r\n \r\n
\r\n
\r\n Due:\r\n
\r\n
\r\n {props.due}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.estimatedEffort && (\r\n \r\n
\r\n
\r\n Estimated Effort:\r\n
\r\n
\r\n {props.estimatedEffort}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.start && (\r\n \r\n
\r\n
\r\n Start:\r\n
\r\n
\r\n {props.start}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.completion && (\r\n \r\n
\r\n
\r\n Completion:\r\n
\r\n
\r\n {props.completion}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.duration && (\r\n \r\n
\r\n
\r\n Actual Effort:\r\n
\r\n
\r\n {props.duration}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.assignedBy && (\r\n \r\n
\r\n
\r\n Assigned By:\r\n
\r\n
\r\n {props.assignedBy}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.status && (\r\n \r\n
\r\n
\r\n Status:\r\n
\r\n
\r\n {props.status}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.completionNotes && (\r\n \r\n
\r\n
\r\n Completion Notes:\r\n
\r\n
\r\n {props.completionNotes}\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n Grid,\r\n} from '@material-ui/core';\r\nimport { CurrencyDisplayStyle, FormattedCurrency } from '../../components/DataDisplay/FormattedCurrency';\r\nimport { AssignmentTaskDetailViewFields } from '../cards/AssignmentTaskDetailViewFields';\r\nimport moment from 'moment';\r\nimport { CurrencyDetails } from '../../matterSummary/cellRenderer/MatterTaskAction';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { DialogTitleExtension } from '../../matterSummary/common/DialogTitleExtension';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {},\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n fieldContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n flex: 1,\r\n height: '100%',\r\n alignItems: 'center',\r\n '& .col': {\r\n padding: '0 10px',\r\n },\r\n '& .value': {\r\n fontWeight: 600,\r\n color: 'grey',\r\n },\r\n '& .text': {\r\n flex: 1,\r\n color: 'grey',\r\n }\r\n },\r\n })\r\n);\r\n\r\ninterface BillTheMatterViewDialogProps {\r\n open: boolean;\r\n currencyDetails: CurrencyDetails;\r\n matterId: number;\r\n matterGuid: string;\r\n matterTitle: string;\r\n client: string;\r\n onClose?: () => void;\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n\r\n unBilledFees?: number;\r\n unbilledDisbursements?: number;\r\n outstandingDebtors?: number;\r\n currentTrustBalance?: number;\r\n billedFees?: number;\r\n feeEstimate?: number;\r\n percentageEstimate?: number;\r\n\r\n pendingWriteOffFeesAmount: number;\r\n pendingWriteOffDisbAmount: number;\r\n\r\n // Saved values\r\n taskGuid?: string;\r\n formAction: 'create' | 'edit';\r\n feesAmount?: number | null;\r\n disbursementAmount?: number | null;\r\n applyTrustAmount?: number | null;\r\n writeOffFeesAmount?: number | null;\r\n writeOffDisbursementAmount?: number | null;\r\n comments?: string | null;\r\n assignedTo?: IAutoCompleteItem | null;\r\n priority?: IAutoCompleteItem | null;\r\n taskCategory?: IAutoCompleteItem | null;\r\n dueDate?: Date | null;\r\n estimatedEffort?: string | null;\r\n startDate?: Date | null;\r\n completionDate?: Date | null;\r\n duration?: string | null;\r\n assignedBy?: IAutoCompleteItem | null;\r\n completionNotes?: string | null;\r\n owner?: IAutoCompleteItem | null;\r\n}\r\n\r\nexport const BillTheMatterViewDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const onClose = () => {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n };\r\n\r\n const currency = props.currencyDetails && props.currencyDetails.currency ? props.currencyDetails.currency : 'AUD';\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {!!(props.feesAmount && props.feesAmount > 0) && (\r\n \r\n
\r\n
\r\n Fees:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )} \r\n {!!(props.disbursementAmount && props.disbursementAmount > 0) && (\r\n \r\n
\r\n
\r\n Disbursements:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {!!(props.applyTrustAmount && props.applyTrustAmount > 0) && (\r\n \r\n
\r\n
\r\n Apply Trust:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {\r\n // tslint:disable-next-line: max-line-length\r\n !!((props.writeOffFeesAmount && props.writeOffFeesAmount > 0) || (props.pendingWriteOffFeesAmount && props.pendingWriteOffFeesAmount > 0)) && (\r\n \r\n
\r\n
\r\n Write Off Fees:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {\r\n // tslint:disable-next-line: max-line-length\r\n !!((props.writeOffDisbursementAmount && props.writeOffDisbursementAmount > 0) || (props.pendingWriteOffDisbAmount && props.pendingWriteOffDisbAmount > 0)) && (\r\n \r\n
\r\n
\r\n Write Off Disbursements:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {!!props.assignedTo && (\r\n \r\n
\r\n
\r\n Assigned To:\r\n
\r\n
\r\n {props.assignedTo.label}\r\n
\r\n
\r\n
\r\n )}\r\n {props.owner && (\r\n \r\n
\r\n
\r\n Owner:\r\n
\r\n
\r\n {props.owner.label}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.comments && (\r\n \r\n
\r\n
\r\n Comments:\r\n
\r\n
\r\n {props.comments}\r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Close\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n Grid,\r\n FormControlLabel,\r\n Checkbox\r\n} from '@material-ui/core';\r\nimport { AssignmentTaskDetailViewFields } from '../cards/AssignmentTaskDetailViewFields';\r\nimport moment from 'moment';\r\nimport { CurrencyDetails } from '../../matterSummary/cellRenderer/MatterTaskAction';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { CurrencyDisplayStyle, FormattedCurrency } from '../../components/DataDisplay/FormattedCurrency';\r\nimport { DialogTitleExtension } from '../../matterSummary/common/DialogTitleExtension';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {},\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n fieldContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n flex: 1,\r\n height: '100%',\r\n alignItems: 'center',\r\n '& .col': {\r\n padding: '0 10px',\r\n },\r\n '& .value': {\r\n fontWeight: 600,\r\n color: 'grey',\r\n },\r\n '& .text': {\r\n flex: 1,\r\n color: 'grey',\r\n }\r\n },\r\n })\r\n);\r\n\r\ninterface WriteOffWipViewDialogProps {\r\n open: boolean;\r\n currencyDetails: CurrencyDetails;\r\n matterId: number;\r\n matterGuid: string;\r\n matterTitle: string;\r\n client: string;\r\n onClose?: () => void;\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n\r\n unBilledFees?: number;\r\n unbilledDisbursements?: number;\r\n outstandingDebtors?: number;\r\n billedFees?: number;\r\n\r\n canClose: boolean;\r\n pendingWriteOffFeesAmount: number;\r\n pendingWriteOffDisbAmount: number;\r\n\r\n // Saved values\r\n taskGuid?: string;\r\n formAction: 'create' | 'edit';\r\n writeOffFeesAmount?: number | null;\r\n writeOffDisbursementAmount?: number | null;\r\n closeMatterAfterWriteOff?: boolean | null;\r\n comments?: string | null;\r\n assignedTo?: IAutoCompleteItem | null;\r\n priority?: IAutoCompleteItem | null;\r\n taskCategory?: IAutoCompleteItem | null;\r\n dueDate?: Date | null;\r\n estimatedEffort?: string | null;\r\n startDate?: Date | null;\r\n completionDate?: Date | null;\r\n duration?: string | null;\r\n assignedBy?: IAutoCompleteItem | null;\r\n completionNotes?: string | null;\r\n owner?: IAutoCompleteItem | null;\r\n}\r\n\r\nexport const WriteOffWipViewDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const onClose = () => {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n };\r\n\r\n const currency = props.currencyDetails && props.currencyDetails.currency ? props.currencyDetails.currency : 'AUD';\r\n \r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {!!(props.writeOffFeesAmount || props.pendingWriteOffFeesAmount) && (\r\n \r\n
\r\n
\r\n Fees:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {!!(props.writeOffDisbursementAmount || props.pendingWriteOffDisbAmount) && (\r\n \r\n
\r\n
\r\n Disbursements:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {!!props.closeMatterAfterWriteOff && (\r\n \r\n \r\n }\r\n label=\"Close Matter After Write Off\"\r\n disabled={true}\r\n />\r\n \r\n )}\r\n \r\n \r\n {!!props.assignedTo && (\r\n \r\n
\r\n
\r\n Assigned To:\r\n
\r\n
\r\n {props.assignedTo.label}\r\n
\r\n
\r\n
\r\n )}\r\n {props.owner && (\r\n \r\n
\r\n
\r\n Owner:\r\n
\r\n
\r\n {props.owner.label}\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n {!!props.comments && (\r\n \r\n
\r\n
\r\n Comments:\r\n
\r\n
\r\n {props.comments ? props.comments : undefined}\r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Close\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n Grid,\r\n FormControlLabel,\r\n Checkbox\r\n} from '@material-ui/core';\r\nimport { AssignmentTaskDetailViewFields } from '../cards/AssignmentTaskDetailViewFields';\r\nimport moment from 'moment';\r\nimport { CurrencyDetails } from '../../matterSummary/cellRenderer/MatterTaskAction';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { CurrencyDisplayStyle, FormattedCurrency } from '../../components/DataDisplay/FormattedCurrency';\r\nimport { DialogTitleExtension } from '../../matterSummary/common/DialogTitleExtension';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {},\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n fieldContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n flex: 1,\r\n height: '100%',\r\n alignItems: 'center',\r\n '& .col': {\r\n padding: '0 10px',\r\n },\r\n '& .value': {\r\n fontWeight: 600,\r\n color: 'grey',\r\n },\r\n '& .text': {\r\n flex: 1,\r\n color: 'grey',\r\n }\r\n },\r\n })\r\n);\r\n\r\ninterface WriteOffDebtorsViewDialogProps {\r\n open: boolean;\r\n currencyDetails: CurrencyDetails;\r\n matterId: number;\r\n matterGuid: string;\r\n matterTitle: string;\r\n client: string;\r\n onClose?: () => void;\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n\r\n unBilledFees?: number;\r\n unbilledDisbursements?: number;\r\n outstandingDebtors?: number;\r\n billedFees?: number;\r\n\r\n canClose: boolean;\r\n\r\n // Saved values\r\n taskGuid?: string;\r\n formAction: 'create' | 'edit';\r\n debtorsAmount?: number | null;\r\n closeMatterAfterWriteOff?: boolean | null;\r\n comments?: string | null;\r\n assignedTo?: IAutoCompleteItem | null;\r\n priority?: IAutoCompleteItem | null;\r\n taskCategory?: IAutoCompleteItem | null;\r\n dueDate?: Date | null;\r\n estimatedEffort?: string | null;\r\n startDate?: Date | null;\r\n completionDate?: Date | null;\r\n duration?: string | null;\r\n assignedBy?: IAutoCompleteItem | null;\r\n completionNotes?: string | null;\r\n owner?: IAutoCompleteItem | null;\r\n}\r\n\r\nexport const WriteOffDebtorsViewDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const onClose = () => {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n };\r\n\r\n const currency = props.currencyDetails && props.currencyDetails.currency ? props.currencyDetails.currency : 'AUD';\r\n \r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {!!props.debtorsAmount && (\r\n \r\n
\r\n
\r\n Debtors:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {!!props.closeMatterAfterWriteOff && (\r\n \r\n \r\n }\r\n label=\"Close Matter After Write Off\"\r\n disabled={true}\r\n />\r\n \r\n )}\r\n \r\n \r\n {!!props.assignedTo && (\r\n \r\n
\r\n
\r\n Assigned To:\r\n
\r\n
\r\n {props.assignedTo.label}\r\n
\r\n
\r\n
\r\n )}\r\n {props.owner && (\r\n \r\n
\r\n
\r\n Owner:\r\n
\r\n
\r\n {props.owner.label}\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n {!!props.comments && (\r\n \r\n
\r\n
\r\n Comments:\r\n
\r\n
\r\n {props.comments}\r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Close\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n Grid,\r\n} from '@material-ui/core';\r\nimport { CurrencyDisplayStyle, FormattedCurrency } from '../../components/DataDisplay/FormattedCurrency';\r\nimport { AssignmentTaskDetailViewFields } from '../cards/AssignmentTaskDetailViewFields';\r\nimport moment from 'moment';\r\nimport { CurrencyDetails } from '../../matterSummary/cellRenderer/MatterTaskAction';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { DialogTitleExtension } from '../../matterSummary/common/DialogTitleExtension';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {},\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n fieldContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n flex: 1,\r\n height: '100%',\r\n alignItems: 'center',\r\n '& .col': {\r\n padding: '0 10px',\r\n },\r\n '& .value': {\r\n fontWeight: 600,\r\n color: 'grey',\r\n },\r\n '& .text': {\r\n flex: 1,\r\n color: 'grey',\r\n }\r\n },\r\n })\r\n);\r\n\r\ninterface TransferTrustToPayInvoiceViewDialogProps {\r\n open: boolean;\r\n currencyDetails: CurrencyDetails;\r\n matterId: number;\r\n matterGuid: string;\r\n matterTitle: string;\r\n client: string;\r\n onClose?: () => void;\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n\r\n outstandingDebtors?: number;\r\n currentTrustBalance?: number;\r\n\r\n // Saved values\r\n taskGuid?: string;\r\n formAction: 'create' | 'edit';\r\n trustAmount?: number | null;\r\n invoiceNumber?: string | null;\r\n comments?: string | null;\r\n assignedTo?: IAutoCompleteItem | null;\r\n priority?: IAutoCompleteItem | null;\r\n taskCategory?: IAutoCompleteItem | null;\r\n dueDate?: Date | null;\r\n estimatedEffort?: string | null;\r\n startDate?: Date | null;\r\n completionDate?: Date | null;\r\n duration?: string | null;\r\n assignedBy?: IAutoCompleteItem | null;\r\n completionNotes?: string | null;\r\n owner?: IAutoCompleteItem | null;\r\n}\r\n\r\nexport const TransferTrustToPayInvoiceViewDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const onClose = () => {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n };\r\n\r\n const currency = props.currencyDetails && props.currencyDetails.currency ? props.currencyDetails.currency : 'AUD';\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {!!props.trustAmount && (\r\n \r\n
\r\n
\r\n Transfer:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {!!props.invoiceNumber && (\r\n \r\n
\r\n
\r\n Invoice Number:\r\n
\r\n
\r\n {props.invoiceNumber}\r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n {!!props.assignedTo && (\r\n \r\n
\r\n
\r\n Assigned To:\r\n
\r\n
\r\n {props.assignedTo.label}\r\n
\r\n
\r\n
\r\n )}\r\n {props.owner && (\r\n \r\n
\r\n
\r\n Owner:\r\n
\r\n
\r\n {props.owner.label}\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n {!!props.comments && (\r\n \r\n
\r\n
\r\n Comments:\r\n
\r\n
\r\n {props.comments ? props.comments : undefined}\r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Close\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n Grid,\r\n Checkbox,\r\n FormControlLabel,\r\n} from '@material-ui/core';\r\nimport { AssignmentTaskDetailViewFields } from '../cards/AssignmentTaskDetailViewFields';\r\nimport moment from 'moment';\r\nimport { CurrencyDetails } from '../../matterSummary/cellRenderer/MatterTaskAction';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { DialogTitleExtension } from '../../matterSummary/common/DialogTitleExtension';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {},\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n fieldContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n flex: 1,\r\n height: '100%',\r\n alignItems: 'center',\r\n '& .col': {\r\n padding: '0 10px',\r\n },\r\n '& .value': {\r\n fontWeight: 600,\r\n color: 'grey',\r\n },\r\n '& .text': {\r\n flex: 1,\r\n color: 'grey',\r\n }\r\n },\r\n })\r\n);\r\n\r\ninterface ArchiveMatterViewDialogProps {\r\n open: boolean;\r\n currencyDetails: CurrencyDetails;\r\n matterId: number;\r\n matterGuid: string;\r\n matterTitle: string;\r\n client: string;\r\n onClose?: () => void;\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n\r\n billedFees?: number;\r\n closedDate?: Date;\r\n\r\n // Saved values\r\n taskGuid?: string;\r\n formAction: 'create' | 'edit';\r\n archiveMatter?: boolean | null;\r\n comments?: string | null;\r\n assignedTo?: IAutoCompleteItem | null;\r\n priority?: IAutoCompleteItem | null;\r\n taskCategory?: IAutoCompleteItem | null;\r\n dueDate?: Date | null;\r\n estimatedEffort?: string | null;\r\n startDate?: Date | null;\r\n completionDate?: Date | null;\r\n duration?: string | null;\r\n assignedBy?: IAutoCompleteItem | null;\r\n completionNotes?: string | null;\r\n owner?: IAutoCompleteItem | null;\r\n}\r\n\r\nexport const ArchiveMatterViewDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const onClose = () => {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {!!props.archiveMatter && (\r\n \r\n \r\n }\r\n label=\"Archive Matter\"\r\n disabled={true}\r\n />\r\n \r\n )}\r\n \r\n \r\n {!!props.assignedTo && (\r\n \r\n
\r\n
\r\n Assigned To:\r\n
\r\n
\r\n {props.assignedTo.label}\r\n
\r\n
\r\n
\r\n )}\r\n {props.owner && (\r\n \r\n
\r\n
\r\n Owner:\r\n
\r\n
\r\n {props.owner.label}\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n {!!props.comments && (\r\n \r\n
\r\n
\r\n Comments:\r\n
\r\n
\r\n {props.comments}\r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Close\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n Grid,\r\n Checkbox,\r\n FormControlLabel,\r\n} from '@material-ui/core';\r\nimport { AssignmentTaskDetailViewFields } from '../cards/AssignmentTaskDetailViewFields';\r\nimport moment from 'moment';\r\nimport { CurrencyDetails } from '../../matterSummary/cellRenderer/MatterTaskAction';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { DialogTitleExtension } from '../../matterSummary/common/DialogTitleExtension';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {},\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n fieldContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n flex: 1,\r\n height: '100%',\r\n alignItems: 'center',\r\n '& .col': {\r\n padding: '0 10px',\r\n },\r\n '& .value': {\r\n fontWeight: 600,\r\n color: 'grey',\r\n },\r\n '& .text': {\r\n flex: 1,\r\n color: 'grey',\r\n }\r\n },\r\n })\r\n);\r\n\r\ninterface CloseMatterViewDialogProps {\r\n open: boolean;\r\n currencyDetails: CurrencyDetails;\r\n matterId: number;\r\n matterGuid: string;\r\n matterTitle: string;\r\n client: string;\r\n onClose?: () => void;\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n\r\n billedFees?: number;\r\n\r\n // Saved values\r\n taskGuid?: string;\r\n formAction: 'create' | 'edit';\r\n closeMatter?: boolean | null;\r\n comments?: string | null;\r\n assignedTo?: IAutoCompleteItem | null;\r\n priority?: IAutoCompleteItem | null;\r\n taskCategory?: IAutoCompleteItem | null;\r\n dueDate?: Date | null;\r\n estimatedEffort?: string | null;\r\n startDate?: Date | null;\r\n completionDate?: Date | null;\r\n duration?: string | null;\r\n assignedBy?: IAutoCompleteItem | null;\r\n completionNotes?: string | null;\r\n owner?: IAutoCompleteItem | null;\r\n}\r\n\r\nexport const CloseMatterViewDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const onClose = () => {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {!!props.closeMatter && (\r\n \r\n \r\n }\r\n label=\"Close Matter\"\r\n disabled={true}\r\n />\r\n \r\n )}\r\n \r\n \r\n {!!props.assignedTo && (\r\n \r\n
\r\n
\r\n Assigned To:\r\n
\r\n
\r\n {props.assignedTo.label}\r\n
\r\n
\r\n
\r\n )}\r\n {props.owner && (\r\n \r\n
\r\n
\r\n Owner:\r\n
\r\n
\r\n {props.owner.label}\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n {!!props.comments && (\r\n \r\n
\r\n
\r\n Comments:\r\n
\r\n
\r\n {props.comments}\r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Close\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogTitle,\r\n DialogActions,\r\n DialogContent,\r\n Grid,\r\n Divider,\r\n} from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { mainTheme } from '../../Theme';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {},\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n fieldContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n flex: 1,\r\n height: '100%',\r\n alignItems: 'center',\r\n '& .col': {\r\n padding: '0 10px',\r\n },\r\n '& .value': {\r\n // fontWeight: 600,\r\n color: 'grey',\r\n },\r\n '& .text': {\r\n flex: 1,\r\n color: 'grey',\r\n },\r\n '& .status': {\r\n // fontWeight: 600,\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n }\r\n },\r\n divider: {\r\n width: '100%',\r\n }\r\n })\r\n);\r\n\r\ninterface GeneralViewDialogProps {\r\n open: boolean;\r\n title?: string;\r\n onClose?: () => void;\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n \r\n // Saved values\r\n taskGuid?: string;\r\n description?: string | null;\r\n notes?: string | null;\r\n assignedTo?: IAutoCompleteItem | null;\r\n priority?: IAutoCompleteItem | null;\r\n taskCategory?: IAutoCompleteItem | null;\r\n dueDate?: Date | null;\r\n estimatedEffort?: string | null;\r\n startDate?: Date | null;\r\n completionDate?: Date | null;\r\n duration?: string | null;\r\n assignedBy?: IAutoCompleteItem | null;\r\n status?: string | null;\r\n completionNotes?: string | null;\r\n owner?: IAutoCompleteItem | null;\r\n}\r\n\r\nexport const GeneralViewDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const onClose = () => {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {props.title}\r\n \r\n \r\n \r\n {!!props.description && (\r\n \r\n
\r\n
\r\n Description:\r\n
\r\n
\r\n
\r\n \r\n )}\r\n {!!props.notes && (\r\n \r\n
\r\n
\r\n Notes:\r\n
\r\n
\r\n
\r\n \r\n )}\r\n \r\n \r\n \r\n {!!props.assignedTo && (\r\n \r\n
\r\n
\r\n Assigned To:\r\n
\r\n
\r\n {props.assignedTo.label}\r\n
\r\n
\r\n
\r\n )}\r\n {props.owner && (\r\n \r\n
\r\n
\r\n Owner:\r\n
\r\n
\r\n {props.owner.label}\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n {!!(props.priority || props.defaultPriority) && (\r\n \r\n
\r\n
\r\n Priority:\r\n
\r\n
\r\n {props.priority ? props.priority.label : props.defaultPriority!.label}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.taskCategory && (\r\n \r\n
\r\n
\r\n Category:\r\n
\r\n
\r\n {props.taskCategory.label}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.dueDate && (\r\n \r\n
\r\n
\r\n Due:\r\n
\r\n
\r\n {moment(props.dueDate).format('MMM D, YYYY hh:mm a')}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.estimatedEffort && (\r\n \r\n
\r\n
\r\n Estimated Effort:\r\n
\r\n
\r\n {props.estimatedEffort}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.startDate && (\r\n \r\n
\r\n
\r\n Start:\r\n
\r\n
\r\n {moment(props.startDate).format('MMM D, YYYY hh:mm a')}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.completionDate && (\r\n \r\n
\r\n
\r\n Completion:\r\n
\r\n
\r\n {moment(props.completionDate).format('MMM D, YYYY hh:mm a')}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.duration && (\r\n \r\n
\r\n
\r\n Actual Effort:\r\n
\r\n
\r\n {props.duration}\r\n
\r\n
\r\n
\r\n )}\r\n {!!(props.assignedBy || props.loggedInUser) && (\r\n \r\n
\r\n
\r\n Assigned By:\r\n
\r\n
\r\n {props.assignedBy ? props.assignedBy!.label : props.loggedInUser!.label}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.status && (\r\n \r\n
\r\n
\r\n Status:\r\n
\r\n
\r\n {props.status}\r\n
\r\n
\r\n
\r\n )}\r\n {!!props.completionNotes && (\r\n \r\n
\r\n
\r\n Completion Notes:\r\n
\r\n
\r\n {props.completionNotes}\r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n \r\n \r\n Close\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { CurrencyOptionData, fetchAppUserData, fetchCurrencyData } from '../../matterManagement/MatterManagementRepository';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { AppUserData } from '../../enquirySummary/EnquirySummaryRepository';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { Detail, PriorityData, retrievePriorityData, retrieveTaskDetailsData, TaskDetailsData, TaskDetailsParam } from '../../tasksSummary/TasksSummaryRepository';\r\nimport { fetchMatterDetailsData } from '../../matterSummary/MatterSummaryRepository';\r\nimport { MatterData, MatterDetails } from '../../matterSummary/models/Matter';\r\nimport moment from 'moment';\r\nimport { BillTheMatterViewDialog } from '../viewDialog/BillTheMatterViewDialog';\r\nimport { WriteOffWipViewDialog } from '../viewDialog/WriteOffWipViewDialog';\r\nimport { WriteOffDebtorsViewDialog } from '../viewDialog/WriteOffDebtorsViewDialog';\r\nimport { TransferTrustToPayInvoiceViewDialog } from '../viewDialog/TransferTrustToPayInvoiceViewDialog';\r\nimport { ArchiveMatterViewDialog } from '../viewDialog/ArchiveMatterViewDialog';\r\nimport { CloseMatterViewDialog } from '../viewDialog/CloseMatterViewDialog';\r\nimport { GeneralViewDialog } from '../viewDialog/GeneralViewDialog';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n },\r\n doneIcon: {\r\n marginRight: '10px',\r\n },\r\n loaderWrapper: {\r\n position: 'absolute',\r\n top: 0,\r\n bottom: 0,\r\n right: 0,\r\n left: 0,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }\r\n })\r\n);\r\n\r\nexport interface CurrencyDetails {\r\n currencySymbol: string;\r\n currency: string;\r\n}\r\n\r\ninterface MatterTaskViewRenderProps /* extends ICellRendererParams,*/ /*WithStyles*/ {\r\n taskGuid: string;\r\n taskType: string;\r\n isSystemTask: boolean;\r\n taskDescription: string;\r\n onDialogClose?: () => void;\r\n status?: string | null;\r\n}\r\n\r\ninterface MatterTaskViewRenderState {\r\n isBillMatterOpen: boolean;\r\n isWriteOffUnbilledFeesOpen: boolean;\r\n isTransferTrustToPayInvoiceOpen: boolean;\r\n isWriteOffDebtorsOpen: boolean;\r\n isCloseMatterOpen: boolean;\r\n isArchiveMatterOpen: boolean;\r\n isGeneralOpen: boolean;\r\n\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport const MatterTaskViewRender: React.FC = ( props ) => {\r\n const classes = useStyles();\r\n\r\n const [currencyData, setCurrencyData] = useState();\r\n const [taskData, setTaskData] = useState();\r\n const [matterData, setMatterData] = useState();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [state, setState] = useState({\r\n isBillMatterOpen: props.taskType === 'BillMatterRequested' ? true : false,\r\n isWriteOffUnbilledFeesOpen: props.taskType === 'WriteOffMatterWIPRequested' ? true : false,\r\n isTransferTrustToPayInvoiceOpen: props.taskType === 'TransferMatterTrustToInvoiceRequested' ? true : false,\r\n isWriteOffDebtorsOpen: props.taskType === 'WriteOffMatterDebtorsRequested' ? true : false,\r\n isCloseMatterOpen: props.taskType === 'CloseMatterRequested' ? true : false,\r\n isArchiveMatterOpen: props.taskType === 'ArchiveMatterRequested' ? true : false,\r\n loggedInUser: null,\r\n defaultPriority: null,\r\n isGeneralOpen: (props.taskType === 'General' || props.isSystemTask === false ) ? true : false,\r\n });\r\n\r\n useEffect(() => {\r\n setIsLoading(true);\r\n fetchCurrencyDetails();\r\n fetchUser();\r\n fetchPriority();\r\n fetchTaskDetails(props.taskGuid);\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchCurrencyDetails = () => {\r\n if (currencyData === undefined) {\r\n fetchCurrencyData(false,\r\n (data: CurrencyOptionData) => {\r\n handleCurrencyFetch(data);\r\n }, \r\n (reason) => {\r\n showNotification('Failed to Fetch App User Settings', reason, 'error'); \r\n });\r\n }\r\n };\r\n\r\n const handleCurrencyFetch = (data: CurrencyOptionData) => {\r\n if (data && !data.loading && data.options) {\r\n if (data.options.currencySymbol && data.options.localCurrency) {\r\n setCurrencyData({\r\n currency: data.options.localCurrency.currency,\r\n currencySymbol: data.options.currencySymbol.symbol\r\n });\r\n }\r\n }\r\n };\r\n\r\n const fetchUser = () => {\r\n fetchAppUserData(\r\n false,\r\n (data: AppUserData) => handleUserDataFetch(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const handleUserDataFetch = (data: AppUserData) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n loggedInUser: { label: data.appUser.name, value: data.appUser.userId },\r\n isLoading: false\r\n };\r\n });\r\n };\r\n\r\n const fetchTaskDetails = (guid: string) => {\r\n const taskDetailsParams: TaskDetailsParam = {\r\n guid: guid\r\n };\r\n\r\n retrieveTaskDetailsData(\r\n taskDetailsParams,\r\n true,\r\n // tslint:disable-next-line: no-console\r\n (data: TaskDetailsData) => handleTaskDetailsFetch(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const handleTaskDetailsFetch = (data: TaskDetailsData) => {\r\n // tslint:disable-next-line: no-console\r\n\r\n if (data && data.task && data.task.detail) {\r\n setTaskData(data.task.detail);\r\n if (data.task.detail.matterId) {\r\n fetchMatterDetails(data.task.detail.matterId);\r\n } else {\r\n setIsLoading(false);\r\n }\r\n }\r\n };\r\n\r\n const fetchMatterDetails = (matterId: number) => {\r\n fetchMatterDetailsData(true, // This should always be a new request.\r\n matterId,\r\n (data: MatterData) => {\r\n handleMatterDataFetch(data);\r\n }, \r\n (reason) => {\r\n showNotification('Failed to Fetch App User Settings', reason, 'error'); \r\n });\r\n \r\n };\r\n\r\n const handleMatterDataFetch = (data: MatterData) => {\r\n if (data && !data.loading && data.matter) {\r\n if (data.matter) {\r\n setMatterData(data.matter);\r\n\r\n setIsLoading(false);\r\n }\r\n }\r\n };\r\n\r\n const fetchPriority = () => {\r\n retrievePriorityData(\r\n false,\r\n // tslint:disable-next-line: no-console\r\n (data) => handlePriorityDataFetch(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const handlePriorityDataFetch = (data: PriorityData) => {\r\n // set the priority default data\r\n const priorityData = data.lookup.priority.filter(value => {\r\n return value.description === 'No Priority';\r\n });\r\n\r\n if (priorityData && priorityData.length > 0) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n defaultPriority: { label: priorityData[0].description, value: priorityData[0].guidId },\r\n isLoading: false\r\n };\r\n });\r\n } \r\n };\r\n\r\n const onDialogClose = () => {\r\n if (props.onDialogClose) {\r\n props.onDialogClose();\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-shadowed-variable\r\n const getMatterTaskActions = () => {\r\n if (taskData && matterData && currencyData && taskData.taskTypeInternalDescription !== 'General' && props.isSystemTask === true) {\r\n const unBilledFees = matterData.financials ? matterData.financials.unbilledTimeAndFees : 0;\r\n const unbilledDisbursements = matterData.financials ? matterData.financials.unbilledDisbursements : 0;\r\n const outstandingDebtors = matterData.financials ? matterData.financials.debtors : 0;\r\n const currentTrustBalance = matterData.financials ? matterData.financials.trustBalance : 0;\r\n const billedFees = matterData.financials ? matterData.financials.billedTimeAndFees : 0;\r\n const feeEstimate = matterData.financials ? matterData.financials.feeEstimate : 0;\r\n const percentageEstimate = matterData.financials ? matterData.financials.percentageEstimate : 0;\r\n const pendingWriteOffFeesAmountInBillMatterTask = matterData.financials \r\n ? matterData.actions.pendingWriteOffFeesAmountInBillMatterTask \r\n : 0;\r\n const pendingWriteOffFeesAmountInWriteOffWipTask = matterData.financials \r\n ? matterData.actions.pendingWriteOffFeesAmountInWriteOffWipTask \r\n : 0;\r\n const pendingWriteOffDisbAmountInBillMatterTask = matterData.financials \r\n ? matterData.actions.pendingWriteOffFeesAmountInBillMatterTask \r\n : 0;\r\n const pendingWriteOffDisbAmountInWriteOffWipTask = matterData.financials \r\n ? matterData.actions.pendingWriteOffFeesAmountInWriteOffWipTask \r\n : 0;\r\n\r\n const matterTitle = `${matterData.fileNumber} - ${matterData.description}`;\r\n\r\n const assignedTo = taskData.assignedTo && taskData.assignedToName ? {label: taskData.assignedToName, value: taskData.assignedTo} : null;\r\n const owner = taskData.owner && taskData.ownerName ? {label: taskData.ownerName, value: taskData.owner} : null;\r\n const priority = taskData.priority && taskData.priorityDescription \r\n ? {label: taskData.priorityDescription, value: taskData.priority} \r\n : state.defaultPriority;\r\n const category = taskData.category && taskData.categoryDescription \r\n ? {label: taskData.categoryDescription, value: taskData.category} \r\n : null;\r\n const dueDate = taskData.dueDate;\r\n const estimatedEffort = taskData.estimatedEffort && taskData.estimatedEffort !== '00:00:00'\r\n ? moment(taskData.estimatedEffort, 'HH:mm').format('HH:mm')\r\n : '';\r\n const startDate = taskData.startDate;\r\n const completionDate = taskData.completionDate;\r\n const duration = taskData.duration && taskData.duration !== '00:00:00'\r\n ? moment(taskData.duration, 'HH:mm').format('HH:mm') \r\n : '';\r\n const assignedBy = taskData.assignedBy && taskData.assignedByName \r\n ? {label: taskData.assignedByName, value: taskData.assignedBy} \r\n : state.loggedInUser;\r\n\r\n return (\r\n \r\n {state.isBillMatterOpen && (\r\n \r\n )}\r\n \r\n {state.isWriteOffUnbilledFeesOpen && (\r\n \r\n )}\r\n \r\n {state.isWriteOffDebtorsOpen && (\r\n \r\n )}\r\n \r\n {state.isTransferTrustToPayInvoiceOpen && (\r\n \r\n )}\r\n \r\n {state.isArchiveMatterOpen && (\r\n \r\n )}\r\n \r\n {state.isCloseMatterOpen && (\r\n \r\n )} \r\n \r\n );\r\n } else if (taskData && currencyData) {\r\n const assignedTo = taskData.assignedTo && taskData.assignedToName ? {label: taskData.assignedToName, value: taskData.assignedTo} : null;\r\n const owner = taskData.owner && taskData.ownerName ? {label: taskData.ownerName, value: taskData.owner} : null;\r\n const priority = taskData.priority && taskData.priorityDescription \r\n ? {label: taskData.priorityDescription, value: taskData.priority} \r\n : state.defaultPriority;\r\n const category = taskData.category && taskData.categoryDescription \r\n ? {label: taskData.categoryDescription, value: taskData.category} \r\n : null;\r\n const dueDate = taskData.dueDate;\r\n const estimatedEffort = taskData.estimatedEffort && taskData.estimatedEffort !== '00:00:00'\r\n ? moment(taskData.estimatedEffort, 'HH:mm').format('HH:mm') \r\n : '';\r\n const startDate = taskData.startDate;\r\n const completionDate = taskData.completionDate;\r\n const duration = taskData.duration && taskData.duration !== '00:00:00'\r\n ? moment(taskData.duration, 'HH:mm').format('HH:mm') \r\n : '';\r\n const assignedBy = taskData.assignedBy && taskData.assignedByName \r\n ? {label: taskData.assignedByName, value: taskData.assignedBy} \r\n : state.loggedInUser;\r\n const taskNotes = taskData.notes;\r\n const taskDescription = taskData.description;\r\n\r\n return (\r\n \r\n {state.isGeneralOpen && (\r\n \r\n )}\r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n };\r\n\r\n const getLoader = () => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n };\r\n\r\n return (\r\n \r\n {\r\n isLoading\r\n ? getLoader()\r\n : getMatterTaskActions() \r\n }\r\n \r\n );\r\n};\r\n","import gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport { client } from '..';\r\nimport { UserListData } from '../components/UserAutocompleteSelector';\r\nimport { DocumentFile } from '../types/DocumentFile';\r\n\r\nexport enum TaskStatusEnum {\r\n All = 0,\r\n Open = 1,\r\n Closed = 2,\r\n None = 3,\r\n}\r\n\r\nexport interface TasksSummaryQueryParams {\r\n offset: number | null;\r\n first: number | null;\r\n filter: string | null;\r\n sortColumn?: string | null;\r\n sortDirection?: string | null;\r\n entityGuidID?: string | null;\r\n taskStatus: TaskStatusEnum | null;\r\n isIncludeCrmTasks: boolean | null;\r\n isMyTasksOnly: boolean | null;\r\n isPersonalTask: boolean | null;\r\n isFromDataSource: boolean | null;\r\n groupBy: string | null;\r\n groupByValue: string | null;\r\n completedFromDate: Date | null;\r\n completedToDate: Date | null;\r\n updatedFromDate: Date | null;\r\n updatedToDate: Date | null;\r\n priorityList: string | null;\r\n statusList: string | null;\r\n allocatedToList: string | null;\r\n allocatedByList: string | null;\r\n created: string | null;\r\n due: string | null;\r\n teamList: string | null;\r\n taskTypes: string | null;\r\n clientList: string | null;\r\n matterList: string | null;\r\n isIncludeFollowUpTasksOnly: boolean | null;\r\n isIncludeHasTasks: boolean | null | undefined;\r\n}\r\n\r\nexport interface TaskSummaryListData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n task: TaskData;\r\n}\r\nexport interface TaskData {\r\n summaryList: TaskSummaryList;\r\n}\r\nexport interface TaskSummaryList {\r\n recordCount: number;\r\n actualRowCountForSearch: number;\r\n tasks: TaskSummary[];\r\n}\r\n\r\nexport interface TaskSummary {\r\n startDate: Date | null;\r\n assignedByGuidID: null | string;\r\n assignedByName: string | null;\r\n assignedDate: Date | null;\r\n assignedToGuidID: null | string;\r\n assignedToName: string | null;\r\n allocatedToEntityType: number | null;\r\n completedDate: Date | null;\r\n createdDate: Date | null;\r\n dueDate: Date | null;\r\n entityGuidID: string | null;\r\n entityType: number;\r\n ownerGuidID: null | string;\r\n ownerName: string | null;\r\n properties: string | null;\r\n taskDescription: string | null;\r\n matterDescription: string | null;\r\n taskGuidID: string;\r\n taskStatusDescription: string | null;\r\n taskStatusGuidID: null | string;\r\n priorityGuidID: null | string;\r\n priorityDescription: null | string;\r\n priorityLevel: null | string;\r\n updatedDate: Date | null;\r\n taskType: string | null;\r\n taskTypeGuidID: string | null;\r\n taskTypeInternalDescription: string | null;\r\n taskTypeDescription: string | null;\r\n taskTypeNotes: string | null;\r\n isSystemTask: boolean | null;\r\n completionNotesGuidID: string | null;\r\n completionNotes: string | null;\r\n taskCategoryGuidID: string | null;\r\n taskCategoryDescription: string | null;\r\n matter: string | null;\r\n client: string | null;\r\n estimatedEffort: string | null;\r\n duration: string | null;\r\n notes: string | null;\r\n isKeyOpportunity: boolean;\r\n fromNameId: number | null;\r\n fromName: string | null;\r\n fromNameGuid: string | null;\r\n organisation: string | null;\r\n organisationGuid: string | null;\r\n isPhoneCall: boolean;\r\n isReturnedCall: boolean;\r\n isWillCallAgain: boolean;\r\n phoneNumber: string | null;\r\n isConfidential: boolean | null;\r\n matterId: number | null;\r\n nameId: number | null;\r\n isFromNameFromDataSource: boolean;\r\n isFromDataSource: boolean;\r\n}\r\n\r\nexport function retrieveTasksSummaryData(\r\n query: TasksSummaryQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: TaskSummaryListData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void,\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: TaskSummaryListData,\r\n variables: {\r\n offset: query.offset,\r\n first: query.first,\r\n filter: query.filter,\r\n sortColumn: query.sortColumn,\r\n sortDirection: query.sortDirection,\r\n entityGuidID: query.entityGuidID,\r\n groupBy: query.groupBy,\r\n groupByValue: query.groupByValue,\r\n taskStatus: query.taskStatus,\r\n isIncludeCrmTasks: query.isIncludeCrmTasks,\r\n isMyTasksOnly: query.isMyTasksOnly,\r\n completedFromDate: query.completedFromDate,\r\n completedToDate: query.completedToDate,\r\n updatedFromDate: query.updatedFromDate,\r\n updatedToDate: query.updatedToDate,\r\n priorityList: query.priorityList,\r\n statusList: query.statusList,\r\n allocatedToList: query.allocatedToList,\r\n allocatedByList: query.allocatedByList,\r\n created: query.created,\r\n due: query.due,\r\n teamList: query.teamList,\r\n taskTypes: query.taskTypes,\r\n clientList: query.clientList,\r\n matterList: query.matterList,\r\n isPersonalTask: query.isPersonalTask,\r\n isFromDataSource: query.isFromDataSource,\r\n isIncludeFollowUpTasksOnly: query.isIncludeFollowUpTasksOnly\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst TaskSummaryListData = gql`\r\n query TaskSummaryData(\r\n $offset: Int\r\n $first: Int\r\n $filter: String\r\n $sortColumn: String\r\n $sortDirection: String\r\n $entityGuidID: String\r\n $taskStatus: Int\r\n $isIncludeCrmTasks: Boolean\r\n $isMyTasksOnly: Boolean\r\n $groupBy: String\r\n $groupByValue: String\r\n $completedFromDate: DateTime\r\n $completedToDate: DateTime\r\n $updatedFromDate: DateTime\r\n $updatedToDate: DateTime\r\n $priorityList: String\r\n $statusList: String\r\n $allocatedToList: String\r\n $allocatedByList: String\r\n $created: String\r\n $due: String\r\n $teamList: String\r\n $taskTypes: String\r\n $clientList: String\r\n $matterList: String\r\n $isPersonalTask: Boolean\r\n $isFromDataSource: Boolean\r\n $isIncludeFollowUpTasksOnly: Boolean\r\n ) {\r\n task {\r\n summaryList(\r\n offset: $offset\r\n first: $first\r\n filter: $filter\r\n sortColumn: $sortColumn\r\n sortDirection: $sortDirection\r\n entityGuidID: $entityGuidID\r\n taskStatus: $taskStatus\r\n isIncludeCrmTasks: $isIncludeCrmTasks\r\n isMyTasksOnly: $isMyTasksOnly\r\n groupBy: $groupBy\r\n groupByValue: $groupByValue\r\n completedFromDate: $completedFromDate\r\n completedToDate: $completedToDate\r\n updatedFromDate: $updatedFromDate\r\n updatedToDate: $updatedToDate\r\n priorityList: $priorityList\r\n statusList: $statusList\r\n allocatedToList: $allocatedToList\r\n allocatedByList: $allocatedByList\r\n created: $created\r\n due: $due\r\n teamList: $teamList\r\n taskTypes: $taskTypes\r\n clientList: $clientList\r\n matterList: $matterList\r\n \tisPersonalTask: $isPersonalTask,\r\n isFromDataSource: $isFromDataSource,\r\n \tisIncludeFollowUpTasksOnly: $isIncludeFollowUpTasksOnly\r\n ) {\r\n recordCount\r\n actualRowCountForSearch\r\n tasks {\r\n startDate\r\n assignedByGuidID\r\n assignedByName\r\n assignedDate\r\n assignedToGuidID\r\n assignedToName\r\n allocatedToEntityType\r\n completedDate\r\n createdDate\r\n dueDate\r\n entityGuidID\r\n entityType\r\n ownerGuidID\r\n ownerName\r\n properties\r\n taskDescription\r\n matterDescription\r\n taskGuidID\r\n taskStatusDescription\r\n taskStatusGuidID\r\n isSystemTask\r\n updatedDate\r\n priorityGuidID\r\n priorityDescription\r\n priorityLevel\r\n taskType\r\n taskTypeGuidID\r\n taskTypeInternalDescription\r\n taskTypeDescription\r\n taskTypeNotes\r\n completionNotesGuidID\r\n completionNotes\r\n taskCategoryGuidID\r\n taskCategoryDescription\r\n matter\r\n client\r\n estimatedEffort\r\n duration\r\n notes\r\n isKeyOpportunity\r\n fromName\r\n fromNameGuid\r\n organisation\r\n organisationGuid\r\n isPhoneCall\r\n isReturnedCall\r\n isWillCallAgain\r\n phoneNumber\r\n isConfidential\r\n matterId\r\n nameId\r\n isFromNameFromDataSource\r\n isFromDataSource\r\n responseTime\r\n elapsedDays\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport interface AppUserData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n appUser: AppUser;\r\n}\r\n\r\nexport interface AppUser {\r\n isAdministrator: boolean;\r\n hasFeeEarnerDashboardAccess: boolean;\r\n userId: string;\r\n name: string;\r\n}\r\n\r\nexport function fetchAppUserData(\r\n refreshData: boolean,\r\n onSuccess: (data?: AppUserData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void,\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n\r\n client\r\n .query({\r\n query: UserData,\r\n variables: {},\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst UserData = gql`\r\n query AppUser {\r\n appUser {\r\n isAdministrator\r\n name\r\n userId\r\n hasFeeEarnerDashboardAccess\r\n }\r\n }\r\n`;\r\n\r\nexport interface TaskStatusQueryParams {\r\n taskStatusType: string | null;\r\n includeCount: boolean | null;\r\n\r\n offset: number | null;\r\n first: number | null;\r\n filter: string | null;\r\n entityGuidID?: string | null;\r\n taskStatus: TaskStatusEnum | null;\r\n isIncludeCrmTasks: boolean | null;\r\n isMyTasksOnly: boolean | null;\r\n groupBy: string | null;\r\n groupByValue: string | null;\r\n completedFromDate: Date | null;\r\n completedToDate: Date | null;\r\n updatedFromDate: Date | null;\r\n updatedToDate: Date | null;\r\n priorityList: string | null;\r\n statusList: string | null;\r\n allocatedToList: string | null;\r\n allocatedByList: string | null;\r\n created: string | null;\r\n due: string | null;\r\n teamList: string | null;\r\n taskTypes: string | null;\r\n isPersonalTask: boolean | null;\r\n isFromDataSource: boolean | null;\r\n matterList: string | null;\r\n isIncludeFollowUpTasksOnly: boolean | null;\r\n isIncludeCount: boolean | null;\r\n}\r\n\r\nexport interface TaskData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n task: Task;\r\n}\r\n\r\nexport interface Task {\r\n statuses: TaskStatus[];\r\n dueDates: DueDate[];\r\n}\r\n\r\nexport interface TaskStatus {\r\n guidId: string;\r\n description: string;\r\n sequence: number;\r\n type?: number;\r\n count: number;\r\n}\r\n\r\nexport interface DueDate {\r\n id: number;\r\n description: string;\r\n count: number;\r\n}\r\n\r\nexport function retrieveTaskStatusData(\r\n query: TaskStatusQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: TaskData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void,\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: TaskStatusQuery,\r\n variables: {\r\n taskStatusType: query.taskStatusType,\r\n includeCount: query.includeCount,\r\n\r\n offset: query.offset,\r\n first: query.first,\r\n filter: query.filter,\r\n entityGuidID: query.entityGuidID,\r\n groupBy: query.groupBy,\r\n groupByValue: query.groupByValue,\r\n taskStatus: query.taskStatus,\r\n isIncludeCrmTasks: query.isIncludeCrmTasks,\r\n isMyTasksOnly: query.isMyTasksOnly,\r\n completedFromDate: query.completedFromDate,\r\n completedToDate: query.completedToDate,\r\n updatedFromDate: query.updatedFromDate,\r\n updatedToDate: query.updatedToDate,\r\n priorityList: query.priorityList,\r\n statusList: query.statusList,\r\n allocatedToList: query.allocatedToList,\r\n allocatedByList: query.allocatedByList,\r\n created: query.created,\r\n due: query.due,\r\n teamList: query.teamList,\r\n taskTypes: query.taskTypes,\r\n isPersonalTask: query.isPersonalTask,\r\n isFromDataSource: query.isFromDataSource,\r\n matterList: query.matterList,\r\n isIncludeFollowUpTasksOnly: query.isIncludeFollowUpTasksOnly\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface PriorityData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n lookup: PriorityLookup;\r\n}\r\n\r\nexport interface PriorityLookup {\r\n priority: Priority[];\r\n}\r\n\r\nexport interface Priority {\r\n guidId: string;\r\n description: string;\r\n level: number;\r\n sequence: number;\r\n}\r\n\r\nexport function retrievePriorityData(\r\n refreshData: boolean,\r\n onSuccess: (data: PriorityData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void,\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: PriorityQuery,\r\n variables: {},\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface TaskCategoryData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n task: TaskCategoryLookup;\r\n}\r\n\r\nexport interface TaskCategoryLookup {\r\n categories: TaskCategory[];\r\n}\r\n\r\nexport interface TaskCategory {\r\n id?: number;\r\n guidId: string;\r\n description: string;\r\n hasTasks?: boolean;\r\n}\r\n\r\nexport function retrieveTaskCategoryData(\r\n query: TasksSummaryQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: TaskCategoryData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void,\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: TaskCategoryQuery,\r\n variables: {\r\n offset: query.offset,\r\n first: query.first,\r\n filter: query.filter,\r\n entityGuidID: query.entityGuidID,\r\n groupBy: query.groupBy,\r\n groupByValue: query.groupByValue,\r\n taskStatus: query.taskStatus,\r\n isIncludeCrmTasks: query.isIncludeCrmTasks,\r\n isMyTasksOnly: query.isMyTasksOnly,\r\n isFromDataSource: query.isFromDataSource,\r\n completedFromDate: query.completedFromDate,\r\n completedToDate: query.completedToDate,\r\n updatedFromDate: query.updatedFromDate,\r\n updatedToDate: query.updatedToDate,\r\n priorityList: query.priorityList,\r\n statusList: query.statusList,\r\n allocatedToList: query.allocatedToList,\r\n allocatedByList: query.allocatedByList,\r\n teamList: query.teamList,\r\n taskTypes: query.taskTypes,\r\n isIncludeFollowUpTasksOnly: query.isIncludeFollowUpTasksOnly,\r\n isIncludeHasTasks: query.isIncludeHasTasks\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst TaskCategoryQuery = gql`\r\n query lookupTaskCategory(\r\n $offset: Int\r\n $first: Int\r\n $filter: String\r\n $entityGuidID: String\r\n $taskStatus: Int\r\n $isIncludeCrmTasks: Boolean\r\n $isMyTasksOnly: Boolean\r\n $groupBy: String\r\n $groupByValue: String\r\n $completedFromDate: DateTime\r\n $completedToDate: DateTime\r\n $updatedFromDate: DateTime\r\n $updatedToDate: DateTime\r\n $priorityList: String\r\n $statusList: String\r\n $allocatedToList: String\r\n $allocatedByList: String\r\n $teamList: String\r\n $taskTypes: String\r\n $isIncludeFollowUpTasksOnly: Boolean\r\n $isIncludeHasTasks: Boolean\r\n ) {\r\n task {\r\n categories(\r\n offset: $offset\r\n first: $first\r\n filter: $filter\r\n entityGuidID: $entityGuidID\r\n taskStatus: $taskStatus\r\n isIncludeCrmTasks: $isIncludeCrmTasks\r\n isMyTasksOnly: $isMyTasksOnly\r\n groupBy: $groupBy\r\n groupByValue: $groupByValue\r\n completedFromDate: $completedFromDate\r\n completedToDate: $completedToDate\r\n updatedFromDate: $updatedFromDate\r\n updatedToDate: $updatedToDate\r\n priorityList: $priorityList\r\n statusList: $statusList\r\n allocatedToList: $allocatedToList\r\n allocatedByList: $allocatedByList\r\n teamList: $teamList\r\n taskTypes: $taskTypes\r\n \tisIncludeFollowUpTasksOnly: $isIncludeFollowUpTasksOnly\r\n isIncludeHasTasks: $isIncludeHasTasks\r\n ) {\r\n guidId\r\n description\r\n hasTasks\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport interface TaskDueDateQueryParams {\r\n isIncludeCount: boolean | null;\r\n\r\n offset: number | null;\r\n first: number | null;\r\n filter: string | null;\r\n entityGuidID?: string | null;\r\n taskStatus: TaskStatusEnum | null;\r\n isIncludeCrmTasks: boolean | null;\r\n isMyTasksOnly: boolean | null;\r\n groupBy: string | null;\r\n groupByValue: string | null;\r\n completedFromDate: Date | null;\r\n completedToDate: Date | null;\r\n updatedFromDate: Date | null;\r\n updatedToDate: Date | null;\r\n priorityList: string | null;\r\n statusList: string | null;\r\n allocatedToList: string | null;\r\n allocatedByList: string | null;\r\n created: string | null;\r\n due: string | null;\r\n teamList: string | null;\r\n taskTypes: string | null;\r\n isIncludeFollowUpTasksOnly: boolean | null;\r\n isFromDataSource: boolean | null;\r\n}\r\n\r\nexport function retrieveTaskDueDateData(\r\n query: TaskDueDateQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: TaskData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void,\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: TaskDueDatesQuery,\r\n variables: {\r\n isIncludeCount: query.isIncludeCount,\r\n offset: query.offset,\r\n first: query.first,\r\n filter: query.filter,\r\n entityGuidID: query.entityGuidID,\r\n groupBy: query.groupBy,\r\n groupByValue: query.groupByValue,\r\n taskStatus: query.taskStatus,\r\n isIncludeCrmTasks: query.isIncludeCrmTasks,\r\n isMyTasksOnly: query.isMyTasksOnly,\r\n completedFromDate: query.completedFromDate,\r\n completedToDate: query.completedToDate,\r\n updatedFromDate: query.updatedFromDate,\r\n updatedToDate: query.updatedToDate,\r\n priorityList: query.priorityList,\r\n statusList: query.statusList,\r\n allocatedToList: query.allocatedToList,\r\n allocatedByList: query.allocatedByList,\r\n created: query.created,\r\n due: query.due,\r\n teamList: query.teamList,\r\n taskTypes: query.taskTypes,\r\n isIncludeFollowUpTasksOnly: query.isIncludeFollowUpTasksOnly,\r\n isFromDataSource: query.isFromDataSource\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst TaskDueDatesQuery = gql`\r\n query taskDueDates(\r\n $isIncludeCount: Boolean\r\n $offset: Int\r\n $first: Int\r\n $filter: String\r\n $entityGuidID: String\r\n $taskStatus: Int\r\n $isIncludeCrmTasks: Boolean\r\n $isMyTasksOnly: Boolean\r\n $groupBy: String\r\n $groupByValue: String\r\n $completedFromDate: DateTime\r\n $completedToDate: DateTime\r\n $updatedFromDate: DateTime\r\n $updatedToDate: DateTime\r\n $priorityList: String\r\n $statusList: String\r\n $allocatedToList: String\r\n $allocatedByList: String\r\n $created: String\r\n $due: String\r\n $teamList: String\r\n $taskTypes: String\r\n $isIncludeFollowUpTasksOnly: Boolean\r\n $isFromDataSource: Boolean\r\n ) {\r\n task {\r\n dueDates(\r\n isIncludeCount: $isIncludeCount\r\n offset: $offset\r\n first: $first\r\n filter: $filter\r\n entityGuidID: $entityGuidID\r\n taskStatus: $taskStatus\r\n isIncludeCrmTasks: $isIncludeCrmTasks\r\n isMyTasksOnly: $isMyTasksOnly\r\n groupBy: $groupBy\r\n groupByValue: $groupByValue\r\n completedFromDate: $completedFromDate\r\n completedToDate: $completedToDate\r\n updatedFromDate: $updatedFromDate\r\n updatedToDate: $updatedToDate\r\n priorityList: $priorityList\r\n statusList: $statusList\r\n allocatedToList: $allocatedToList\r\n allocatedByList: $allocatedByList\r\n created: $created\r\n due: $due\r\n teamList: $teamList\r\n taskTypes: $taskTypes\r\n \tisIncludeFollowUpTasksOnly: $isIncludeFollowUpTasksOnly\r\n isFromDataSource: $isFromDataSource\r\n ) {\r\n id\r\n description\r\n count\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport interface FirmData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n firm: Firm;\r\n}\r\n\r\nexport interface Firm {\r\n teams: Teams;\r\n}\r\n\r\nexport interface Teams {\r\n team: Team[];\r\n}\r\n\r\nexport interface Team {\r\n id: number;\r\n guidID: string;\r\n description: string;\r\n staffCount: number;\r\n taskCount: number;\r\n}\r\n\r\nexport interface TaskTeamQueryParams {\r\n isIncludeTaskCount: boolean | null;\r\n\r\n offset: number | null;\r\n first: number | null;\r\n filter: string | null;\r\n entityGuidID?: string | null;\r\n taskStatus: TaskStatusEnum | null;\r\n isIncludeCrmTasks: boolean | null;\r\n isMyTasksOnly: boolean | null;\r\n groupBy: string | null;\r\n groupByValue: string | null;\r\n completedFromDate: Date | null;\r\n completedToDate: Date | null;\r\n updatedFromDate: Date | null;\r\n updatedToDate: Date | null;\r\n priorityList: string | null;\r\n statusList: string | null;\r\n allocatedToList: string | null;\r\n allocatedByList: string | null;\r\n created: string | null;\r\n due: string | null;\r\n teamList: string | null;\r\n taskTypes: string | null;\r\n onlyUsedByTasks: boolean | null;\r\n onlyUsedByEnquiries: boolean | null;\r\n onlyUsedByFinancials: boolean | null;\r\n isFromDataSource: boolean | null;\r\n}\r\n\r\nexport function retrieveTaskTeamData(\r\n query: TaskTeamQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: FirmData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void,\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: TeamTaskQuery,\r\n variables: {\r\n isIncludeTaskCount: query.isIncludeTaskCount,\r\n offset: query.offset,\r\n first: query.first,\r\n filter: query.filter,\r\n entityGuidID: query.entityGuidID,\r\n groupBy: query.groupBy,\r\n groupByValue: query.groupByValue,\r\n taskStatus: query.taskStatus,\r\n isIncludeCrmTasks: query.isIncludeCrmTasks,\r\n isMyTasksOnly: query.isMyTasksOnly,\r\n completedFromDate: query.completedFromDate,\r\n completedToDate: query.completedToDate,\r\n updatedFromDate: query.updatedFromDate,\r\n updatedToDate: query.updatedToDate,\r\n priorityList: query.priorityList,\r\n statusList: query.statusList,\r\n allocatedToList: query.allocatedToList,\r\n allocatedByList: query.allocatedByList,\r\n created: query.created,\r\n due: query.due,\r\n teamList: query.teamList,\r\n taskTypes: query.taskTypes,\r\n isFromDataSource: query.isFromDataSource\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst TeamTaskQuery = gql`\r\n query firmTeamTask(\r\n $isIncludeTaskCount: Boolean\r\n $offset: Int\r\n $first: Int\r\n $filter: String\r\n $entityGuidID: String\r\n $taskStatus: Int\r\n $isIncludeCrmTasks: Boolean\r\n $isMyTasksOnly: Boolean\r\n $groupBy: String\r\n $groupByValue: String\r\n $completedFromDate: DateTime\r\n $completedToDate: DateTime\r\n $updatedFromDate: DateTime\r\n $updatedToDate: DateTime\r\n $priorityList: String\r\n $statusList: String\r\n $allocatedToList: String\r\n $allocatedByList: String\r\n $created: String\r\n $due: String\r\n $teamList: String\r\n $taskTypes: String\r\n $onlyUsedByTasks: Boolean\r\n $onlyUsedByEnquiries: Boolean\r\n $onlyUsedByFinancials: Boolean\r\n $isFromDataSource: Boolean\r\n ) {\r\n firm {\r\n teams(\r\n isIncludeTaskCount: $isIncludeTaskCount\r\n offset: $offset\r\n first: $first\r\n filter: $filter\r\n entityGuidId: $entityGuidID\r\n taskStatus: $taskStatus\r\n isIncludeCrmTasks: $isIncludeCrmTasks\r\n isMyTasksOnly: $isMyTasksOnly\r\n groupBy: $groupBy\r\n groupByValue: $groupByValue\r\n completedFromDate: $completedFromDate\r\n completedToDate: $completedToDate\r\n updatedFromDate: $updatedFromDate\r\n updatedToDate: $updatedToDate\r\n priorityList: $priorityList\r\n statusList: $statusList\r\n allocatedToList: $allocatedToList\r\n allocatedByList: $allocatedByList\r\n created: $created\r\n due: $due\r\n teamList: $teamList\r\n taskTypes: $taskTypes\r\n onlyUsedByTasks: $onlyUsedByTasks\r\n onlyUsedByEnquiries: $onlyUsedByEnquiries\r\n onlyUsedByFinancials: $onlyUsedByFinancials\r\n isFromDataSource: $isFromDataSource\r\n ) {\r\n team {\r\n id\r\n guidID\r\n description\r\n taskCount\r\n usedByTasks\r\n usedByFinancials\r\n usedByEnquiries\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nconst TaskStatusQuery = gql`\r\n query taskStatus(\r\n $taskStatusType: TaskStatusEnum\r\n $includeCount: Boolean\r\n $offset: Int\r\n $first: Int\r\n $filter: String\r\n $entityGuidID: String\r\n $taskStatus: Int\r\n $isIncludeCrmTasks: Boolean\r\n $isMyTasksOnly: Boolean\r\n $groupBy: String\r\n $groupByValue: String\r\n $completedFromDate: DateTime\r\n $completedToDate: DateTime\r\n $updatedFromDate: DateTime\r\n $updatedToDate: DateTime\r\n $priorityList: String\r\n $statusList: String\r\n $allocatedToList: String\r\n $allocatedByList: String\r\n $created: String\r\n $due: String\r\n $teamList: String\r\n $taskTypes: String\r\n $isPersonalTask: Boolean,\r\n $isFromDataSource: Boolean,\r\n $matterList: String\r\n $isIncludeFollowUpTasksOnly: Boolean\r\n ) {\r\n task {\r\n statuses(\r\n taskStatusType: $taskStatusType\r\n includeCount: $includeCount\r\n offset: $offset\r\n first: $first\r\n filter: $filter\r\n entityGuidID: $entityGuidID\r\n taskStatus: $taskStatus\r\n isIncludeCrmTasks: $isIncludeCrmTasks\r\n isMyTasksOnly: $isMyTasksOnly\r\n groupBy: $groupBy\r\n groupByValue: $groupByValue\r\n completedFromDate: $completedFromDate\r\n completedToDate: $completedToDate\r\n updatedFromDate: $updatedFromDate\r\n updatedToDate: $updatedToDate\r\n priorityList: $priorityList\r\n statusList: $statusList\r\n allocatedToList: $allocatedToList\r\n allocatedByList: $allocatedByList\r\n created: $created\r\n due: $due\r\n teamList: $teamList\r\n taskTypes: $taskTypes\r\n isPersonalTask: $isPersonalTask,\r\n isFromDataSource: $isFromDataSource,\r\n \tmatterList: $matterList\r\n \tisIncludeFollowUpTasksOnly: $isIncludeFollowUpTasksOnly\r\n ) {\r\n guidId\r\n description\r\n sequence\r\n type\r\n count\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const PriorityQuery = gql`\r\n query lookupPriority {\r\n lookup {\r\n priority {\r\n guidId\r\n description\r\n sequence\r\n level\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const ChangeStatus = gql`\r\n mutation changeTaskStatus($guidId: String, $statusGuidId: String) {\r\n changeTaskStatus(guidId: $guidId, statusGuidId: $statusGuidId)\r\n }\r\n`;\r\n\r\nexport const ChangePriority = gql`\r\n mutation changeTaskPriority($guidId: String, $priorityGuidId: String) {\r\n changeTaskPriority(guidId: $guidId, priorityGuidId: $priorityGuidId)\r\n }\r\n`;\r\n\r\nexport const ChangeAllocation = gql`\r\n mutation changeTaskAllocation($guidId: String, $allocatedUserGuidId: String) {\r\n changeTaskAllocation(guidId: $guidId, allocatedUserGuidId: $allocatedUserGuidId)\r\n }\r\n`;\r\n\r\nexport type TaskSubscriptionData = {\r\n taskNotification: TaskNotification;\r\n};\r\n\r\nexport type TaskNotification = {\r\n id: number;\r\n message: string;\r\n status: boolean;\r\n description: null;\r\n};\r\n\r\nexport const TaskSubscription = gql`\r\n subscription taskSubscription {\r\n taskNotification {\r\n id\r\n message\r\n status\r\n description\r\n }\r\n }\r\n`;\r\n\r\nexport const CreateGeneralTask = gql`\r\n mutation CreateGeneralTask($input: TaskInput) {\r\n createGeneralTask(input: $input) {\r\n status\r\n error\r\n }\r\n }\r\n`;\r\n\r\nexport const CreateClientTask = gql`\r\n mutation CreateClientTask($clientGuid: String, $input: TaskInput, $parentNameTextId: Int, $parentNameCrmTextId: Int) {\r\n createClientTask(input: $input, clientGuid: $clientGuid, parentNameTextId: $parentNameTextId, parentNameCrmTextId: $parentNameCrmTextId) {\r\n status\r\n error\r\n }\r\n }\r\n`;\r\n\r\nexport const CreateMatterTask = gql`\r\n mutation CreateMatterTask($matterGuid: String, $input: TaskInput) {\r\n createMatterTask(input: $input, matterGuid: $matterGuid) {\r\n status\r\n error\r\n }\r\n }\r\n`;\r\n\r\nexport const UpdateGeneralTask = gql`\r\n mutation UpdateGeneralTask($input: TaskInput) {\r\n updateGeneralTask(input: $input) {\r\n status\r\n error\r\n }\r\n }\r\n`;\r\n\r\nexport const UpdateClientTask = gql`\r\n mutation UpdateClientTask($clientGuid: String, $input: TaskInput, $parentNameTextId: Int, $parentNameCrmTextId: Int) {\r\n updateClientTask(input: $input, clientGuid: $clientGuid, parentNameTextId: $parentNameTextId, parentNameCrmTextId: $parentNameCrmTextId) {\r\n status\r\n error\r\n }\r\n }\r\n`;\r\n\r\nexport const UpdateMatterTask = gql`\r\n mutation UpdateMatterTask($matterGuid: String, $input: TaskInput) {\r\n updateMatterTask(input: $input, matterGuid: $matterGuid) {\r\n status\r\n error\r\n }\r\n }\r\n`;\r\n\r\nexport const DeleteTask = gql`\r\n mutation DeleteTask($guid: String) {\r\n deleteTask(guid: $guid)\r\n }\r\n`;\r\n\r\nexport const StartTask = gql`\r\n mutation StartTask($guid: String, $startDate: DateTime, $dueDate: DateTime, $estimatedEffort: String, $reminderOffset: String) {\r\n startTask(guidId: $guid, startDate: $startDate, dueDate: $dueDate, estimatedEffort: $estimatedEffort, reminderOffset: $reminderOffset)\r\n }\r\n`;\r\n\r\nexport const CompleteTask = gql`\r\n mutation CompleteTask($guid: String, $completionDate: DateTime, $startDate: DateTime, $dueDate: DateTime, $duration: String, $completionNotes: String, \r\n $parentNameTextId: Int, $parentNameCrmTextId: Int) {\r\n completeTask(guidId: $guid, completionDate: $completionDate, startDate: $startDate, dueDate: $dueDate, duration: $duration, completionNotes: $completionNotes, \r\n parentNameTextId: $parentNameTextId, parentNameCrmTextId: $parentNameCrmTextId)\r\n }\r\n`;\r\n\r\nexport const ChangeTaskPriority = gql`\r\n mutation ChangeTaskPriority($guid: String, $priority: String) {\r\n changeTaskPriority(guidId: $guid, priority: $priority)\r\n }\r\n`;\r\n\r\nexport const ChangeTaskCategory = gql`\r\n mutation ChangeTaskCategory($guid: String, $category: String) {\r\n changeTaskCategory(guidId: $guid, category: $category)\r\n }\r\n`;\r\n\r\nexport const ChangeTaskAllocation = gql`\r\n mutation ChangeTaskAllocation($guidId: String, $assignedTo: String, $assignedBy: String, $allocatedToEntityType: Int) {\r\n changeTaskAllocation(guidId: $guidId, assignedTo: $assignedTo, assignedBy: $assignedBy, allocatedToEntityType: $allocatedToEntityType)\r\n }\r\n`;\r\n\r\nexport const ChangeTaskOwner = gql`\r\n mutation ChangeTaskOwner($guid: String, $owner: String) {\r\n changeTaskOwner(guidId: $guid, owner: $owner)\r\n }\r\n`;\r\n\r\nexport const ChangeTaskStatus = gql`\r\n mutation ChangeTaskStatus(\r\n $guid: String\r\n $startDate: DateTime\r\n $completionDate: DateTime\r\n $dueDate: DateTime\r\n $estimatedEffort: String\r\n $duration: String\r\n $assignedTo: String\r\n $assignedBy: String\r\n $completionNotes: String\r\n $changedStatus: String\r\n $owner: String\r\n $allocatedToEntityType: Int\r\n ) {\r\n changeTaskStatus(\r\n guidId: $guid\r\n completionDate: $completionDate\r\n startDate: $startDate\r\n dueDate: $dueDate\r\n estimatedEffort: $estimatedEffort\r\n duration: $duration\r\n assignedTo: $assignedTo\r\n assignedBy: $assignedBy\r\n completionNotes: $completionNotes\r\n changedStatus: $changedStatus\r\n owner: $owner\r\n allocatedToEntityType: $allocatedToEntityType\r\n )\r\n }\r\n`;\r\nexport const ChangeDueTask = gql`\r\n mutation DueTask($guid: String, $startDate: DateTime, $dueDate: DateTime, $estimatedEffort: String, $reminderOffset: String) {\r\n dueTask(guidId: $guid, startDate: $startDate, dueDate: $dueDate, estimatedEffort: $estimatedEffort, reminderOffset: $reminderOffset)\r\n }\r\n`;\r\n\r\nexport interface TaskDetailsParam {\r\n guid: string;\r\n}\r\nexport interface TaskDetailsData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n task: Task;\r\n appUser: AppUser;\r\n}\r\n\r\nexport interface Task {\r\n detail: Detail;\r\n}\r\n\r\nexport interface Detail {\r\n __typename: string;\r\n guid: string;\r\n clientGuid: string | null;\r\n clientDescription: string | null;\r\n parentNameTextId: number | null;\r\n parentNameCrmTextId: number | null;\r\n assignedBy: string | null;\r\n assignedByName: string | null;\r\n assignedTo: string | null;\r\n assignedToName: string | null;\r\n allocatedToEntityType: number | null;\r\n owner: string | null;\r\n files: DocumentFile[];\r\n emailContent: string;\r\n ownerName: string | null;\r\n category: string | null;\r\n categoryDescription: string | null;\r\n createdDate: Date | null;\r\n createdByName: string | null;\r\n startDate: Date | null;\r\n completionDate: Date | null;\r\n description: string | null;\r\n notes: string | null;\r\n dueDate: Date | null;\r\n estimatedEffort: string | null;\r\n duration: string | null;\r\n priority: string | null;\r\n priorityDescription: string | null;\r\n taskStatus: string | null;\r\n taskType: string | null;\r\n taskTypeGuidID: string | null;\r\n taskTypeInternalDescription: string | null;\r\n taskTypeDescription: string | null;\r\n taskTypeNotes: string | null;\r\n isSystemTask: boolean;\r\n isFromNameFromDataSource: boolean;\r\n isFromDataSource: boolean;\r\n isOrganisationFromDataSource: boolean;\r\n completionNotesGuidID: string | null;\r\n completionNotes: string | null;\r\n activityTexts: ActivityText[];\r\n allocationHistoryList: AllocationHistory[];\r\n taskActivity: TaskActivity[];\r\n reminderOffset: string | null;\r\n isConfidential: boolean | null;\r\n messageTitle: string | null;\r\n\r\n matterId: number | null;\r\n matterGuid: string | null;\r\n matterDescription: string | null;\r\n writeOffFeesAmount: number | null;\r\n writeOffDisbursementsAmount: number | null;\r\n writeOffDebtorsAmount: number | null;\r\n billFeesAmount: number | null;\r\n billDisbursementsAmount: number | null;\r\n applyTrustAmount: number | null;\r\n invoiceToApply: string | null;\r\n trustTransferAmount: number | null;\r\n closeMatterAfterWriteOff: boolean | null;\r\n comments: string | null;\r\n archive: boolean | null;\r\n close: boolean | null;\r\n\r\n fromNameId: number | null;\r\n fromName: string | null;\r\n fromNameGuid: string | null;\r\n phoneNumber: string | null;\r\n organisation: string | null;\r\n organisationGuid: string | null;\r\n isPhoneCall: boolean;\r\n isReturnedCall: boolean;\r\n isWillCallAgain: boolean;\r\n ccUserList: CcUserList[] | null;\r\n}\r\n\r\nexport interface CcUserList {\r\n userID: string;\r\n email: string;\r\n friendlyName: string;\r\n roleName: string;\r\n isStaff: boolean;\r\n staffName: null | string;\r\n isExternal: boolean;\r\n}\r\n\r\nexport interface ActivityText {\r\n activityDate: Date;\r\n createdByGuid: string | null;\r\n createdByName: string | null;\r\n text: string | null;\r\n message: string | null;\r\n messagedTo: string | null;\r\n}\r\n\r\nexport interface AllocationHistory {\r\n guidID: string | null;\r\n createdDate: Date;\r\n allocatedByUserID: string | null;\r\n allocatedByName: string | null;\r\n allocatedUserID: string | null;\r\n allocatedUserName: string | null;\r\n allocatedTeamID: string | null;\r\n allocatedTeamName: string | null;\r\n}\r\n\r\nexport interface TaskActivity {\r\n guidID: string | null;\r\n activityDate: Date | null;\r\n activityTypeID: string | null;\r\n activityTypeDescription: string | null;\r\n activityByUserId: string | null;\r\n activityByUser: string | null;\r\n}\r\n\r\nexport function retrieveTaskDetailsData(\r\n query: TaskDetailsParam,\r\n refreshData: boolean,\r\n onSuccess: (data: TaskDetailsData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void,\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: TASK_DETAILS_QUERY,\r\n variables: {\r\n guid: query.guid,\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport const TASK_DETAILS_QUERY = gql`\r\nfragment taskDetails on TaskDetailTypeInterface {\r\n guid\r\n assignedBy\r\n assignedByName\r\n assignedTo\r\n assignedToName\r\n allocatedToEntityType\r\n owner\r\n ownerName\r\n category\r\n categoryDescription\r\n createdDate\r\n createdByName\r\n startDate\r\n completionDate\r\n description\r\n notes\r\n dueDate\r\n estimatedEffort\r\n duration\r\n priority\r\n priorityDescription\r\n taskTypeGuid\r\n taskType\r\n taskTypeDescription\r\n taskTypeNotes\r\n taskTypeInternalDescription\r\n completionNotesGuidID\r\n completionNotes\r\n taskStatus\r\n isSystemTask\r\n isFromDataSource\r\n messageTitle\r\n activityTexts {\r\n id\r\n activityDate\r\n createdByGuid\r\n createdByName\r\n text\r\n message\r\n messagedTo\r\n }\r\n allocationHistoryList {\r\n id\r\n guidID\r\n createdDate\r\n allocatedByUserID\r\n allocatedByName\r\n allocatedUserID\r\n allocatedUserName\r\n allocatedTeamID\r\n allocatedTeamName\r\n }\r\n taskActivity {\r\n guidID\r\n activityDate\r\n activityTypeDescription\r\n activityTypeID\r\n activityByUser\r\n }\r\n files {\r\n id\r\n guidID\r\n entityType\r\n name\r\n url\r\n }\r\n ccUserList {\r\n userID\r\n email\r\n friendlyName\r\n roleName\r\n isStaff\r\n staffName\r\n isExternal\r\n }\r\n emailContent\r\n reminderOffset\r\n isConfidential\r\n}\r\n\r\nquery TaskDetails($guid: String!) {\r\n appUser {\r\n isAdministrator\r\n name\r\n userId\r\n }\r\n task {\r\n detail(guid: $guid) {\r\n ... on FollowUpTask {\r\n ...taskDetails\r\n }\r\n ... on GeneralTask {\r\n ...taskDetails\r\n }\r\n ... on ClientTask {\r\n ...taskDetails\r\n clientGuid\r\n clientDescription\r\n parentNameTextId\r\n parentNameCrmTextId\r\n }\r\n ... on MatterTask {\r\n ...taskDetails\r\n matterId\r\n matterGuid\r\n matterDescription\r\n writeOffFeesAmount\r\n writeOffDisbursementsAmount\r\n writeOffDebtorsAmount\r\n billFeesAmount\r\n billDisbursementsAmount\r\n applyTrustAmount\r\n invoiceToApply\r\n trustTransferAmount\r\n closeMatterAfterWriteOff\r\n comments\r\n archive\r\n close\r\n }\r\n ... on PhoneTask {\r\n ...taskDetails\r\n matterId\r\n clientGuid\r\n clientDescription\r\n matterId\r\n matterGuid\r\n matterDescription\r\n fromNameId\r\n fromName\r\n fromNameGuid\r\n phoneNumber\r\n organisation\r\n organisationGuid\r\n isPhoneCall\r\n isReturnedCall\r\n isWillCallAgain\r\n guid\r\n assignedBy\r\n assignedByName\r\n assignedTo\r\n assignedToName\r\n category\r\n categoryDescription\r\n startDate\r\n completionDate\r\n description\r\n notes\r\n dueDate\r\n estimatedEffort\r\n duration\r\n priority\r\n priorityDescription\r\n taskType\r\n completionNotesGuidID\r\n completionNotes\r\n taskStatus\r\n taskTypeInternalDescription\r\n isSystemTask\r\n isFromNameFromDataSource\r\n \tisOrganisationFromDataSource \r\n messageTitle \r\n }\r\n }\r\n }\r\n} \r\n`;\r\n\r\nexport interface TaskTypeData {\r\n task: Task;\r\n}\r\nexport interface Task {\r\n taskTypes: TaskType[];\r\n}\r\nexport interface TaskType {\r\n id: number;\r\n guidId: string;\r\n description: string;\r\n internalDescription: string;\r\n hasTasks: boolean;\r\n}\r\n\r\nexport function retrieveTaskTypeData(\r\n query: TasksSummaryQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: TaskTypeData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void,\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: taskTypeQuery,\r\n variables: {\r\n offset: query.offset,\r\n first: query.first,\r\n filter: query.filter,\r\n entityGuidID: query.entityGuidID,\r\n groupBy: query.groupBy,\r\n groupByValue: query.groupByValue,\r\n taskStatus: query.taskStatus,\r\n isIncludeCrmTasks: query.isIncludeCrmTasks,\r\n isMyTasksOnly: query.isMyTasksOnly,\r\n isPersonalTask: query.isPersonalTask,\r\n isFromDataSource: query.isFromDataSource,\r\n completedFromDate: query.completedFromDate,\r\n completedToDate: query.completedToDate,\r\n updatedFromDate: query.updatedFromDate,\r\n updatedToDate: query.updatedToDate,\r\n priorityList: query.priorityList,\r\n statusList: query.statusList,\r\n allocatedToList: query.allocatedToList,\r\n allocatedByList: query.allocatedByList,\r\n teamList: query.teamList,\r\n taskTypes: query.taskTypes,\r\n isIncludeFollowUpTasksOnly: query.isIncludeFollowUpTasksOnly,\r\n isIncludeHasTasks: query.isIncludeHasTasks\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst taskTypeQuery = gql`\r\n query taskType(\r\n $offset: Int\r\n $first: Int\r\n $filter: String\r\n $entityGuidID: String\r\n $taskStatus: Int\r\n $isIncludeCrmTasks: Boolean\r\n $isMyTasksOnly: Boolean\r\n $isPersonalTask: Boolean\r\n $isFromDataSource: Boolean\r\n $groupBy: String\r\n $groupByValue: String\r\n $completedFromDate: DateTime\r\n $completedToDate: DateTime\r\n $updatedFromDate: DateTime\r\n $updatedToDate: DateTime\r\n $priorityList: String\r\n $statusList: String\r\n $allocatedToList: String\r\n $allocatedByList: String\r\n $teamList: String\r\n $taskTypes: String\r\n $isIncludeFollowUpTasksOnly: Boolean\r\n $isIncludeHasTasks: Boolean\r\n ) {\r\n task {\r\n taskTypes(\r\n offset: $offset\r\n first: $first\r\n filter: $filter\r\n entityGuidID: $entityGuidID\r\n taskStatus: $taskStatus\r\n isIncludeCrmTasks: $isIncludeCrmTasks\r\n isMyTasksOnly: $isMyTasksOnly\r\n isPersonalTask: $isPersonalTask\r\n isFromDataSource: $isFromDataSource\r\n groupBy: $groupBy\r\n groupByValue: $groupByValue\r\n completedFromDate: $completedFromDate\r\n completedToDate: $completedToDate\r\n updatedFromDate: $updatedFromDate\r\n updatedToDate: $updatedToDate\r\n priorityList: $priorityList\r\n statusList: $statusList\r\n allocatedToList: $allocatedToList\r\n allocatedByList: $allocatedByList\r\n teamList: $teamList\r\n taskTypes: $taskTypes\r\n \tisIncludeFollowUpTasksOnly: $isIncludeFollowUpTasksOnly\r\n \tisIncludeHasTasks: $isIncludeHasTasks\r\n ) {\r\n id\r\n guidId\r\n description\r\n hasTasks\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport interface UserQueryParams {\r\n offset?: number;\r\n first?: number;\r\n filter?: string;\r\n isStaff?: boolean;\r\n isExternal?: boolean;\r\n\r\n includeTask?: boolean;\r\n entityGuidID?: string | null;\r\n taskStatus: TaskStatusEnum | null;\r\n isIncludeCrmTasks: boolean | null;\r\n isMyTasksOnly: boolean | null;\r\n groupBy: string | null;\r\n groupByValue: string | null;\r\n completedFromDate: Date | null;\r\n completedToDate: Date | null;\r\n updatedFromDate: Date | null;\r\n updatedToDate: Date | null;\r\n priorityList: string | null;\r\n statusList: string | null;\r\n allocatedToList: string | null;\r\n allocatedByList: string | null;\r\n created: string | null;\r\n due: string | null;\r\n teamList: string | null;\r\n taskTypes: string | null;\r\n includeTaskAssignedBy?: boolean;\r\n isFromDataSource: boolean | null;\r\n isIncludeFollowUpTasksOnly: boolean | null;\r\n}\r\n\r\nexport function retrieveUserListData(\r\n query: UserQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: UserListData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void,\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: UserListQuery,\r\n variables: {\r\n filter: query.filter,\r\n first: query.first,\r\n offset: query.offset,\r\n isStaff: query.isStaff,\r\n isExternal: query.isExternal,\r\n\r\n includeTask: query.includeTask,\r\n entityGuidID: query.entityGuidID,\r\n groupBy: query.groupBy,\r\n groupByValue: query.groupByValue,\r\n taskStatus: query.taskStatus,\r\n isIncludeCrmTasks: query.isIncludeCrmTasks,\r\n isMyTasksOnly: query.isMyTasksOnly,\r\n completedFromDate: query.completedFromDate,\r\n completedToDate: query.completedToDate,\r\n updatedFromDate: query.updatedFromDate,\r\n updatedToDate: query.updatedToDate,\r\n priorityList: query.priorityList,\r\n statusList: query.statusList,\r\n allocatedToList: query.allocatedToList,\r\n allocatedByList: query.allocatedByList,\r\n created: query.created,\r\n due: query.due,\r\n teamList: query.teamList,\r\n taskTypes: query.taskTypes,\r\n includeTaskAssignedBy: query.includeTaskAssignedBy,\r\n isFromDataSource: query.isFromDataSource,\r\n isIncludeFollowUpTasksOnly: query.isIncludeFollowUpTasksOnly\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst UserListQuery = gql`\r\n query userQuery(\r\n $offset: Int\r\n $first: Int\r\n $filter: String\r\n $isStaff: Boolean\r\n $isExternal: Boolean\r\n $includeTask: Boolean\r\n $entityGuidID: String\r\n $taskStatus: Int\r\n $isIncludeCrmTasks: Boolean\r\n $isMyTasksOnly: Boolean\r\n $groupBy: String\r\n $groupByValue: String\r\n $completedFromDate: DateTime\r\n $completedToDate: DateTime\r\n $updatedFromDate: DateTime\r\n $updatedToDate: DateTime\r\n $priorityList: String\r\n $statusList: String\r\n $allocatedToList: String\r\n $allocatedByList: String\r\n $created: String\r\n $due: String\r\n $teamList: String\r\n $taskTypes: String\r\n $includeTaskAssignedBy: Boolean\r\n $isFromDataSource: Boolean,\r\n $isIncludeFollowUpTasksOnly: Boolean\r\n ) {\r\n administrator {\r\n users(\r\n offset: $offset\r\n first: $first\r\n filter: $filter\r\n isStaff: $isStaff\r\n isExternal: $isExternal\r\n includeTask: $includeTask\r\n entityGuidID: $entityGuidID\r\n taskStatus: $taskStatus\r\n isIncludeCrmTasks: $isIncludeCrmTasks\r\n isMyTasksOnly: $isMyTasksOnly\r\n groupBy: $groupBy\r\n groupByValue: $groupByValue\r\n completedFromDate: $completedFromDate\r\n completedToDate: $completedToDate\r\n updatedFromDate: $updatedFromDate\r\n updatedToDate: $updatedToDate\r\n priorityList: $priorityList\r\n statusList: $statusList\r\n allocatedToList: $allocatedToList\r\n allocatedByList: $allocatedByList\r\n created: $created\r\n due: $due\r\n teamList: $teamList\r\n taskTypes: $taskTypes\r\n includeTaskAssignedBy: $includeTaskAssignedBy\r\n isFromDataSource: $isFromDataSource\r\n isIncludeFollowUpTasksOnly: $isIncludeFollowUpTasksOnly\r\n ) {\r\n recordCount\r\n user {\r\n userID\r\n email\r\n friendlyName\r\n roleName\r\n isStaff\r\n staffName\r\n isExternal\r\n hasTasks\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const CreatePhoneTaskMutation = gql`\r\n mutation CreatePhoneTask(\r\n $input: TaskInput\r\n $clientGuid: String\r\n $matterGuid: String\r\n $fromName: String\r\n $fromNameGuid: String\r\n $phoneNumber: String\r\n $organisation: String\r\n $organisationGuid: String\r\n $isPhoneCall: Boolean\r\n $isReturnedCall: Boolean\r\n $isWillCallAgain: Boolean\r\n $messageTitle: String\r\n $isFromNameFromDataSource: Boolean\r\n $isOrganisationFromDataSource: Boolean\r\n ) {\r\n createPhoneTask(\r\n input: $input\r\n clientGuid: $clientGuid\r\n matterGuid: $matterGuid\r\n fromName: $fromName\r\n fromNameGuid: $fromNameGuid\r\n phoneNumber: $phoneNumber\r\n organisation: $organisation\r\n organisationGuid: $organisationGuid\r\n isPhoneCall: $isPhoneCall\r\n isReturnedCall: $isReturnedCall\r\n isWillCallAgain: $isWillCallAgain\r\n messageTitle: $messageTitle,\r\n \tisFromNameFromDataSource: $isFromNameFromDataSource,\r\n \tisOrganisationFromDataSource: $isOrganisationFromDataSource\r\n ) {\r\n status\r\n error\r\n }\r\n }\r\n`;\r\n\r\nexport const UpdatePhoneTaskMutation = gql`\r\n mutation UpdatePhoneTask(\r\n $input: TaskInput\r\n $clientGuid: String\r\n $matterGuid: String\r\n $fromName: String\r\n $fromNameGuid: String\r\n $phoneNumber: String\r\n $organisation: String\r\n $organisationGuid: String\r\n $isPhoneCall: Boolean\r\n $isReturnedCall: Boolean\r\n $isWillCallAgain: Boolean\r\n $messageTitle: String\r\n $isFromNameFromDataSource: Boolean\r\n $isOrganisationFromDataSource: Boolean\r\n ) {\r\n updatePhoneTask(\r\n input: $input\r\n clientGuid: $clientGuid\r\n matterGuid: $matterGuid\r\n fromName: $fromName\r\n fromNameGuid: $fromNameGuid\r\n phoneNumber: $phoneNumber\r\n organisation: $organisation\r\n organisationGuid: $organisationGuid\r\n isPhoneCall: $isPhoneCall\r\n isReturnedCall: $isReturnedCall\r\n isWillCallAgain: $isWillCallAgain\r\n messageTitle: $messageTitle\r\n \tisFromNameFromDataSource: $isFromNameFromDataSource\r\n \tisOrganisationFromDataSource: $isOrganisationFromDataSource\r\n ) {\r\n status\r\n error\r\n }\r\n }\r\n`;\r\n\r\nexport interface TimesheetScopeQueryData {\r\n timesheetScope: TimesheetScope;\r\n loading?: boolean;\r\n networkStatus?: number;\r\n}\r\n\r\nexport interface TimesheetScope {\r\n id: number;\r\n showFeeEarnerFilter: boolean;\r\n viewAll: boolean;\r\n viewMyDepartment: boolean;\r\n viewMyOffice: boolean;\r\n viewMyTeam: boolean;\r\n updateTimesheet: boolean;\r\n}\r\n\r\nexport function retrieveTimesheetScopeQueryData(\r\n refreshData: boolean,\r\n onSuccess: (data: TimesheetScopeQueryData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void,\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: timesheetScopeQuery,\r\n variables: {},\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst timesheetScopeQuery = gql`\r\n query timesheetScope {\r\n timesheetScope {\r\n id\r\n showFeeEarnerFilter\r\n viewAll\r\n viewMyDepartment\r\n viewMyOffice\r\n viewMyTeam\r\n updateTimesheet\r\n }\r\n }\r\n`;\r\n\r\nexport interface ExtendPhoneTaskDetailsParams {\r\n nameGuid: string;\r\n isFromDataSource: boolean;\r\n}\r\n\r\nexport interface ExtendPhoneTaskDetailsData {\r\n party: Party;\r\n}\r\n\r\nexport interface Party {\r\n phoneTaskDetails: PhoneTaskDetails;\r\n}\r\n\r\nexport interface PhoneTaskDetails {\r\n matterDetails: MatterDetails;\r\n contactDetails: ContactDetails;\r\n messageDetails: MessageDetails;\r\n}\r\n\r\nexport interface ContactDetails {\r\n tags: string;\r\n address: string;\r\n mobile: null;\r\n email: string;\r\n phone: string;\r\n}\r\n\r\nexport interface MatterDetails {\r\n totalMatters: number;\r\n lastUpdate: Date;\r\n closedMatters: number;\r\n matterSummary: MatterSummary[];\r\n}\r\n\r\nexport interface MatterSummary {\r\n fileNumber: string;\r\n matterType: string;\r\n matterTitle: string;\r\n personActing: string;\r\n}\r\n\r\nexport interface MessageDetails {\r\n messagesNotResponded: number;\r\n messagesReceived: number;\r\n}\r\n\r\nexport const EXTEND_PHONE_TASK_DETAILS = gql`\r\n query extendPhoneTaskDetails($nameGuid: String, $isFromDataSource: Boolean) {\r\n party {\r\n phoneTaskDetails(nameGuid: $nameGuid, isFromDataSource: $isFromDataSource) {\r\n matterDetails {\r\n totalMatters\r\n lastUpdate\r\n closedMatters\r\n matterSummary {\r\n fileNumber\r\n matterType\r\n matterTitle\r\n personActing\r\n }\r\n }\r\n contactDetails {\r\n tags\r\n address\r\n mobile\r\n email\r\n phone\r\n }\r\n messageDetails {\r\n messagesNotResponded\r\n messagesReceived\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport interface TaskAndPhoneMessageData {\r\n settings: Settings;\r\n}\r\n\r\nexport interface Settings {\r\n systems: Systems;\r\n}\r\n\r\nexport interface Systems {\r\n taskDefaults: Defaults;\r\n phoneMessageDefaults: Defaults;\r\n}\r\n\r\nexport interface Defaults {\r\n config: TaskAndPhoneMessageConfig;\r\n}\r\nexport interface TaskAndPhoneMessageConfig {\r\n isSendReminderOnWeekend: boolean;\r\n isSendReminderOnWeekendForOverDueReminders: boolean;\r\n reminder: string;\r\n overdueReminder: string;\r\n}\r\n\r\nexport function retrieveTaskAndPhoneMessageDefaultConfigData(\r\n refreshData: boolean,\r\n onSuccess: (data: TaskAndPhoneMessageData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void,\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n\r\n client\r\n .query({\r\n query: TASK_AND_PHONE_MESSAGE_DEFAULT_QUERY,\r\n variables: {},\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport const TASK_AND_PHONE_MESSAGE_DEFAULT_QUERY = gql`\r\n query TaskDefaultsQuery {\r\n settings {\r\n systems {\r\n taskDefaults {\r\n config {\r\n isSendReminderOnWeekend\r\n isSendReminderOnWeekendForOverDueReminders\r\n reminder\r\n overdueReminder\r\n }\r\n }\r\n phoneMessageDefaults {\r\n config {\r\n isSendReminderOnWeekend\r\n isSendReminderOnWeekendForOverDueReminders\r\n reminder\r\n overdueReminder\r\n }\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { Card, makeStyles, Theme, createStyles } from '@material-ui/core';\r\nimport { retrieveTaskStatusData, TaskStatus, TaskData, TaskStatusEnum, TaskStatusQueryParams } from '../TasksSummaryRepository';\r\nimport { showNotification } from '../../App';\r\nimport { TaskSummaryAdvancedFilter } from '../TasksSummaryPage';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n margin: '0 -5px',\r\n justifyContent: 'center',\r\n '& .card': {\r\n margin: '0 5px',\r\n padding: 5,\r\n textAlign: 'center',\r\n minWidth: '73px',\r\n '& .label': {\r\n color: '#5173FF',\r\n fontSize: '12px',\r\n paddingBottom: '10px',\r\n },\r\n '& .counts': {\r\n fontWeight: 600,\r\n fontSize: '1.5rem'\r\n }\r\n }\r\n },\r\n })\r\n);\r\n\r\ninterface StatusCardProps {\r\n isRefreshData: boolean;\r\n isFormOpen: boolean;\r\n advancedFilter: TaskSummaryAdvancedFilter;\r\n isInclude: TaskStatusEnum | null;\r\n isIncludeCrmTasks: boolean | null;\r\n isMyTasksOnly: boolean | null;\r\n isPersonalTask: boolean | null;\r\n isFromDataSource: boolean | null;\r\n isIncludeFollowUpTasksOnly: boolean | null;\r\n}\r\n\r\ninterface StatusCardState {\r\n statuses: TaskStatus[];\r\n}\r\n\r\nexport const StatusCard: React.FunctionComponent = (props) => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n statuses: []\r\n });\r\n \r\n useEffect(() => { \r\n // tslint:disable-next-line: no-console\r\n // console.log('StatusCard Refreshing');\r\n if (!props.isFormOpen) {\r\n fetchData();\r\n }\r\n \r\n // tslint:disable-next-line: align\r\n }, [props]);\r\n \r\n const fetchData = () => {\r\n\r\n const taskStatusQueryParams: TaskStatusQueryParams = {\r\n taskStatusType: 'USER',\r\n includeCount: true,\r\n\r\n offset: null,\r\n first: null,\r\n filter: null,\r\n taskStatus: props.isInclude,\r\n isIncludeCrmTasks: props.isIncludeCrmTasks,\r\n isMyTasksOnly: props.isMyTasksOnly,\r\n groupBy: null,\r\n groupByValue: null, // This is the GuidId of group by\r\n completedFromDate: props.advancedFilter.completedFrom ? props.advancedFilter.completedFrom : null,\r\n completedToDate: props.advancedFilter.completedTo ? props.advancedFilter.completedTo : null,\r\n updatedFromDate: props.advancedFilter.updatedFrom ? props.advancedFilter.updatedFrom : null,\r\n updatedToDate: props.advancedFilter.updatedTo ? props.advancedFilter.updatedTo : null,\r\n priorityList: convertArrayToStringFromat(props.advancedFilter.priority),\r\n statusList: convertArrayToStringFromat(props.advancedFilter.status),\r\n allocatedToList: convertArrayToStringFromat(props.advancedFilter.allocatedTo),\r\n allocatedByList: convertArrayToStringFromat(props.advancedFilter.allocatedBy),\r\n created: props.advancedFilter.created ? props.advancedFilter.created.value : null,\r\n due: props.advancedFilter.due ? props.advancedFilter.due.value : null,\r\n teamList: convertArrayToStringFromat(props.advancedFilter.team),\r\n taskTypes: convertArrayToStringFromat(props.advancedFilter.taskTypes),\r\n isPersonalTask: props.isPersonalTask,\r\n isFromDataSource: props.isFromDataSource,\r\n matterList: convertArrayToStringFromat(props.advancedFilter.matterList),\r\n isIncludeFollowUpTasksOnly: props.isIncludeFollowUpTasksOnly,\r\n isIncludeCount: true\r\n };\r\n\r\n retrieveTaskStatusData(\r\n taskStatusQueryParams,\r\n true, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveStatus(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n\r\n };\r\n\r\n const convertArrayToStringFromat = (_values: IAutoCompleteItem[] | undefined) => {\r\n return _values && _values.length > 0 ? _values.map((value: IAutoCompleteItem) => value.value).join() : null;\r\n };\r\n\r\n const onRetrieveStatus = (data: TaskData) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n statuses: data.task.statuses.filter((x: TaskStatus) => {\r\n return x.description.toLowerCase() !== 'complete';\r\n })\r\n };\r\n });\r\n };\r\n\r\n return (\r\n
\r\n {state.statuses.map((status: TaskStatus) => {\r\n return (\r\n \r\n
{status.description}
\r\n
{status.count}
\r\n
\r\n );\r\n })}\r\n
\r\n );\r\n};","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles, Grid, IconButton, FormControl, InputLabel, Select, MenuItem, Badge } from '@material-ui/core';\r\nimport { MatterTerminology } from '../MatterTerminology';\r\nimport { RvSearch } from '../components/Search';\r\nimport { mainTheme } from '../Theme';\r\n// import { RvCheckbox, CheckboxState } from '../components/Checkbox';\r\n// import { RvLabel } from '../components/Label/Label';\r\nimport { RvTooltipFabric } from '../components/Tooltip';\r\nimport { RvButtonFabric, RvButtonType } from '../components/Button';\r\nimport { UserFeature, UserFeatureEnum } from '../types/UserFeature';\r\nimport FilterListIcon from '@material-ui/icons/FilterList';\r\nimport { TasksSummaryAdvanceFilter } from './TasksSummaryAdvanceFilter';\r\nimport { CheckboxState } from '../components/Checkbox';\r\nimport { SummaryViewConfigObj } from '../viewConfig/SummaryViewConfigurations';\r\nimport { TaskStatusEnum } from './TasksSummaryRepository';\r\nimport { Checkbox } from 'semantic-ui-react';\r\nimport _ from 'lodash';\r\nimport { RvLabel } from '../components/Label/Label';\r\nimport { StatusCard } from './cards/StatusCard';\r\nimport { TasksMenu } from '../components/AppHeader/AppMenu';\r\nimport { TaskSummaryAdvancedFilter } from './TasksSummaryPage';\r\nimport { IAutoCompleteItem } from '../typings/autoComplete';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n flex: 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n // padding: '30px 0',\r\n },\r\n searchContentWrapper: {\r\n display: 'flex',\r\n margin: '0 -10px',\r\n alignItems: 'center',\r\n '& > div': {\r\n padding: '0 10px',\r\n }\r\n },\r\n searchWrapper: {\r\n padding: '0 10px',\r\n '& .input': {\r\n height: '48px',\r\n width: '100%', // '336px',\r\n border: '1px solid ' + mainTheme.NeutralColors.BackgroundGrey1,\r\n borderRadius: '4px',\r\n boxShadow:\r\n '0 0 4px 0 ' + mainTheme.NeutralColors.BackgroundGrey2,\r\n margin: 0,\r\n },\r\n },\r\n checkboxWrapper: {\r\n display: 'flex',\r\n flexFlow: 'row wrap',\r\n justifyContent: 'space-evenly',\r\n padding: '0 10px',\r\n gap: '20px',\r\n },\r\n checkboxContainer: {\r\n display: 'flex',\r\n flexFlow: 'column wrap',\r\n gap: '5px',\r\n // flex: 1\r\n },\r\n showingWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n justifyContent: 'center',\r\n },\r\n [theme.breakpoints.up('md')]: {\r\n justifyContent: 'flex-start',\r\n },\r\n },\r\n menuWrapper: {\r\n height: '100%',\r\n alignItems: 'center',\r\n display: 'flex',\r\n margin: '0 -10px',\r\n [theme.breakpoints.down('md')]: {\r\n justifyContent: 'center',\r\n },\r\n [theme.breakpoints.up('lg')]: {\r\n justifyContent: 'flex-end',\r\n },\r\n '& > div': {\r\n padding: '0 10px',\r\n },\r\n '& .crud-container': {\r\n display: 'flex',\r\n margin: '0 -10px',\r\n '& > div': {\r\n padding: '0 10px',\r\n },\r\n [`& .${`button-fabric`}`]: {\r\n [`& .${`ms-Button-icon`}`]: {\r\n color: '#70D389',\r\n fontSize: '20px',\r\n },\r\n [`& .${`is-disabled`}`]: {\r\n [`& .${`ms-Button-icon`}`]: {\r\n color: '#ECF9EF',\r\n },\r\n },\r\n },\r\n },\r\n [`& .${`ms-Button`}`]: {\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n [`& .${`is-disabled`}`]: {\r\n backgroundColor: 'transparent',\r\n [`& g`]: {\r\n stroke: 'none',\r\n [`& path`]: {\r\n stroke: 'none',\r\n },\r\n },\r\n },\r\n [`& .${`custom-split-2`}`]: {\r\n '& .share i': {\r\n color: '#70d389 !important',\r\n fontSize: '29px',\r\n display: 'none',\r\n },\r\n '& .share i:first-child': {\r\n display: 'block',\r\n },\r\n [`& .${`ms-Button`}`]: {\r\n minWidth: 0,\r\n padding: 0,\r\n backgroundColor: 'transparent',\r\n border: 0,\r\n [`& .${`ms-Button-flexContainer`}`]: {\r\n [`& ${`i`}`]: {\r\n color: 'green',\r\n },\r\n },\r\n },\r\n },\r\n [`& .${`custom-split`}`]: {\r\n [`& .${`ms-Button`}`]: {\r\n minWidth: 0,\r\n padding: 0,\r\n backgroundColor: 'transparent',\r\n border: 0,\r\n },\r\n [`& .${`ms-Button-menuIcon`}`]: {\r\n display: 'none',\r\n },\r\n },\r\n },\r\n notes: {\r\n backgroundColor: 'rgba(243, 243, 158, 0.29)',\r\n padding: '10px',\r\n },\r\n download: {\r\n cursor: 'pointer'\r\n },\r\n viewType: {\r\n display: 'flex',\r\n border: '1px solid #D9DFF7',\r\n borderRadius: '4px',\r\n boxShadow: '0 0 4px 0 rgba(81,115,255,0.33)',\r\n '& .is-checked': {\r\n backgroundColor: '#F5F6FF',\r\n }\r\n },\r\n advancedFilter: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n margin: '0 -10px',\r\n '& > div': {\r\n padding: '0 10px',\r\n }\r\n },\r\n advancedFilterButton: {\r\n color: '#70D389',\r\n },\r\n advanceFilterContainer: {\r\n backgroundColor: 'rgb(248, 248, 248)',\r\n padding: '10px',\r\n borderRadius: '5px',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n formControl: {\r\n minWidth: 64\r\n },\r\n })\r\n);\r\n\r\nexport enum ViewTypeEnum {\r\n LIST = 0,\r\n BOARD,\r\n COMPRESS_BOARD\r\n}\r\n\r\nexport enum GroupByType {\r\n status = 0,\r\n allocatedBy,\r\n allocatedTo,\r\n priority,\r\n taskType,\r\n category,\r\n dueDates,\r\n team\r\n}\r\n\r\ninterface ControlPanelProps {\r\n isLoading: boolean;\r\n loadedCount: number;\r\n totalCount: number;\r\n\r\n onSearch?: (searchString: string) => void;\r\n // onInclude?: (taskStatus: TaskStatusEnum | null) => void;\r\n // tslint:disable-next-line: max-line-length\r\n onSearchFilterChanged?: (searchString: string, taskStatus: TaskStatusEnum, groupBy: GroupByType, \r\n isMyTasksOnly: boolean, isIncludeCrmTasks: boolean, isPersonalTask: boolean, isFromDataSource: boolean) => void;\r\n\r\n onToggleConfigs?: (show: boolean) => void;\r\n\r\n isRowGroupPanelShow?: (show: boolean) => void;\r\n isShowRowGroupPanel: boolean;\r\n isToolPanelShow?: (show: boolean) => void;\r\n onRefreshData?: () => void;\r\n onExport?: () => void;\r\n onPrint?: () => void;\r\n onAdd?: (type: 'phone' | 'adhoc') => void;\r\n onEdit?: () => void;\r\n onDelete?: () => void;\r\n onAddMatterFinancial?: () => void;\r\n\r\n // tslint:disable-next-line: no-any\r\n views?: Array;\r\n isDisableSave?: boolean;\r\n onViewSelected?: (configId: number) => void;\r\n onSaveCurrentView?: () => void;\r\n\r\n isDeleteDisabled?: boolean;\r\n isEditDisabled?: boolean;\r\n isResetDisabled?: boolean;\r\n\r\n isInMemory: boolean /* If the grid data is in memory */;\r\n onDownloadChanged?: (\r\n isDownload: boolean\r\n ) => void /* Trigger to start task download */;\r\n onViewType?: (viewType: ViewTypeEnum) => void;\r\n // onBoardroupBy?: (groupBy: GroupByType) => void;\r\n advancedFilter: TaskSummaryAdvancedFilter;\r\n onSearchAdvanced?: (\r\n due: IAutoCompleteItem | undefined,\r\n created: IAutoCompleteItem | undefined,\r\n priority: IAutoCompleteItem[] | undefined,\r\n status: IAutoCompleteItem[] | undefined,\r\n allocatedTo: IAutoCompleteItem[] | undefined,\r\n allocatedBy: IAutoCompleteItem[] | undefined,\r\n updatedFrom: Date | undefined,\r\n updatedTo: Date | undefined,\r\n completedFrom: Date | undefined,\r\n completedTo: Date | undefined,\r\n team: IAutoCompleteItem[] | undefined,\r\n taskTypes: IAutoCompleteItem[] | undefined,\r\n matterList: IAutoCompleteItem[] | undefined,\r\n clientList: IAutoCompleteItem[] | undefined,\r\n ) => void;\r\n isRefreshData: boolean;\r\n isFormOpen: boolean;\r\n viewType?: ViewTypeEnum;\r\n isInclude: TaskStatusEnum | null;\r\n isIncludeCrmTasks: boolean;\r\n isMyTasksOnly: boolean;\r\n groupBy: GroupByType;\r\n isPersonalTask: boolean;\r\n isFromDataSource: boolean;\r\n showCheckbox?: {\r\n isIncludeOpen: boolean;\r\n isIncludeClosed: boolean;\r\n isMyTasksOnly: boolean;\r\n isIncludeCrmTasks: boolean;\r\n isPersonalTask: boolean;\r\n isFromDataSource: boolean;\r\n };\r\n hideControls?: {\r\n adhocTask: boolean;\r\n phoneTask: boolean;\r\n matterFinancialTask: boolean;\r\n edit: boolean;\r\n delete: boolean;\r\n savedView: boolean;\r\n };\r\n isIncludeFollowUpTasksOnly: boolean | null;\r\n sourceSystem: string | null;\r\n}\r\n\r\ninterface ControlPanelStates {\r\n isInMemory?: boolean;\r\n isDownloading?: boolean;\r\n isPaused?: boolean;\r\n isLoading?: boolean;\r\n isRowGroupPanelShow?: boolean;\r\n isViewShow?: boolean;\r\n isToolPanelShow?: boolean;\r\n isDeleteDisabled?: boolean;\r\n isEditDisabled?: boolean;\r\n viewType?: ViewTypeEnum;\r\n showAdvancedFilter: boolean;\r\n groupBy: GroupByType;\r\n\r\n search: string;\r\n isIncludeOpen: boolean;\r\n isIncludeClosed: boolean;\r\n isMyTasksOnly: boolean;\r\n isIncludeCrmTasks: boolean;\r\n hasFilter: boolean;\r\n isPersonalTask: boolean;\r\n isFromDataSource: boolean;\r\n}\r\n\r\n// tslint:disable-next-line: no-anyW\r\nexport const TasksSummaryControlPanel: React.FunctionComponent = (props) => {\r\n const classes = useStyles();\r\n\r\n const delayedSearch = _.debounce(filter => onSearch(filter), 500);\r\n\r\n const [value, setValue] = useState({\r\n isInMemory: false,\r\n isDownloading: false,\r\n isPaused: false, \r\n isLoading: false,\r\n isToolPanelShow: false,\r\n isDeleteDisabled: props.isDeleteDisabled,\r\n isEditDisabled: props.isEditDisabled,\r\n isRowGroupPanelShow: props.isShowRowGroupPanel,\r\n isViewShow: false,\r\n viewType: props.viewType,\r\n showAdvancedFilter: false,\r\n groupBy: props.groupBy,\r\n search: '',\r\n isIncludeOpen: true,\r\n isIncludeClosed: false,\r\n isMyTasksOnly: props.isMyTasksOnly,\r\n isIncludeCrmTasks: props.isIncludeCrmTasks,\r\n hasFilter: false,\r\n isPersonalTask: props.isPersonalTask,\r\n isFromDataSource: props.isFromDataSource\r\n });\r\n\r\n const [advancedFilter, setAdvancedFilter] = React.useState({\r\n ...props.advancedFilter,\r\n // due: undefined,\r\n // created: undefined,\r\n // priority: undefined,\r\n // status: undefined,\r\n // allocatedTo: undefined,\r\n // allocatedBy: undefined,\r\n // updatedFrom: undefined,\r\n // updatedTo: undefined,\r\n // completedFrom: undefined,\r\n // completedTo: undefined,\r\n // team: undefined,\r\n // taskTypes: undefined,\r\n // clientList: undefined,\r\n // matterList: undefined\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n let downloadTaskLink: any;\r\n var viewCount = 0;\r\n var viewMenuItems = [];\r\n\r\n // tslint:disable-next-line: no-console\r\n useEffect(() => {\r\n setValue({\r\n ...value,\r\n isEditDisabled: props.isEditDisabled,\r\n isRowGroupPanelShow: props.isShowRowGroupPanel,\r\n isInMemory: props.isInMemory,\r\n isLoading: props.isLoading\r\n });\r\n // tslint:disable-next-line: align\r\n }, [\r\n props.isEditDisabled, \r\n props.isShowRowGroupPanel, \r\n props.isLoading,\r\n props.isInMemory, \r\n downloadTaskLink,\r\n ]\r\n );\r\n\r\n useEffect(() => {\r\n\r\n let taskStatus: TaskStatusEnum = TaskStatusEnum.Open;\r\n\r\n if (value.isIncludeOpen && value.isIncludeClosed) {\r\n taskStatus = TaskStatusEnum.All;\r\n } else if (value.isIncludeOpen && !value.isIncludeClosed) {\r\n taskStatus = TaskStatusEnum.Open;\r\n } else if (!value.isIncludeOpen && value.isIncludeClosed) {\r\n taskStatus = TaskStatusEnum.Closed;\r\n } else {\r\n taskStatus = TaskStatusEnum.None;\r\n }\r\n\r\n if (props.onSearchFilterChanged) {\r\n props.onSearchFilterChanged(value.search, taskStatus, value.groupBy, value.isMyTasksOnly, \r\n value.isIncludeCrmTasks, value.isPersonalTask, value.isFromDataSource);\r\n }\r\n // tslint:disable-next-line: align\r\n }, [value.isIncludeOpen, value.isIncludeClosed, value.groupBy, value.isMyTasksOnly, value.isIncludeCrmTasks, value.isPersonalTask, value.isFromDataSource]);\r\n\r\n const onSearchAdvancedChanged = (\r\n due: IAutoCompleteItem | undefined,\r\n created: IAutoCompleteItem | undefined,\r\n priority: IAutoCompleteItem[] | undefined,\r\n status: IAutoCompleteItem[] | undefined,\r\n allocatedTo: IAutoCompleteItem[] | undefined,\r\n allocatedBy: IAutoCompleteItem[] | undefined,\r\n updatedFrom: Date | undefined,\r\n updatedTo: Date | undefined,\r\n completedFrom: Date | undefined,\r\n completedTo: Date | undefined,\r\n team: IAutoCompleteItem[] | undefined,\r\n taskTypes: IAutoCompleteItem[] | undefined,\r\n matterList: IAutoCompleteItem[] | undefined,\r\n clientList: IAutoCompleteItem[] | undefined,\r\n ) => {\r\n setAdvancedFilter((prevAdvancedFilter: TaskSummaryAdvancedFilter) => {\r\n return {\r\n ...prevAdvancedFilter,\r\n due: due,\r\n completedFrom: completedFrom,\r\n completedTo: completedTo,\r\n updatedFrom: updatedFrom,\r\n updatedTo: updatedTo,\r\n created: created,\r\n priority: priority,\r\n status: status,\r\n allocatedTo: allocatedTo,\r\n allocatedBy: allocatedBy,\r\n team: team,\r\n taskTypes: taskTypes\r\n };\r\n });\r\n\r\n if (props.onSearchAdvanced) {\r\n props.onSearchAdvanced(\r\n due,\r\n created,\r\n priority,\r\n status,\r\n allocatedTo,\r\n allocatedBy,\r\n updatedFrom,\r\n updatedTo,\r\n completedFrom,\r\n completedTo,\r\n team,\r\n taskTypes,\r\n matterList,\r\n clientList\r\n );\r\n }\r\n };\r\n\r\n const onCloseAdvancedFilter = () => {\r\n setValue({\r\n ...value,\r\n showAdvancedFilter: !value.showAdvancedFilter\r\n });\r\n };\r\n\r\n const onSearch = (filter: string) => {\r\n setValue((prevValue) => {\r\n return {\r\n ...prevValue,\r\n search: filter\r\n };\r\n });\r\n\r\n if (props.onSearch) {\r\n props.onSearch(filter);\r\n }\r\n };\r\n\r\n const onMyPersonalTasks = (event: React.FormEvent, state: CheckboxState) => {\r\n\r\n setValue((prevValue) => {\r\n return {\r\n ...prevValue,\r\n isPersonalTask: state.checked,\r\n isMyTasksOnly: false\r\n };\r\n });\r\n\r\n };\r\n\r\n const onIncludeOpen = (event: React.FormEvent, state: CheckboxState) => {\r\n setValue((prevValue) => {\r\n return {\r\n ...prevValue,\r\n isIncludeOpen: state.checked\r\n };\r\n });\r\n };\r\n\r\n const onIncludeClosed = (event: React.FormEvent, state: CheckboxState) => {\r\n setValue((prevValue) => {\r\n return {\r\n ...prevValue,\r\n isIncludeClosed: state.checked\r\n };\r\n });\r\n };\r\n\r\n const onIncludeCrmTasks = (event: React.FormEvent, state: CheckboxState) => {\r\n setValue((prevValue) => {\r\n return {\r\n ...prevValue,\r\n isIncludeCrmTasks: state.checked\r\n };\r\n });\r\n };\r\n\r\n const onIncludeTasksFromDataSource = (event: React.FormEvent, state: CheckboxState) => {\r\n setValue((prevValue) => {\r\n return {\r\n ...prevValue,\r\n isFromDataSource: state.checked\r\n };\r\n });\r\n };\r\n\r\n const onIsMyTasksOnly = (event: React.FormEvent, state: CheckboxState) => {\r\n setValue((prevValue) => {\r\n return {\r\n ...prevValue,\r\n isMyTasksOnly: state.checked,\r\n isPersonalTask: false\r\n };\r\n });\r\n };\r\n\r\n const onRefreshData = () => {\r\n setValue({\r\n ...value,\r\n isDownloading: false,\r\n isPaused: false,\r\n });\r\n\r\n if (props.onRefreshData) {\r\n props.onRefreshData();\r\n }\r\n };\r\n\r\n const onToggleRowGrouping = () => {\r\n if (props.isRowGroupPanelShow) {\r\n props.isRowGroupPanelShow(!value.isRowGroupPanelShow);\r\n }\r\n\r\n setValue({\r\n ...value,\r\n isRowGroupPanelShow: !value.isRowGroupPanelShow,\r\n });\r\n };\r\n\r\n const onShowToolPanel = () => {\r\n if (props.isToolPanelShow) {\r\n props.isToolPanelShow(!value.isToolPanelShow);\r\n }\r\n\r\n setValue({ \r\n ...value,\r\n isToolPanelShow: !value.isToolPanelShow \r\n });\r\n };\r\n\r\n const onExport = () => {\r\n if (props.onExport) {\r\n props.onExport();\r\n }\r\n };\r\n\r\n const onPrint = () => {\r\n if (props.onPrint) {\r\n props.onPrint();\r\n }\r\n };\r\n\r\n const onAdd = (type: 'phone' | 'adhoc') => () => {\r\n if (props.onAdd) {\r\n props.onAdd(type);\r\n }\r\n };\r\n\r\n const onEdit = () => {\r\n if (props.onEdit) {\r\n props.onEdit();\r\n }\r\n };\r\n\r\n const onDelete = () => {\r\n if (props.onDelete) {\r\n props.onDelete();\r\n }\r\n };\r\n\r\n const onToggleConfigs = () => {\r\n if (props.onToggleConfigs) {\r\n props.onToggleConfigs(!value.isViewShow);\r\n }\r\n\r\n setValue({\r\n ...value,\r\n isViewShow: !value.isViewShow,\r\n });\r\n };\r\n\r\n const onViewSelected = (viewKey: string, configId: number) => {\r\n if (props.onViewSelected) {\r\n props.onViewSelected(configId);\r\n }\r\n };\r\n\r\n const onSaveView = () => {\r\n if (props.onSaveCurrentView) {\r\n props.onSaveCurrentView();\r\n }\r\n };\r\n\r\n const handleTaskDownload = () => {\r\n if (value.isLoading) {\r\n return;\r\n }\r\n\r\n if (value.isDownloading === false) {\r\n setValue({\r\n ...value,\r\n isPaused: false,\r\n isDownloading: true,\r\n });\r\n\r\n if (props.onDownloadChanged) {\r\n props.onDownloadChanged(true);\r\n }\r\n } else {\r\n setValue({\r\n ...value,\r\n isPaused: true,\r\n isDownloading: false,\r\n });\r\n\r\n if (props.onDownloadChanged) {\r\n props.onDownloadChanged(false);\r\n }\r\n }\r\n };\r\n\r\n const onClickViewType = (viewType: ViewTypeEnum) => {\r\n setValue({\r\n ...value,\r\n viewType: viewType\r\n });\r\n if (props.onViewType) {\r\n props.onViewType(viewType);\r\n }\r\n };\r\n\r\n const handleGroupBy = (event: React.ChangeEvent<{ name?: string; value: GroupByType }>) => {\r\n\r\n setValue((prevValue) => {\r\n return {\r\n ...prevValue,\r\n groupBy: event.target.value,\r\n };\r\n });\r\n\r\n };\r\n\r\n const toggleTaskAndPhone = () => {\r\n if (\r\n // UserFeature.HasAccess(UserFeatureEnum.hasMatterTasks) ||\r\n // UserFeature.HasAccess(UserFeatureEnum.hasArchiveMatter) ||\r\n // UserFeature.HasAccess(UserFeatureEnum.hasBillMatter) ||\r\n // UserFeature.HasAccess(UserFeatureEnum.hasCloseMatter) ||\r\n // UserFeature.HasAccess(UserFeatureEnum.hasDeleteTask) ||\r\n // UserFeature.HasAccess(UserFeatureEnum.hasMatterEmailPersonActing) ||\r\n // UserFeature.HasAccess(UserFeatureEnum.hasMatterEmailPersonResponsible) ||\r\n // UserFeature.HasAccess(UserFeatureEnum.hasFollowUpMatterTask) ||\r\n // UserFeature.HasAccess(UserFeatureEnum.hasWriteOffDebtors) ||\r\n // UserFeature.HasAccess(UserFeatureEnum.hasWriteOffWIP) ||\r\n // UserFeature.HasAccess(UserFeatureEnum.hasTransferMatterTrust) ||\r\n // UserFeature.HasAccess(UserFeatureEnum.hasTaskDetail) ||\r\n UserFeature.HasAccess(UserFeatureEnum.hasAdHocTask)\r\n ) {\r\n return TasksMenu.TASKS;\r\n } else if (\r\n UserFeature.HasAccess(UserFeatureEnum.hasPhoneTask)\r\n ) {\r\n return TasksMenu.PHONE_CALLS;\r\n } else {\r\n return TasksMenu.HIDDEN;\r\n }\r\n };\r\n\r\n const onHasFilter = (_value: boolean) => {\r\n setValue((prevValue) => {\r\n return {\r\n ...prevValue,\r\n hasFilter: _value\r\n };\r\n });\r\n };\r\n\r\n const isPersonalTaskLabel = (hasAccessToAdHocTask: boolean) => {\r\n if (props.isIncludeFollowUpTasksOnly) {\r\n return 'My Personal Tasks';\r\n } else {\r\n return hasAccessToAdHocTask ? 'My Personal Tasks' : 'My Personal Calls';\r\n } \r\n };\r\n\r\n if (props.views) {\r\n viewCount = props.views.length;\r\n }\r\n\r\n if (props.views) {\r\n props.views.forEach((config: SummaryViewConfigObj) => {\r\n viewMenuItems.push({\r\n key: config.configId,\r\n name: config.name,\r\n onClick: () => {\r\n onViewSelected(config.name, config.configId);\r\n },\r\n });\r\n });\r\n }\r\n\r\n viewMenuItems.push({\r\n key: 'saveLayout',\r\n name: 'Save Current Layout',\r\n onClick: () => {\r\n onSaveView();\r\n },\r\n disabled: viewCount === 0 ? true : props.isDisableSave,\r\n });\r\n\r\n if (value.isInMemory === false && value.isDownloading === false && value.isPaused === false) {\r\n downloadTaskLink = (\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n Click Here\r\n );\r\n } else if ( value.isInMemory === false && value.isDownloading && value.isPaused === false) {\r\n downloadTaskLink = (\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n Pause Download\r\n );\r\n } else if (value.isInMemory === false && value.isDownloading === false && value.isPaused === true) {\r\n downloadTaskLink = (\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n Resume Download\r\n );\r\n } else if (value.isInMemory) {\r\n // Setting it back to be used again. When Include complete is clicked\r\n downloadTaskLink = (\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n Click Here\r\n );\r\n } \r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {props.showCheckbox?.isPersonalTask ? (\r\n \r\n ) : undefined}\r\n \r\n {props.showCheckbox?.isMyTasksOnly ? (\r\n \r\n ) : undefined}\r\n\r\n {props.showCheckbox?.isIncludeOpen ? (\r\n \r\n ) : undefined}\r\n\r\n {props.showCheckbox?.isIncludeClosed ? (\r\n \r\n ) : undefined}\r\n
\r\n
\r\n {!props.isIncludeFollowUpTasksOnly && props.showCheckbox?.isIncludeCrmTasks && UserFeature.HasAccess(UserFeatureEnum.hasLeadsDetail)\r\n ?\r\n \r\n : null\r\n }\r\n {props.showCheckbox?.isFromDataSource && UserFeature.HasAccess(UserFeatureEnum.hasLeapTask) && props.sourceSystem === 'Leap' ? (\r\n \r\n ) : undefined}\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {\r\n value.viewType !== ViewTypeEnum.LIST && (\r\n
\r\n \r\n Group By\r\n \r\n Assigned By\r\n Assigned To\r\n Category\r\n Due Date\r\n Priority\r\n Status\r\n Team\r\n Type\r\n \r\n \r\n
\r\n )\r\n }\r\n
\r\n {value.viewType === ViewTypeEnum.LIST ? \r\n (\r\n props.loadedCount === 0 \r\n ? \r\n (\r\n
\r\n \r\n
\r\n )\r\n :\r\n (\r\n
\r\n \r\n
\r\n )\r\n )\r\n :\r\n null\r\n }\r\n\r\n {/* {value.isListView && (\r\n
\r\n \r\n
\r\n )} */}\r\n \r\n
\r\n
\r\n {/* {\r\n value.isListView && (\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n } */}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {/* {UserFeature.HasAccess(UserFeatureEnum.hasCreateTask)\r\n ?\r\n \r\n \r\n \r\n : null\r\n } */}\r\n {UserFeature.HasAccess(UserFeatureEnum.hasCreateTask) && UserFeature.HasAccess(UserFeatureEnum.hasAdHocTask) && !props.hideControls?.adhocTask\r\n ?\r\n \r\n \r\n \r\n : null\r\n }\r\n {UserFeature.HasAccess(UserFeatureEnum.hasPhoneTask) && !props.hideControls?.phoneTask\r\n ?\r\n \r\n \r\n \r\n : null\r\n }\r\n\r\n {(UserFeature.HasAccess(UserFeatureEnum.hasArchiveMatter)\r\n || UserFeature.HasAccess(UserFeatureEnum.hasBillMatter)\r\n || UserFeature.HasAccess(UserFeatureEnum.hasCloseMatter)\r\n || UserFeature.HasAccess(UserFeatureEnum.hasDeleteMatterTask)\r\n || UserFeature.HasAccess(UserFeatureEnum.hasWriteOffDebtors)\r\n || UserFeature.HasAccess(UserFeatureEnum.hasWriteOffWIP)\r\n || UserFeature.HasAccess(UserFeatureEnum.hasTransferMatterTrust)) && !props.hideControls?.matterFinancialTask \r\n ? (\r\n \r\n \r\n \r\n ) : null}\r\n\r\n {UserFeature.HasAccess(UserFeatureEnum.hasModifyTask) && value.viewType === ViewTypeEnum.LIST && !props.hideControls?.edit\r\n ?\r\n \r\n \r\n \r\n : null \r\n }\r\n {UserFeature.HasAccess(UserFeatureEnum.hasDeleteTask) && value.viewType === ViewTypeEnum.LIST && !props.hideControls?.delete\r\n ?\r\n \r\n \r\n \r\n : null \r\n }\r\n \r\n
\r\n {\r\n value.viewType === ViewTypeEnum.LIST && (\r\n \r\n \r\n \r\n )\r\n }\r\n \r\n \r\n \r\n \r\n {\r\n value.viewType === ViewTypeEnum.LIST && (\r\n <>\r\n \r\n {onPrint(); },\r\n },\r\n {\r\n key: 'export',\r\n name: 'Export List...',\r\n onClick: () => {onExport(); },\r\n },\r\n ],\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {!props.hideControls?.savedView ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n )\r\n }\r\n
\r\n
\r\n \r\n onClickViewType(ViewTypeEnum.LIST)}\r\n />\r\n \r\n \r\n onClickViewType(ViewTypeEnum.BOARD)}\r\n />\r\n \r\n \r\n onClickViewType(ViewTypeEnum.COMPRESS_BOARD)}\r\n />\r\n \r\n
\r\n
\r\n
\r\n
\r\n {value.viewType === ViewTypeEnum.LIST && value.isLoading === false && props.loadedCount > 0 ? (\r\n value.isInMemory === false && \r\n (value.search === '' || value.search === undefined) ? (\r\n \r\n

\r\n {' '}\r\n The summary returned a large number of tasks.\r\n Narrow the filter or {downloadTaskLink} to\r\n download remaining tasks. Note that grouping,\r\n sorting and filtering won’t be activated until\r\n all tasks are downloaded\r\n

\r\n
\r\n ) : null\r\n ) : null}\r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};"],"sourceRoot":""}