@cayuse-test/react 1.0.7 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../packages/components/attachments-form/attachments-form.tsx","../packages/components/banner-notification/banner-notification.tsx","../packages/components/banner-notification/utils.tsx","../packages/components/button/button.tsx","../packages/components/icon/icon.tsx","../packages/components/banner-notification/login-button/login-button.tsx","../packages/components/form/file-upload/file-upload.tsx","../packages/components/loading-indicator/loading-indicator.tsx","../packages/components/icon-button/icon-button.tsx","../packages/components/modal-dialog/alert-dialog.tsx","../packages/components/modal-dialog/modal-dialog.tsx","../packages/components/attachments-form/components/table-file-list/table-file-list.tsx","../packages/components/attachments-form/components/table-file-list/table-row.tsx","../packages/components/formatted/formatted-date/formatted-date.tsx","../packages/components/formatted/formatted-datetime/formatted-datetime.tsx","../packages/components/formatted/formatted-datetime/index.ts","../packages/components/attachments-form/components/table-file-list/table-row-actions.tsx","../packages/components/attachments-form/utils.ts","../packages/components/attachments-form/accordion-attachments-form.tsx","../packages/components/attachments-form/accordion-form-wrapper.tsx","../packages/components/base-padding/base-padding.tsx","../packages/components/breadcrumbs/breadcrumbs.tsx","../packages/components/button-group/button-group.tsx","../packages/components/cayuse-common-header/cayuse-common-header.tsx","../packages/components/confirmation-modal/confirmation-modal.tsx","../packages/components/covert-button/covert-button.tsx","../packages/components/custom-dropdown/custom-dropdown.tsx","../packages/components/date-selector/date-selector.tsx","../packages/components/divider/divider.tsx","../packages/components/dropdown-menu/dropdown-menu.tsx","../packages/components/dynamic-table/dynamic-table.tsx","../packages/components/pagination/pagination.tsx","../packages/components/form/checkbox/checkbox.tsx","../packages/components/dynamic-table/components/checkbox-header-cell.tsx","../packages/components/dynamic-table/components/expand-row-button.tsx","../packages/components/dynamic-table/components/table-body-content.tsx","../packages/components/dynamic-table/utils.ts","../packages/components/form/radio/radio.tsx","../packages/components/dynamic-table/components/selectable-cell.tsx","../packages/components/dynamic-table/components/row-content.tsx","../packages/components/dynamic-table/components/table-head-cell.tsx","../packages/components/form/input/input.tsx","../packages/components/form/number/number.tsx","../packages/components/form/radio-group/radio-group.tsx","../packages/components/form/toggle/toggle.tsx","../packages/components/form/combobox/combobox.tsx","../packages/components/form/combobox/utils.tsx","../packages/components/form/combobox/components.tsx","../packages/components/form/multi-file-upload/multi-file-upload.tsx","../packages/components/form/rich-text/rich-text.tsx","../packages/components/form/text-area/text-area.tsx","../packages/components/form/user-select/user-select.tsx","../packages/components/form/user-select/utils.tsx","../packages/components/form-note-attachments-view/form-note-attachments-view.tsx","../packages/components/prevent-leave-page-dialog/prevent-leave-page-dialog.tsx","../packages/components/formatted/formatted-rich-text/formatted-rich-text.tsx","../packages/components/form-note-attachments-view/constants.ts","../packages/components/form-note-attachments-view/components/notes-section.tsx","../packages/components/form-note-attachments-view/components/attachments-section.tsx","../packages/components/form-note-attachments-view/components/note-attachments-table.tsx","../packages/components/form-note-attachments-view/components/edit-note-modal.tsx","../packages/components/form-note-attachments-view/utils.ts","../packages/components/formatted/formatted-value/formatted-value.tsx","../packages/components/link-to-milestone/link-to-milestone.tsx","../packages/components/link-to-milestone/utils.ts","../packages/components/nav-link/nav-link.tsx","../packages/components/padded-cell/padded-cell.tsx","../packages/components/pendo/pendo.tsx","../packages/components/popup/popup.tsx","../packages/components/section-header/section-header.tsx","../packages/components/sub-header/sub-header.tsx","../packages/components/set-view/set-view.tsx","../packages/components/set-view/use-active-columns.ts","../packages/components/submenu/submenu.tsx","../packages/components/tabs/tabs.tsx","../packages/components/tabs/tab/tab.tsx","../packages/components/task-form/task-form.tsx","../packages/components/task-form/api.ts","../packages/components/task-form/linked-tasks/utils.ts","../packages/components/task-form/assign-to/assign-to-person.tsx","../packages/components/task-form/assign-to/components.tsx","../packages/components/task-form/context/form-context.tsx","../packages/components/task-form/hooks/use-milestone-progress.tsx","../packages/components/task-form/hooks/use-assign-to.tsx","../packages/components/task-form/hooks/use-attachments.tsx","../packages/components/task-form/validators.ts","../packages/components/task-form/assign-to/assign-to-team.tsx","../packages/components/task-form/assign-to/index.tsx","../packages/components/task-form/utils.tsx","../packages/components/task-form/milestone-form/milestone-form.tsx","../packages/components/task-form/category-input/category-input.tsx","../packages/components/task-form/components/created-by-field.tsx","../packages/components/task-form/components/description-field.tsx","../packages/components/task-form/components/entity-info-field.tsx","../packages/components/task-form/components/form-date-selector.tsx","../packages/components/task-form/components/name-field.tsx","../packages/components/task-form/components/status-field.tsx","../packages/components/task-form/components/url-field.tsx","../packages/components/task-form/dictionary.ts","../packages/components/task-form/linked-tasks/linked-tasks.tsx","../packages/components/task-form/linked-tasks/table-linked-tasks-list.tsx","../packages/components/task-form/linked-tasks/vo/task-categories.vo.ts","../packages/components/task-form/linked-tasks/task-counter-cell.tsx","../packages/components/task-form/linked-tasks/assigned-to-cell.tsx","../packages/components/task-form/components/task-title-cell.tsx","../packages/components/task-form/components/clock-icon.tsx","../packages/components/task-form/reminders/reminders.tsx","../packages/components/task-form/reminders/utils.ts","../packages/components/task-form/reminders/add-reminder-form.tsx","../packages/components/task-form/reminders/current-reminders.tsx","../packages/components/task-form/comments/comments.tsx","../packages/components/task-form/comments/table-comment-list.tsx","../packages/components/task-form/comments/table-row.tsx","../packages/components/task-form/components/milestone-input.tsx","../packages/components/task-form/components/milestone-progress.tsx","../packages/components/task-form/components/milestone-progress-view.tsx","../packages/components/task-form/components/task-form-header.tsx"],"sourcesContent":["/* eslint-disable */\nimport React, { useState, useCallback, useEffect, useMemo, useRef } from 'react';\nimport { merge } from 'lodash-es';\nimport { notify } from '../banner-notification/index.js';\nimport { FileUpload } from '../form/file-upload/index.js';\nimport { UploadService } from '@/services/upload-s3';\nimport { LoadingIndicator } from '../loading-indicator/index.js';\nimport { AlertDialog } from '../modal-dialog/index.js';\nimport { useTenantContext } from '@/context/tenant';\nimport { TableFileList } from './components/table-file-list/table-file-list.js';\nimport './styles.css';\nimport { baseDictionary } from './utils.js';\n\n/* UploadResource\n id: string;\n tenantId: string;\n fileName: string;\n createdAt: Date;\n finalizedAt: Date;\n completedAt: Date;\n uploadedBy: string;\n fileSize: number;\n\n {\n \"id\": \"PRC-516c5173-403d-11ee-bb45-02c07f11fdd3\",\n \"url\": \"http://engage.ft.cayuse.com/process-api/runtime/tasks/TSK-2df0feb3-f928-11ed-8feb-0ae4042f13d9/attachments/PRC-516c5173-403d-11ee-bb45-02c07f11fdd3\",\n \"name\": \"Attachment name\",\n \"userId\": \"420f632a-f65e-4314-a0f4-8ac39836d103\",\n \"type\": \"platform\",\n \"taskUrl\": \"http://engage.ft.cayuse.com/process-api/runtime/tasks/TSK-2df0feb3-f928-11ed-8feb-0ae4042f13d9\",\n \"processInstanceUrl\": null,\n \"externalUrl\": \"platform://1573c8fc-efc9-4501-a39e-fbad36ab106c\",\n \"contentUrl\": null,\n \"time\": \"2023-08-21T16:10:59.830Z\"\n}\n */\n\nexport interface UploadResource {\n\tid: string;\n\ttenantId?: string;\n\tfileName: string;\n\tcreatedAt: string | Date;\n\tfinalizedAt?: Date;\n\tcompletedAt?: Date;\n\tuploadedBy: string;\n\tuploadedByInfo?: {\n\t\tfirstName?: string;\n\t\tlastName?: string;\n\t};\n\tfileSize?: number;\n\treferenceId?: string;\n\tstate: {\n\t\tstatus: 'preparing' | 'uploading' | 'completed' | 'error';\n\t\terror?: Error;\n\t\tprogress?: number;\n\t};\n}\n\nexport interface FileData {\n\tid: string;\n\turl: string;\n\tname: string;\n\tuserId: string;\n\ttype: string;\n\ttaskUrl: string;\n\tprocessInstanceUrl: string | null;\n\texternalUrl: string;\n\tcontentUrl: string | null;\n\ttime: string;\n\tdescription?: string;\n\tuser?: {\n\t\tfirstName?: string;\n\t\tlastName?: string;\n\t};\n}\n\nconst toUploadResource = (file: FileData): UploadResource | null => {\n\tconst { id, name, userId, externalUrl, time, description, user } = file;\n\n\tif (!externalUrl?.startsWith('platform://')) {\n\t\tconsole.error('Invalid externalUrl for a task attachment: ', externalUrl);\n\n\t\treturn null;\n\t}\n\n\tconst fileResource: UploadResource = {\n\t\tid: externalUrl.slice(11),\n\t\tfileName: name,\n\t\tcreatedAt: time,\n\t\tuploadedBy: userId,\n\t\treferenceId: id,\n\t\tuploadedByInfo: user,\n\t\tstate: {\n\t\t\tstatus: 'completed',\n\t\t},\n\t};\n\n\ttry {\n\t\tif (description) {\n\t\t\tconst data = JSON.parse(description);\n\t\t\tObject.assign(fileResource, data);\n\t\t}\n\t} catch (e) {\n\t\tconsole.warn(e);\n\t}\n\n\treturn fileResource;\n};\n\n/*\nexport type UploadMetadataResource = {\n id: string;\n tenantId: string;\n fileName: string;\n createdAt: Date;\n finalizedAt: Date;\n completedAt: Date;\n uploadedBy: string;\n fileSize: number;\n}\n*/\n\nexport interface UseUploadServiceReturn {\n\tfiles: UploadResource[];\n\trejections: UploadResource[];\n\tloading: boolean;\n\tadd: (files: File[]) => Promise<void>;\n\tremove: (file: UploadResource | null) => void;\n}\n\nconst useUploadService = (\n\tservice: typeof UploadService,\n\tinitialFiles?: FileData[],\n): UseUploadServiceReturn => {\n\tconst [baseFiles, setBaseFiles] = useState<UploadResource[]>([]);\n\tconst [deletedFiles, setDeletedFiles] = useState<UploadResource[]>([]);\n\tconst [rejections, setRejections] = useState<UploadResource[]>([]);\n\tconst [addedFiles, setAddedFiles] = useState<UploadResource[]>([]);\n\tconst [loading, setLoading] = useState(false);\n\n\tconst { data: tenantCtx } = useTenantContext();\n\n\tuseEffect(() => {\n\t\tif (!initialFiles) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (baseFiles.length === 0) {\n\t\t\tsetBaseFiles(initialFiles.map(toUploadResource).filter((f) => !!f));\n\t\t}\n\t}, [baseFiles.length, initialFiles]);\n\n\tconst ls = useMemo(() => {\n\t\treturn [...baseFiles, ...addedFiles].filter((f) => !deletedFiles.includes(f));\n\t}, [baseFiles, addedFiles, deletedFiles]);\n\n\tconst addFiles = useCallback(\n\t\tasync (files: File[]) => {\n\t\t\tsetRejections([]);\n\n\t\t\tconst next = async (file: File): Promise<UploadResource> => {\n\t\t\t\tconst fileResource: UploadResource = {\n\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\tid: undefined,\n\t\t\t\t\tfileName: file.name,\n\t\t\t\t\tfileSize: file.size,\n\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\tuploadedBy: tenantCtx?.person?.id || '',\n\t\t\t\t\tstate: {\n\t\t\t\t\t\tstatus: 'preparing',\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tconst fileMetadata = await service.upload(file, (progress) => {\n\t\t\t\t\t\tfileResource.state = {\n\t\t\t\t\t\t\t...fileResource.state,\n\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\tprogress,\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\n\t\t\t\t\tfileResource.id = fileMetadata.id;\n\t\t\t\t\tfileResource.state.status = 'completed';\n\n\t\t\t\t\treturn fileResource;\n\t\t\t\t} catch (e) {\n\t\t\t\t\tfileResource.state = {\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\terror: e as Error,\n\t\t\t\t\t};\n\t\t\t\t\tconsole.warn('Error uploading:', fileResource);\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-throw-literal\n\t\t\t\t\tthrow fileResource;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst totalNum = ls.length + files.length;\n\t\t\tif (ls.length >= 9) {\n\t\t\t\tnotify(`You have reached the nine (9) file attachment limit.`, {\n\t\t\t\t\ttype: 'error',\n\t\t\t\t});\n\t\t\t} else if (totalNum > 9) {\n\t\t\t\tnotify(`You may not exceed the nine (9) file attachments limit.`, {\n\t\t\t\t\ttype: 'error',\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsetLoading(true);\n\t\t\t\tconst results = await Promise.allSettled(files.map(next));\n\n\t\t\t\tconst rejections = results\n\t\t\t\t\t.filter((p) => p.status === 'rejected')\n\t\t\t\t\t.map((p) => p.reason as UploadResource);\n\t\t\t\tif (rejections.length > 0) {\n\t\t\t\t\tnotify(\n\t\t\t\t\t\t`${rejections.length} out of ${results.length} records failed to upload. Please review and try again.`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tsetAddedFiles((prev) => {\n\t\t\t\t\tconst addedAttachment = results\n\t\t\t\t\t\t.filter((p) => p.status === 'fulfilled')\n\t\t\t\t\t\t.map((p) => p.value as UploadResource)\n\t\t\t\t\t\t.map((file) => ({\n\t\t\t\t\t\t\t...file,\n\t\t\t\t\t\t\tuploadedByInfo: {\n\t\t\t\t\t\t\t\tfirstName: tenantCtx?.person?.firstName,\n\t\t\t\t\t\t\t\tlastName: tenantCtx?.person?.lastName,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}));\n\t\t\t\t\treturn prev.concat(addedAttachment);\n\t\t\t\t});\n\t\t\t\tsetRejections(rejections);\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t},\n\t\t[service, ls, tenantCtx],\n\t);\n\n\tconst deleteFile = useCallback((file: UploadResource) => {\n\t\tsetDeletedFiles((prev) => prev.concat([file]));\n\t}, []);\n\n\treturn {\n\t\tfiles: ls,\n\t\trejections,\n\t\tloading,\n\t\tadd: addFiles,\n\t\t// @ts-expect-error type mismatch\n\t\tremove: deleteFile,\n\t};\n};\n\ninterface RejectionsMessageProps {\n\trejections: UploadResource[];\n}\n\nfunction RejectionsMessage({ rejections }: RejectionsMessageProps) {\n\tif (!rejections?.length) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"attachments-form__errors\">\n\t\t\t<p>(!) The following files were rejected. Please review and try again:</p>\n\t\t\t<ol>\n\t\t\t\t{rejections.map((rejection, k) => (\n\t\t\t\t\t<li key={k}>\n\t\t\t\t\t\t{rejection.fileName}: {rejection.state?.error?.message}\n\t\t\t\t\t</li>\n\t\t\t\t))}\n\t\t\t</ol>\n\t\t</div>\n\t);\n}\n\nexport interface AttachmentsFormProps {\n\tdisabled?: boolean;\n\tfiles?: FileData[];\n\tsetFiles: (files: UploadResource[]) => void;\n\tsetRejections(rejections: UploadResource[]): void;\n\tdictionary?: Partial<typeof baseDictionary>;\n\tallowToRemoveByRoles?: string[];\n\tonLoading?: (loading: boolean) => void;\n}\n\nexport const AttachmentsForm = React.forwardRef(function AttachmentsForm(\n\t{\n\t\tdisabled = false,\n\t\tfiles: baseFiles,\n\t\tsetFiles,\n\t\tsetRejections,\n\t\tdictionary: dctnr = {},\n\t\tallowToRemoveByRoles,\n\t\tonLoading,\n\t}: AttachmentsFormProps,\n\tref,\n) {\n\tconst dictionary = merge({}, baseDictionary, dctnr);\n\n\tconst [fileToRemove, setFileToRemove] = useState<UploadResource | null>(null);\n\n\tconst { files, rejections, loading, add, remove } = useUploadService(\n\t\tUploadService,\n\t\tbaseFiles,\n\t);\n\n\tconst prevLoading = useRef<boolean>(loading);\n\tconst uploadWrapperRef = useRef<HTMLDivElement>(null);\n\n\tconst onDrop = useCallback(\n\t\t(drops: File[]) => {\n\t\t\tadd(drops);\n\t\t},\n\t\t[add],\n\t);\n\n\tconst onConfirmRemoveFile = () => {\n\t\tremove(fileToRemove);\n\t\tsetFileToRemove(null);\n\t};\n\n\tuseEffect(() => {\n\t\tonLoading?.(loading);\n\n\t\tif (!loading && loading !== prevLoading.current) {\n\t\t\tconst selectFileButton = document.querySelector('.file-upload button');\n\t\t\t// @ts-expect-error type mismatch\n\t\t\tselectFileButton?.focus();\n\t\t}\n\n\t\tprevLoading.current = loading;\n\t}, [loading]);\n\n\tuseEffect(() => {\n\t\tsetFiles(files.filter((f) => f.state?.status === 'completed'));\n\t}, [files, setFiles]);\n\n\tuseEffect(() => {\n\t\tsetRejections(rejections);\n\t}, [rejections]);\n\n\tif (loading) {\n\t\treturn (\n\t\t\t// @ts-expect-error type mismatch\n\t\t\t<div ref={ref} className=\"file-upload__content\">\n\t\t\t\t<LoadingIndicator />\n\t\t\t\t<span className=\"file-upload__uploading-text\">\n\t\t\t\t\t{dictionary.fileInput.uploadingText}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t// @ts-ignore\n\t\t<div ref={ref} className=\"attachments-form\">\n\t\t\t<p className=\"attachments-form__description\">{dictionary.description}</p>\n\t\t\t<FileUpload\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonDrop={onDrop}\n\t\t\t\tdictionary={dictionary.fileInput}\n\t\t\t\tref={uploadWrapperRef}\n\t\t\t/>\n\t\t\t<RejectionsMessage rejections={rejections} />\n\t\t\t<TableFileList\n\t\t\t\tfiles={files}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tremoveFile={(file) => setFileToRemove(file as UploadResource)}\n\t\t\t\tdictionary={dictionary.tableFileList}\n\t\t\t\tallowToRemoveByRoles={allowToRemoveByRoles}\n\t\t\t/>\n\t\t\t<AlertDialog\n\t\t\t\ttitle={dictionary.removeFileDialog.title}\n\t\t\t\tdescription={\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{dictionary.removeFileDialog.description} <b>{fileToRemove?.fileName}</b>{' '}\n\t\t\t\t\t\t?\n\t\t\t\t\t</span>\n\t\t\t\t}\n\t\t\t\tisOpen={Boolean(fileToRemove)}\n\t\t\t\tonCancel={() => setFileToRemove(null)}\n\t\t\t\tconfirmText={dictionary.removeFileDialog.confirmText}\n\t\t\t\tcancelText={dictionary.removeFileDialog.cancelText}\n\t\t\t\tonConfirm={onConfirmRemoveFile}\n\t\t\t/>\n\t\t</div>\n\t);\n});\n","import { useEffect } from 'react';\nimport cn from 'classnames';\nimport { ToastContainer, Slide, ToastContainerProps } from 'react-toastify';\nimport { setLoginTenantId, setDictionary, defaultMessageConst } from './utils.js';\nimport './styles.css';\n\ninterface BannerNotificationProps extends ToastContainerProps {\n\tclassName?: string;\n\tdictionary?: typeof defaultMessageConst;\n\ttenantId: string;\n}\n\nexport function BannerNotifications({\n\tclassName,\n\tdictionary,\n\ttenantId,\n\trole,\n\t...rest\n}: BannerNotificationProps) {\n\tuseEffect(() => {\n\t\tsetLoginTenantId(tenantId);\n\t}, [tenantId]);\n\tuseEffect(() => {\n\t\tif (dictionary) {\n\t\t\tsetDictionary(dictionary);\n\t\t}\n\t}, [dictionary]);\n\n\treturn (\n\t\t<ToastContainer\n\t\t\tclassName={cn('notification', className)}\n\t\t\tcloseOnClick={false}\n\t\t\tdraggable={false}\n\t\t\tposition=\"top-center\"\n\t\t\ttransition={Slide}\n\t\t\trole={role || 'alert'}\n\t\t\t{...rest}\n\t\t/>\n\t);\n}\n","import React from 'react';\nimport {\n\ttoast,\n\tToastContent,\n\tToastOptions as RCToastOptions,\n\tTypeOptions as RCTypeOptions,\n} from 'react-toastify';\nimport { isNonEmptyString, isObject } from '@/utils/type-checks/index.js';\nimport { LoginButton } from './login-button/login-button.js';\n\ntype TypeOptions = RCTypeOptions | 'login';\ntype ToastOptions = Omit<RCToastOptions, 'type'> & {\n\ttype?: TypeOptions;\n};\n\nexport const defaultMessageConst = {\n\terrorMsg: 'Unexpected error. If the problem persists, please contact support.',\n\tsessionExpired: 'Session has expired. Please login.',\n\tloginButtonLabel: 'Log In',\n};\n\nexport function setDictionary(updatedDictionary: typeof defaultMessageConst) {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t(global as any).__CAYUSE__ = (global as any).__CAYUSE__ ?? {};\n\n\tif (isObject(updatedDictionary)) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t(global as any).__CAYUSE__.bannerNotificationDictionary = {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t...(global as any).__CAYUSE__.bannerNotificationDictionary,\n\t\t\t...updatedDictionary,\n\t\t};\n\t}\n}\n\nexport function setLoginTenantId(updatedTenantId: string) {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t(global as any).__CAYUSE__ = (global as any).__CAYUSE__ ?? {};\n\n\tif (isNonEmptyString(updatedTenantId)) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t(global as any).__CAYUSE__.tenantId = updatedTenantId;\n\t}\n}\n\nconst getNotificationTypeOptions = (type?: TypeOptions) => {\n\tconst notificationTypeOptions: Record<\n\t\tstring,\n\t\tToastOptions & { defaultMessage: React.ReactNode }\n\t> = {\n\t\tlogin: {\n\t\t\ttype: 'warning',\n\t\t\tautoClose: false,\n\t\t\tdefaultMessage: (\n\t\t\t\t<>\n\t\t\t\t\t<span>{defaultMessageConst.sessionExpired}</span>\n\t\t\t\t\t<LoginButton\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\t\ttenantId={(global as any).__CAYUSE__.tenantId}\n\t\t\t\t\t\tlabel={defaultMessageConst.loginButtonLabel}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t),\n\t\t\thideProgressBar: true,\n\t\t},\n\t\terror: {\n\t\t\ttype: 'error',\n\t\t\tautoClose: false,\n\t\t\tdefaultMessage: defaultMessageConst.errorMsg,\n\t\t\thideProgressBar: true,\n\t\t},\n\t\tinfo: {\n\t\t\ttype: 'info',\n\t\t\tautoClose: 2_000,\n\t\t\tdefaultMessage: '',\n\t\t\thideProgressBar: true,\n\t\t},\n\t\tsuccess: {\n\t\t\ttype: 'success',\n\t\t\tautoClose: 2_000,\n\t\t\tdefaultMessage: '',\n\t\t\thideProgressBar: true,\n\t\t},\n\t\twarning: {\n\t\t\ttype: 'warning',\n\t\t\tautoClose: 2_000,\n\t\t\tdefaultMessage: '',\n\t\t\thideProgressBar: true,\n\t\t},\n\t\tdefault: {\n\t\t\ttype: 'error',\n\t\t\tautoClose: false,\n\t\t\tdefaultMessage: defaultMessageConst.errorMsg,\n\t\t\thideProgressBar: true,\n\t\t},\n\t};\n\n\treturn !!type && type in notificationTypeOptions\n\t\t? notificationTypeOptions[type]\n\t\t: notificationTypeOptions.default;\n};\n\nexport function notify(message: ToastContent, options?: ToastOptions) {\n\tconst { defaultMessage, ...defaultOptions } = getNotificationTypeOptions(\n\t\toptions?.type,\n\t)!;\n\n\ttoast(message ?? defaultMessage, {\n\t\t...defaultOptions,\n\t\t...options,\n\t\ttoastId:\n\t\t\toptions?.toastId ??\n\t\t\toptions?.type /* this is how we're enforcing the one-notification-per-type constraint */,\n\t} as RCToastOptions);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n(global as any).__CAYUSE__ = (global as any).__CAYUSE__ ?? {};\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n(global as any).__CAYUSE__.notify = notify;\n","import * as React from 'react';\nimport cn from 'classnames';\nimport { useObjectRef } from 'react-aria';\nimport { Icon } from '../icon/index.js';\nimport './styles.css';\n\nexport interface ButtonProps\n\textends React.DetailedHTMLProps<\n\t\tReact.ButtonHTMLAttributes<HTMLButtonElement>,\n\t\tHTMLButtonElement\n\t> {\n\tbusy?: boolean;\n\tchildren?: React.ReactNode;\n\tclassName?: string;\n\tcustom?: boolean;\n\tprimary?: boolean;\n\tsecondary?: boolean;\n\ttertiary?: boolean;\n\tsuccess?: boolean;\n\tdanger?: boolean;\n\tsmall?: boolean;\n\tdisabled?: boolean;\n\ticon?: string;\n\tariaLabel?: string;\n\tloadingMessage?: string;\n\ttooltip?: string;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n\tfunction Button(\n\t\t{\n\t\t\tbusy,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\tcustom,\n\t\t\tprimary,\n\t\t\tsecondary,\n\t\t\tsuccess,\n\t\t\tdanger,\n\t\t\ttertiary,\n\t\t\tdisabled,\n\t\t\tsmall,\n\t\t\ttooltip,\n\t\t\ticon,\n\t\t\tariaLabel,\n\t\t\tloadingMessage,\n\t\t\tstyle,\n\t\t\t...rest\n\t\t},\n\t\tref,\n\t) {\n\t\tconst innerRef = useObjectRef(ref);\n\n\t\tconst ariaId = React.useId();\n\t\tconst buttonId = React.useId();\n\n\t\tconst ariaMessage = React.useMemo(\n\t\t\t() => (busy ? loadingMessage || 'Loading...' : ''),\n\t\t\t[busy, loadingMessage],\n\t\t);\n\n\t\tconst crunchedClasses = cn(\n\t\t\t{\n\t\t\t\tbutton: !tertiary ? true : '',\n\t\t\t\tprimary:\n\t\t\t\t\t!custom && !secondary && !tertiary && !success && !danger && primary,\n\t\t\t\tdisabled: disabled || busy,\n\t\t\t\tbusy,\n\t\t\t\tsecondary,\n\t\t\t\ttertiary,\n\t\t\t\tsuccess,\n\t\t\t\tdanger,\n\t\t\t\tsmall,\n\t\t\t},\n\t\t\tclassName,\n\t\t);\n\n\t\tconst styleAttr: React.CSSProperties | undefined = tertiary\n\t\t\t? { all: icon ? 'unset' : 'initial', ...style }\n\t\t\t: style;\n\t\tconst iconProps = tertiary ? { disabled } : {};\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst stopPropagation = (e: any) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t};\n\n\t\tReact.useEffect(() => {\n\t\t\tif (disabled || busy) {\n\t\t\t\tinnerRef.current?.addEventListener('click', stopPropagation);\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tif (disabled || busy) {\n\t\t\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t\t\t\tinnerRef.current?.removeEventListener('click', stopPropagation);\n\t\t\t\t}\n\t\t\t};\n\t\t}, [disabled, busy, innerRef]);\n\n\t\treturn (\n\t\t\t<div className=\"button-wrapper\">\n\t\t\t\t<button\n\t\t\t\t\tref={innerRef}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tdata-id={buttonId}\n\t\t\t\t\tdata-component=\"Button\"\n\t\t\t\t\tclassName={crunchedClasses}\n\t\t\t\t\taria-describedby={ariaId}\n\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\tstyle={styleAttr}\n\t\t\t\t\taria-label={ariaLabel || rest['aria-label']}\n\t\t\t\t\t{...rest}\n\t\t\t\t>\n\t\t\t\t\t{icon && <Icon name={icon} {...iconProps} />}\n\t\t\t\t\t<span\n\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\taria-atomic=\"false\"\n\t\t\t\t\t\taria-relevant=\"additions text\"\n\t\t\t\t\t\tclassName=\"sr-only\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ariaMessage}\n\t\t\t\t\t</span>\n\t\t\t\t\t{children}\n\t\t\t\t</button>\n\t\t\t\t{tooltip ? (\n\t\t\t\t\t<div className=\"tooltip\" role=\"tooltip\" id={ariaId}>\n\t\t\t\t\t\t{tooltip}\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t\t{!tooltip && !busy && disabled ? (\n\t\t\t\t\t<div className=\"tooltip\" role=\"tooltip\" id={ariaId}>\n\t\t\t\t\t\tThis button is disabled\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t);\n\t},\n);\n","import React from 'react';\nimport cn from 'classnames';\nimport {\n\tFontAwesomeIcon,\n\tFontAwesomeIconProps,\n} from '@fortawesome/react-fontawesome';\nimport './styles.css';\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport { fas } from '@fortawesome/free-solid-svg-icons';\n\nlibrary.add(fas);\n\nexport interface IconProps extends Omit<FontAwesomeIconProps, 'icon'> {\n\tname: string;\n\tremoveMargin?: boolean;\n\tnoMargin?: boolean;\n\tclassName?: string;\n}\n\nexport const Icon = React.memo(function Icon(props: IconProps) {\n\tconst { className, removeMargin, noMargin, name, ...rest } = props;\n\n\tif (!name) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<FontAwesomeIcon\n\t\t\tdata-component=\"Icon\"\n\t\t\tclassName={cn(\n\t\t\t\t'icon',\n\t\t\t\t{\n\t\t\t\t\tnoMargin: removeMargin || noMargin,\n\t\t\t\t},\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t// @ts-expect-error type mismatch\n\t\t\ticon={name}\n\t\t\t{...rest}\n\t\t/>\n\t);\n});\n","import { loginWithRedirect } from '@/utils/auth/index.js';\nimport { Button, ButtonProps } from '@/components/button';\n\nimport './styles.css';\n\ninterface LoginButtonProps extends ButtonProps {\n\ttenantId?: string;\n\tlabel?: string;\n}\n\nexport const LoginButton = ({ tenantId, label, ...rest }: LoginButtonProps) => {\n\treturn (\n\t\t<Button\n\t\t\tclassName=\"loginButton\"\n\t\t\tonClick={() => loginWithRedirect({ tenantId })}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{label || 'Log In'}\n\t\t</Button>\n\t);\n};\n","import React from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { LoadingIndicator } from '../../loading-indicator/index.js';\nimport { IconButton } from '../../icon-button/index.js';\n\nimport './styles.css';\n\nconst defaultDictionary = {\n\tdropFilesText: 'Drop files here to upload',\n\tdivider: 'or',\n\tbuttonText: 'Upload File',\n\tuploadingText: 'Uploading attachment...',\n};\n\nexport interface FileUploadProps {\n\tchildren?: React.ReactNode;\n\tclassName?: string;\n\tdictionary?: typeof defaultDictionary;\n\tdisabled?: boolean;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tonDrop?: (acceptedFiles: File[], fileRejections: any[], event: any) => void;\n\tloading?: boolean;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdropzoneOptions?: Record<string, any>;\n\tonFocus?: () => void;\n\tonBlur?: () => void;\n\tid?: string;\n}\n\nexport const FileUpload = React.forwardRef<HTMLDivElement, FileUploadProps>(\n\tfunction FileUpload(props, ref) {\n\t\tconst {\n\t\t\tclassName = '',\n\t\t\tdisabled = false,\n\t\t\tonDrop,\n\t\t\tloading = false,\n\t\t\tdictionary: dctnr,\n\t\t\tdropzoneOptions,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\tid,\n\t\t\tchildren,\n\t\t} = props;\n\n\t\tconst { getRootProps, getInputProps, open } = useDropzone({\n\t\t\tnoClick: true,\n\t\t\tnoKeyboard: true,\n\t\t\tdisabled: disabled || loading,\n\t\t\tonDrop,\n\t\t\t...dropzoneOptions,\n\t\t});\n\n\t\tconst dictionary = { ...defaultDictionary, ...dctnr };\n\n\t\tReact.useEffect(() => {\n\t\t\tconst fileUpload = document.querySelector('.file-upload');\n\t\t\tif (fileUpload) {\n\t\t\t\tfileUpload.removeAttribute('role');\n\t\t\t}\n\t\t}, []);\n\n\t\treturn (\n\t\t\t<div ref={ref} {...getRootProps({ className: `file-upload ${className}` })}>\n\t\t\t\t<input {...getInputProps()} />\n\t\t\t\t{loading ? (\n\t\t\t\t\t<div className=\"file-upload__content\">\n\t\t\t\t\t\t<LoadingIndicator />\n\t\t\t\t\t\t<span className=\"file-upload__uploading-text\">\n\t\t\t\t\t\t\t{dictionary.uploadingText}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<div className=\"file-upload__content\">\n\t\t\t\t\t\t<span className=\"file-upload__drop-files-text\">\n\t\t\t\t\t\t\t{dictionary.dropFilesText}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span>{dictionary.divider}</span>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\ticon=\"upload\"\n\t\t\t\t\t\t\tclassName=\"file-upload__select-file-button\"\n\t\t\t\t\t\t\tonClick={open}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tonFocus={onFocus}\n\t\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t\t\tid={id}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{dictionary.buttonText}\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{React.isValidElement(children)\n\t\t\t\t\t? React.cloneElement(children as React.ReactElement, {\n\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t})\n\t\t\t\t\t: children}\n\t\t\t</div>\n\t\t);\n\t},\n);\n","import React from 'react';\nimport cn from 'classnames';\nimport './styles.css';\n\nexport function LoadingIndicator(\n\tprops: React.DetailedHTMLProps<\n\t\tReact.HTMLAttributes<HTMLDivElement>,\n\t\tHTMLDivElement\n\t>,\n) {\n\treturn (\n\t\t<div\n\t\t\t{...props}\n\t\t\trole=\"status\"\n\t\t\tdata-component=\"LoadingIndicator\"\n\t\t\tclassName={cn('loading-indicator', props.className)}\n\t\t>\n\t\t\t<svg\n\t\t\t\tversion=\"1.1\"\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\txmlnsXlink=\"http://www.w3.org/1999/xlink\"\n\t\t\t\tx=\"0px\"\n\t\t\t\ty=\"0px\"\n\t\t\t\twidth=\"64px\"\n\t\t\t\theight=\"64px\"\n\t\t\t\tviewBox=\"0 0 64 64\"\n\t\t\t\txmlSpace=\"preserve\"\n\t\t\t>\n\t\t\t\t<circle\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"var(--color-primary)\"\n\t\t\t\t\tstrokeWidth=\"4\"\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeDasharray=\"90, 150\"\n\t\t\t\t\tcx=\"32\"\n\t\t\t\t\tcy=\"32\"\n\t\t\t\t\tr=\"28\"\n\t\t\t\t>\n\t\t\t\t\t<animateTransform\n\t\t\t\t\t\tattributeType=\"xml\"\n\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\ttype=\"rotate\"\n\t\t\t\t\t\tfrom=\"0 32 32\"\n\t\t\t\t\t\tto=\"360 32 32\"\n\t\t\t\t\t\tdur=\"0.6s\"\n\t\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\t/>\n\t\t\t\t</circle>\n\t\t\t</svg>\n\t\t\t<span className=\"sr-only\">Loading...</span>\n\t\t</div>\n\t);\n}\n","import React from 'react';\nimport cn from 'classnames';\nimport { Button, ButtonProps } from '../button/index.js';\nimport { Icon } from '../icon/index.js';\n\nimport './styles.css';\n\nexport interface IconButtonProps extends ButtonProps {\n\ticon: string;\n\tchildren?: React.ReactNode;\n\tlabelPosition?: 'left' | 'right';\n}\n\nexport const IconButton = ({\n\tchildren,\n\ticon,\n\tlabelPosition,\n\tclassName,\n\t...rest\n}: IconButtonProps) => {\n\tconst classNames = cn(\n\t\t'iconButton',\n\t\t{\n\t\t\tlabelLeft: children && labelPosition === 'left',\n\t\t\tlabelRight: children && labelPosition !== 'left',\n\t\t\tlabelNo: !children,\n\t\t},\n\t\tclassName,\n\t);\n\n\treturn (\n\t\t<Button className={classNames} {...rest}>\n\t\t\t{children}\n\t\t\t<Icon name={icon} />\n\t\t</Button>\n\t);\n};\n","import React from 'react';\nimport { createPortal } from 'react-dom';\nimport FocusTrap from 'focus-trap-react';\nimport { isFunction } from '@/utils/type-checks/index.js';\nimport { generateId } from '@/utils/helpers';\nimport { Button } from '../button/index.js';\n\nimport './styles.css';\n\nconst focusTrapOptions = {\n\tfallbackFocus: '.alert-dialog__modal__title',\n};\n\ninterface AlertDialogProps {\n\ttitle: React.ReactNode;\n\tdescription: React.ReactNode;\n\tisOpen: boolean;\n\tonCancel: () => void;\n\thideCancel?: boolean;\n\tonConfirm: () => void;\n\tcancelText?: string;\n\tconfirmText?: string;\n}\n\nexport const AlertDialog = React.forwardRef<HTMLDivElement, AlertDialogProps>(\n\tfunction AlertDialog(props, ref) {\n\t\tconst {\n\t\t\tisOpen = false,\n\t\t\tonCancel,\n\t\t\tonConfirm,\n\t\t\ttitle,\n\t\t\tdescription,\n\t\t\tcancelText = 'Cancel',\n\t\t\tconfirmText = 'Confirm',\n\t\t\thideCancel,\n\t\t} = props;\n\n\t\tReact.useEffect(() => {\n\t\t\tif (isOpen) {\n\t\t\t\tdocument.addEventListener('keydown', handleKeyDown);\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener('keydown', handleKeyDown);\n\t\t\t};\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t}, [isOpen]);\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst handleKeyDown = (event: any) => {\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tif (isFunction(onCancel)) {\n\t\t\t\t\tonCancel();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (isOpen) {\n\t\t\tconst titleId = generateId('alert-dialog-title');\n\t\t\tconst descriptionId = generateId('alert-dialog-description');\n\n\t\t\treturn createPortal(\n\t\t\t\t<div ref={ref} role=\"presentation\" className=\"alert-dialog__presentation\">\n\t\t\t\t\t<FocusTrap focusTrapOptions={focusTrapOptions}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\trole=\"alertdialog\"\n\t\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t\t\t\taria-describedby={descriptionId}\n\t\t\t\t\t\t\tclassName=\"alert-dialog__modal\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<h1 id={titleId} className=\"alert-dialog__modal__title\">\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t\t<p id={descriptionId} className=\"alert-dialog__modal__description\">\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<div className=\"alert-dialog__modal__actions\">\n\t\t\t\t\t\t\t\t{!hideCancel && (\n\t\t\t\t\t\t\t\t\t<Button secondary onClick={onCancel}>\n\t\t\t\t\t\t\t\t\t\t{cancelText}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<Button onClick={onConfirm}>{confirmText}</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</FocusTrap>\n\t\t\t\t</div>,\n\t\t\t\tdocument.body,\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t},\n);\n","import React, { ForwardedRef, forwardRef, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport FocusTrap from 'focus-trap-react';\nimport { Button, ButtonProps } from '../button/index.js';\nimport { generateId } from '@/utils/helpers';\n\nimport './modal-dialog.css';\n\n// Define the props interface for ModalDialog\nexport interface ModalDialogProps {\n\t/** The title of the modal dialog */\n\ttitle: string | React.ReactElement | React.ReactNode;\n\t/** Whether the modal dialog is open */\n\tisOpen: boolean;\n\t/** A callback function called when the cancel button is clicked */\n\tonCancel: (event: React.SyntheticEvent) => void;\n\t/** A callback function called when the confirm button is clicked */\n\tonConfirm: (event: React.SyntheticEvent) => void;\n\t/** The text for the cancel button */\n\tcancelText?: string;\n\t/** The text for the confirm button */\n\tconfirmText?: string;\n\t/** The id CSS selector for the element to focus when the modal dialog opens */\n\tinitialFocus?: string;\n\t/** Additional CSS class names for the presentation element */\n\tpresentationClassName?: string;\n\t/** Additional CSS class names for the dialog element */\n\tdialogClassName?: string;\n\t/** Additional props to pass to the confirm button */\n\tconfirmButtonProps?: ButtonProps;\n\t/** ARIA describedby attribute for accessibility */\n\tariaDescribedBy?: string;\n\t/** Content to be rendered inside the modal */\n\tchildren?: React.ReactNode;\n\t/** Actions to be rendered inside the modal */\n\tactions?: React.ReactNode;\n}\n\n// Define the component using forwardRef with TypeScript\nexport const ModalDialog = forwardRef(function ModalDialog(\n\t{\n\t\tisOpen,\n\t\tonCancel,\n\t\tonConfirm,\n\t\ttitle,\n\t\tchildren,\n\t\tactions,\n\t\tcancelText = 'Cancel',\n\t\tconfirmText = 'Confirm',\n\t\tinitialFocus,\n\t\tpresentationClassName = '',\n\t\tdialogClassName = '',\n\t\tconfirmButtonProps = {},\n\t\tariaDescribedBy,\n\t}: ModalDialogProps,\n\tref: ForwardedRef<HTMLDivElement>,\n) {\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\tdocument.addEventListener('keydown', handleKeyDown);\n\t\t}\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', handleKeyDown);\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [isOpen]);\n\n\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\tif (event.key === 'Escape') {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tonCancel(event as any);\n\t\t}\n\t};\n\n\tif (isOpen) {\n\t\tconst titleId = generateId('modal-dialog-title');\n\n\t\treturn createPortal(\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"presentation\"\n\t\t\t\tclassName={`modal-dialog__presentation ${presentationClassName}`}\n\t\t\t>\n\t\t\t\t<FocusTrap\n\t\t\t\t\tfocusTrapOptions={{\n\t\t\t\t\t\tinitialFocus,\n\t\t\t\t\t\tfallbackFocus: '.modal-dialog__modal__content',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\tclassName={`modal-dialog__modal ${dialogClassName}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"modal-dialog__modal__header\">\n\t\t\t\t\t\t\t<h2 id={titleId} className=\"modal-dialog__modal__title\">\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\taria-label=\"close\"\n\t\t\t\t\t\t\t\tclassName=\"modal-dialog__modal__close-button\"\n\t\t\t\t\t\t\t\tonClick={onCancel}\n\t\t\t\t\t\t\t\tsmall\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\twidth=\"17\"\n\t\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 17 16\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\td=\"M15.625 13.5781C16.0469 14.0469 16.0469 14.75 15.625 15.1719C15.1562 15.6406 14.4531 15.6406 14.0312 15.1719L8.5 9.59375L2.92188 15.1719C2.45312 15.6406 1.75 15.6406 1.32812 15.1719C0.859375 14.75 0.859375 14.0469 1.32812 13.5781L6.90625 8L1.32812 2.42188C0.859375 1.95312 0.859375 1.25 1.32812 0.828125C1.75 0.359375 2.45312 0.359375 2.875 0.828125L8.5 6.45312L14.0781 0.875C14.5 0.40625 15.2031 0.40625 15.625 0.875C16.0938 1.29688 16.0938 2 15.625 2.46875L10.0469 8L15.625 13.5781Z\"\n\t\t\t\t\t\t\t\t\t\tfill=\"white\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"modal-dialog__modal__content\">{children}</div>\n\t\t\t\t\t\t<div className=\"modal-dialog__modal__actions\">\n\t\t\t\t\t\t\t{actions || (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<Button secondary onClick={onCancel}>\n\t\t\t\t\t\t\t\t\t\t{cancelText}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t<Button onClick={onConfirm} {...confirmButtonProps}>\n\t\t\t\t\t\t\t\t\t\t{confirmText}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</FocusTrap>\n\t\t\t</div>,\n\t\t\tdocument.body,\n\t\t);\n\t}\n\n\treturn null;\n});\n","import React, { useState } from 'react';\nimport { merge } from 'lodash-es';\nimport { UploadResource } from '../../attachments-form.js';\nimport { TableRow } from './table-row.js';\nimport './styles.css';\n\nexport interface TableFileListProps {\n\tfiles: UploadResource[];\n\tdisabled?: boolean;\n\tremoveFile?: (file: UploadResource) => void;\n\tdictionary?: Partial<typeof defaultDictionary>;\n\tallowToRemoveByRoles?: string[];\n}\n\nconst defaultDictionary = {\n\tcolumns: ['Attachment Name', 'Date and Time Uploaded', 'Uploaded By', 'File Size'],\n\tremoveFileButtonLabel: 'Remove file',\n};\n\nexport function TableFileList({\n\tfiles,\n\tdisabled = false,\n\tremoveFile,\n\tdictionary: dctnr,\n\tallowToRemoveByRoles,\n}: TableFileListProps) {\n\tconst [order, setOrder] = useState<'ascending' | 'descending'>('descending');\n\n\tif (!files?.length) {\n\t\treturn null;\n\t}\n\n\tconst filesOrdered = [...files].sort((a, b) => {\n\t\tconst leftCreatedAt = new Date(a.createdAt).getTime();\n\t\tconst rightCreatedAt = new Date(b.createdAt).getTime();\n\n\t\treturn order === 'ascending'\n\t\t\t? leftCreatedAt - rightCreatedAt\n\t\t\t: rightCreatedAt - leftCreatedAt;\n\t});\n\n\tconst dictionary = merge({}, defaultDictionary, dctnr);\n\n\treturn (\n\t\t<table className=\"table-file-list\">\n\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t\t<th>{dictionary.columns[0]}</th>\n\t\t\t\t\t<th\n\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\tsetOrder(order === 'descending' ? 'ascending' : 'descending')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName={`sorted ${order}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{dictionary.columns[1]}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th>{dictionary.columns[2]}</th>\n\t\t\t\t\t<th>{dictionary.columns[3]}</th>\n\t\t\t\t\t<th />\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t{filesOrdered.map((file) => (\n\t\t\t\t\t<TableRow\n\t\t\t\t\t\tkey={file.id}\n\t\t\t\t\t\tfile={file}\n\t\t\t\t\t\tremoveFile={removeFile}\n\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tallowToRemoveByRoles={allowToRemoveByRoles}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</tbody>\n\t\t</table>\n\t);\n}\n","import React, { useCallback } from 'react';\nimport { prettierBytes } from '@transloadit/prettier-bytes';\nimport FormattedDatetime from '../../../formatted/formatted-datetime/index.js';\nimport { UploadService as api } from '@/services/upload-s3';\nimport { useTenantContext } from '@/context/tenant';\n\nimport { TableRowActions } from './table-row-actions.js';\nimport './styles.css';\n\n/*\n{\n \"id\": \"PRC-516c5173-403d-11ee-bb45-02c07f11fdd3\",\n \"url\": \"http://engage.ft.cayuse.com/process-api/runtime/tasks/TSK-2df0feb3-f928-11ed-8feb-0ae4042f13d9/attachments/PRC-516c5173-403d-11ee-bb45-02c07f11fdd3\",\n \"name\": \"Attachment name\",\n \"userId\": \"420f632a-f65e-4314-a0f4-8ac39836d103\",\n \"type\": \"platform\",\n \"taskUrl\": \"http://engage.ft.cayuse.com/process-api/runtime/tasks/TSK-2df0feb3-f928-11ed-8feb-0ae4042f13d9\",\n \"processInstanceUrl\": null,\n \"externalUrl\": \"platform://1573c8fc-efc9-4501-a39e-fbad36ab106c\",\n \"contentUrl\": null,\n \"time\": \"2023-08-21T16:10:59.830Z\"\n}\n{\n\t\"uppyId\": \"uppy-/11th/edition//charles/zastrow//karen/k//kirst/ashman//sarah/l//hessenauer///understanding/human/behavior/and/the/social/environment//7//pdf-18-10-19-10-10-2v-10-10-1e-10-1d-2v-10-10-1e-10-10-1d-10-10-10-10-10-10-10-10-18-19-1e-application/pdf-23279816-1692749391485\",\n\t\"id\": \"97751d0f-2b84-435a-8eb6-eeb746865ca6\",\n\t\"name\": \"(11th Edition) Charles Zastrow_ Karen K. Kirst-Ashman_ Sarah L. Hessenauer - Understanding Human Behavior and the Social Environment (7).pdf\",\n\t\"size\": 23279816,\n\t\"downloadUrl\": \"https://duploservices-ftadmin-cayuse-admin-presigned-012510008006.s3.amazonaws.com/04c96aca-ec60-4fc0-9fb3-217fe3198167/97751d0f-2b84-435a-8eb6-eeb746865ca6-%2811th%20Edition%29%20Charles%20Zastrow_%20Karen%20K.%20Kirst-Ashman_%20Sarah%20L.%20Hessenauer%20-%20Understanding%20Human%20Behavior%20and%20the%20Social%20Environment%20%287%29.pdf?response-content-disposition=attachment%3B%20filename%3D%22%2811th%20Edition%29%20Charles%20Zastrow_%20Karen%20K.%20Kirst-Ashman_%20Sarah%20L.%20Hessenauer%20-%20Understanding%20Human%20Behavior%20and%20the%20Social%20Environment%20%287%29.pdf%22&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEL3%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJHMEUCIQDI0%2BUbxcBMXIPxsfN5M4Cjh995tskWBx9KrcZ%2F8ZizkQIgOvt26e2bibkaT6h%2FihX6PRt3AiSP7wHud%2Bt3ZVHJLPwqwwUIhv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgwwMTI1MTAwMDgwMDYiDLsUn9iHijJyfjFJhSqXBR%2BtcUgzx2wqq%2B9umIVcBn6SAnbu9CGxaB%2Bj5%2FgbKBqh9YjUyMp6jKXZYiapqArivrINUSidrae0NRWwARZTk%2Fpf0WNf8DqLJMZWOaOhbgI0iHDD39kbJxD55O8u1MUEb6isf18XHEb9ttUnBky%2F%2F0cYnZp8VuTXr4HOkdmmaCnggnVuhu9zlLd11NVWecZAcI18j2LeUMGOT2x0LyO3RcKRUeinm9ChykiMIBxG6l%2FvfuuOFWNX2JokL8B0jwA%2BcbI97%2B%2Bm3k9nd4f5SzAzSWE06YEsRZGcyhDmayVCRltVF4GvVCVOoxaumUjD9pPPHnJqQV3QQKouCXuDCFkImhEA1HG%2F6PE7XukJLg5HvA2s1ifgLqrgpU4rrXPP%2F8Ujs3iXm736C2T2eDLtiCckjXC0nWxfa1mXJbIyLgFuyhKJJN5TvZVL1mpCY8MKkT7KP3Bl34fCmuDLfJMhIjEQi5jX8BsO%2FoQazUNekAuWuT%2BDVqz2aOFc46nJjj0S%2FUv8tUElag7QiMhcyzzqJiiDq%2BTsO8Mz2awtE1GcHzRj%2BrJrqtpBiVwKhSbTxcrz3e0IEVVi1pAwEjsL%2BL834l87ykXbae%2BXxLrXi7UEMBO2bMMV6e%2BZr0DwzZJTSurEs9o6%2F3D1NmugP5ZfgNMvqgJcrVwk5xXlSD3BQx3mfcqZGH144R%2FzhvRbhEL9iqGxW5pwMv6wkR4S%2BFw%2Fc85no2O%2FhZFN%2F7KCnRAMwttLvSTwnt5sz08aC6HeFLZqwusnjGsKLPVLszdPTwE1oLArH7gLiVaDK37dHfTxYbb0oRMkmThVL%2F0G6JhqO8OccU3%2By5qv11Zs01dwdqe27ap4FJUQ%2F9Yj4kxDnBX1x54htDegLOCRuX4tPLhHYzCxyLCnBjqxAd8qua9VpQ5OwoeYVGRW3eeGlnhBmHR2Rfs%2Bt39dcI%2BhobfNzVKEInwvPK7VNdJ666kx2c82wHnp521e0DVmJEJPLbCrm7FKo8Xy3y6MTpj28mSXp80vWO50XhxE8PeUtHeV1HPj%2BbgZ%2BhYiGCdGgUo8CN%2Bn7x3dzJZfrjj7o38lDw%2FevApPeZPVgKszpafS9zYPUKGG%2FbGXZo%2Fw9fGPaLzNJl6N1tBkseCKPmzPHLsMIQ%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20230828T051942Z&X-Amz-SignedHeaders=host&X-Amz-Expires=599&X-Amz-Credential=ASIAQF2NHSLDFE3RUE5R%2F20230828%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=e71ef13f728517139b895c9c190ced02c87b660e4cf8ed8a30a3b02f45912f9e\",\n\t\"uploadedBy\": \"420f632a-f65e-4314-a0f4-8ac39836d103\",\n\t\"createdAt\": \"2023-08-28T05:19:39.120+0000\",\n\t\"finalizedAt\": null,\n\t\"completedAt\": \"2023-08-28T05:19:41.765+0000\",\n\t\"tenantId\": \"04c96aca-ec60-4fc0-9fb3-217fe3198167\",\n\t\"type\": \"application/pdf\",\n\t\"uploadedByInfo\": {\n\t\t\"firstName\": \"Jeff\",\n\t\t\"lastName\": \"Uhlorn\"\n\t},\n\t\"progress\": {\n\t\t\"uploadStarted\": 1693199978792,\n\t\t\"uploadComplete\": true,\n\t\t\"percentage\": 100,\n\t\t\"bytesUploaded\": 23279816,\n\t\t\"bytesTotal\": 23279816,\n\t\t\"postprocess\": null\n\t},\n\t\"uploadMetadataId\": \"97751d0f-2b84-435a-8eb6-eeb746865ca6\"\n}\n*/\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TableRow = (props: any) => {\n\tconst { file, removeFile, disabled, dictionary, allowToRemoveByRoles } = props;\n\n\tconst ctx = useTenantContext();\n\n\tconst isUploaded = file.id && file.state?.status === 'completed';\n\n\tconst downloadFile = useCallback(() => {\n\t\tapi.download(file.id, file.fileName);\n\t}, [file]);\n\n\treturn (\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t{isUploaded ? (\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\tonClick={downloadFile}\n\t\t\t\t\t\tclassName=\"table-file-list__download-link\"\n\t\t\t\t\t\taria-label={`${file.fileName} ${\n\t\t\t\t\t\t\tfile.fileSize && prettierBytes(file.fileSize)\n\t\t\t\t\t\t}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\theight=\"1em\"\n\t\t\t\t\t\t\tviewBox=\"0 0 512 512\"\n\t\t\t\t\t\t\tfill=\"#0076B6\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path d=\"M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t<span>{file.fileName}</span>\n\t\t\t\t\t</a>\n\t\t\t\t) : (\n\t\t\t\t\t<p className=\"table-file-list__download-link__preview\">\n\t\t\t\t\t\t<span>{file.fileName}</span>\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</td>\n\t\t\t<td>\n\t\t\t\t<FormattedDatetime\n\t\t\t\t\tdate={file.createdAt}\n\t\t\t\t\ttimezone={ctx?.data?.tenant?.timezone}\n\t\t\t\t/>\n\t\t\t</td>\n\n\t\t\t<td>\n\t\t\t\t{file.uploadedByInfo\n\t\t\t\t\t? `${file.uploadedByInfo.firstName} ${file.uploadedByInfo.lastName}`\n\t\t\t\t\t: '--'}\n\t\t\t</td>\n\t\t\t<td>\n\t\t\t\t<span>\n\t\t\t\t\t{file.state?.status === 'uploading' &&\n\t\t\t\t\t\t`${prettierBytes(file.state.uploaded)}/`}\n\t\t\t\t\t{file.fileSize ? prettierBytes(file.fileSize) : '--'}\n\t\t\t\t</span>\n\t\t\t</td>\n\t\t\t<td>\n\t\t\t\t<TableRowActions\n\t\t\t\t\tfile={file}\n\t\t\t\t\tremoveFile={removeFile}\n\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\tisUploaded={isUploaded}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tallowToRemoveByRoles={allowToRemoveByRoles}\n\t\t\t\t/>\n\t\t\t</td>\n\t\t</tr>\n\t);\n};\n","import React from 'react';\nimport { format as formatter, parseISO, isValid } from 'date-fns';\nimport { utcToZonedTime, format as formatWithTz } from 'date-fns-tz';\nimport { isNonEmptyString } from '@/utils/type-checks';\nimport { getDatetimeFormat } from '@/utils/helpers';\n\n// Define the props interface\nexport interface FormattedDateProps {\n\tdate: Date | string;\n\tformat?: string;\n\ttimezone?: string;\n\tfallback?: string;\n\tisDateTime?: boolean;\n\ttenantFormat?: string;\n\ttenantTimezone?: string;\n}\n\n/**\n * Renders a formatted date component.\n *\n * @param props - The component props.\n * @returns - The formatted date component.\n */\nexport const FormattedDate = React.memo(function FormattedDate(\n\tprops: FormattedDateProps,\n) {\n\tconst {\n\t\tdate,\n\t\tformat: incomingFormat,\n\t\ttimezone: incomingTimezone,\n\t\tfallback = '--',\n\t\tisDateTime,\n\t\ttenantFormat,\n\t\ttenantTimezone,\n\t\t...rest\n\t} = props;\n\n\t// Determine the format to use for the date\n\tconst format: string = isNonEmptyString(incomingFormat)\n\t\t? incomingFormat\n\t\t: (tenantFormat ?? getDatetimeFormat().date);\n\n\tlet parsedDate: Date;\n\n\tif (isDateTime) {\n\t\t// Parse the date to an ISO format\n\t\tparsedDate =\n\t\t\tdate instanceof Date\n\t\t\t\t? new Date(date.toISOString().replace('Z', ''))\n\t\t\t\t: parseISO(date);\n\t} else {\n\t\t// do not format with ISO when not datetime\n\t\tif (date instanceof Date) {\n\t\t\tparsedDate = date;\n\t\t} else {\n\t\t\t// when date string does not have time value, parse it to a date without time\n\t\t\tif (date.includes('00:00:00.000') || date.includes('00:00:00Z')) {\n\t\t\t\tparsedDate = parseISO(date.replace(/T.*$/, ''));\n\t\t\t} else {\n\t\t\t\tparsedDate = parseISO(date);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Determine the timezone to use\n\tconst timezone: string | undefined = incomingTimezone ?? tenantTimezone;\n\n\t// Format the date based on the provided format and timezone\n\tlet formattedDate: string = fallback;\n\tif (timezone) {\n\t\ttry {\n\t\t\tformattedDate = formatWithTz(utcToZonedTime(date, timezone), format);\n\t\t} catch (error) {\n\t\t\tconsole.error('FormattedDate component error:', error);\n\t\t\tformattedDate = formatter(parsedDate, format);\n\t\t}\n\t} else if (isValid(parsedDate)) {\n\t\tformattedDate = formatter(parsedDate, format);\n\t}\n\n\tif (isNonEmptyString(formattedDate)) {\n\t\treturn (\n\t\t\t<time\n\t\t\t\tdateTime={formattedDate}\n\t\t\t\tdata-component={isDateTime ? 'FormattedDateTime' : 'FormattedDate'}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t{formattedDate}\n\t\t\t</time>\n\t\t);\n\t}\n\n\treturn null;\n});\n","import React from 'react';\nimport { isNonEmptyString } from '@/utils/type-checks';\nimport { getDatetimeFormat } from '@/utils/helpers';\nimport { FormattedDate } from '../formatted-date/index.js';\n\nexport interface FormattedDatetimeProps {\n\tdate: Date | string;\n\tformat?: string;\n\ttenantFormat?: string;\n\tfallback?: string;\n\ttenantTimezone?: string;\n\ttimezone?: string;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t[key: string]: any; // For rest props\n}\n\n/**\n * Component to display a formatted date and time.\n *\n * @component\n * @param props - The component props.\n * @returns - The rendered FormattedDate component.\n */\nexport const FormattedDatetime: React.FC<FormattedDatetimeProps> = ({\n\tformat: incomingFormat,\n\ttenantFormat,\n\t...rest\n}) => {\n\t// Get the default date and time format\n\tconst dateTimeFormat = getDatetimeFormat();\n\n\t// Determine the format to use\n\tconst format: string = isNonEmptyString(incomingFormat)\n\t\t? incomingFormat\n\t\t: tenantFormat || `${dateTimeFormat.date} ${dateTimeFormat.time}`;\n\n\treturn <FormattedDate format={format} {...rest} />;\n};\n","import { FormattedDatetime, FormattedDatetimeProps } from './formatted-datetime.js';\n\nexport { FormattedDatetime };\nexport type { FormattedDatetimeProps };\nexport default FormattedDatetime;\n","import React from 'react';\nimport { isFunction, isNonEmptyArray } from '@/utils';\nimport { IconButton } from '../../../icon-button/index.js';\nimport { useTenantContext } from '@/context/tenant';\n\nimport './styles.css';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TableRowActions = (props: any) => {\n\tconst { removeFile, file, disabled, dictionary, allowToRemoveByRoles } = props;\n\n\tconst ctx = useTenantContext();\n\n\tconst allowedToRemove = React.useMemo(() => {\n\t\tlet allowToRemove = false;\n\n\t\tif (file.uploadedBy === ctx.data.user.id) {\n\t\t\tallowToRemove = true;\n\t\t} else if (!file.referenceId) {\n\t\t\t// it was never submitted\n\t\t\tallowToRemove = true;\n\t\t} else if (isNonEmptyArray(allowToRemoveByRoles)) {\n\t\t\tconst hasRoleAllowToRemove = ctx.data.groups.find((f) =>\n\t\t\t\tallowToRemoveByRoles.includes(f.groupGroupName),\n\t\t\t);\n\t\t\tallowToRemove = Boolean(hasRoleAllowToRemove);\n\t\t}\n\n\t\treturn allowToRemove;\n\t}, [file, allowToRemoveByRoles, ctx.data]);\n\n\tif (!allowedToRemove) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<IconButton\n\t\t\ttertiary\n\t\t\ticon=\"trash\"\n\t\t\tdisabled={disabled}\n\t\t\tclassName=\"table-file-list__remove-file-button\"\n\t\t\tdata-testid=\"trash-icon-button\"\n\t\t\taria-label={`${dictionary.removeFileButtonLabel} ${file.name}`}\n\t\t\ttitle={`${dictionary.removeFileButtonLabel} ${file.name}`}\n\t\t\tonClick={() => {\n\t\t\t\tif (isFunction(removeFile)) {\n\t\t\t\t\tremoveFile(file, 'removed-by-user');\n\t\t\t\t}\n\t\t\t}}\n\t\t/>\n\t);\n};\n","export const baseDictionary = {\n\tdescription:\n\t\t'Add up to nine (9) attachments per task. File size limit is 75 MB per attachment. Attachments with file type .exe cannot be accepted.',\n\tfileInput: {\n\t\tdropFilesText: 'Drop files here to upload',\n\t\tdivider: 'or',\n\t\tbuttonText: 'Upload File',\n\t\tuploadingText: 'Uploading attachment...',\n\t},\n\ttableFileList: {\n\t\tcolumns: [\n\t\t\t'Attachment Name',\n\t\t\t'Date and Time Uploaded',\n\t\t\t'Uploaded By',\n\t\t\t'File Size',\n\t\t],\n\t\tremoveFileButtonLabel: 'Remove file',\n\t},\n\tfileUploaderHook: {\n\t\texceedsSize: 'The uploaded file exceeds the %{size} limit',\n\t\texeFileTypeRestriction:\n\t\t\t'Attachments with filetype .exe cannot be accepted. Please try a different file type.',\n\t},\n\tremoveFileDialog: {\n\t\ttitle: 'Delete attachment?',\n\t\tdescription: 'Delete attachment',\n\t\tcancelText: 'Cancel',\n\t\tconfirmText: 'Delete Attachment',\n\t},\n};\n","import React from 'react';\nimport { merge } from 'lodash-es';\nimport { generateId } from '@/utils';\nimport { AttachmentsForm } from './attachments-form.js';\nimport './styles.css';\n\n// Define the dictionary shape\ninterface Dictionary {\n\tdescription?: string;\n\tfileInput?: {\n\t\tdropFilesText?: string;\n\t\tdivider?: string;\n\t\tbuttonText?: string;\n\t\tuploadingText?: string;\n\t};\n\ttableFileList?: {\n\t\tcolumns?: string[];\n\t\tremoveFileButtonLabel?: string;\n\t};\n\tfileUploaderHook?: {\n\t\texceedsSize?: string;\n\t};\n}\n\n// Define the props for AccordionAttachmentsForm\ninterface AccordionAttachmentsFormProps {\n\tfiles: File[];\n\tsetFiles: React.Dispatch<React.SetStateAction<File[]>>;\n\tsetRejections: React.Dispatch<React.SetStateAction<FileRejection[]>>;\n\tlabel?: string;\n\tdefaultOpen?: boolean;\n\tdisabled?: boolean;\n\tfileUploaderOptions?: Record<string, unknown>;\n\tallowToRemoveByRoles?: string[];\n\tonLoading?: () => void;\n\tdictionary?: Dictionary;\n}\n\n// Default dictionary values\nconst defaultDictionary: Dictionary = {\n\tdescription:\n\t\t'Add up to nine (9) attachments per task. File size limit is 75 MB per attachment. Attachments with file type .exe cannot be accepted.',\n\tfileInput: {\n\t\tdropFilesText: 'Drop files here to upload',\n\t\tdivider: 'or',\n\t\tbuttonText: 'Upload File',\n\t\tuploadingText: 'Uploading attachment...',\n\t},\n\ttableFileList: {\n\t\tcolumns: [\n\t\t\t'Attachment Name',\n\t\t\t'Date and Time Uploaded',\n\t\t\t'Uploaded By',\n\t\t\t'File Size',\n\t\t],\n\t\tremoveFileButtonLabel: 'Remove file',\n\t},\n\tfileUploaderHook: {\n\t\texceedsSize: 'The uploaded file exceeds the %{size} limit',\n\t},\n};\n\n// Define FileRejection type (based on common file upload libraries like react-dropzone)\ninterface FileRejection {\n\tfile: File;\n\terrors: Array<{ code: string; message: string }>;\n}\n\nexport const AccordionAttachmentsForm = React.forwardRef<\n\tHTMLDivElement,\n\tAccordionAttachmentsFormProps\n>(\n\t(\n\t\t{\n\t\t\tfiles,\n\t\t\tsetFiles,\n\t\t\tsetRejections,\n\t\t\tlabel = 'Add Attachments',\n\t\t\tdefaultOpen = false,\n\t\t\tdisabled = false,\n\t\t\tfileUploaderOptions,\n\t\t\tallowToRemoveByRoles,\n\t\t\tonLoading,\n\t\t\tdictionary: dctnr,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst dictionary = merge({}, defaultDictionary, dctnr);\n\n\t\tconst [open, setOpen] = React.useState<boolean>(defaultOpen);\n\n\t\tconst { buttonId, panelId } = React.useMemo(() => {\n\t\t\treturn {\n\t\t\t\tbuttonId: generateId('accordion-file-input-button'),\n\t\t\t\tpanelId: generateId('accordion-file-input-panel'),\n\t\t\t};\n\t\t}, []);\n\n\t\treturn (\n\t\t\t<div className=\"accordion-attachments-form\" data-open={open} ref={ref}>\n\t\t\t\t<div className=\"accordion-attachments-form__details\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-controls={panelId}\n\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\tdata-open={open}\n\t\t\t\t\t\tid={buttonId}\n\t\t\t\t\t\tonClick={() => setOpen((prev) => !prev)}\n\t\t\t\t\t\tclassName=\"accordion-attachments-form__details__toggle-button\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\theight=\"1em\"\n\t\t\t\t\t\t\tviewBox=\"0 0 448 512\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"accordion-attachments-form__content\"\n\t\t\t\t\trole=\"region\"\n\t\t\t\t\taria-labelledby={buttonId}\n\t\t\t\t\tdata-open={open}\n\t\t\t\t\tid={panelId}\n\t\t\t\t>\n\t\t\t\t\t<AttachmentsForm\n\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\tfiles={files}\n\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\tsetFiles={setFiles}\n\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\tsetRejections={setRejections}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tfileUploaderOptions={fileUploaderOptions}\n\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\tallowToRemoveByRoles={allowToRemoveByRoles}\n\t\t\t\t\t\tonLoading={onLoading}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\n// Optional: Set display name for better debugging\nAccordionAttachmentsForm.displayName = 'AccordionAttachmentsForm';\n","import React from 'react';\nimport './styles.css';\n\nexport interface AccordionFormWrapperProps {\n\tlabel: string;\n\tdefaultOpen?: boolean;\n\tdisabled?: boolean;\n\tchildren: React.ReactNode;\n}\n\nexport const AccordionFormWrapper = React.forwardRef<\n\t{ isOpen: boolean; setOpen: React.Dispatch<React.SetStateAction<boolean>> },\n\tAccordionFormWrapperProps\n>(function AccordionFormWrapper(props, ref) {\n\tconst { children, label, defaultOpen = false, disabled } = props;\n\n\tconst [open, setOpen] = React.useState(defaultOpen);\n\tconst buttonId = React.useId();\n\tconst panelId = React.useId();\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"accordion-form-wrapper\"\n\t\t\tdata-open={open}\n\t\t\tref={(\n\t\t\t\t_ref:\n\t\t\t\t\t| null\n\t\t\t\t\t| (HTMLDivElement & {\n\t\t\t\t\t\t\tisOpen: boolean;\n\t\t\t\t\t\t\tsetOpen: React.Dispatch<React.SetStateAction<boolean>>;\n\t\t\t\t\t }),\n\t\t\t) => {\n\t\t\t\tif (_ref) {\n\t\t\t\t\t_ref.isOpen = open;\n\t\t\t\t\t_ref.setOpen = setOpen;\n\n\t\t\t\t\tif (typeof ref === 'function') {\n\t\t\t\t\t\tref(_ref);\n\t\t\t\t\t} else if (ref && 'current' in ref) {\n\t\t\t\t\t\tref.current = _ref;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<div className=\"accordion-form-wrapper__details\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-controls={panelId}\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t\tdata-open={open}\n\t\t\t\t\tid={buttonId}\n\t\t\t\t\tonClick={() => setOpen((prev) => !prev)}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tclassName=\"accordion-form-wrapper__details__toggle-button\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 0 448 512\">\n\t\t\t\t\t\t<path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclassName=\"accordion-form-wrapper__content\"\n\t\t\t\trole=\"region\"\n\t\t\t\taria-labelledby={buttonId}\n\t\t\t\tdata-open={open}\n\t\t\t\tid={panelId}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n","import React, { ReactNode } from 'react';\nimport cn from 'classnames';\nimport './styles.css';\n\nexport interface BasePaddingProps {\n\tchildren?: ReactNode;\n\tdesktop?: {\n\t\tdisabled?: boolean;\n\t};\n\tmobile?: {\n\t\tdisabled?: boolean;\n\t};\n}\n\nexport function BasePadding({\n\tchildren,\n\tdesktop,\n\tmobile,\n\tclassName,\n}: BasePaddingProps &\n\tReact.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t{\n\t\t\t\t\tdesktop: desktop?.disabled !== true,\n\t\t\t\t\tmobile: mobile?.disabled !== true,\n\t\t\t\t},\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { isNonEmptyArray } from '@/utils/type-checks';\nimport './styles.css';\n\nexport interface BreadcrumbProps {\n\tisLoading?: boolean;\n\tbreadcrumbs: { link?: string; text: string }[];\n}\n\nexport const Breadcrumbs = React.forwardRef<HTMLElement, BreadcrumbProps>(\n\tfunction Breadcrumbs({ isLoading, breadcrumbs }: BreadcrumbProps, ref) {\n\t\tif (!isNonEmptyArray(breadcrumbs)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<nav aria-label=\"Breadcrumbs\" ref={ref} className=\"breadcrumbs__container\">\n\t\t\t\t<ol className=\"breadcrumbs\">\n\t\t\t\t\t{breadcrumbs.map((breadcrumb, k) => (\n\t\t\t\t\t\t<li key={k} className=\"breadcrumb-item\">\n\t\t\t\t\t\t\t{isLoading ? (\n\t\t\t\t\t\t\t\t<span className=\"breadcrumb-item__skeleton\" />\n\t\t\t\t\t\t\t) : breadcrumbs.length - 1 === k ? (\n\t\t\t\t\t\t\t\t<span aria-current=\"page\" tabIndex={0}>\n\t\t\t\t\t\t\t\t\t{breadcrumb.text}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Link to={breadcrumb.link!}>{breadcrumb.text}</Link>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t))}\n\t\t\t\t</ol>\n\t\t\t</nav>\n\t\t);\n\t},\n);\n","import React from 'react';\nimport cn from 'classnames';\n\nimport './styles.css';\n\nexport interface ButtonGroupProps {\n\tclassName?: string;\n\tchildren: React.ReactNode;\n\torientation?: 'horizontal' | 'vertical';\n}\n\nexport const ButtonGroup = ({\n\tclassName,\n\tchildren,\n\torientation = 'horizontal',\n}: ButtonGroupProps) => {\n\tconst classNames = cn(\n\t\t'buttonGroup',\n\t\t{\n\t\t\tvertical: orientation === 'vertical',\n\t\t},\n\t\tclassName,\n\t);\n\n\treturn (\n\t\t<div data-component=\"ButtonGroup\" className={classNames}>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n\nexport default ButtonGroup;\n","import React, { useCallback, useEffect } from 'react';\nimport { isNonEmptyString } from '@/utils/type-checks';\nimport { injectScript } from '@/utils/helpers';\nimport { flushStorage } from '@/utils/app-storage';\nimport { TARGET_WEB_COMPONENTS_BUCKET, APP_ENV } from '@/globals/constants';\nimport './styles.css';\n\n// Define interfaces for props and custom events\ninterface CayuseCommonHeaderProps {\n\tauthenticationToken: string;\n\tcustomerImage?: string;\n\tlogoutRoute: string;\n\tlogoutRedirectTo: string;\n\tproduct?: string;\n\tscriptBranch?: string;\n\tscriptEnv?: string;\n\ttargetWebComponentsBucket?: string;\n\tuserId: string;\n}\n\ninterface NavigationEventDetail {\n\tpath?: string;\n}\n\n// @ts-expect-error type mismatch\ninterface CustomNavigationEvent extends CustomEvent<NavigationEventDetail> {\n\tdetail: NavigationEventDetail | string;\n}\n\nexport function CayuseCommonHeader(props: CayuseCommonHeaderProps) {\n\tconst {\n\t\tauthenticationToken,\n\t\tcustomerImage,\n\t\tlogoutRoute,\n\t\tlogoutRedirectTo,\n\t\tproduct,\n\t\tscriptBranch: incomingScriptBranch,\n\t\tscriptEnv: incomingScriptEnv,\n\t\ttargetWebComponentsBucket: incomingTargetWebComponentsBucket,\n\t\tuserId,\n\t} = props;\n\n\tconst targetWebComponentsBucket = isNonEmptyString(\n\t\tincomingTargetWebComponentsBucket,\n\t)\n\t\t? incomingTargetWebComponentsBucket\n\t\t: TARGET_WEB_COMPONENTS_BUCKET || undefined;\n\n\tconst scriptBranch = isNonEmptyString(incomingScriptBranch)\n\t\t? incomingScriptBranch\n\t\t: 'master';\n\n\tconst scriptEnv = isNonEmptyString(incomingScriptEnv)\n\t\t? incomingScriptEnv\n\t\t: APP_ENV || undefined;\n\n\tconst handleBusiness = useCallback(\n\t\t(event: CustomNavigationEvent) => {\n\t\t\tconst path = isNonEmptyString(event.detail)\n\t\t\t\t? (event.detail as string)\n\t\t\t\t: (event.detail as NavigationEventDetail)?.path || undefined;\n\n\t\t\tconst href = path === logoutRoute ? logoutRedirectTo : path;\n\n\t\t\tif (isNonEmptyString(href)) {\n\t\t\t\twindow.location.href = href;\n\t\t\t\tflushStorage(sessionStorage);\n\t\t\t}\n\t\t},\n\t\t[logoutRedirectTo, logoutRoute],\n\t);\n\n\tuseEffect(() => {\n\t\twindow.addEventListener('navigationChange', handleBusiness as EventListener);\n\t\twindow.addEventListener('productSelected', handleBusiness as EventListener);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\n\t\t\t\t'navigationChange',\n\t\t\t\thandleBusiness as EventListener,\n\t\t\t);\n\t\t\twindow.removeEventListener('productSelected', handleBusiness as EventListener);\n\t\t};\n\t}, [handleBusiness]);\n\n\tuseEffect(() => {\n\t\tif (isNonEmptyString(targetWebComponentsBucket)) {\n\t\t\tinjectScript(\n\t\t\t\t`https://${targetWebComponentsBucket}.s3.amazonaws.com/${scriptBranch}/cayuse-web-components.esm.js?id=${Date.now()}`,\n\t\t\t\t{\n\t\t\t\t\ttype: 'module',\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tinjectScript(\n\t\t\t\t`https://${targetWebComponentsBucket}.s3.amazonaws.com/${scriptBranch}/cayuse-web-components.esm.js?id=${Date.now()}`,\n\t\t\t\t{\n\t\t\t\t\tnoModule: true,\n\t\t\t\t},\n\t\t\t);\n\t\t} else if (isNonEmptyString(scriptEnv)) {\n\t\t\tinjectScript(\n\t\t\t\t`https://${scriptEnv}-cayuse-web-components.s3.amazonaws.com/${scriptBranch}/cayuse-web-components.esm.js?id=${Date.now()}`,\n\t\t\t\t{\n\t\t\t\t\ttype: 'module',\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tinjectScript(\n\t\t\t\t`https://${scriptEnv}-cayuse-web-components.s3.amazonaws.com/${scriptBranch}/cayuse-web-components.js?id=${Date.now()}`,\n\t\t\t\t{\n\t\t\t\t\tnoModule: true,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [scriptBranch, scriptEnv]);\n\n\tif (isNonEmptyString(authenticationToken)) {\n\t\treturn (\n\t\t\t<header data-component=\"CayuseCommonHeader\" className=\"cayuseCommonHeader\">\n\t\t\t\t{/* @ts-expect-error style */}\n\t\t\t\t<cayuse-header\n\t\t\t\t\tproduct={product}\n\t\t\t\t\tcustomer-image={customerImage}\n\t\t\t\t\tuser-id={userId}\n\t\t\t\t\tauthentication-token={authenticationToken}\n\t\t\t\t/>\n\t\t\t</header>\n\t\t);\n\t}\n\n\treturn null;\n}\n","import React from 'react';\nimport { isFunction } from '../../utils/type-checks';\nimport { Icon, IconProps } from '../icon/icon.js';\nimport { IconButton, IconButtonProps } from '../icon-button/icon-button.js';\nimport { Dialog, DialogTrigger, Heading, Modal } from 'react-aria-components';\nimport cn from 'classnames';\nimport './styles.css';\n\ninterface Dictionary {\n\tcancelButtonLabel?: string;\n\tconfirmButtonLabel?: string;\n}\n\nexport interface ConfirmationModalProps {\n\tcancelButtonLabel?: string;\n\tcancelButtonOptions?: Partial<IconButtonProps>;\n\tclassName?: string;\n\tconfirmButtonLabel?: string;\n\tconfirmButtonOptions?: Partial<IconButtonProps>;\n\tdictionary?: Dictionary;\n\ticon?: IconProps['name'];\n\tmessage: React.ReactNode;\n\tonCancel?(event: React.MouseEvent<HTMLButtonElement>): void;\n\tonConfirm?: () => void;\n\ttitle: string;\n\tvisible: boolean;\n}\n\nexport function ConfirmationModal({\n\tcancelButtonLabel,\n\tcancelButtonOptions,\n\tclassName,\n\tconfirmButtonLabel,\n\tconfirmButtonOptions,\n\tdictionary,\n\ticon,\n\tmessage,\n\tonCancel,\n\tonConfirm,\n\ttitle,\n\tvisible,\n\t...rest\n}: ConfirmationModalProps) {\n\tconst handleConfirm = () => {\n\t\tif (isFunction(onConfirm)) {\n\t\t\tonConfirm();\n\t\t}\n\t};\n\n\tconst handleCancel: React.MouseEventHandler<HTMLButtonElement> = (event) => {\n\t\tif (isFunction(onCancel)) {\n\t\t\tonCancel(event);\n\t\t}\n\t};\n\n\treturn (\n\t\t<DialogTrigger>\n\t\t\t<Modal\n\t\t\t\tisOpen={visible}\n\t\t\t\tonOpenChange={handleConfirm}\n\t\t\t\tclassName={cn('confirmation-modal', className)}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t<Dialog>\n\t\t\t\t\t<Heading slot=\"title\">{title}</Heading>\n\t\t\t\t\t<div className=\"confirmation-modal__content\">\n\t\t\t\t\t\t{icon && <Icon name={icon} noMargin />}\n\t\t\t\t\t\t<p>{message}</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"confirmation-modal__actions\">\n\t\t\t\t\t\t{isFunction(onCancel) && (\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\ticon=\"\"\n\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t{...(cancelButtonOptions || {\n\t\t\t\t\t\t\t\t\tsecondary: true,\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{cancelButtonLabel || dictionary?.cancelButtonLabel || 'Cancel'}\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{isFunction(onConfirm) && (\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\ticon=\"\"\n\t\t\t\t\t\t\t\tonClick={handleConfirm}\n\t\t\t\t\t\t\t\t{...(confirmButtonOptions || { success: true })}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{confirmButtonLabel || dictionary?.confirmButtonLabel || 'Confirm'}\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</Dialog>\n\t\t\t</Modal>\n\t\t</DialogTrigger>\n\t);\n}\n","import React from 'react';\nimport cn from 'classnames';\nimport './styles.css';\n\nexport const CovertButton = React.forwardRef<\n\tHTMLButtonElement,\n\tReact.ButtonHTMLAttributes<HTMLButtonElement>\n>(function CovertButton({ children, className, ...rest }, ref) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\t{...rest}\n\t\t\tclassName={cn('covertButton', className)}\n\t\t\tref={ref}\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t);\n});\n","import React, { useState, useEffect, useRef, useCallback, memo, useId } from 'react';\nimport cn from 'classnames';\nimport './styles.css';\n\nexport interface Option {\n\tvalue?: string | number;\n\tlabel?: string;\n\tcontent?: React.ReactNode;\n\tdisabled?: boolean;\n\tclassName?: string;\n\tonClick?: (value: string | number) => void;\n}\n\ntype OnChange = (\n\tvalue: Option['value'],\n\tevent?: React.MouseEvent<HTMLLIElement, MouseEvent>,\n) => void;\ntype CustomOnChange = (\n\tevent: React.MouseEvent<HTMLLIElement, MouseEvent>,\n\toption: { value?: string | number },\n) => void;\n\nexport interface CustomDropdownProps {\n\tlabel?: string;\n\toptions: Option[];\n\tisCustomized?: boolean;\n\tlabelSuffix?: string;\n\tvalue?: string | number;\n\tonChange?: OnChange | CustomOnChange;\n\tariaLabel?: string;\n\tcustomClassname?: string;\n\tisCustomStyling?: boolean;\n\tdisabled?: boolean;\n\tisCustomOnChange?: boolean;\n}\n\nexport const CustomDropdown = memo(function CustomDropdown({\n\tlabel,\n\toptions,\n\tisCustomized = false,\n\tlabelSuffix,\n\tvalue,\n\tonChange,\n\tariaLabel,\n\tcustomClassname,\n\tisCustomStyling = false,\n\tdisabled = false,\n\tisCustomOnChange = false,\n}: CustomDropdownProps) {\n\tconst id = useId();\n\tconst buttonRef = useRef<HTMLButtonElement>(null);\n\tconst menuRef = useRef<HTMLUListElement>(null);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst [expanded, setExpanded] = useState(false);\n\tconst [activeDescendant, setActiveDescendant] = useState<string | undefined>(\n\t\tundefined,\n\t);\n\tconst [internalValue, setInternalValue] = useState(value);\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst onFocusout = (event: any) => {\n\t\t// close menu when focus was moved out\n\t\tif (!containerRef.current?.contains(event.relatedTarget)) {\n\t\t\tsetExpanded(false);\n\t\t}\n\t};\n\n\tconst getCurrentActiveDescendant = (): HTMLElement | undefined => {\n\t\treturn (\n\t\t\t(menuRef.current &&\n\t\t\t\tmenuRef.current!.querySelector<HTMLElement>(\n\t\t\t\t\t`#${menuRef.current!.getAttribute('aria-activedescendant')}`,\n\t\t\t\t)) ??\n\t\t\tundefined\n\t\t);\n\t};\n\n\tconst setSelectedElement = (key: string) => {\n\t\tconst elementOrder = key === 'ArrowUp' ? 'previousSibling' : 'nextSibling';\n\t\tconst currentActiveDescendant = getCurrentActiveDescendant();\n\n\t\tif (currentActiveDescendant) {\n\t\t\tcurrentActiveDescendant.style.color = '#000000DE';\n\t\t\tcurrentActiveDescendant.style.background = 'transparent';\n\t\t\tcurrentActiveDescendant.classList.remove('selected');\n\t\t}\n\n\t\tconst elem =\n\t\t\tcurrentActiveDescendant &&\n\t\t\t(currentActiveDescendant?.[`${elementOrder}`] as HTMLElement);\n\t\tif (elem) {\n\t\t\tif (elem.querySelector('a') !== null) {\n\t\t\t\telem.querySelector('a')?.focus();\n\t\t\t} else {\n\t\t\t\telem?.focus();\n\t\t\t}\n\n\t\t\telem.classList.add('selected');\n\t\t\tif (elem.style) {\n\t\t\t\telem.style.background = 'rgba(0,0,0,.05)';\n\t\t\t\telem.style.color = 'rgba(0,0,0,.95)';\n\t\t\t}\n\t\t}\n\n\t\tif (isCustomized) {\n\t\t\tsetInternalValue(elem?.innerText);\n\t\t}\n\t\tconst elemId = elem?.getAttribute('id');\n\t\tif (elemId) {\n\t\t\tsetActiveDescendant(elemId);\n\t\t}\n\t};\n\n\tconst focusFirstElement = () => {\n\t\tconst li = menuRef.current?.querySelector('li');\n\t\tif (menuRef.current?.querySelector('li a') !== null) {\n\t\t\t// @ts-expect-error type mismatch\n\t\t\tmenuRef.current?.querySelector('li a').focus();\n\t\t} else {\n\t\t\tli?.focus();\n\t\t}\n\t\tif (li) {\n\t\t\tli.classList.add('selected');\n\t\t\tli.style.background = 'rgba(0,0,0,.05)';\n\t\t\tli.style.color = 'rgba(0,0,0,.95)';\n\t\t}\n\t};\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst onKeyDown = (event: any) => {\n\t\tswitch (event.key) {\n\t\t\tcase 'Enter':\n\t\t\t\tif (\n\t\t\t\t\tbuttonRef.current?.getAttribute('aria-expanded') !== 'true' &&\n\t\t\t\t\tevent.target.tagName === 'BUTTON'\n\t\t\t\t) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetExpanded((prev) => !prev);\n\t\t\t\t\tfocusFirstElement();\n\t\t\t\t\tif (isCustomized) {\n\t\t\t\t\t\tsetInternalValue(menuRef.current?.querySelector('li')?.innerText);\n\t\t\t\t\t}\n\t\t\t\t\tsetActiveDescendant(\n\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\tmenuRef.current?.querySelector('li')?.getAttribute('id'),\n\t\t\t\t\t);\n\t\t\t\t} else if (event.target.tagName !== 'BUTTON') {\n\t\t\t\t\tif (document.activeElement?.getAttribute('aria-disabled') !== 'true') {\n\t\t\t\t\t\tsetExpanded((prev) => !prev);\n\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\tdocument.activeElement.click();\n\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\tdocument.activeElement.blur();\n\t\t\t\t\t\tmenuRef.current?.querySelectorAll('li').forEach((item) => {\n\t\t\t\t\t\t\titem.classList.remove('active');\n\n\t\t\t\t\t\t\titem.style.color = '#000000DE';\n\n\t\t\t\t\t\t\titem.style.background = 'transparent';\n\t\t\t\t\t\t\titem.classList.remove('selected');\n\t\t\t\t\t\t\tif (item.querySelector('a') !== null) {\n\t\t\t\t\t\t\t\titem.querySelector('a')?.blur();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\titem.blur();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontainerRef.current?.parentElement?.setAttribute(\n\t\t\t\t\t\t\t'data-pressed',\n\t\t\t\t\t\t\tString(true),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ' ': // Space key\n\t\t\t\tif (\n\t\t\t\t\tbuttonRef.current?.getAttribute('aria-expanded') !== 'true' &&\n\t\t\t\t\tevent.target.tagName === 'BUTTON'\n\t\t\t\t) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetExpanded((prev) => !prev);\n\t\t\t\t\tfocusFirstElement();\n\t\t\t\t\tif (isCustomized) {\n\t\t\t\t\t\tsetInternalValue(menuRef.current?.querySelector('li')?.innerText);\n\t\t\t\t\t}\n\t\t\t\t\tsetActiveDescendant(\n\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\tmenuRef.current?.querySelector('li')?.getAttribute('id'),\n\t\t\t\t\t);\n\t\t\t\t} else if (event.target.tagName !== 'BUTTON') {\n\t\t\t\t\tsetExpanded((prev) => !prev);\n\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\tdocument.activeElement.click();\n\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\tdocument.activeElement.blur();\n\t\t\t\t\tmenuRef.current?.querySelectorAll('li').forEach((item) => {\n\t\t\t\t\t\titem.classList.remove('active');\n\n\t\t\t\t\t\titem.style.color = '#000000DE';\n\n\t\t\t\t\t\titem.style.background = 'transparent';\n\t\t\t\t\t\titem.classList.remove('selected');\n\t\t\t\t\t\tif (item.querySelector('a') !== null) {\n\t\t\t\t\t\t\titem.querySelector('a')?.blur();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.blur();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tcontainerRef.current?.parentElement?.setAttribute(\n\t\t\t\t\t\t'data-pressed',\n\t\t\t\t\t\tString(true),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (\n\t\t\t\t\tbuttonRef.current?.getAttribute('aria-expanded') === 'true' &&\n\t\t\t\t\tevent.target.tagName !== 'BUTTON' &&\n\t\t\t\t\tmenuRef.current\n\t\t\t\t\t\t?.querySelector('li:first-child')\n\t\t\t\t\t\t?.classList.contains('selected') !== true\n\t\t\t\t) {\n\t\t\t\t\tsetSelectedElement('ArrowUp');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (\n\t\t\t\t\tevent.target.tagName === 'BUTTON' &&\n\t\t\t\t\tbuttonRef.current?.getAttribute('aria-expanded') !== 'true'\n\t\t\t\t) {\n\t\t\t\t\tsetExpanded((prev) => !prev);\n\t\t\t\t\tfocusFirstElement();\n\t\t\t\t\tif (isCustomized) {\n\t\t\t\t\t\tsetInternalValue(menuRef.current?.querySelector('li')?.innerText);\n\t\t\t\t\t}\n\t\t\t\t\tsetActiveDescendant(\n\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\tmenuRef.current?.querySelector('li')?.getAttribute('id'),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tbuttonRef.current?.getAttribute('aria-expanded') === 'true' &&\n\t\t\t\t\tevent.target.tagName !== 'BUTTON' &&\n\t\t\t\t\tmenuRef.current\n\t\t\t\t\t\t?.querySelector('li:last-child')\n\t\t\t\t\t\t?.classList.contains('selected') !== true\n\t\t\t\t) {\n\t\t\t\t\tsetSelectedElement('ArrowDown');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Tab':\n\t\t\t\tmenuRef.current?.querySelectorAll('li')?.forEach((item: HTMLLIElement) => {\n\t\t\t\t\titem.classList.remove('selected');\n\n\t\t\t\t\titem.style.background = 'transparent';\n\n\t\t\t\t\titem.style.color = '#000000DE';\n\t\t\t\t});\n\t\t\t\tsetExpanded(false);\n\t\t\t\tsetInternalValue(value);\n\t\t\t\tbreak;\n\t\t\tcase 'Escape':\n\t\t\t\tsetExpanded((prev) => !prev);\n\t\t\t\tsetInternalValue(value);\n\t\t\t\tbuttonRef.current?.focus();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst stopPropagation = (e: any) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t};\n\n\t\tif (disabled) {\n\t\t\tbuttonRef.current?.addEventListener('click', stopPropagation);\n\t\t\tbuttonRef.current?.addEventListener('onkeydown', stopPropagation);\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (disabled) {\n\t\t\t\tbuttonRef.current?.removeEventListener('click', stopPropagation);\n\t\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t\t\tbuttonRef.current?.removeEventListener('onkeydown', stopPropagation);\n\t\t\t}\n\t\t};\n\t}, [disabled]);\n\n\tuseEffect(() => {\n\t\tif (value) {\n\t\t\tsetInternalValue(value);\n\t\t}\n\t}, [value]);\n\n\tuseEffect(() => {\n\t\tconst tempButtonRef = buttonRef.current;\n\t\tconst tempMenuRef = menuRef.current;\n\t\tconst tempContainerRef = containerRef.current;\n\n\t\ttempContainerRef?.addEventListener('focusout', onFocusout);\n\t\ttempButtonRef?.addEventListener('keydown', onKeyDown);\n\t\ttempMenuRef?.addEventListener('keydown', onKeyDown);\n\n\t\treturn () => {\n\t\t\ttempContainerRef?.removeEventListener('focusout', onFocusout);\n\t\t\ttempButtonRef?.removeEventListener('keydown', onKeyDown);\n\t\t\ttempMenuRef?.removeEventListener('keydown', onKeyDown);\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [value]);\n\n\tconst onToggle = useCallback(() => {\n\t\tsetExpanded((prev) => !prev);\n\t}, []);\n\n\tconst interactiveAttributeForItemsList = isCustomized\n\t\t? { [`aria-label`]: ariaLabel, tabIndex: 0 }\n\t\t: '';\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t{\n\t\t\t\t\t'custom-dropdown': isCustomized,\n\t\t\t\t\t'custom-styling': isCustomStyling,\n\t\t\t\t\tdisabled,\n\t\t\t\t},\n\t\t\t\t'dropdown-wrapper container custom-dropdown__container',\n\t\t\t\tcustomClassname,\n\t\t\t)}\n\t\t\tref={containerRef}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={!customClassname ? 'button custom-dropdown__button' : undefined}\n\t\t\t\taria-expanded={expanded}\n\t\t\t\taria-disabled={disabled}\n\t\t\t\tdata-toggle=\"dropdown\"\n\t\t\t\tid={id}\n\t\t\t\taria-haspopup=\"true\"\n\t\t\t\taria-controls=\"menu\"\n\t\t\t\taria-label={label}\n\t\t\t\tref={buttonRef}\n\t\t\t\tonClick={onToggle}\n\t\t\t>\n\t\t\t\t{isCustomized ? `${internalValue} ${labelSuffix || ''}` : label}\n\t\t\t\t<i aria-hidden=\"true\" className=\"dropdown icon\" />\n\t\t\t</button>\n\t\t\t<ul\n\t\t\t\tclassName={cn('menuList', {\n\t\t\t\t\t'custom-styling': isCustomStyling,\n\t\t\t\t\tmenuListOpen: expanded,\n\t\t\t\t})}\n\t\t\t\tref={menuRef}\n\t\t\t\t{...interactiveAttributeForItemsList}\n\t\t\t\taria-activedescendant={activeDescendant}\n\t\t\t>\n\t\t\t\t{options.map((item, k) => {\n\t\t\t\t\tif (item.value) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\tkey={k}\n\t\t\t\t\t\t\t\tid={`option-${k}`}\n\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\taria-disabled={item.disabled}\n\t\t\t\t\t\t\t\tclassName={cn(item.className, {\n\t\t\t\t\t\t\t\t\tdisabled: item.disabled,\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\tif (!item.disabled) {\n\t\t\t\t\t\t\t\t\t\tsetExpanded((prev) => !prev);\n\t\t\t\t\t\t\t\t\t\tif (onChange && isCustomOnChange) {\n\t\t\t\t\t\t\t\t\t\t\t(onChange as CustomOnChange)(e, {\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: item.value,\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t(onChange as OnChange)(item.value, e);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (item.onClick) {\n\t\t\t\t\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\t\t\t\t\titem.onClick(item.value);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.label ? item.label : item.value}\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\tkey={k}\n\t\t\t\t\t\t\tid={`option-${k}`}\n\t\t\t\t\t\t\tclassName={item.className}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tsetExpanded((prev) => !prev);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{item.content}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ul>\n\t\t</div>\n\t);\n});\n","import React from 'react';\nimport cn from 'classnames';\nimport { useObjectRef } from 'react-aria';\nimport DatePicker, { DatePickerProps } from 'react-datepicker';\nimport { Icon } from '../icon/index.js';\nimport { isFunction } from '@/utils/type-checks';\nimport { getDatetimeFormat } from '@/utils/helpers';\nimport 'react-datepicker/dist/react-datepicker.css';\nimport './styles.css';\n\nexport type DateSelectorProps = {\n\tcustomInputClass?: string;\n\tcustomWrapperClass?: string;\n\tonChange?: (date: Date | null) => void;\n\tselectedDate?: Date | null;\n\tshowTime?: boolean;\n\tlabel?: string;\n\tdescription?: string;\n\tvalidationMessage?: string;\n\trequired?: boolean;\n\tdisabled?: boolean;\n} & DatePickerProps;\n\nexport const DateSelector = React.forwardRef(function DateSelector(\n\t{\n\t\tcustomInputClass: className,\n\t\tcustomWrapperClass,\n\t\tonChange,\n\t\tselectedDate,\n\t\tdropdownMode,\n\t\tshowTime,\n\t\tlabel,\n\t\tdescription,\n\t\tvalidationMessage,\n\t\trequired,\n\t\tdisabled,\n\t\tid,\n\t\t...rest\n\t}: DateSelectorProps,\n\tref,\n) {\n\tconst internalId = React.useId();\n\n\tconst innerRef = useObjectRef(ref);\n\tconst invalid = required && !selectedDate;\n\tconst dateTimeFormat = getDatetimeFormat();\n\n\tconst format = showTime\n\t\t? `${dateTimeFormat.date} ${dateTimeFormat.time}`\n\t\t: dateTimeFormat.date;\n\n\tconst handleChange = (date: Date | null) => {\n\t\tif (isFunction(onChange)) {\n\t\t\tonChange(date);\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"DateSelector\"\n\t\t\tclassName={cn('cayuse-date', { invalid }, customWrapperClass)}\n\t\t\t// @ts-expect-error type mismatch\n\t\t\tref={innerRef}\n\t\t>\n\t\t\t{label && (\n\t\t\t\t<label htmlFor={id ?? internalId} className=\"cayuse-date__label\">\n\t\t\t\t\t{required && (\n\t\t\t\t\t\t<span className=\"task-form_required-indicator\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t*\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t\t&nbsp;\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t{/* @ts-expect-error type mismatch */}\n\t\t\t<DatePicker\n\t\t\t\ticon={\n\t\t\t\t\t<Icon\n\t\t\t\t\t\tnoMargin\n\t\t\t\t\t\tname=\"calendar\"\n\t\t\t\t\t\tclassName={cn('cayuse-date__icon', { disabled })}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\ttoggleCalendarOnIconClick\n\t\t\t\tdateFormat={format}\n\t\t\t\tselected={selectedDate}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tautoComplete=\"off\"\n\t\t\t\tdropdownMode={dropdownMode}\n\t\t\t\tshowTimeSelect={showTime}\n\t\t\t\tplaceholderText={\n\t\t\t\t\tshowTime ? `${format.toUpperCase()}` : `${dateTimeFormat.datePlaceholder}`\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tonFocus={(e: any) => {\n\t\t\t\t\tif (e && e.target) {\n\t\t\t\t\t\te.target.setAttribute(\n\t\t\t\t\t\t\t'aria-label',\n\t\t\t\t\t\t\t`Select ${\n\t\t\t\t\t\t\t\tshowTime\n\t\t\t\t\t\t\t\t\t? 'time.'\n\t\t\t\t\t\t\t\t\t: 'date. Press Alt and left/right arrows to select date.'\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\trequired={required}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tshowIcon\n\t\t\t\t{...rest}\n\t\t\t\tclassName={cn('cayuse-date__input', className)}\n\t\t\t\tid={id ?? internalId}\n\t\t\t/>\n\t\t\t{(validationMessage || description) && (\n\t\t\t\t<span className=\"cayuse-date__description\">\n\t\t\t\t\t{invalid ? validationMessage : description}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import React from 'react';\nimport cn from 'classnames';\nimport './styles.css';\n\nexport function Divider({\n\tclassName,\n\t...props\n}: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHRElement>, HTMLHRElement>) {\n\treturn <hr {...props} className={cn('divider', props, className)} />;\n}\n","import React from 'react';\nimport {\n\tPressable,\n\tMenu,\n\tMenuItem,\n\tMenuProps,\n\tMenuItemProps,\n\tMenuTrigger,\n\tPopover,\n\tMenuTriggerProps,\n} from 'react-aria-components';\nimport { Icon } from '../icon/index.js';\nimport { Button, ButtonProps } from '../button/index.js';\nimport './styles.css';\n\nexport interface DropdownMenuProps<T>\n\textends MenuProps<T>,\n\t\tOmit<MenuTriggerProps, 'children'> {\n\tlabel: string;\n\ticon?: string;\n\toptions?: MenuItemProps[];\n\tonClick?(id: string): void;\n\tprimary?: boolean;\n\tdisabled?: boolean;\n\tbuttonProps?: ButtonProps;\n\tclassName?: string;\n\tchildren?: React.ReactNode;\n}\n\nexport function DropdownMenu<T extends object>(props: DropdownMenuProps<T>) {\n\tconst { primary = true, icon, buttonProps, label, options, children } = props;\n\n\treturn (\n\t\t<MenuTrigger {...props}>\n\t\t\t<Pressable>\n\t\t\t\t<Button {...buttonProps} primary={primary}>\n\t\t\t\t\t{label}\n\t\t\t\t\t{icon && <Icon name={icon} />}\n\t\t\t\t</Button>\n\t\t\t</Pressable>\n\t\t\t<Popover>\n\t\t\t\t<Menu {...props} className=\"dd-menu\">\n\t\t\t\t\t{children ??\n\t\t\t\t\t\toptions?.map((option, k) => (\n\t\t\t\t\t\t\t<MenuItem {...option} key={k} className=\"dd-menu-item\" />\n\t\t\t\t\t\t))}\n\t\t\t\t</Menu>\n\t\t\t</Popover>\n\t\t</MenuTrigger>\n\t);\n}\n","import React, {\n\tforwardRef,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n\tuseImperativeHandle,\n\tuseId,\n} from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport cn from 'classnames';\nimport { Pagination } from '../pagination/index.js';\nimport { LoadingIndicator } from '../loading-indicator/index.js';\nimport { isFunction, isNonEmptyObject } from '@/utils/type-checks';\nimport { CheckboxHeaderCell } from './components/checkbox-header-cell.js';\nimport { ExpandRowButton } from './components/expand-row-button.js';\nimport { TableBodyContent } from './components/table-body-content.js';\nimport { TableHeadCell } from './components/table-head-cell.js';\nimport { renderCell } from './utils.js';\nimport {\n\tDynamicTableProps,\n\tDynamicTableRow,\n\tRowSelectionChangeArgs,\n} from './types.js';\nimport './styles.css';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const DynamicTable = forwardRef<HTMLDivElement, any>(\n\t// @ts-expect-error type mismatch\n\tfunction DynamicTable<R>(props: DynamicTableProps<R>, ref) {\n\t\tconst {\n\t\t\theaders,\n\t\t\trows,\n\n\t\t\tonRowClick,\n\n\t\t\tisLoading,\n\t\t\tisRefresh,\n\n\t\t\tisSelectable,\n\t\t\tisMultiSelect = true,\n\t\t\tonRowSelectionChange,\n\t\t\tselectOnRowClick,\n\t\t\tselectableBy,\n\n\t\t\tisExpandable,\n\n\t\t\ttotalItems,\n\t\t\tpageOffset,\n\t\t\tonPageChange,\n\t\t\tpageSize,\n\t\t\tonPageSizeChange,\n\t\t\tpaginationProps,\n\n\t\t\tsortColumn,\n\t\t\tsortDirection,\n\t\t\tonSortChange,\n\n\t\t\trenderCell: _renderCell = renderCell,\n\t\t\trowAriaLabel,\n\n\t\t\tid,\n\t\t\tcaption,\n\t\t\tnoResultsLabel,\n\t\t\tclassName,\n\n\t\t\tchildren,\n\t\t} = props;\n\n\t\tconst tableHeaders = headers.filter((h) => isNonEmptyObject(h));\n\n\t\tconst rootRef = useRef<HTMLDivElement>(null);\n\t\tconst captionId = useId();\n\t\tconst [expandedRows, setExpandedRows] = useState<number[]>([]);\n\n\t\tfunction toggleExpandableRow(event: React.MouseEvent<HTMLButtonElement>) {\n\t\t\tconst rowIndex = Number(event.currentTarget.dataset.rowIndex);\n\t\t\tconst newExpandedRows = expandedRows.includes(rowIndex)\n\t\t\t\t? expandedRows.filter((ri) => ri !== rowIndex)\n\t\t\t\t: [...expandedRows, rowIndex];\n\t\t\tsetExpandedRows(newExpandedRows);\n\t\t}\n\n\t\tconst [tableRows, setTableRows] = useState<DynamicTableRow<R>[]>([]);\n\n\t\tuseEffect(() => {\n\t\t\tsetTableRows(\n\t\t\t\t(rows ?? []).map((row) => ({\n\t\t\t\t\t...row,\n\t\t\t\t\t_id: uuidv4(),\n\t\t\t\t\t_isSelectable: !!isSelectable,\n\t\t\t\t\t_isSelected: false,\n\t\t\t\t\t_isDisabledForSelection: false,\n\t\t\t\t\t...(typeof selectableBy === 'function' && !!isSelectable\n\t\t\t\t\t\t? selectableBy(row)\n\t\t\t\t\t\t: {}),\n\t\t\t\t})),\n\t\t\t);\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t}, [rows]);\n\n\t\tconst isRefreshing = isLoading && isRefresh;\n\n\t\tfunction handleRowSelectionChange(payload: RowSelectionChangeArgs<R>) {\n\t\t\tconst changedRows: DynamicTableRow<R>[] = [];\n\t\t\tconst updatedRows = tableRows.map((it) => {\n\t\t\t\tif (payload.rows.find((row) => row.id === it.id)) {\n\t\t\t\t\tchangedRows.push({\n\t\t\t\t\t\t...it,\n\t\t\t\t\t\t_isSelected: payload.isSelected,\n\t\t\t\t\t});\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...it,\n\t\t\t\t\t\t_isSelected: payload.isSelected,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn it;\n\t\t\t});\n\n\t\t\tsetTableRows(updatedRows);\n\t\t\tif (onRowSelectionChange) {\n\t\t\t\tonRowSelectionChange({\n\t\t\t\t\trows: changedRows,\n\t\t\t\t\tisSelected: payload.isSelected,\n\t\t\t\t\tselectedRows: updatedRows.filter((it) => it._isSelected),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfunction handleRowClick(event: React.MouseEvent<HTMLTableRowElement>) {\n\t\t\tevent.stopPropagation();\n\t\t\tconst ds = event.currentTarget.dataset;\n\t\t\tconst row = tableRows.find((_, index) => index === Number(ds.index));\n\t\t\tif (!row) return;\n\n\t\t\tif (onRowClick) {\n\t\t\t\tonRowClick(row, {\n\t\t\t\t\tevent,\n\t\t\t\t\tisSubRow: Boolean(ds.subIndex),\n\t\t\t\t\tsubRowIndex: ds.subIndex ? Number(ds.subIndex) : null,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!isMultiSelect && selectOnRowClick) {\n\t\t\t\thandleRowSelectionChange({\n\t\t\t\t\trows: [row],\n\t\t\t\t\tisSelected: !row._isSelected,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tuseImperativeHandle(ref, () => {\n\t\t\treturn {\n\t\t\t\ttable: rootRef,\n\t\t\t\tresetSelection() {\n\t\t\t\t\tconst updatedRows = tableRows.map((it) => ({\n\t\t\t\t\t\t...it,\n\t\t\t\t\t\t_isSelected: false,\n\t\t\t\t\t}));\n\t\t\t\t\tsetTableRows(updatedRows);\n\t\t\t\t\tif (onRowSelectionChange) {\n\t\t\t\t\t\tonRowSelectionChange({\n\t\t\t\t\t\t\trows: updatedRows,\n\t\t\t\t\t\t\tisSelected: false,\n\t\t\t\t\t\t\tselectedRows: updatedRows.filter((it) => it._isSelected),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t}, [onRowSelectionChange, tableRows]);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={rootRef}\n\t\t\t\tclassName={cn('dynamic-table__container', className)}\n\t\t\t\ttabIndex={0}\n\t\t\t\trole=\"group\"\n\t\t\t\taria-labelledby={captionId}\n\t\t\t>\n\t\t\t\t<div className=\"dynamic-table__wrapper\">\n\t\t\t\t\t<table\n\t\t\t\t\t\tid={id}\n\t\t\t\t\t\tclassName=\"dynamic-table\"\n\t\t\t\t\t\tdata-exapandable={isExpandable}\n\t\t\t\t\t\tdata-selectable={isSelectable}\n\t\t\t\t\t>\n\t\t\t\t\t\t<caption id={captionId} className=\"sr-only\">\n\t\t\t\t\t\t\t{caption}\n\t\t\t\t\t\t</caption>\n\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t{isExpandable && (\n\t\t\t\t\t\t\t\t\t<th data-col=\"expand\" scope=\"col\">\n\t\t\t\t\t\t\t\t\t\t<ExpandRowButton\n\t\t\t\t\t\t\t\t\t\t\tdisabled={isLoading || isRefresh}\n\t\t\t\t\t\t\t\t\t\t\tisExpanded={isExpandable}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (expandedRows.length === 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst allTriggers = Array.from(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trootRef.current?.querySelectorAll(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'[data-trigger=\"expand-row\"]',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)!,\n\t\t\t\t\t\t\t\t\t\t\t\t\t).map((it) => Number(it.getAttribute('data-row-index')));\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetExpandedRows(allTriggers);\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetExpandedRows([]);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tlabel=\"all\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{isSelectable && (\n\t\t\t\t\t\t\t\t\t<CheckboxHeaderCell\n\t\t\t\t\t\t\t\t\t\tdisabled={isLoading || isRefresh}\n\t\t\t\t\t\t\t\t\t\tisMultiSelect={isMultiSelect}\n\t\t\t\t\t\t\t\t\t\trows={tableRows}\n\t\t\t\t\t\t\t\t\t\tonRowSelectionChange={handleRowSelectionChange}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{tableHeaders.map((column, k) => (\n\t\t\t\t\t\t\t\t\t<TableHeadCell\n\t\t\t\t\t\t\t\t\t\tkey={k}\n\t\t\t\t\t\t\t\t\t\tcolumn={column}\n\t\t\t\t\t\t\t\t\t\tsortColumn={sortColumn}\n\t\t\t\t\t\t\t\t\t\tsortDirection={sortDirection}\n\t\t\t\t\t\t\t\t\t\tonSortChange={onSortChange}\n\t\t\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t<tbody\n\t\t\t\t\t\t\tclassName={cn({\n\t\t\t\t\t\t\t\t'dynamic-table__refreshing-overlay': isRefreshing,\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TableBodyContent\n\t\t\t\t\t\t\t\trows={tableRows}\n\t\t\t\t\t\t\t\theaders={tableHeaders}\n\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\tisRefresh={isRefresh}\n\t\t\t\t\t\t\t\tisMultiSelect={isMultiSelect}\n\t\t\t\t\t\t\t\tisSelectable={isSelectable}\n\t\t\t\t\t\t\t\tonRowSelectionChange={handleRowSelectionChange}\n\t\t\t\t\t\t\t\tisExpandable={isExpandable}\n\t\t\t\t\t\t\t\trenderCell={_renderCell}\n\t\t\t\t\t\t\t\trowAriaLabel={rowAriaLabel}\n\t\t\t\t\t\t\t\tisRowClickable={isFunction(onRowClick)}\n\t\t\t\t\t\t\t\thandleRowClick={handleRowClick}\n\t\t\t\t\t\t\t\tnoResultsLabel={noResultsLabel}\n\t\t\t\t\t\t\t\texpandedRows={expandedRows}\n\t\t\t\t\t\t\t\ttoggleExpandableRow={toggleExpandableRow}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t</TableBodyContent>\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\n\t\t\t\t{isRefreshing && (\n\t\t\t\t\t<div className=\"dynamic-table__refreshing-indicator\">\n\t\t\t\t\t\t<LoadingIndicator />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{pageSize && Number(totalItems) > tableRows.length && !isLoading && (\n\t\t\t\t\t<div className=\"dynamic-table__pagination\">\n\t\t\t\t\t\t<Pagination\n\t\t\t\t\t\t\ttotalItems={totalItems!}\n\t\t\t\t\t\t\tcurrentPage={pageOffset!}\n\t\t\t\t\t\t\tonPageChange={onPageChange!}\n\t\t\t\t\t\t\tlimit={pageSize}\n\t\t\t\t\t\t\tonLimitChange={onPageSizeChange}\n\t\t\t\t\t\t\t{...paginationProps}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n) as <R = any>(\n\tprops: DynamicTableProps<R> & { ref?: React.Ref<HTMLDivElement> },\n) => React.ReactElement;\n","import React, { Fragment, memo } from 'react';\nimport { Icon } from '../icon/index.js';\nimport { CustomDropdown } from '../custom-dropdown/index.js';\nimport './styles.css';\n\nconst baseDictionary = {\n\titems: 'items',\n\tperPage: 'per page',\n\tshowing: 'Showing',\n\txOfYSeparator: '/',\n};\n\ninterface PaginationProps {\n\ttotalItems: number;\n\tlimit: number;\n\tcurrentPage: number;\n\tonPageChange(page: number): void;\n\tdictionary?: typeof baseDictionary;\n\tshowPageSizeControl?: boolean;\n\tonLimitChange?(limit: number): void;\n}\n\nconst PAGE_SIZE_OPTIONS = [10, 25, 50, 100].map((option, index) => {\n\treturn { key: index, text: option, value: option };\n});\n\nconst maxMiddlePages: number = 5; // Maximum number of pages in the middle range\n\nconst getPageNumbers = (\n\tcurrentPage: number,\n\ttotalPages: number,\n): (number | string)[] => {\n\tconst pages: (number | string)[] = [];\n\n\t// If totalPages is maxMiddlePages or less, show all pages without ellipses\n\tif (totalPages <= maxMiddlePages) {\n\t\tfor (let i = 1; i <= totalPages; i++) {\n\t\t\tpages.push(i);\n\t\t}\n\t\treturn pages;\n\t}\n\n\t// Case 1: Current page is in the first maxMiddlePages\n\tif (currentPage <= Math.floor(maxMiddlePages / 2) + 1) {\n\t\tfor (let i = 1; i <= maxMiddlePages; i++) {\n\t\t\tpages.push(i);\n\t\t}\n\t\tif (totalPages > maxMiddlePages) {\n\t\t\tpages.push('...');\n\t\t\tpages.push(totalPages);\n\t\t}\n\t\treturn pages;\n\t}\n\n\t// Case 2: Current page is in the last maxMiddlePages\n\tif (currentPage >= totalPages - Math.floor(maxMiddlePages / 2)) {\n\t\tpages.push(1);\n\t\tpages.push('...');\n\t\tfor (let i = totalPages - maxMiddlePages + 1; i <= totalPages; i++) {\n\t\t\tpages.push(i);\n\t\t}\n\t\treturn pages;\n\t}\n\n\t// Case 3: Current page is in the middle\n\tpages.push(1);\n\tpages.push('...');\n\n\t// Show 1 previous page, the current page, and 1 next page\n\tconst prevPage = currentPage - 1;\n\tconst nextPage = currentPage + 1;\n\n\tpages.push(prevPage);\n\tpages.push(currentPage);\n\tpages.push(nextPage);\n\n\tpages.push('...');\n\tpages.push(totalPages);\n\n\treturn pages;\n};\n\nexport const Pagination: React.FC<PaginationProps> = memo(function Pagination(\n\tprops: PaginationProps,\n) {\n\tconst {\n\t\ttotalItems,\n\t\tlimit,\n\t\tonLimitChange,\n\t\tcurrentPage,\n\t\tonPageChange,\n\t\tdictionary = baseDictionary,\n\t\tshowPageSizeControl = true,\n\t} = props;\n\n\tconst handleKeyDown = (\n\t\te: React.KeyboardEvent<HTMLLIElement>,\n\t\tcallback: () => void,\n\t) => {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault();\n\t\t\tcallback();\n\t\t}\n\t};\n\n\tconst totalPages: number = Math.ceil(totalItems / limit);\n\n\tconst getShowingXofYLabel = (): string => {\n\t\tconst pageBegin: number = (currentPage - 1) * limit + 1;\n\t\tconst pageEnd: number = Math.min(currentPage * limit, totalItems);\n\n\t\tconst startIndex: number = totalItems > 0 ? pageBegin : 0;\n\t\tconst endIndex: number = pageEnd > 0 ? pageEnd : 0;\n\n\t\treturn totalPages > 1\n\t\t\t? `${dictionary.showing} ${startIndex} - ${endIndex} ${dictionary.xOfYSeparator} ${totalItems} ${dictionary.items}`\n\t\t\t: `${dictionary.showing} ${totalItems} ${dictionary.xOfYSeparator} ${totalItems} ${dictionary.items}`;\n\t};\n\n\treturn (\n\t\t<nav className=\"cayuse-pagination\" aria-label=\"pagination\">\n\t\t\t{showPageSizeControl ? (\n\t\t\t\t<div role=\"application\">\n\t\t\t\t\t<CustomDropdown\n\t\t\t\t\t\tariaLabel={`Currently showing ${limit} per page`}\n\t\t\t\t\t\tlabelSuffix={`${dictionary.perPage || 'per page'}`}\n\t\t\t\t\t\tvalue={limit}\n\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\tonChange={onLimitChange}\n\t\t\t\t\t\toptions={PAGE_SIZE_OPTIONS}\n\t\t\t\t\t\tlabel=\"Select number of items per page\"\n\t\t\t\t\t\tisCustomized\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<span role=\"alert\" aria-live=\"polite\" className=\"xOfYWrapper\">\n\t\t\t\t{getShowingXofYLabel()}\n\t\t\t</span>\n\t\t\t{totalPages > 1 ? (\n\t\t\t\t<ul className=\"cayuse-pagination__list\">\n\t\t\t\t\t<li\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (currentPage > 1) onPageChange(currentPage - 1);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonKeyDown={(e: React.KeyboardEvent<HTMLLIElement>) =>\n\t\t\t\t\t\t\thandleKeyDown(e, () => {\n\t\t\t\t\t\t\t\tif (currentPage > 1) onPageChange(currentPage - 1);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName={currentPage === 1 ? 'cursor-not-allowed' : ''}\n\t\t\t\t\t\taria-label=\"Previous page\"\n\t\t\t\t\t\taria-disabled={currentPage === 1 ? 'true' : 'false'}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"arrow-left\" />\n\t\t\t\t\t</li>\n\t\t\t\t\t{getPageNumbers(currentPage, totalPages).map(\n\t\t\t\t\t\t(page: number | string, index: number) => (\n\t\t\t\t\t\t\t<Fragment key={index}>\n\t\t\t\t\t\t\t\t{typeof page === 'string' ? (\n\t\t\t\t\t\t\t\t\t<li className=\"placeholder\">{page}</li>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\t\t\tonClick={() => onPageChange(page as number)}\n\t\t\t\t\t\t\t\t\t\tonKeyDown={(e: React.KeyboardEvent<HTMLLIElement>) =>\n\t\t\t\t\t\t\t\t\t\t\thandleKeyDown(e, () => onPageChange(page as number))\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\taria-current={page === currentPage ? 'page' : undefined}\n\t\t\t\t\t\t\t\t\t\taria-label={`Page ${page}`}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{page}\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t),\n\t\t\t\t\t)}\n\t\t\t\t\t<li\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (currentPage < totalPages) onPageChange(currentPage + 1);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonKeyDown={(e: React.KeyboardEvent<HTMLLIElement>) =>\n\t\t\t\t\t\t\thandleKeyDown(e, () => {\n\t\t\t\t\t\t\t\tif (currentPage < totalPages) onPageChange(currentPage + 1);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName={currentPage === totalPages ? 'cursor-not-allowed' : ''}\n\t\t\t\t\t\taria-label=\"Next page\"\n\t\t\t\t\t\taria-disabled={currentPage === totalPages ? 'true' : 'false'}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"arrow-right\" />\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t) : null}\n\t\t</nav>\n\t);\n});\n","import React, {\n\tforwardRef,\n\ttype InputHTMLAttributes,\n\tmemo,\n\tuseEffect,\n\tuseRef,\n} from 'react';\n// import { KEY_CODES } from '@/globals/constants';\n\nimport './styles.css';\n\nexport interface CheckboxProps extends InputHTMLAttributes<HTMLInputElement> {\n\tlabel?: string;\n}\n\nexport const Checkbox = memo(\n\tforwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(props, ref) {\n\t\tconst { label, className = '', disabled, ...rest } = props;\n\n\t\tconst labelRef = useRef<HTMLLabelElement>(null);\n\n\t\tuseEffect(() => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tfunction preventDefault(event: any) {\n\t\t\t\tif (event.type === 'keydown') {\n\t\t\t\t\t// if (event.keyCode === KEY_CODES.SPACE) {\n\t\t\t\t\t// \tevent.preventDefault();\n\t\t\t\t\t// }\n\t\t\t\t} else {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst label = labelRef.current;\n\n\t\t\tif (label && disabled) {\n\t\t\t\tlabel.addEventListener('click', preventDefault);\n\t\t\t\tlabel.addEventListener('keydown', preventDefault);\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tif (label) {\n\t\t\t\t\tlabel.removeEventListener('change', preventDefault);\n\t\t\t\t\tlabel.removeEventListener('keydown', preventDefault);\n\t\t\t\t}\n\t\t\t};\n\t\t}, [disabled]);\n\n\t\treturn (\n\t\t\t<label className={`cayuse-checkbox ${className}`} ref={labelRef}>\n\t\t\t\t<input type=\"checkbox\" aria-disabled={disabled} ref={ref} {...rest} />\n\t\t\t\t<span className=\"checkmark\" aria-hidden=\"true\" />\n\t\t\t\t{label && <span className=\"label\">{label}</span>}\n\t\t\t</label>\n\t\t);\n\t}),\n);\n","import React from 'react';\nimport { Checkbox } from '../../form/checkbox/index.js';\nimport {\n\tDynamicTableProps,\n\tDynamicTableRow,\n\tRowSelectionChangeArgs,\n} from '../types.js';\n\nexport function CheckboxHeaderCell<R>({\n\tdisabled,\n\tonRowSelectionChange,\n\tisMultiSelect,\n\trows,\n}: Pick<DynamicTableProps<R>, 'isMultiSelect'> & {\n\tdisabled?: boolean;\n\trows: DynamicTableRow<R>[];\n\tonRowSelectionChange(payload: RowSelectionChangeArgs<R>): void;\n\tisMultiSelect: boolean;\n}) {\n\tfunction toggleSelectAll(event: React.ChangeEvent<HTMLInputElement>) {\n\t\tonRowSelectionChange({\n\t\t\trows: rows.filter((it) => it._isSelectable && !it._isDisabledForSelection),\n\t\t\tisSelected: event.target.checked,\n\t\t});\n\t}\n\n\tif (isMultiSelect) {\n\t\tlet isSelectedAll = false;\n\t\tconst filtered = rows.filter(\n\t\t\t(it) => it._isSelectable && !it._isDisabledForSelection,\n\t\t);\n\t\tif (filtered.length > 0) {\n\t\t\tisSelectedAll = filtered.every((it) => it._isSelected);\n\t\t}\n\n\t\treturn (\n\t\t\t<th data-col=\"select\">\n\t\t\t\t<Checkbox\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\taria-label=\"select all\"\n\t\t\t\t\tchecked={isSelectedAll}\n\t\t\t\t\tonChange={toggleSelectAll}\n\t\t\t\t\tdata-testid=\"dynamic-table__multi-select-all\"\n\t\t\t\t/>\n\t\t\t</th>\n\t\t);\n\t}\n\n\treturn <th>Selected</th>;\n}\n","import React from 'react';\nimport { Icon } from '../../icon/index.js';\n\nexport function ExpandRowButton({\n\tisExpanded,\n\tlabel,\n\tonClick,\n\t...rest\n}: React.ButtonHTMLAttributes<HTMLButtonElement> & {\n\tlabel: string;\n\tisExpanded: boolean;\n\tonClick?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n}) {\n\tfunction handleClick(event: React.MouseEvent<HTMLButtonElement>) {\n\t\tevent.stopPropagation();\n\t\tonClick?.(event);\n\t}\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclassName=\"dynamic-table__toggle-sub-row\"\n\t\t\tonClick={onClick ? handleClick : undefined}\n\t\t\tdata-testid=\"dynamic-table__toggle-sub-row\"\n\t\t\t{...rest}\n\t\t>\n\t\t\t<Icon name={isExpanded ? 'chevron-down' : 'chevron-right'} />\n\t\t\t<span className=\"sr-only\">\n\t\t\t\t{isExpanded ? 'Collapse' : 'Expand'} {label}\n\t\t\t</span>\n\t\t</button>\n\t);\n}\n","import React from 'react';\nimport { isEmpty } from 'lodash-es';\nimport { LoadingIndicator } from '../../loading-indicator/index.js';\nimport { isNonEmptyArray } from '@/utils/type-checks';\nimport {\n\tDynamicTableProps,\n\tDynamicTableRow,\n\tRowSelectionChangeArgs,\n} from '../types.js';\nimport { RowContent } from './row-content.js';\n\nexport function TableBodyContent<R>(\n\tprops: Pick<\n\t\tDynamicTableProps<R>,\n\t\t| 'isLoading'\n\t\t| 'isRefresh'\n\t\t| 'headers'\n\t\t| 'isSelectable'\n\t\t| 'isMultiSelect'\n\t\t| 'isExpandable'\n\t\t| 'renderCell'\n\t\t| 'rowAriaLabel'\n\t\t| 'noResultsLabel'\n\t\t| 'children'\n\t> & {\n\t\trows: DynamicTableRow<R>[];\n\t\tisRowClickable: boolean;\n\t\thandleRowClick(event: React.MouseEvent<HTMLTableRowElement>): void;\n\t\texpandedRows: number[];\n\t\ttoggleExpandableRow(\n\t\t\tevent: React.MouseEvent<HTMLTableRowElement | HTMLButtonElement>,\n\t\t): void;\n\t\tonRowSelectionChange(arg: RowSelectionChangeArgs<R>): void;\n\t},\n) {\n\tconst {\n\t\tisLoading,\n\t\tisRefresh,\n\t\theaders,\n\t\trows,\n\t\tisSelectable,\n\t\tisMultiSelect,\n\t\tonRowSelectionChange,\n\t\tisExpandable,\n\t\trenderCell,\n\t\trowAriaLabel,\n\t\tnoResultsLabel,\n\t\tisRowClickable,\n\t\thandleRowClick,\n\n\t\texpandedRows,\n\t\ttoggleExpandableRow,\n\n\t\tchildren,\n\t} = props;\n\n\tconst numColumns = headers.length + (isSelectable ? 1 : 0);\n\n\tif (isLoading && !isRefresh) {\n\t\treturn (\n\t\t\t<tr>\n\t\t\t\t<td colSpan={numColumns}>\n\t\t\t\t\t<LoadingIndicator />\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t);\n\t}\n\tif (children) {\n\t\treturn children;\n\t}\n\tif (isEmpty(rows)) {\n\t\treturn (\n\t\t\t<tr>\n\t\t\t\t<td colSpan={numColumns}>\n\t\t\t\t\t<span className=\"dynamic-table__empty-data-message\">\n\t\t\t\t\t\t{noResultsLabel || 'No results to display.'}\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{rows.map((row, rowIndex) => {\n\t\t\t\treturn (\n\t\t\t\t\t<React.Fragment key={`row-${rowIndex}`}>\n\t\t\t\t\t\t<RowContent\n\t\t\t\t\t\t\theaders={headers}\n\t\t\t\t\t\t\trow={row}\n\t\t\t\t\t\t\trowIndex={rowIndex}\n\t\t\t\t\t\t\tisSelectable={isSelectable}\n\t\t\t\t\t\t\tisMultiSelect={isMultiSelect}\n\t\t\t\t\t\t\tonRowSelectionChange={onRowSelectionChange}\n\t\t\t\t\t\t\trowAriaLabel={rowAriaLabel}\n\t\t\t\t\t\t\tisRowClickable={isRowClickable}\n\t\t\t\t\t\t\thandleRowClick={handleRowClick}\n\t\t\t\t\t\t\trenderCell={renderCell}\n\t\t\t\t\t\t\tisExpandable={isExpandable}\n\t\t\t\t\t\t\texpandedRows={expandedRows}\n\t\t\t\t\t\t\tisSubRow={false}\n\t\t\t\t\t\t\thasSubRows={isNonEmptyArray(row.subRows)}\n\t\t\t\t\t\t\ttoggleExpandableRow={toggleExpandableRow}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{expandedRows.includes(rowIndex) &&\n\t\t\t\t\t\t\trow.subRows?.map((subRow, subRowIndex) => (\n\t\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\t\t<RowContent\n\t\t\t\t\t\t\t\t\tkey={`sub-row-${subRowIndex}`}\n\t\t\t\t\t\t\t\t\theaders={headers}\n\t\t\t\t\t\t\t\t\trow={subRow}\n\t\t\t\t\t\t\t\t\trowIndex={rowIndex}\n\t\t\t\t\t\t\t\t\tsubRowIndex={subRowIndex}\n\t\t\t\t\t\t\t\t\tisSelectable={isSelectable}\n\t\t\t\t\t\t\t\t\trowAriaLabel={rowAriaLabel}\n\t\t\t\t\t\t\t\t\tisRowClickable={isRowClickable}\n\t\t\t\t\t\t\t\t\thandleRowClick={handleRowClick}\n\t\t\t\t\t\t\t\t\trenderCell={renderCell}\n\t\t\t\t\t\t\t\t\tisExpandable={isExpandable}\n\t\t\t\t\t\t\t\t\tisSubRow\n\t\t\t\t\t\t\t\t\thasSubRows={false}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t);\n\t\t\t})}\n\t\t</>\n\t);\n}\n","/* eslint-disable */\nimport { ReactNode } from 'react';\nimport { get } from 'lodash-es';\nimport { isNonEmptyArray } from '@/utils/type-checks';\nimport { DynamicTableColumn, Row } from './types.js';\n\nexport function getValueFromObjectByKeys<R extends Row>(\n\tobj: R,\n\tkeys: DynamicTableColumn['keys'],\n) {\n\tconst keyWithContent =\n\t\tisNonEmptyArray(keys) && !!obj ? keys.find((key) => !!obj[key]) : undefined;\n\n\treturn get(obj, keyWithContent ?? '', '') as ReactNode;\n}\n\nexport function renderCell({ value }: any) {\n\tif (typeof value !== 'string') {\n\t\treturn JSON.stringify(value);\n\t}\n\n\treturn value;\n}\n","import React, { ChangeEvent, FocusEvent } from 'react';\nimport cn from 'classnames';\nimport { generateId } from '@/utils/helpers';\nimport { isFunction } from '@/utils/type-checks';\nimport './styles.css';\n\nexport interface RadioProps<T = HTMLInputElement> {\n\tvalue: string;\n\tlabel: string;\n\tname: string;\n\tchecked?: boolean;\n\tdefaultChecked?: boolean;\n\thelpText?: string;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\toptionData?: any;\n\tdisabled?: boolean;\n\trequired?: boolean;\n\tinvalid?: boolean;\n\tclassName?: string;\n\tinputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n\tcontainerProps?: React.HTMLAttributes<HTMLDivElement>;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tonChange?: (value: string, optionData: any, event: ChangeEvent<T>) => void;\n\tonFocus?: (event: FocusEvent<T>) => void;\n\tonBlur?: (event: FocusEvent<T>) => void;\n}\n\nexport const Radio = React.memo(\n\tReact.forwardRef<HTMLDivElement, RadioProps>(function Radio(props, ref) {\n\t\tconst {\n\t\t\tlabel,\n\t\t\tname,\n\t\t\tvalue,\n\t\t\tdefaultChecked,\n\t\t\thelpText,\n\t\t\tchecked,\n\t\t\tonChange,\n\t\t\tonBlur,\n\t\t\tonFocus,\n\t\t\trequired,\n\t\t\tdisabled,\n\t\t\tinvalid,\n\t\t\toptionData,\n\t\t\tclassName = '',\n\t\t\tinputProps = {},\n\t\t\tcontainerProps = {},\n\t\t} = props;\n\n\t\tconst helpTextAttrs = React.useMemo(() => {\n\t\t\tif (!helpText) {\n\t\t\t\treturn {\n\t\t\t\t\tinput: {},\n\t\t\t\t\tspan: {},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst uid = generateId('radio-help-text');\n\n\t\t\treturn {\n\t\t\t\tinput: {\n\t\t\t\t\t'aria-describedby': uid,\n\t\t\t\t},\n\t\t\t\tspan: {\n\t\t\t\t\tid: uid,\n\t\t\t\t},\n\t\t\t};\n\t\t}, [helpText]);\n\n\t\tconst handleChange = React.useCallback(\n\t\t\t(event: ChangeEvent<HTMLInputElement>) => {\n\t\t\t\tif (isFunction(onChange)) {\n\t\t\t\t\tonChange(event.target.value, optionData ?? {}, event);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[onChange, optionData],\n\t\t);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\t{...containerProps}\n\t\t\t\tdata-component=\"Form/Radio\"\n\t\t\t\tclassName={cn('cayuse_radio', className)}\n\t\t\t\tref={ref}\n\t\t\t>\n\t\t\t\t<label className=\"cayuse_radio-label\">\n\t\t\t\t\t<input\n\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\tclassName={cn('cayuse_radio-input', { invalid }, inputProps.className)}\n\t\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tchecked={checked}\n\t\t\t\t\t\tdefaultChecked={defaultChecked}\n\t\t\t\t\t\tname={name}\n\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t\tonFocus={onFocus}\n\t\t\t\t\t\t{...helpTextAttrs.input}\n\t\t\t\t\t/>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t\t{helpText && (\n\t\t\t\t\t<span className=\"cayuse_radio-help-text\" {...helpTextAttrs.span}>\n\t\t\t\t\t\t{helpText}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}),\n);\n","import React from 'react';\nimport { Radio } from '../../form/radio/index.js';\nimport { Checkbox } from '../../form/checkbox/index.js';\nimport { isFunction } from '@/utils/type-checks';\nimport {\n\tDynamicTableProps,\n\tDynamicTableRow,\n\tRowSelectionChangeArgs,\n} from '../types.js';\n\nexport function SelectableCell<R>({\n\trow,\n\tisMultiSelect,\n\tonRowSelectionChange,\n\trowAriaLabel,\n}: Pick<DynamicTableProps<R>, 'isMultiSelect' | 'rowAriaLabel'> & {\n\trow: DynamicTableRow<R>;\n\tonRowSelectionChange(arg: RowSelectionChangeArgs<R>): void;\n}) {\n\tif (!row._isSelectable) {\n\t\treturn <td />;\n\t}\n\n\tconst rowLabel = isFunction(rowAriaLabel) ? rowAriaLabel({ row }) : '';\n\n\tfunction onSelect(event: React.MouseEvent) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tif (!row._isDisabledForSelection) {\n\t\t\tonRowSelectionChange({\n\t\t\t\trows: [row],\n\t\t\t\tisSelected: !row._isSelected,\n\t\t\t});\n\t\t}\n\t}\n\n\tif (isMultiSelect) {\n\t\treturn (\n\t\t\t<td className=\"dynamic-table__selectable-cell\" onClick={onSelect}>\n\t\t\t\t<Checkbox\n\t\t\t\t\taria-label={`${row._isSelected ? 'unselect' : 'select'} row ${rowLabel}`}\n\t\t\t\t\tchecked={row._isSelected}\n\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\tonChange={onSelect}\n\t\t\t\t\tdisabled={row._isDisabledForSelection}\n\t\t\t\t\tdata-testid=\"dynamic-table__multi-select\"\n\t\t\t\t/>\n\t\t\t</td>\n\t\t);\n\t}\n\n\treturn (\n\t\t<td className=\"dynamic-table__selectable-cell\" onClick={onSelect}>\n\t\t\t<Radio\n\t\t\t\tname=\"table-single-select\"\n\t\t\t\tclassName=\"dynamic-table__single-select\"\n\t\t\t\tchecked={row._isSelected}\n\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\tonChange={onSelect}\n\t\t\t\tinputProps={{\n\t\t\t\t\t'aria-label': `${row._isSelected ? 'unselect' : 'select'} row ${rowLabel}`,\n\t\t\t\t}}\n\t\t\t\tcontainerProps={{\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\tonClick: (event: any) => event.stopPropagation(),\n\t\t\t\t}}\n\t\t\t\tdata-testid=\"dynamic-table__single-select\"\n\t\t\t/>\n\t\t</td>\n\t);\n}\n","/* eslint-disable */\nimport React from 'react';\nimport {\n\tDynamicTableProps,\n\tDynamicTableRow,\n\tRow,\n\tRowSelectionChangeArgs,\n} from '../types.js';\nimport { getValueFromObjectByKeys } from '../utils.js';\nimport { ExpandRowButton } from './expand-row-button.js';\nimport { SelectableCell } from './selectable-cell.js';\n\nexport function RowContent<R>(\n\tprops: Pick<\n\t\tDynamicTableProps<R>,\n\t\t'isSelectable' | 'isMultiSelect' | 'rowAriaLabel' | 'renderCell' | 'isExpandable'\n\t> & {\n\t\tkey?: string | number;\n\t\thandleRowClick(event: React.MouseEvent<HTMLTableRowElement>): void;\n\t\tonRowSelectionChange(arg: RowSelectionChangeArgs<R>): void;\n\t\tisRowClickable: boolean;\n\t\trow: DynamicTableRow<R>;\n\t\trowIndex: number;\n\t\tsubRowIndex?: number;\n\t\theaders: DynamicTableProps<R>['headers'];\n\n\t\texpandedRows?: number[];\n\t\tisSubRow: boolean;\n\t\thasSubRows: boolean;\n\t\ttoggleExpandableRow?: any;\n\t},\n) {\n\tconst {\n\t\trow,\n\t\trowIndex,\n\t\tsubRowIndex,\n\n\t\theaders,\n\t\tisSelectable,\n\t\tisMultiSelect,\n\t\tonRowSelectionChange,\n\t\trowAriaLabel,\n\t\tisRowClickable,\n\t\thandleRowClick,\n\t\trenderCell,\n\n\t\texpandedRows,\n\t\tisExpandable,\n\t\tisSubRow,\n\t\thasSubRows,\n\t\ttoggleExpandableRow,\n\t} = props;\n\n\tconst isExpanded = expandedRows?.includes(rowIndex);\n\n\treturn (\n\t\t<tr\n\t\t\tdata-clickable={isRowClickable}\n\t\t\tdata-index={rowIndex}\n\t\t\tdata-sub-index={subRowIndex}\n\t\t\tonClick={isRowClickable ? handleRowClick : undefined}\n\t\t\taria-level={isSubRow ? 2 : 1}\n\t\t\taria-expanded={isExpandable && hasSubRows ? isExpanded : undefined}\n\t\t>\n\t\t\t{isSubRow && (\n\t\t\t\t<td\n\t\t\t\t\tcolSpan={isSelectable ? 2 : 1}\n\t\t\t\t\tclassName=\"dynamic-table__sub-row-empty-space\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{!isSubRow &&\n\t\t\t\tisExpandable &&\n\t\t\t\t(hasSubRows ? (\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<ExpandRowButton\n\t\t\t\t\t\t\tisExpanded={!!isExpanded}\n\t\t\t\t\t\t\tonClick={toggleExpandableRow}\n\t\t\t\t\t\t\tlabel=\"row\"\n\t\t\t\t\t\t\tdata-trigger=\"expand-row\"\n\t\t\t\t\t\t\tdata-row-index={rowIndex}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t) : (\n\t\t\t\t\t<td />\n\t\t\t\t))}\n\t\t\t{!isSubRow && isSelectable && (\n\t\t\t\t<SelectableCell\n\t\t\t\t\trow={row}\n\t\t\t\t\tisMultiSelect={isMultiSelect}\n\t\t\t\t\tonRowSelectionChange={onRowSelectionChange}\n\t\t\t\t\trowAriaLabel={rowAriaLabel}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{headers.map((column, colIndex) => {\n\t\t\t\treturn (\n\t\t\t\t\t<td\n\t\t\t\t\t\tkey={`row-${rowIndex}-${subRowIndex}-col-${colIndex}`}\n\t\t\t\t\t\tstyle={column.style}\n\t\t\t\t\t>\n\t\t\t\t\t\t{renderCell?.({\n\t\t\t\t\t\t\tindex: colIndex,\n\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\tvalue: getValueFromObjectByKeys<Row>(row, column.keys),\n\t\t\t\t\t\t\tgetValueFromObjectByKeys,\n\t\t\t\t\t\t}) || <span className=\"dynamic-table__empty-cell\">--</span>}\n\t\t\t\t\t</td>\n\t\t\t\t);\n\t\t\t})}\n\t\t</tr>\n\t);\n}\n","import React from 'react';\nimport { Icon } from '../../icon/index.js';\nimport { isNonEmptyString, isFunction } from '@/utils/type-checks';\nimport { DynamicTableColumn, DynamicTableProps, Row } from '../types.js';\n\nexport function TableHeadCell<R extends Row>({\n\tcolumn,\n\tisLoading,\n\tsortColumn,\n\tsortDirection,\n\tonSortChange,\n}: Pick<\n\tDynamicTableProps<R>,\n\t'isLoading' | 'sortColumn' | 'sortDirection' | 'onSortChange'\n> & {\n\tkey?: string | number;\n\tcolumn: DynamicTableColumn;\n}) {\n\tconst sortable: boolean =\n\t\tisNonEmptyString(column.sortKey) && isFunction(onSortChange);\n\tconst colSortDirection = column.sortKey === sortColumn ? sortDirection : null;\n\n\tfunction handleSortChange(\n\t\tevent:\n\t\t\t| React.MouseEvent<HTMLTableCellElement>\n\t\t\t| React.KeyboardEvent<HTMLButtonElement>,\n\t) {\n\t\tevent.stopPropagation();\n\t\tonSortChange?.(\n\t\t\t// @ts-expect-error type mismatch\n\t\t\tcolumn.sortKey,\n\t\t\tcolSortDirection === 'ascending' ? 'descending' : 'ascending',\n\t\t);\n\t}\n\n\treturn (\n\t\t// @ts-expect-error type mismatch\n\t\t<th\n\t\t\tscope=\"col\"\n\t\t\trole=\"columnheader\"\n\t\t\taria-sort={colSortDirection}\n\t\t\tdata-sort={column.sortKey === sortColumn}\n\t\t\tdata-sortable={sortable}\n\t\t\tdata-loading={isLoading ?? false}\n\t\t\tonClick={sortable ? handleSortChange : undefined}\n\t\t\tstyle={column.style}\n\t\t>\n\t\t\t{sortable ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"dynamic-table__sort-button\"\n\t\t\t\t\tdata-sort={colSortDirection}\n\t\t\t\t\taria-label={`Sort by ${column.columnHeader} in ${\n\t\t\t\t\t\tcolSortDirection !== 'ascending' ? 'ascending' : 'descending'\n\t\t\t\t\t} order`}\n\t\t\t\t\tdata-testid=\"dynamic-table__sort-button\"\n\t\t\t\t>\n\t\t\t\t\t<span style={column.styleHeader}>{column.columnHeader}</span>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<Icon name=\"caret-up\" />\n\t\t\t\t\t\t<Icon name=\"caret-down\" />\n\t\t\t\t\t</div>\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span style={column.styleHeader}>{column.columnHeader}</span>\n\t\t\t)}\n\t\t</th>\n\t);\n}\n","import React, { type InputHTMLAttributes, forwardRef, memo, useId } from 'react';\nimport { Icon } from '../../icon/index.js';\n\nimport './styles.css';\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n\tlabel?: string;\n\tinputClassName?: string;\n\tdescription?: string;\n\tonClear?(): void;\n}\n\nexport const Input = memo(\n\tforwardRef<HTMLInputElement, InputProps>(function Input(props, ref) {\n\t\tconst {\n\t\t\tclassName = '',\n\t\t\tinputClassName,\n\t\t\tlabel,\n\t\t\trequired,\n\t\t\tdescription,\n\t\t\ttype = 'text',\n\t\t\tid,\n\t\t\tonClear,\n\t\t\t...rest\n\t\t} = props;\n\n\t\tconst describedById = useId();\n\n\t\treturn (\n\t\t\t<label\n\t\t\t\thtmlFor={id}\n\t\t\t\tdata-component=\"form/input\"\n\t\t\t\tclassName={`cayuse-input ${className}`}\n\t\t\t>\n\t\t\t\t{label && (\n\t\t\t\t\t<span className=\"cayuse-input__label\">\n\t\t\t\t\t\t{required && <span className=\"cayuse-input__required\">*</span>}\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{type === 'search' && <Icon name=\"search\" />}\n\t\t\t\t<input\n\t\t\t\t\taria-describedby={description ? describedById : undefined}\n\t\t\t\t\t{...rest}\n\t\t\t\t\tid={id}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={inputClassName}\n\t\t\t\t\trequired={required}\n\t\t\t\t\ttype={type}\n\t\t\t\t/>\n\t\t\t\t{type === 'search' && props.value && props.value.toString().length > 0 && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label=\"clear search value\"\n\t\t\t\t\t\tdata-testid=\"clear-search\"\n\t\t\t\t\t\tonClick={onClear}\n\t\t\t\t\t\tclassName=\"clear-button\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"close\" />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t\t{description && (\n\t\t\t\t\t<span className=\"cayuse-input__description\" id={describedById}>\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</label>\n\t\t);\n\t}),\n);\n","import React from 'react';\nimport { Input } from '../input/index.js';\n\nexport interface NumberProps\n\textends React.DetailedHTMLProps<\n\t\tReact.InputHTMLAttributes<HTMLInputElement>,\n\t\tHTMLInputElement\n\t> {\n\t/**\n\t * If true, only integer values are allowed.\n\t */\n\tinteger?: boolean;\n}\n\nexport function Number({ integer, ...rest }: NumberProps) {\n\tconst onKeyPress: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n\t\tconst keyCode = event.keyCode;\n\t\t// @ts-expect-error type mismatch\n\t\tconst { value } = event.target;\n\t\tconst isKeyCodeANumber = keyCode >= 48 && keyCode <= 57;\n\t\tconst isKeyCodePeriod = keyCode === 46;\n\t\tconst hasDecimal = value.includes('.');\n\t\tconst isDecimalAllowed = !integer && !hasDecimal;\n\t\tconst isAllowed = isKeyCodeANumber || (isKeyCodePeriod && isDecimalAllowed);\n\n\t\tif (!isAllowed) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t};\n\n\treturn (\n\t\t// @ts-expect-error type mismatch\n\t\t<Input\n\t\t\tonKeyDown={onKeyPress}\n\t\t\tautoComplete=\"off\"\n\t\t\tinputMode=\"numeric\"\n\t\t\tpattern=\"[0-9]*\"\n\t\t\t{...rest}\n\t\t/>\n\t);\n}\n","import React from 'react';\nimport cn from 'classnames';\nimport { Radio } from '../radio/index.js';\nimport './styles.css';\n\n// Define the Option interface\ninterface Option {\n\tlabel: string;\n\tvalue: string;\n\thelpText?: string;\n}\n\nexport interface RadioGroupProps<T = HTMLInputElement> {\n\tlabel: string;\n\toptions: Option[];\n\tvalue?: string;\n\tdefaultValue?: string;\n\tname?: string;\n\tdisabled?: boolean;\n\trequired?: boolean;\n\tdescription?: string;\n\terrorMessage?: string;\n\tclassName?: string;\n\tinputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n\tcontainerProps?: React.HTMLAttributes<HTMLFieldSetElement>;\n\tonChange?: (\n\t\tvalue: string,\n\t\toptionData: Option,\n\t\tevent: React.ChangeEvent<T>,\n\t) => void;\n\tonFocus?: (event: React.FocusEvent<T>) => void;\n\tonBlur?: (event: React.FocusEvent<T>) => void;\n}\n\nexport const RadioGroup = React.memo(\n\tReact.forwardRef<HTMLFieldSetElement, RadioGroupProps>(function RadioGroup(\n\t\tprops: RadioGroupProps,\n\t\tref,\n\t) {\n\t\tconst {\n\t\t\tname,\n\t\t\tvalue,\n\t\t\tdefaultValue,\n\t\t\tonChange,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\toptions,\n\t\t\tlabel,\n\t\t\tdescription,\n\t\t\terrorMessage,\n\t\t\trequired,\n\t\t\tdisabled,\n\t\t\tclassName,\n\t\t\tinputProps = {},\n\t\t\tcontainerProps = {},\n\t\t} = props;\n\n\t\tconst groupName = React.useId();\n\t\tconst errorUid = React.useId();\n\n\t\treturn (\n\t\t\t<fieldset\n\t\t\t\t{...containerProps}\n\t\t\t\tdata-component=\"Form/Radio-Group\"\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn('cayuse_radio-group', className)}\n\t\t\t\taria-describedby={errorUid}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tname={name}\n\t\t\t>\n\t\t\t\t<legend className=\"cayuse_radio-group-legend\">\n\t\t\t\t\t{required && <span className=\"cayuse_radio-group-required\">*</span>}\n\t\t\t\t\t{label}\n\t\t\t\t</legend>\n\t\t\t\t{description && (\n\t\t\t\t\t<p className=\"cayuse_radio-group-description\">{description}</p>\n\t\t\t\t)}\n\t\t\t\t{errorMessage && (\n\t\t\t\t\t<p className=\"cayuse_radio-group-error-message\" id={errorUid}>\n\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t\t<ul className=\"cayuse_radio-group-list\">\n\t\t\t\t\t{options.map((option, k) => (\n\t\t\t\t\t\t<li key={`${groupName}-${k + 1}`} className=\"cayuse_radio-group-item\">\n\t\t\t\t\t\t\t<Radio\n\t\t\t\t\t\t\t\toptionData={option}\n\t\t\t\t\t\t\t\tlabel={option.label}\n\t\t\t\t\t\t\t\thelpText={option.helpText}\n\t\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\t\tvalue={option.value}\n\t\t\t\t\t\t\t\tdefaultChecked={\n\t\t\t\t\t\t\t\t\tdefaultValue ? defaultValue === option.value : undefined\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchecked={value ? value === option.value : undefined}\n\t\t\t\t\t\t\t\tname={groupName}\n\t\t\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t\t\t\tonFocus={onFocus}\n\t\t\t\t\t\t\t\tinvalid={Boolean(errorMessage)}\n\t\t\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t))}\n\t\t\t\t</ul>\n\t\t\t</fieldset>\n\t\t);\n\t}),\n);\n","import React, { ChangeEvent, FocusEvent } from 'react';\nimport cn from 'classnames';\nimport { isFunction } from '@/utils/type-checks';\nimport './styles.css';\n\n// Define the Toggle component props\ninterface ToggleProps {\n\tid?: string;\n\tlabel: string;\n\tname?: string;\n\tchecked?: boolean;\n\tdefaultChecked?: boolean;\n\tonChange?: (event: ChangeEvent<HTMLInputElement>) => Promise<void> | void;\n\tonFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n\tonBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n\tdisabled?: boolean;\n\tclassName?: string;\n\tinputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n\tcontainerProps?: React.HTMLAttributes<HTMLLabelElement>;\n\twithLoading?: boolean;\n}\n\nexport const Toggle = React.memo(\n\tReact.forwardRef<HTMLLabelElement, ToggleProps>(function Toggle(props, ref) {\n\t\tconst {\n\t\t\tlabel,\n\t\t\tid,\n\t\t\tname,\n\t\t\tchecked,\n\t\t\tdefaultChecked,\n\t\t\tonChange,\n\t\t\tonBlur,\n\t\t\tonFocus,\n\t\t\tdisabled,\n\t\t\tclassName,\n\t\t\tcontainerProps = {},\n\t\t\tinputProps = {},\n\t\t\twithLoading = false,\n\t\t} = props;\n\n\t\tconst [isLoading, setIsLoading] = React.useState(false);\n\n\t\tconst handleChange = async (event: ChangeEvent<HTMLInputElement>) => {\n\t\t\tif (!isFunction(onChange)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (withLoading) {\n\t\t\t\tif (isLoading) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetIsLoading(true);\n\t\t\t\tawait onChange(event);\n\t\t\t\tsetIsLoading(false);\n\t\t\t} else {\n\t\t\t\tonChange(event);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<label\n\t\t\t\t{...containerProps}\n\t\t\t\tref={ref}\n\t\t\t\tdata-component=\"form/toggle\"\n\t\t\t\tclassName={`cayuse-toggle ${className}`}\n\t\t\t\tdata-loading={isLoading}\n\t\t\t\thtmlFor={id}\n\t\t\t\tdata-testid=\"toggleTestId\"\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\t{...inputProps}\n\t\t\t\t\tclassName={cn('cayuse-toggle__input', inputProps?.className)}\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\trole=\"switch\"\n\t\t\t\t\tname={name}\n\t\t\t\t\tid={id}\n\t\t\t\t\tdefaultChecked={defaultChecked}\n\t\t\t\t\tchecked={checked}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\tonFocus={onFocus}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\taria-label={label}\n\t\t\t\t/>\n\t\t\t\t<span className=\"cayuse-toggle__state\">\n\t\t\t\t\t<span className=\"cayuse-toggle__container\">\n\t\t\t\t\t\t<span className=\"cayuse-toggle__position\">\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName=\"cayuse-toggle__position__on\"\n\t\t\t\t\t\t\t\twidth=\"14\"\n\t\t\t\t\t\t\t\theight=\"10\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 14 10\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M12.9766 0.648438C13.332 0.976562 13.332 1.55078 12.9766 1.87891L5.97656 8.87891C5.64844 9.23438 5.07422 9.23438 4.74609 8.87891L1.24609 5.37891C0.890625 5.05078 0.890625 4.47656 1.24609 4.14844C1.57422 3.79297 2.14844 3.79297 2.47656 4.14844L5.34766 7.01953L11.7461 0.648438C12.0742 0.292969 12.6484 0.292969 12.9766 0.648438Z\"\n\t\t\t\t\t\t\t\t\tfill=\"#0076B6\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName=\"cayuse-toggle__position__off\"\n\t\t\t\t\t\t\t\twidth=\"10\"\n\t\t\t\t\t\t\t\theight=\"10\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 10 10\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M9.47656 7.64844C9.83203 7.97656 9.83203 8.55078 9.47656 8.87891C9.3125 9.04297 9.09375 9.125 8.875 9.125C8.62891 9.125 8.41016 9.04297 8.24609 8.87891L5.375 6.00781L2.47656 8.87891C2.3125 9.04297 2.09375 9.125 1.875 9.125C1.62891 9.125 1.41016 9.04297 1.24609 8.87891C0.890625 8.55078 0.890625 7.97656 1.24609 7.64844L4.11719 4.75L1.24609 1.87891C0.890625 1.55078 0.890625 0.976562 1.24609 0.648438C1.57422 0.292969 2.14844 0.292969 2.47656 0.648438L5.375 3.51953L8.24609 0.648438C8.57422 0.292969 9.14844 0.292969 9.47656 0.648438C9.83203 0.976562 9.83203 1.55078 9.47656 1.87891L6.60547 4.77734L9.47656 7.64844Z\"\n\t\t\t\t\t\t\t\t\tfill=\"#5E5E5E\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t</label>\n\t\t);\n\t}),\n);\n","import React from 'react';\nimport cn from 'classnames';\nimport ReactSelect from 'react-select';\nimport AsyncReactSelect from 'react-select/async';\nimport { isNonEmptyArray } from '@/utils/type-checks';\nimport { buildOptions, isAsyncComponent } from './utils.js';\nimport {\n\tClearIndicator,\n\tControl,\n\tDropdownIndicator,\n\tInput,\n\tMenuList,\n\tMultiValueRemove,\n\tOption,\n} from './components.js';\nimport './styles.css';\n\n// Define option type for react-select\nexport interface ComboboxOption {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t[key: string]: any;\n\tlabel?: string;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tvalue?: any;\n\tsubType?: string;\n}\n\n// Define props for the Combobox component\nexport interface ComboboxProps {\n\tid?: string;\n\tlabel?: string;\n\tdescription?: string;\n\terrorMessage?: string;\n\trequired?: boolean;\n\tclassName?: string;\n\tcontainerProps?: React.FieldsetHTMLAttributes<HTMLFieldSetElement>;\n\tdisabled?: boolean;\n\tinvalid?: boolean;\n\tloadOptions?: (\n\t\tinputValue: string,\n\t) => Promise<\n\t\tComboboxOption[] | { options: ComboboxOption[]; hiddenOptionsCount: number }\n\t>;\n\toptions?: ComboboxOption[];\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tcomponents?: Record<string, React.ComponentType<any>>;\n\tallExpanded?: boolean;\n\tonExpandAllToggle?: () => void;\n\tinputClassName?: string;\n\tnoOptionsMessage?: string | ((obj: { inputValue: string }) => string);\n\tloadingMessage?: string | ((obj: { inputValue: string }) => string);\n\tshowNarrowCriteriaHint?: boolean;\n\thiddenOptionsCount?: number;\n\thiddenOptionsMessage?: string;\n\tonKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\tplaceholder?: string;\n\tisSearchable?: boolean;\n\tisClearable?: boolean;\n\tisMulti?: boolean;\n\tcacheOptions?: boolean;\n\tdefaultOptions?: boolean;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t[key: string]: any; // For remaining react-select props\n}\n\n// Type for react-select instance (simplified)\ninterface SelectInstance {\n\topenMenu: (focusOption: 'first' | 'last') => void;\n\tfocusOption: (\n\t\tdirection: 'up' | 'down' | 'pageup' | 'pagedown' | 'first' | 'last',\n\t) => void;\n\tgetFocusableOptions: () => ComboboxOption[];\n\tbuildFocusableOptions: () => ComboboxOption[];\n\tscrollToFocusedOptionOnUpdate?: boolean;\n\tmenuListRef?: HTMLElement | null;\n\tonMenuOpen: () => void;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tsetState: (state: Partial<any>, callback?: () => void) => void;\n\tstate: {\n\t\tfocusedOption: ComboboxOption | null;\n\t\tfocusedValue: ComboboxOption | null;\n\t\tselectValue: ComboboxOption[];\n\t\tisFocused: boolean;\n\t\tmenuIsOpen?: boolean;\n\t\tinputIsHiddenAfterUpdate?: boolean;\n\t};\n\tprops: {\n\t\tpageSize: number;\n\t\tisMulti: boolean;\n\t\tmenuIsOpen?: boolean;\n\t};\n}\n\nexport const Combobox = React.forwardRef<HTMLDivElement, ComboboxProps>(\n\tfunction Combobox(props, ref) {\n\t\tconst {\n\t\t\tid,\n\t\t\tlabel,\n\t\t\tdescription,\n\t\t\terrorMessage,\n\t\t\trequired,\n\t\t\tclassName,\n\t\t\tcontainerProps,\n\t\t\tdisabled,\n\t\t\tinvalid,\n\t\t\tloadOptions,\n\t\t\toptions: staticOptions,\n\t\t\tcomponents,\n\t\t\tallExpanded,\n\t\t\tonExpandAllToggle,\n\t\t\tinputClassName,\n\t\t\tnoOptionsMessage,\n\t\t\tloadingMessage,\n\t\t\tshowNarrowCriteriaHint,\n\t\t\thiddenOptionsCount,\n\t\t\thiddenOptionsMessage = '{{hiddenOptionsCount}} more items not shown, please narrow your criteria...',\n\t\t\tonKeyDown,\n\t\t\t...rest\n\t\t} = props;\n\n\t\tconst internalId = React.useId();\n\t\tconst describedById = React.useId();\n\t\tconst selectRef = React.useRef<any>(null);\n\n\t\tconst isAsync = isAsyncComponent(props);\n\n\t\tconst loadOptionsWithHiddenOptionsCount = (\n\t\t\tinputValue: string,\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t...args: any[]\n\t\t) => {\n\t\t\treturn (\n\t\t\t\tloadOptions(inputValue, ...args)\n\t\t\t\t\t// @ts-expect-error result is any\n\t\t\t\t\t.then((result) => {\n\t\t\t\t\t\tif ('options' in result) {\n\t\t\t\t\t\t\treturn buildOptions(result.options, {\n\t\t\t\t\t\t\t\tinputValue,\n\t\t\t\t\t\t\t\tshowNarrowCriteriaHint,\n\t\t\t\t\t\t\t\thiddenOptionsMessage,\n\t\t\t\t\t\t\t\thiddenOptionsCount: result.hiddenOptionsCount,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn buildOptions(result, { inputValue });\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\t\tconsole.error('Error loading options:', error);\n\t\t\t\t\t\treturn { options: [] };\n\t\t\t\t\t})\n\t\t\t);\n\t\t};\n\n\t\t/**\n\t\t * Function for workaround.\n\t\t *\n\t\t * When select is async, has loadOptions fn, value is not empty and user does async search.\n\t\t *\n\t\t * Scenario: Select has some value, the user makes a new search query,\n\t\t * Select executes the new query and returns a new list containing the element\n\t\t * that is already selected - Select does not automatically focus on the same element that is selected.\n\t\t */\n\t\tconst selectedValueFocusOption = () => {\n\t\t\tconst select = selectRef.current;\n\t\t\tif (!select) return;\n\n\t\t\tconst value = select.state.selectValue;\n\t\t\tconst options = select.getFocusableOptions();\n\n\t\t\tif (!rest.isMulti) {\n\t\t\t\tif (value.length > 0) {\n\t\t\t\t\tconst valueIndex = options.indexOf(value[0]);\n\t\t\t\t\tif (valueIndex >= 0) {\n\t\t\t\t\t\tselect.setState({\n\t\t\t\t\t\t\tfocusedOption: options[valueIndex],\n\t\t\t\t\t\t\tfocusedValue: null,\n\t\t\t\t\t\t\tfocusedOptionId: select.getFocusedOptionId(options[valueIndex]),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst updateFocusedOption = () => {\n\t\t\tconst select = selectRef.current;\n\t\t\tif (!select) return;\n\n\t\t\tconst options = select.getFocusableOptions();\n\t\t\tif (!rest.isMulti) {\n\t\t\t\tlet focusedIndex = options.indexOf(select.state.focusedOption);\n\n\t\t\t\twhile (true) {\n\t\t\t\t\tif (focusedIndex !== -1 && !options[focusedIndex]?.subType) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tfocusedIndex++;\n\t\t\t\t}\n\n\t\t\t\tselect.setState({\n\t\t\t\t\tfocusedOption: options[focusedIndex],\n\t\t\t\t\tfocusedValue: null,\n\t\t\t\t\tfocusedOptionId: select.getFocusedOptionId(options[focusedIndex]),\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Override the focusOption method of the react-select component to skip the group headings with 'while' loop.\n\t\t * @link https://github.com/JedWatson/react-select/blob/master/packages/react-select/src/Select.tsx#L967\n\t\t */\n\t\tconst focusOption = (\n\t\t\tdirection: 'up' | 'down' | 'pageup' | 'pagedown' | 'first' | 'last',\n\t\t) => {\n\t\t\tconst pageSize = selectRef.current.props.pageSize;\n\t\t\tconst focusedOption = selectRef.current.state.focusedOption;\n\t\t\tconst options = selectRef.current.getFocusableOptions();\n\n\t\t\tif (!options.length) return;\n\t\t\tlet nextFocus = 0; // handles 'first'\n\t\t\tlet focusedIndex = options.indexOf(focusedOption);\n\t\t\tif (!focusedOption) {\n\t\t\t\tfocusedIndex = -1;\n\t\t\t}\n\n\t\t\t// skip options that has any 'subType' property\n\t\t\twhile (true) {\n\t\t\t\tif (direction === 'up') {\n\t\t\t\t\tnextFocus = focusedIndex > 0 ? focusedIndex - 1 : options.length - 1;\n\t\t\t\t\tfocusedIndex--;\n\t\t\t\t} else if (direction === 'down') {\n\t\t\t\t\tnextFocus = (focusedIndex + 1) % options.length;\n\t\t\t\t\tfocusedIndex++;\n\t\t\t\t} else if (direction === 'pageup') {\n\t\t\t\t\t//todo: test focusedIndex\n\t\t\t\t\tnextFocus = focusedIndex - pageSize;\n\t\t\t\t\tif (nextFocus < 0) nextFocus = 0;\n\t\t\t\t} else if (direction === 'pagedown') {\n\t\t\t\t\t//todo: test focusedIndex\n\t\t\t\t\tnextFocus = focusedIndex + pageSize;\n\t\t\t\t\tif (nextFocus > options.length - 1) nextFocus = options.length - 1;\n\t\t\t\t} else if (direction === 'last') {\n\t\t\t\t\tnextFocus = options.length - 1;\n\t\t\t\t\tfocusedIndex--;\n\t\t\t\t}\n\n\t\t\t\tif (!options[nextFocus]?.subType) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tselectRef.current.scrollToFocusedOptionOnUpdate = true;\n\n\t\t\tselectRef.current.setState({\n\t\t\t\tfocusedOption: options[nextFocus],\n\t\t\t\tfocusedValue: null,\n\t\t\t\tfocusedOptionId: selectRef.current.getFocusedOptionId(options[nextFocus]),\n\t\t\t});\n\t\t};\n\n\t\tconst asyncProps = isAsync\n\t\t\t? {\n\t\t\t\t\tcacheOptions: rest.cacheOptions ?? false,\n\t\t\t\t\tdefaultOptions: rest.defaultOptions ?? false,\n\t\t\t\t\tloadOptions: loadOptions ? loadOptionsWithHiddenOptionsCount : undefined,\n\t\t\t\t}\n\t\t\t: {};\n\n\t\tconst selectProps = {\n\t\t\t'aria-label': label,\n\t\t\t...rest,\n\t\t\t...asyncProps,\n\t\t\tref: (instance: SelectInstance) => {\n\t\t\t\tif (instance) {\n\t\t\t\t\tselectRef.current = instance;\n\n\t\t\t\t\t// override base methods\n\t\t\t\t\tselectRef.current.focusOption = focusOption;\n\t\t\t\t}\n\t\t\t},\n\t\t\tselectedValueFocusOption,\n\t\t\tallExpanded,\n\t\t\tonExpandAllToggle,\n\t\t\tupdateFocusedOption,\n\t\t\tdescribedById: errorMessage || description ? describedById : undefined,\n\t\t\tinputId: id ?? internalId,\n\t\t\tisInvalid: invalid,\n\t\t\tisDisabled: disabled,\n\t\t\toptions: isNonEmptyArray(staticOptions)\n\t\t\t\t? buildOptions(staticOptions, {\n\t\t\t\t\t\tshowNarrowCriteriaHint,\n\t\t\t\t\t\thiddenOptionsCount,\n\t\t\t\t\t\thiddenOptionsMessage,\n\t\t\t\t\t})\n\t\t\t\t: undefined,\n\t\t\tclassNamePrefix: 'combobox',\n\t\t\tclassName: cn('combobox', inputClassName),\n\t\t\tcomponents: {\n\t\t\t\tControl: Control as React.ComponentType<any>,\n\t\t\t\tMenuList: MenuList as React.ComponentType<any>,\n\t\t\t\tOption: Option as React.ComponentType<any>,\n\t\t\t\tMultiValueRemove: MultiValueRemove as React.ComponentType<any>,\n\t\t\t\tDropdownIndicator: DropdownIndicator as React.ComponentType<any>,\n\t\t\t\tClearIndicator: ClearIndicator as React.ComponentType<any>,\n\t\t\t\tInput: Input as React.ComponentType<any>,\n\t\t\t\t...components,\n\t\t\t},\n\t\t\tnoOptionsMessage: noOptionsMessage\n\t\t\t\t? typeof noOptionsMessage === 'function'\n\t\t\t\t\t? noOptionsMessage\n\t\t\t\t\t: () => noOptionsMessage\n\t\t\t\t: undefined,\n\t\t\tloadingMessage: loadingMessage\n\t\t\t\t? typeof loadingMessage === 'function'\n\t\t\t\t\t? loadingMessage\n\t\t\t\t\t: () => loadingMessage\n\t\t\t\t: undefined,\n\t\t\tunstyled: true,\n\t\t};\n\n\t\treturn (\n\t\t\t<fieldset\n\t\t\t\t{...containerProps}\n\t\t\t\tdata-component=\"form/combobox\"\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn('combobox-fieldset', className)}\n\t\t\t\tdisabled={disabled}\n\t\t\t>\n\t\t\t\t{label && (\n\t\t\t\t\t<label htmlFor={id ?? internalId} className=\"combobox-fieldset__label\">\n\t\t\t\t\t\t{required && <span className=\"combobox-fieldset__required\">*</span>}\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\t\t\t\t{React.createElement(\n\t\t\t\t\tisAsync ? AsyncReactSelect : ReactSelect,\n\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\tselectProps,\n\t\t\t\t)}\n\t\t\t\t{errorMessage ? (\n\t\t\t\t\t<p className=\"combobox-fieldset__error-message\" id={describedById}>\n\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t</p>\n\t\t\t\t) : description ? (\n\t\t\t\t\t<p className=\"combobox-fieldset__description\" id={describedById}>\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</p>\n\t\t\t\t) : null}\n\t\t\t</fieldset>\n\t\t);\n\t},\n);\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport React from 'react';\nimport { has, omit, isNil } from 'lodash-es';\nimport { isNonEmptyArray, isNumber } from '@/utils';\n\nexport const SELECT_SUB_TYPES = {\n\tGROUP: 'group',\n\tNARROW_CRITERIA_HINT: 'narrow-criteria-hint',\n};\n\nconst buildGroupedOptions = (_options) => {\n\t/**\n\t * Check if there is a deep nesting of grouped options (2 or more levels)\n\t */\n\tif (has(_options, '[0].options[0].options')) {\n\t\tconst preparedOptions = [];\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t_options.forEach((item: any) => {\n\t\t\tpreparedOptions.push({\n\t\t\t\t...omit(item, 'options'),\n\t\t\t\tlevel: 0,\n\t\t\t\tsubType: SELECT_SUB_TYPES.GROUP,\n\t\t\t});\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t(item.options || []).forEach((subOption: any) => {\n\t\t\t\tpreparedOptions.push({\n\t\t\t\t\t...omit(subOption, 'options'),\n\t\t\t\t\tlevel: 1,\n\t\t\t\t\tsubType: SELECT_SUB_TYPES.GROUP,\n\t\t\t\t});\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tsubOption.options.forEach((childOption: any) => {\n\t\t\t\t\tchildOption.level = 2;\n\t\t\t\t\tpreparedOptions.push(childOption);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn item;\n\t\t});\n\n\t\treturn preparedOptions;\n\t}\n\tif (has(_options, '[0].options')) {\n\t\tconst preparedOptions = [];\n\n\t\t_options.forEach((item) => {\n\t\t\tpreparedOptions.push({\n\t\t\t\t...omit(item, 'options'),\n\t\t\t\tlevel: 0,\n\t\t\t\tsubType: SELECT_SUB_TYPES.GROUP,\n\t\t\t});\n\n\t\t\t(item.options || []).forEach((subOption) => {\n\t\t\t\tsubOption.level = 1;\n\t\t\t\tpreparedOptions.push(subOption);\n\t\t\t});\n\n\t\t\treturn item;\n\t\t});\n\n\t\treturn preparedOptions;\n\t}\n\n\treturn _options;\n};\n\nexport function buildOptions(\n\t_options,\n\t{\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\tinputValue,\n\t\tshowNarrowCriteriaHint,\n\t\thiddenOptionsCount,\n\t\thiddenOptionsMessage,\n\t} = {},\n) {\n\tconst options = buildGroupedOptions(_options);\n\n\tif (\n\t\tshowNarrowCriteriaHint &&\n\t\tisNonEmptyArray(options) &&\n\t\tisNumber(hiddenOptionsCount) &&\n\t\thiddenOptionsCount > 0 &&\n\t\thiddenOptionsMessage\n\t) {\n\t\toptions.unshift({\n\t\t\tlabel: hiddenOptionsMessage.replace(\n\t\t\t\t'{{hiddenOptionsCount}}',\n\t\t\t\thiddenOptionsCount,\n\t\t\t),\n\t\t\tsubType: SELECT_SUB_TYPES.NARROW_CRITERIA_HINT,\n\t\t});\n\t}\n\n\treturn options;\n}\n\nexport const isAsyncComponent = (props) => {\n\treturn (\n\t\t!isNil(props.loadOptions) ||\n\t\t!isNil(props.defaultOptions) ||\n\t\t!isNil(props.cacheOptions) ||\n\t\t!isNil(props.isLoading)\n\t);\n};\n\nexport const useIntersectionObserver = (options = {}) => {\n\tconst { threshold = 1, root = null, rootMargin = '0px' } = options;\n\tconst entry = React.useRef(null);\n\tconst [entryUpdated, forceUpdate] = React.useReducer((x) => x + 1, 0);\n\n\tconst previousObserver = React.useRef(null);\n\n\tconst customRef = React.useCallback(\n\t\t(node) => {\n\t\t\tif (previousObserver.current) {\n\t\t\t\tpreviousObserver.current.disconnect();\n\t\t\t\tpreviousObserver.current = null;\n\t\t\t}\n\n\t\t\tif (node?.nodeType === Node.ELEMENT_NODE) {\n\t\t\t\tconst observer = new IntersectionObserver(\n\t\t\t\t\t([_entry]) => {\n\t\t\t\t\t\tentry.current = _entry;\n\t\t\t\t\t\tforceUpdate();\n\t\t\t\t\t},\n\t\t\t\t\t{ threshold, root, rootMargin },\n\t\t\t\t);\n\n\t\t\t\tobserver.observe(node);\n\t\t\t\tpreviousObserver.current = observer;\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tif (previousObserver.current) {\n\t\t\t\t\tpreviousObserver.current.disconnect();\n\t\t\t\t\tpreviousObserver.current = null;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\t[threshold, root, rootMargin],\n\t);\n\n\treturn [customRef, entry.current, entryUpdated];\n};\n\nlet prevAlign = 'start';\nexport const shouldChangeAlign = (current, max) => {\n\tconst top = Math.abs(0 - current);\n\tconst bottom = Math.abs(max - current);\n\tconst shouldScrollToBottom = top > bottom;\n\tconst currentAlign = shouldScrollToBottom ? 'end' : 'start';\n\tconst changeAlign = prevAlign !== currentAlign;\n\tprevAlign = currentAlign;\n\n\treturn changeAlign;\n};\n\nexport const isVirtualized = ({ options }) => {\n\treturn options.length > 500;\n};\n","import React from 'react';\nimport { components } from 'react-select';\nimport { isNonEmptyString } from '@/utils/type-checks';\nimport { SELECT_SUB_TYPES } from './utils.js';\n\nexport const baseClearIcon = (\n\t<svg\n\t\twidth=\"11\"\n\t\theight=\"11\"\n\t\tviewBox=\"0 0 11 11\"\n\t\tfill=\"white\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t>\n\t\t<path d=\"M7.61719 5.75L10.3516 8.51172C10.707 8.83984 10.707 9.38672 10.3516 9.71484L9.75 10.3164C9.42188 10.6719 8.875 10.6719 8.54688 10.3164L5.8125 7.58203L3.05078 10.3164C2.72266 10.6719 2.17578 10.6719 1.84766 10.3164L1.24609 9.71484C0.890625 9.38672 0.890625 8.83984 1.24609 8.51172L3.98047 5.75L1.24609 3.01562C0.890625 2.6875 0.890625 2.14062 1.24609 1.8125L1.84766 1.21094C2.17578 0.855469 2.72266 0.855469 3.05078 1.21094L5.8125 3.94531L8.54688 1.21094C8.875 0.855469 9.42188 0.855469 9.75 1.21094L10.3516 1.8125C10.707 2.14062 10.707 2.6875 10.3516 3.01562L7.61719 5.75Z\" />\n\t</svg>\n);\n\nconst baseSearchIcon = (\n\t<svg\n\t\twidth=\"18\"\n\t\theight=\"18\"\n\t\tviewBox=\"0 0 18 18\"\n\t\tfill=\"#111111\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t>\n\t\t<path d=\"M16.625 14.875L12.875 11.125C13.7188 9.875 14.1562 8.3125 13.9375 6.625C13.5312 3.75 11.1875 1.4375 8.34375 1.0625C4.09375 0.53125 0.5 4.125 1.03125 8.375C1.40625 11.2188 3.71875 13.5625 6.59375 13.9688C8.28125 14.1875 9.84375 13.75 11.125 12.9062L14.8438 16.6562C15.3438 17.125 16.125 17.125 16.625 16.6562C17.0938 16.1562 17.0938 15.375 16.625 14.875ZM3.46875 7.5C3.46875 5.3125 5.25 3.5 7.46875 3.5C9.65625 3.5 11.4688 5.3125 11.4688 7.5C11.4688 9.71875 9.65625 11.5 7.46875 11.5C5.25 11.5 3.46875 9.71875 3.46875 7.5Z\" />\n\t</svg>\n);\n\nconst baseDropdownIcon = (\n\t<svg\n\t\twidth=\"10\"\n\t\theight=\"6\"\n\t\tviewBox=\"0 0 10 6\"\n\t\tfill=\"#111111\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t>\n\t\t<path d=\"M9.47656 1.50391L6.00391 5.00391C5.8125 5.16797 5.59375 5.25 5.375 5.25C5.12891 5.25 4.91016 5.16797 4.74609 5.00391L1.27344 1.50391C1 1.25781 0.917969 0.875 1.05469 0.546875C1.19141 0.21875 1.51953 0 1.875 0H8.84766C9.20312 0 9.50391 0.21875 9.64062 0.546875C9.77734 0.875 9.72266 1.25781 9.47656 1.50391Z\" />\n\t</svg>\n);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const ClearIndicator = (props: any) => {\n\tconst { ClearIcon } = props.selectProps.components;\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\taria-label=\"Clear\"\n\t\t\tref={props.innerProps.ref}\n\t\t\tonMouseDown={props.innerProps.onMouseDown}\n\t\t\tonKeyDown={(event) => {\n\t\t\t\tif (event.key === 'Enter') {\n\t\t\t\t\tprops.innerProps.onMouseDown(event);\n\t\t\t\t}\n\t\t\t}}\n\t\t\tclassName=\"combobox__clear-indicator\"\n\t\t\tdata-action=\"clear\"\n\t\t>\n\t\t\t{typeof ClearIcon === 'function'\n\t\t\t\t? ClearIcon(props)\n\t\t\t\t: React.isValidElement(ClearIcon)\n\t\t\t\t\t? ClearIcon\n\t\t\t\t\t: baseClearIcon}\n\t\t</button>\n\t);\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const StartIndicator = (props: any) => {\n\tif (!props.selectProps.isSearchable) {\n\t\treturn null;\n\t}\n\n\tconst { StartIcon } = props.selectProps.components;\n\n\treturn (\n\t\t<div className=\"combobox__start-icon\">\n\t\t\t{typeof StartIcon === 'function'\n\t\t\t\t? StartIcon(props)\n\t\t\t\t: React.isValidElement(StartIcon)\n\t\t\t\t\t? StartIcon\n\t\t\t\t\t: baseSearchIcon}\n\t\t</div>\n\t);\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const DropdownIndicator = (props: any) => {\n\tconst { DropdownIcon } = props.selectProps.components;\n\n\treturn (\n\t\t<components.DropdownIndicator {...props}>\n\t\t\t{typeof DropdownIcon === 'function'\n\t\t\t\t? DropdownIcon(props)\n\t\t\t\t: React.isValidElement(DropdownIcon)\n\t\t\t\t\t? DropdownIcon\n\t\t\t\t\t: baseDropdownIcon}\n\t\t</components.DropdownIndicator>\n\t);\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const MenuList = (props: any) => {\n\tReact.useEffect(() => {\n\t\t// force update focused option when options length has changed\n\t\tprops.selectProps.updateFocusedOption();\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [props.options.length]);\n\n\tReact.useEffect(() => {\n\t\t// force update focused option when options length has changed\n\t\tprops.selectProps.updateFocusedOption();\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [props.getValue()]);\n\n\treturn <components.MenuList {...props}>{props.children}</components.MenuList>;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const Option = (props: any) => {\n\tif (props.data.subType === SELECT_SUB_TYPES.NARROW_CRITERIA_HINT) {\n\t\tprops.innerProps['data-group'] = true;\n\t\tprops.innerProps.onClick = undefined;\n\t\tprops.innerProps.role = undefined;\n\n\t\treturn (\n\t\t\t<components.Option {...props}>\n\t\t\t\t<span className=\"combobox__has-more-options\">{props.children}</span>\n\t\t\t</components.Option>\n\t\t);\n\t}\n\n\tconst innerProps = {\n\t\t...props.innerProps,\n\t\t'data-searchable': Boolean(props.selectProps.isSearchable),\n\t};\n\n\tif (typeof props.data.level === 'number') {\n\t\tinnerProps['data-level'] = String(props.data.level);\n\t}\n\n\tif (props.data.subType === SELECT_SUB_TYPES.GROUP) {\n\t\tinnerProps['data-group'] = true;\n\t\tinnerProps.onClick = undefined;\n\t\tinnerProps.role = undefined;\n\t}\n\n\treturn (\n\t\t<components.Option {...props} innerProps={innerProps}>\n\t\t\t<span className=\"combobox__option--text\" title={props.children}>\n\t\t\t\t{props.children}\n\t\t\t</span>\n\t\t\t{isNonEmptyString(props.data.description) && (\n\t\t\t\t<span className=\"combobox__option--description\">\n\t\t\t\t\t{props.data.description}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</components.Option>\n\t);\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const Control = (props: any) => {\n\tconst { cx, selectProps, children } = props;\n\treturn (\n\t\t<components.Control\n\t\t\t{...props}\n\t\t\tclassName={cx({ 'control--is-invalid': selectProps.isInvalid })}\n\t\t>\n\t\t\t<StartIndicator {...props} />\n\t\t\t{children}\n\t\t</components.Control>\n\t);\n};\n\nexport const MultiValueRemove = (\n\tprops: React.ComponentProps<typeof components.MultiValueRemove>,\n) => {\n\t// @ts-expect-error custom component\n\tconst { ClearIcon } = props.selectProps.components;\n\n\treturn (\n\t\t<components.MultiValueRemove {...props}>\n\t\t\t{typeof ClearIcon === 'function'\n\t\t\t\t? ClearIcon(props)\n\t\t\t\t: React.isValidElement(ClearIcon)\n\t\t\t\t\t? ClearIcon\n\t\t\t\t\t: baseClearIcon}\n\t\t</components.MultiValueRemove>\n\t);\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const Input = (props: any) => {\n\tconst { describedById } = props.selectProps;\n\n\treturn (\n\t\t<components.Input\n\t\t\t{...props}\n\t\t\taria-describedby={isNonEmptyString(describedById) ? describedById : undefined}\n\t\t/>\n\t);\n};\n","import React from 'react';\nimport { useDropzone, DropzoneOptions } from 'react-dropzone';\nimport { IconButton } from '../../icon-button/index.js';\nimport { Icon } from '../../icon/index.js';\nimport { CovertButton } from '../../covert-button/index.js';\n\nimport './styles.css';\n\nexport interface FileDetailsProps {\n\tfileName: string;\n\tsize: number;\n\tonRemove: () => void;\n}\n\nexport interface MultiFileUploadProps {\n\tdictionary?: typeof defaultDictionary;\n\tdropzoneProps?: DropzoneOptions;\n\tfiles: File[];\n\tremoveFileByName: (fileName: string) => void;\n}\n\nexport const defaultDictionary = {\n\tbutton: 'Upload File',\n\ttextOr: 'or',\n\ttextDropFiles: 'Drop files here to upload',\n};\n\nfunction FileSize({ bytes }: { bytes: number }) {\n\t// NOTE: we're not handling gigabytes\n\tif (bytes >= 1000000) {\n\t\tconst megaBytes = Math.floor(bytes / 1000000);\n\t\treturn `${megaBytes} MB`;\n\t}\n\tif (bytes >= 1000) {\n\t\tconst kiloBytes = Math.floor(bytes / 1000);\n\t\treturn `${kiloBytes} KB`;\n\t}\n\treturn `${bytes} B`;\n}\n\nfunction FileDetails({ fileName, size, onRemove }: FileDetailsProps) {\n\treturn (\n\t\t<div className=\"fileDetails\">\n\t\t\t<div className=\"fileName\">{fileName}</div>\n\t\t\t<span>\n\t\t\t\t<FileSize bytes={size} />\n\t\t\t</span>\n\t\t\t<CovertButton onClick={onRemove}>\n\t\t\t\t<Icon className=\"removeFileIcon\" name=\"times\" />\n\t\t\t</CovertButton>\n\t\t</div>\n\t);\n}\n\nexport function MultiFileUpload({\n\tdictionary = defaultDictionary,\n\tdropzoneProps = {},\n\tfiles = [],\n\tremoveFileByName,\n}: MultiFileUploadProps) {\n\tconst { getRootProps, getInputProps, open } = useDropzone(dropzoneProps);\n\n\tif (files.length === 0) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\t{...getRootProps({ className: 'dropzone' })}\n\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t>\n\t\t\t\t<div className=\"contentContainer\">\n\t\t\t\t\t<input {...getInputProps()} />\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<div className=\"defaultText\">\n\t\t\t\t\t\t\t<p>{dictionary.textDropFiles}</p>\n\t\t\t\t\t\t\t<p>{dictionary.textOr}</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</span>\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tclassName=\"dz-iconButton\"\n\t\t\t\t\t\tdisabled={dropzoneProps?.disabled || false}\n\t\t\t\t\t\ticon=\"upload\"\n\t\t\t\t\t\tlabelPosition=\"left\"\n\t\t\t\t\t\tonClick={open}\n\t\t\t\t\t>\n\t\t\t\t\t\t{dictionary.button}\n\t\t\t\t\t</IconButton>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"files\">\n\t\t\t{files.map((file) => (\n\t\t\t\t<FileDetails\n\t\t\t\t\tkey={file.name}\n\t\t\t\t\tfileName={file.name}\n\t\t\t\t\tsize={file.size}\n\t\t\t\t\tonRemove={() => removeFileByName(file.name)}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","import React, { useRef, forwardRef, useCallback, useEffect } from 'react';\n// @ts-expect-error sources is not exported by some reason\nimport Quill, { Delta, Sources } from 'quill';\nimport cn from 'classnames';\nimport { isFunction, isNonEmptyArray, isNonEmptyObject } from '@/utils/type-checks';\nimport 'quill/dist/quill.snow.css';\nimport './styles.css';\n\nexport interface RichTextProps {\n\tclassName?: string;\n\tformats?: string[];\n\tmaxLength?: number;\n\tmodules?: {\n\t\ttoolbar?: Array<Array<string | object>>;\n\t\tclipboard?: { matchVisual?: boolean };\n\t\t[key: string]: unknown;\n\t};\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tonChange?: (args: { value: string }, delta: any, source: Sources) => void;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tonBlur?: (delta: any, source: any, editor: any) => void;\n\tvalue: string; // HTML string\n\t[key: string]: unknown; // Allow additional props\n}\n\n// Default modules\nconst defaultModules = {\n\tclipboard: {\n\t\tmatchVisual: false,\n\t},\n};\n\nexport const RichText = forwardRef<Quill | null, RichTextProps>(function RichText(\n\t{\n\t\tclassName: incomingClassName,\n\t\tformats,\n\t\tmaxLength,\n\t\tmodules,\n\t\tonChange,\n\t\tonBlur,\n\t\tvalue,\n\t\t...rest\n\t},\n\tref,\n) {\n\tconst quillRef = useRef<Quill>(null);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\n\tconst getLengthIgnoringNewlines = (text: string): number =>\n\t\ttext.replace(/\\n/g, '').length;\n\n\tuseEffect(() => {\n\t\tif (containerRef.current) {\n\t\t\t// @ts-expect-error type mismatch\n\t\t\tquillRef.current = new Quill(containerRef.current, {\n\t\t\t\ttheme: 'snow',\n\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\tformats: isNonEmptyArray(formats) ? formats : undefined,\n\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\tmodules: isNonEmptyObject(modules) ? modules : defaultModules,\n\t\t\t});\n\n\t\t\t// Set initial value\n\t\t\tquillRef.current.root.innerHTML = value as string;\n\n\t\t\t// Handle change\n\t\t\tquillRef.current.on('text-change', (delta, oldDelta, source) => {\n\t\t\t\tif (source === 'user' && isFunction(onChange)) {\n\t\t\t\t\tonChange({ value: quillRef.current!.root.innerHTML }, delta, source);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Handle blur\n\t\t\tquillRef.current.on('selection-change', (range, oldRange, source) => {\n\t\t\t\tif (range === null && oldRange !== null && quillRef.current) {\n\t\t\t\t\tconst delta = new Delta();\n\t\t\t\t\tconst editor = quillRef.current;\n\t\t\t\t\tconst text = editor.getText();\n\t\t\t\t\tconst linkRegex = /<a\\s+(?:[^>]*?\\s+)?href=([\"'])(.*?)\\1/gi;\n\t\t\t\t\tconst links = text.match(linkRegex);\n\n\t\t\t\t\tif (links) {\n\t\t\t\t\t\tfor (let i = 0; i < links.length; i++) {\n\t\t\t\t\t\t\tconst modifiedLink = links[i]?.replace(\n\t\t\t\t\t\t\t\tlinkRegex,\n\t\t\t\t\t\t\t\t'<a href=\"http://$2\">',\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (modifiedLink) {\n\t\t\t\t\t\t\t\teditor.clipboard.dangerouslyPasteHTML(modifiedLink);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isFunction(onBlur)) {\n\t\t\t\t\t\tonBlur(delta, source, editor);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Cleanup\n\t\t\treturn () => {\n\t\t\t\tquillRef.current?.off('text-change');\n\t\t\t\tquillRef.current?.off('selection-change');\n\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\tquillRef.current = null;\n\t\t\t};\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []); // Only run on mount\n\n\t// Sync value changes\n\tuseEffect(() => {\n\t\tif (quillRef.current && quillRef.current.root.innerHTML !== value) {\n\t\t\tquillRef.current.root.innerHTML = value as string;\n\t\t}\n\t}, [value]);\n\n\t// Handle keydown for maxLength\n\tconst handleKeydown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (maxLength && quillRef.current) {\n\t\t\t\tconst editor = quillRef.current;\n\t\t\t\tconst text = editor.getText();\n\t\t\t\tconst textLength = getLengthIgnoringNewlines(text);\n\n\t\t\t\tif (textLength >= (maxLength as number)) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[maxLength],\n\t);\n\n\t// Assign ref\n\tuseEffect(() => {\n\t\tif (ref) {\n\t\t\tif ('current' in ref) {\n\t\t\t\tref.current = quillRef.current;\n\t\t\t} else if (isFunction(ref)) {\n\t\t\t\tref(quillRef.current);\n\t\t\t}\n\t\t}\n\t}, [ref]);\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"Form\\Inputs\\RichText\"\n\t\t\tclassName={cn('richText', incomingClassName as string)}\n\t\t\tonKeyDown={handleKeydown}\n\t\t>\n\t\t\t<div ref={containerRef} {...rest} />\n\t\t</div>\n\t);\n});\n","import React, { type InputHTMLAttributes } from 'react';\nimport { isFunction } from '@/utils/type-checks';\nimport cn from 'classnames';\nimport './styles.css';\n\nexport interface TextAreaProps\n\textends Omit<InputHTMLAttributes<HTMLTextAreaElement>, 'onChange'> {\n\tlabel?: string;\n\tresizable?: boolean;\n\tincomingClassName?: string;\n\tonChange(\n\t\tevent: React.ChangeEvent<HTMLTextAreaElement>,\n\t\tdata: { value: string },\n\t): void;\n\trows?: number | undefined;\n}\n\nexport function TextArea({\n\tresizable,\n\tincomingClassName,\n\tclassName,\n\tonChange,\n\trows = 3,\n\t...rest\n}: TextAreaProps) {\n\tconst classNames = cn('textArea', { resizable }, incomingClassName, className);\n\n\tfunction handleChange(event: React.ChangeEvent<HTMLTextAreaElement>) {\n\t\tif (isFunction(onChange)) {\n\t\t\tonChange(event, { value: event.target.value });\n\t\t}\n\t}\n\n\treturn (\n\t\t<textarea className={classNames} {...rest} onChange={handleChange} rows={rows} />\n\t);\n}\n","import { useCallback, useState } from 'react';\nimport { Combobox, ComboboxProps } from '../../form/combobox/index.js';\nimport { normalizeUserToOption, UserComboboxOption, UserOption } from './utils.js';\nimport './styles.css';\n\nexport interface UserSelectProps<T> extends ComboboxProps {\n\tload(params: { searchText: string }): Promise<{\n\t\titems: T[];\n\t\ttotalPages: number;\n\t\ttotalElements: number;\n\t}>;\n}\n\nexport function UserSelect<T extends UserOption>(props: UserSelectProps<T>) {\n\tconst {\n\t\tlabel,\n\t\tloadingMessage = 'Searching...',\n\t\tplaceholderPrefix = 'Select',\n\t\tonChange,\n\t\tvalue,\n\t\tplaceholder,\n\t\tload,\n\t\t...rest\n\t} = props;\n\n\tconst [allExpanded, setAllExpanded] = useState(false);\n\n\tconst handleExpandAllToggle = useCallback(() => {\n\t\tsetAllExpanded((prev) => !prev);\n\t}, []);\n\n\tconst loadOptions = async (inputValue: string) => {\n\t\tconst { items, totalPages, totalElements } = await load({\n\t\t\tsearchText: inputValue,\n\t\t});\n\n\t\tconst personOptions = items.map((it) => normalizeUserToOption(it));\n\t\tconst options =\n\t\t\tpersonOptions.length > 0\n\t\t\t\t? [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Expand All',\n\t\t\t\t\t\t\tvalue: 'expand-all',\n\t\t\t\t\t\t\tisExpandAll: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// @ts-expect-error expected\n\t\t\t\t\t].concat(personOptions)\n\t\t\t\t: personOptions;\n\n\t\treturn {\n\t\t\toptions,\n\t\t\thiddenOptionsCount: totalPages > 1 && totalElements - items.length,\n\t\t};\n\t};\n\n\treturn (\n\t\t<Combobox\n\t\t\tloadingMessage={loadingMessage}\n\t\t\tplaceholder={placeholder ?? `${placeholderPrefix} ${label}`}\n\t\t\tonChange={(option: T | null) => {\n\t\t\t\tif (option === null) {\n\t\t\t\t\tonChange(null);\n\t\t\t\t} else if (option.value === 'expand-all') {\n\t\t\t\t\thandleExpandAllToggle();\n\t\t\t\t} else {\n\t\t\t\t\tonChange(option);\n\t\t\t\t}\n\t\t\t}}\n\t\t\tvalue={value}\n\t\t\t{...rest}\n\t\t\tloadOptions={loadOptions}\n\t\t\tcomponents={{\n\t\t\t\tOption: UserComboboxOption,\n\t\t\t\t...rest.components,\n\t\t\t}}\n\t\t\tonExpandAllToggle={handleExpandAllToggle}\n\t\t\tallExpanded={allExpanded}\n\t\t\tclassName=\"user-select\"\n\t\t/>\n\t);\n}\n","import React, { useEffect, useState } from 'react';\nimport { components } from 'react-select';\nimport { Icon } from '../../icon/index.js';\nimport { capitalizeAndJoin } from '@/utils/helpers';\n\nexport interface UserOption extends Record<string, unknown> {\n\tid?: string;\n\tfirstName: string;\n\tlastName: string;\n\tfullName?: string;\n\tunitName: string;\n\tprofileTypes?: string[];\n\tuserAccountId?: string;\n\tpersonId?: string;\n\tcontactEmail?: string;\n\temail?: string;\n\taffiliations?: Array<{\n\t\tprimaryAppointment: boolean;\n\t\tunitName?: string;\n\t}>;\n}\n\nexport interface UserSelectOption<T> {\n\tvalue: string;\n\tlabel: string;\n\tisExpanded?: boolean;\n\tuser: {\n\t\tid: string;\n\t\tuserAccountId?: string;\n\t\tpersonId?: string;\n\t\tfirstName: string;\n\t\tlastName: string;\n\t\tfullName?: string;\n\t\temail?: string;\n\t\tunitName?: string;\n\t\tprofileTypes?: string;\n\t};\n\tisExpandAll?: boolean;\n}\n\nexport function normalizeUserToOption<T extends UserOption>(userOrPersonObject: T) {\n\tlet unitName = userOrPersonObject.unitName;\n\tif (!unitName && Array.isArray(userOrPersonObject.affiliations)) {\n\t\tunitName =\n\t\t\tuserOrPersonObject.affiliations?.find((it) => it.primaryAppointment)\n\t\t\t\t?.unitName ?? '';\n\t}\n\n\treturn {\n\t\tvalue: (userOrPersonObject.userAccountId || userOrPersonObject.id)!,\n\t\tlabel: `${userOrPersonObject.firstName} ${userOrPersonObject.lastName}`,\n\t\tisExpanded: false,\n\t\tuser: {\n\t\t\tid: (userOrPersonObject.userAccountId || userOrPersonObject.id)!,\n\t\t\tuserAccountId: userOrPersonObject.userAccountId,\n\t\t\tpersonId: userOrPersonObject.personId,\n\t\t\tfullName: userOrPersonObject.fullName,\n\t\t\tfirstName: userOrPersonObject.firstName,\n\t\t\tlastName: userOrPersonObject.lastName,\n\t\t\temail: userOrPersonObject.email ?? userOrPersonObject.contactEmail,\n\t\t\tunitName,\n\t\t\tprofileTypes: capitalizeAndJoin(userOrPersonObject.profileTypes ?? []),\n\t\t},\n\t} satisfies UserSelectOption<T>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function UserComboboxOption(props: any) {\n\tconst { data, selectProps } = props;\n\tconst { isSearchable, allExpanded, onExpandAllToggle } = selectProps;\n\tconst [isExpanded, setIsExpanded] = useState(allExpanded);\n\tconst { isExpandAll } = data;\n\n\tconst innerProps = {\n\t\t...props.innerProps,\n\t\t'data-searchable': Boolean(isSearchable),\n\t};\n\n\tif (isExpandAll) {\n\t\tinnerProps.onClick = (e: React.MouseEvent) => {\n\t\t\te.stopPropagation();\n\t\t\tonExpandAllToggle(!allExpanded);\n\t\t};\n\t}\n\n\tuseEffect(() => {\n\t\tif (!isExpandAll) {\n\t\t\tsetIsExpanded(allExpanded);\n\t\t}\n\t}, [allExpanded, isExpandAll]);\n\n\tif (data.subType === 'narrow-criteria-hint') {\n\t\tinnerProps['data-group'] = true;\n\t\tinnerProps.onClick = undefined;\n\t\tinnerProps.role = undefined;\n\n\t\treturn (\n\t\t\t<components.Option {...props}>\n\t\t\t\t<span className=\"combobox__has-more-options\">{props.children}</span>\n\t\t\t</components.Option>\n\t\t);\n\t}\n\n\tconst handleExpandClick = (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tif (isExpandAll) {\n\t\t\tonExpandAllToggle(!allExpanded);\n\t\t} else {\n\t\t\tsetIsExpanded(!isExpanded);\n\t\t}\n\t};\n\n\tconst optionLabelText = isExpandAll\n\t\t? allExpanded\n\t\t\t? 'Collapse All'\n\t\t\t: 'Expand All'\n\t\t: data.label;\n\n\tconst optionLabel = (\n\t\t<span className={!isExpandAll ? 'combobox__option-container--indented' : ''}>\n\t\t\t<span onClick={handleExpandClick}>\n\t\t\t\t<Icon\n\t\t\t\t\tcolor=\"grey\"\n\t\t\t\t\tname={`chevron-${\n\t\t\t\t\t\tisExpandAll\n\t\t\t\t\t\t\t? allExpanded\n\t\t\t\t\t\t\t\t? 'down'\n\t\t\t\t\t\t\t\t: 'right'\n\t\t\t\t\t\t\t: isExpanded\n\t\t\t\t\t\t\t\t? 'down'\n\t\t\t\t\t\t\t\t: 'right'\n\t\t\t\t\t}`}\n\t\t\t\t/>\n\t\t\t</span>\n\t\t\t<span\n\t\t\t\tclassName={\n\t\t\t\t\tisExpandAll\n\t\t\t\t\t\t? 'combobox__option--expand-all-label'\n\t\t\t\t\t\t: 'combobox__option--text'\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{optionLabelText}\n\t\t\t</span>\n\t\t</span>\n\t);\n\n\treturn (\n\t\t<components.Option {...props} innerProps={innerProps}>\n\t\t\t<div\n\t\t\t\tclassName=\"combobox__option-container\"\n\t\t\t\tkey={isExpandAll ? 'expand-all' : data.value}\n\t\t\t>\n\t\t\t\t{optionLabel}\n\t\t\t\t{!isExpandAll && isExpanded && (\n\t\t\t\t\t<div className=\"combobox__option--expanded\">\n\t\t\t\t\t\t<div>{data.user.email}</div>\n\t\t\t\t\t\t<div>{data.user.unitName}</div>\n\t\t\t\t\t\t<div>{data.user.profileTypes}</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</components.Option>\n\t);\n}\n","import React, { useState, useEffect } from 'react';\nimport { Button } from '../button/index.js';\nimport { merge } from 'lodash-es';\nimport { isNonEmptyArray, isNonEmptyString, isFunction } from '@/utils/type-checks';\nimport { notify } from '../banner-notification/index.js';\nimport { PreventLeaveDialog } from '../prevent-leave-page-dialog/index.js';\nimport { FormattedRichText } from '../formatted/formatted-rich-text/index.js';\nimport ConfirmationModal from '../confirmation-modal/index.js';\nimport { APP_ENV, NODE_ENV } from '@/globals/constants';\nimport { MAX_FILE_SIZE_75_MB } from '@/hooks/use-file-uploader';\nimport {\n\tNotesSection,\n\tdefaultDictionary as notesDictionary,\n} from './components/notes-section.js';\nimport {\n\tAttachmentsSection,\n\tdefaultDictionary as attachmentsDictionary,\n} from './components/attachments-section.js';\nimport { NoteAttachmentsTable } from './components/note-attachments-table.js';\nimport { EditNoteModal } from './components/edit-note-modal.js';\n\nimport './styles.css';\nimport { MAX_NOTE_LENGTH } from './constants.js';\nimport { convertToPlainText } from './utils.js';\n\nexport interface AttachmentType {\n\tactive: boolean;\n\thash: string;\n\tvalue: string;\n}\n\nexport interface Note {\n\tcreatedBy: string;\n\tcreatedOn: string;\n\tmessage: string;\n\tnoteId: string;\n\tprojectId: string;\n\tsubmissionId: string;\n\ttenantId: string;\n\tupdatedBy: string | null;\n\tupdatedOn: string;\n\n\tupdatedByFullName?: string;\n\tcreatedByFullName?: string;\n}\n\nexport interface Attachment {\n\tname?: string;\n\tattachmentId: string;\n\tattachmentSource: string;\n\tattachmentType: string;\n\tdeletedBy: string | null;\n\tdeletedOn: string | null;\n\tfileName: string;\n\tfilePath: string;\n\thash: string | null;\n\tnoteId: string;\n\tprojectId: string;\n\tsubmissionId: string;\n\ttenantId: string;\n\tuploadedBy: string;\n\tuploadedOn: string;\n}\n\nexport type NoteWithAttachments = { note: Note; attachments: Attachment[] };\n\nexport interface FormNoteAttachmentsViewProps {\n\t/** List of available attachment types */\n\tattachmentTypes?: AttachmentType[];\n\n\t/** Function to determine if a note can be edited based on createdBy userId */\n\tcanEditNotes: (createdBy?: string) => boolean;\n\n\t/** Format string for displaying dates */\n\tdatetimeFormat: string;\n\n\t/** Function to delete an attachment by ID */\n\tdeleteAttachment: (attachmentId: string) => Promise<void>;\n\n\t/** Function to delete a note item by ID */\n\tdeleteItem: (noteId: string) => Promise<void>;\n\n\t/** Dictionary for i18n labels and messages */\n\tdictionary?: typeof baseDictionary;\n\n\t/** Function to download a file by attachment ID */\n\tdownloadFile: (attachmentId: string) => Promise<void>;\n\n\t/** Function to fetch paginated note items */\n\tfetchItems: (\n\t\tpageNumber: number,\n\t\titemsPerPage: number,\n\t) => Promise<Array<{ note: Note; attachments: Attachment[] }>>;\n\n\t/** Function to save a new note */\n\tsaveItem: (message: string) => Promise<{ noteId: string }>;\n\n\t/** Timezone for date formatting */\n\ttimezone: string;\n\n\t/** Function to update an existing note */\n\tupdateItem: (noteId: string, noteData: Partial<Note>) => Promise<void>;\n\n\t/** Function to upload an attachment */\n\tuploadAttachment: (payload: {\n\t\tattachment: File;\n\t\tattachmentType: string;\n\t\tnoteId?: string;\n\t}) => Promise<void>;\n\n\t/** Callback for uploading state changes */\n\tuploadingStateChanged?: (state: { isUploading: boolean }) => void;\n}\n\nconst IS_DEV =\n\tNODE_ENV === 'development' || NODE_ENV === 'test' || APP_ENV === 'develop';\n\nconst DEFAULT_PAGE_LIMIT = 10;\n\n/**\n * Default max file size number in bytes.\n *\n * @const\n * @readonly\n * @type {number}\n */\n\nconst defaultDictionary = {\n\tcancelButtonLabel: 'Cancel',\n\tcancelEditNote: 'Cancel',\n\tconfirmationModal: {\n\t\ttitle: 'Delete Note?',\n\t},\n\tconfirmButtonLabel: 'Confirm',\n\terror: 'Error',\n\tnotePlaceholder: 'Enter your note text here...',\n\tnoteModal: {\n\t\teditTitle: 'Edit Note',\n\t\tviewTitle: 'Note Details',\n\t},\n\tsaveEditNote: 'Save',\n};\n\nconst validateAttachments = (attachments: File[]) => {\n\tconst acceptedFiles = [];\n\tconst exceedSizeFiles = [];\n\tconst fileExtensionErrors = [];\n\n\tfor (const file of attachments) {\n\t\tconst fileExtension = file.name?.split('.')?.reverse()[0]?.toLowerCase();\n\n\t\tif (fileExtension === 'exe') {\n\t\t\tfileExtensionErrors.push(file);\n\t\t} else if (\n\t\t\tMAX_FILE_SIZE_75_MB &&\n\t\t\tfile.size != null &&\n\t\t\tfile.size > MAX_FILE_SIZE_75_MB\n\t\t) {\n\t\t\texceedSizeFiles.push(file);\n\t\t} else {\n\t\t\tacceptedFiles.push(file);\n\t\t}\n\t}\n\n\tif (fileExtensionErrors.length > 0) {\n\t\tconst error = new Error(\n\t\t\t'Attachments with filetype .exe cannot be accepted. Please try a different file type.',\n\t\t);\n\t\tnotify(error.message);\n\t}\n\tif (attachments.length === 1 && exceedSizeFiles.length === 1) {\n\t\tconst error = new Error('The uploaded file exceeds the 75 MB limit.');\n\t\tnotify(error.message);\n\t} else if (attachments.length > 1 && exceedSizeFiles.length >= 1) {\n\t\tconst error = new Error(\n\t\t\t`${exceedSizeFiles.length} of the ${attachments.length} uploaded files exceed the 75 MB limit.`,\n\t\t);\n\t\tnotify(error.message);\n\t}\n\n\treturn acceptedFiles;\n};\n\nconst findItemByNoteId = <T,>(items: T[], noteId: string) => {\n\t// @ts-expect-error type mismatch\n\treturn items.find((n) => n.noteId === noteId);\n};\n\nexport const findFirstActiveAttachmentType = (\n\tattachmentTypes: AttachmentType[],\n): string | undefined => {\n\tif (!isNonEmptyArray(attachmentTypes)) {\n\t\treturn '';\n\t}\n\tconst actives = attachmentTypes.filter((at) => at.active);\n\tif (actives.length === 0) {\n\t\treturn '';\n\t}\n\n\treturn actives[0]?.value;\n};\n\nconst baseDictionary = {\n\t...defaultDictionary,\n\t...notesDictionary,\n\t...attachmentsDictionary,\n};\n\nexport function FormNoteAttachmentsView({\n\tattachmentTypes = [],\n\tcanEditNotes,\n\tdeleteAttachment,\n\tdeleteItem,\n\tdictionary: externalDictionary,\n\tdownloadFile,\n\tfetchItems,\n\tsaveItem,\n\tupdateItem,\n\tuploadAttachment,\n\tuploadingStateChanged,\n}: FormNoteAttachmentsViewProps) {\n\tconst dictionary = merge({}, baseDictionary, externalDictionary);\n\n\tconst [newNoteMessage, setNewNoteMessage] = useState('');\n\tconst [attachmentType, setAttachmentType] = useState(\n\t\tfindFirstActiveAttachmentType(attachmentTypes),\n\t);\n\tconst [attachments, setAttachments] = useState<Attachment[]>([]);\n\tconst [reloadItems, setReloadItems] = useState(true);\n\tconst [isSaving, setSaving] = useState(false);\n\tconst [itemsPerPage, setItemsPerPage] = useState(DEFAULT_PAGE_LIMIT);\n\tconst [pageNumber, setPageNumber] = useState(1);\n\tconst [totalItems, setTotalItems] = useState(0);\n\tconst [items, setItems] = useState<NoteWithAttachments[]>([]);\n\tconst [isConfirmDeleteOpen, setIsConfirmDeleteOpen] = useState(false);\n\tconst [noteModal, setNoteModal] = useState({\n\t\tcanEdit: false,\n\t\tnoteId: '',\n\t\tisVisible: false,\n\t});\n\n\tuseEffect(() => {\n\t\tif (reloadItems) {\n\t\t\tfetchItems(pageNumber, itemsPerPage).then((data: NoteWithAttachments[]) => {\n\t\t\t\tsetTotalItems(data.length);\n\t\t\t\tsetItems(data);\n\t\t\t\tsetReloadItems(false);\n\t\t\t});\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [reloadItems]);\n\n\tconst removeAttachment = (fileName: string) => {\n\t\tsetAttachments(attachments.filter((file) => file.name !== fileName));\n\t};\n\n\tconst handleDrop = (acceptedFiles: File[]) => {\n\t\t// @ts-expect-error type mismatch\n\t\tsetAttachments(attachments.concat(validateAttachments(acceptedFiles)));\n\t};\n\n\tconst hasInvalidNote = React.useMemo(() => {\n\t\tconst plainText = convertToPlainText(newNoteMessage);\n\n\t\treturn plainText.length > MAX_NOTE_LENGTH;\n\t}, [newNoteMessage]);\n\n\tconst setUploadingState = (isUploading: boolean) => {\n\t\tif (isFunction(uploadingStateChanged)) {\n\t\t\tuploadingStateChanged({ isUploading });\n\t\t}\n\t\tsetSaving(isUploading);\n\t};\n\n\tconst handleOnSave = async () => {\n\t\tif (hasInvalidNote) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetUploadingState(true);\n\n\t\tif (isNonEmptyString(convertToPlainText(newNoteMessage))) {\n\t\t\tawait handleSaveNoteWithAttachments();\n\t\t} else {\n\t\t\tawait handleSaveAttachments();\n\t\t}\n\n\t\tsetUploadingState(false);\n\t};\n\n\tconst handleSaveNoteWithAttachments = async () => {\n\t\tconst message = encodeURI(newNoteMessage);\n\n\t\treturn saveItem(message)\n\t\t\t.then(({ noteId }) => {\n\t\t\t\tif (!noteId) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\treturn Promise.all(\n\t\t\t\t\tattachments.map((attachment) => mapAttachmentUpload(attachment, noteId)),\n\t\t\t\t);\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tsetNewNoteMessage('');\n\t\t\t\tsetAttachments([]);\n\t\t\t\tsetReloadItems(true);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconst message = IS_DEV ? error.message : dictionary.error;\n\t\t\t\tnotify(message, { type: 'error' });\n\t\t\t});\n\t};\n\n\tconst handleSaveAttachments = async () => {\n\t\tif (attachments.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// @ts-expect-error type mismatch\n\t\treturn Promise.all(attachments.map(mapAttachmentUpload))\n\t\t\t.then(() => {\n\t\t\t\tsetNewNoteMessage('');\n\t\t\t\tsetAttachments([]);\n\t\t\t\tsetReloadItems(true);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconst message = IS_DEV ? error.message : dictionary.error;\n\t\t\t\tnotify(message, { type: 'error' });\n\t\t\t});\n\t};\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst mapAttachmentUpload = async (attachment: any, noteId: string) => {\n\t\tconst payload = {\n\t\t\tattachment,\n\t\t\tattachmentType,\n\t\t\tnoteId,\n\t\t};\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\treturn uploadAttachment(payload as any);\n\t};\n\n\tconst loadNextPage = (nextPageNumber: number) => {\n\t\tsetPageNumber(nextPageNumber - 1);\n\t\tsetReloadItems(true);\n\t};\n\n\tconst updatePageSize = (_itemsPerPage: number) => {\n\t\tsetItemsPerPage(_itemsPerPage);\n\t\tsetReloadItems(true);\n\t};\n\n\tconst onNoteOpen = (canEdit: boolean, noteId: string) => {\n\t\tsetNoteModal({\n\t\t\tcanEdit,\n\t\t\tnoteId,\n\t\t\tisVisible: true,\n\t\t});\n\t};\n\tconst onNoteClose = () => {\n\t\tsetNoteModal((noteState) => ({\n\t\t\t...noteState,\n\t\t\tisVisible: false,\n\t\t}));\n\t};\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst handleEditNote = async (noteId: string, updates: any) => {\n\t\tconst actions = [];\n\t\tif (updates.isMessageChanged) {\n\t\t\tconst noteData = items\n\t\t\t\t.map((item) => item.note)\n\t\t\t\t.find((note) => note.noteId === noteId);\n\t\t\tif (noteData) {\n\t\t\t\tactions.push(\n\t\t\t\t\tupdateItem(noteId, {\n\t\t\t\t\t\t...noteData,\n\t\t\t\t\t\tmessage: updates.message,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (updates.isAttachmentsChanged) {\n\t\t\tif (updates.newAttachments.length > 0) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tupdates.newAttachments.forEach((newAttachment: any) =>\n\t\t\t\t\tactions.push(uploadAttachment(newAttachment)),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (updates.removedAttachments.length > 0) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tupdates.removedAttachments.forEach((attachmentId: any) =>\n\t\t\t\t\tactions.push(deleteAttachment(attachmentId)),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn Promise.all(actions)\n\t\t\t.catch((error) => {\n\t\t\t\tconst message = IS_DEV ? error.message : dictionary.error;\n\t\t\t\tnotify(message, { type: 'error' });\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tonNoteClose();\n\t\t\t\tsetReloadItems(true);\n\t\t\t});\n\t};\n\n\tconst handleConfirmDelete = () => {\n\t\tconst { noteId } = noteModal;\n\t\tdeleteItem(noteId)\n\t\t\t.then(() => {\n\t\t\t\tsetItems(items.filter((item) => item.note.noteId !== noteId));\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconst message = IS_DEV ? error.message : dictionary.error;\n\t\t\t\tnotify(message, { type: 'error' });\n\t\t\t});\n\t\thandleIsConfirmDeleteOpen('');\n\t};\n\n\tconst handleIsConfirmDeleteOpen = (noteId: string) => {\n\t\tsetNoteModal((noteState) => ({\n\t\t\t...noteState,\n\t\t\tnoteId: isConfirmDeleteOpen ? '' : noteId,\n\t\t}));\n\t\tsetIsConfirmDeleteOpen(!isConfirmDeleteOpen);\n\t};\n\n\tconst hasFormData =\n\t\tisNonEmptyArray(attachments) ||\n\t\tisNonEmptyString(convertToPlainText(newNoteMessage));\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"FormNoteAttachmentsView\"\n\t\t\tclassName=\"formNoteAttachmentsView\"\n\t\t>\n\t\t\t<PreventLeaveDialog prevent={isSaving} />\n\t\t\t<div className=\"noteAttachmentRow\">\n\t\t\t\t<NotesSection\n\t\t\t\t\thasInvalidData={hasInvalidNote}\n\t\t\t\t\tnewNoteMessage={newNoteMessage}\n\t\t\t\t\tonNewNoteChange={setNewNoteMessage}\n\t\t\t\t/>\n\t\t\t\t<AttachmentsSection\n\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\tattachments={attachments}\n\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\tattachmentType={attachmentType}\n\t\t\t\t\tattachmentTypes={attachmentTypes}\n\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\thandleDrop={handleDrop}\n\t\t\t\t\tremoveAttachment={removeAttachment}\n\t\t\t\t\tsetAttachmentType={setAttachmentType}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"saveButtonRow\">\n\t\t\t\t<Button\n\t\t\t\t\tbusy={isSaving}\n\t\t\t\t\tprimary\n\t\t\t\t\tdisabled={!hasFormData || hasInvalidNote}\n\t\t\t\t\tonClick={handleOnSave}\n\t\t\t\t\tid=\"save-note-btn\"\n\t\t\t\t>\n\t\t\t\t\tSave\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t\t<NoteAttachmentsTable\n\t\t\t\tcanEditNotes={canEditNotes}\n\t\t\t\tdownloadFile={downloadFile}\n\t\t\t\thandleIsConfirmDeleteOpen={handleIsConfirmDeleteOpen}\n\t\t\t\titems={items}\n\t\t\t\titemsPerPage={itemsPerPage}\n\t\t\t\tloadNextPage={loadNextPage}\n\t\t\t\tonNoteOpen={onNoteOpen}\n\t\t\t\tpageNumber={pageNumber}\n\t\t\t\ttotalItems={totalItems}\n\t\t\t\tupdatePageSize={updatePageSize}\n\t\t\t/>\n\t\t\t{noteModal.isVisible && (\n\t\t\t\t<EditNoteModal\n\t\t\t\t\tattachments={findItemByNoteId(items, noteModal.noteId)?.attachments}\n\t\t\t\t\tattachmentTypes={attachmentTypes}\n\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\ttitle={\n\t\t\t\t\t\tnoteModal.canEdit\n\t\t\t\t\t\t\t? dictionary.noteModal.editTitle ||\n\t\t\t\t\t\t\t\tdefaultDictionary.noteModal.editTitle\n\t\t\t\t\t\t\t: dictionary.noteModal.viewTitle ||\n\t\t\t\t\t\t\t\tdefaultDictionary.noteModal.viewTitle\n\t\t\t\t\t}\n\t\t\t\t\tnote={findItemByNoteId(items, noteModal.noteId)?.note}\n\t\t\t\t\tisVisible={noteModal.isVisible}\n\t\t\t\t\tonClose={onNoteClose}\n\t\t\t\t\tupdate={handleEditNote}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{isConfirmDeleteOpen && (\n\t\t\t\t<ConfirmationModal\n\t\t\t\t\ticon=\"file\"\n\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\ttitle={dictionary.confirmationModal.title}\n\t\t\t\t\tvisible={isConfirmDeleteOpen}\n\t\t\t\t\tmessage={\n\t\t\t\t\t\t<FormattedRichText\n\t\t\t\t\t\t\tvalue={decodeURI(\n\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n\t\t\t\t\t\t\t\tfindItemByNoteId(items, noteModal.noteId)?.note?.message!,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tmaxLength=\"70\"\n\t\t\t\t\t\t\tplainText\n\t\t\t\t\t\t\tsingleLine\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t\tonConfirm={handleConfirmDelete}\n\t\t\t\t\tonCancel={() => setIsConfirmDeleteOpen(false)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import { memo, useEffect } from 'react';\nimport { Prompt } from 'react-router-dom';\n\nconst preventLeavePageMessage: string =\n\t'The data is saving. Are you sure you want to leave the page?';\n\ninterface PreventLeaveDialogProps {\n\tprevent?: boolean;\n\tmessage?: string;\n}\n\nexport const PreventLeaveDialog = memo(function PreventLeaveDialog({\n\tprevent = false,\n\tmessage,\n}: PreventLeaveDialogProps) {\n\tuseEffect(() => {\n\t\twindow.onbeforeunload = prevent\n\t\t\t? (event) => {\n\t\t\t\t\tconst e = event || window.event;\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.returnValue = '';\n\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t: null;\n\t}, [prevent]);\n\n\tif (prevent) {\n\t\treturn <Prompt when message={message ?? preventLeavePageMessage} />;\n\t}\n\n\treturn null;\n});\n","import React, { useRef, useEffect, useState } from 'react';\nimport cn from 'classnames';\nimport Quill from 'quill';\nimport Linkify from 'linkify-react';\nimport 'quill/dist/quill.snow.css';\nimport './styles.css';\nimport { FormattedRichTextProps } from './types.js';\n\nconst linkifyOptions = {\n\ttarget: '_blank',\n\trel: 'noopener noreferrer',\n};\n\nexport const FormattedRichText = React.memo(function FormattedRichText({\n\tclassName: incomingClassName,\n\tmaxLength,\n\tsingleLine,\n\tplainText,\n\tvalue,\n\tshowLinks,\n}: FormattedRichTextProps) {\n\tconst ref = useRef<HTMLDivElement>(null);\n\tconst quillRef = useRef<Quill | null>(null);\n\tconst quillContainerRef = useRef<HTMLDivElement>(null);\n\tconst maxLengthInt = parseInt(String(maxLength), 10);\n\tconst [height, setHeight] = useState<string>('');\n\tconst [plainTextValue, setPlainTextValue] = useState('');\n\n\tconst classNames = cn('formattedRichText', { singleLine }, incomingClassName);\n\n\tuseEffect(() => {\n\t\tif (plainText && quillContainerRef.current) {\n\t\t\t// Initialize Quill in hidden editor\n\t\t\tquillRef.current = new Quill(quillContainerRef.current, {\n\t\t\t\ttheme: 'snow',\n\t\t\t\tmodules: { toolbar: false }, // No toolbar for hidden editor\n\t\t\t\treadOnly: true,\n\t\t\t});\n\t\t\tconsole.log('value: ', value);\n\n\t\t\t// Set initial content\n\t\t\tquillRef.current.root.innerHTML = value!;\n\n\t\t\t// Extract plain text\n\t\t\tconst updatedPlainTextValue = maxLengthInt\n\t\t\t\t? quillRef.current.getText(0, maxLengthInt)\n\t\t\t\t: quillRef.current.getText();\n\n\t\t\tconsole.log('updatedPlainTextValue: ', updatedPlainTextValue);\n\t\t\tsetPlainTextValue(updatedPlainTextValue);\n\n\t\t\t// Cleanup\n\t\t\treturn () => {\n\t\t\t\tquillRef.current = null;\n\t\t\t};\n\t\t}\n\t\tsetPlainTextValue('');\n\t}, [plainText, maxLengthInt, value]);\n\n\tuseEffect(() => {\n\t\tif (singleLine && ref.current) {\n\t\t\tconst elementLineHeightPx = window.getComputedStyle(ref.current)?.lineHeight;\n\t\t\tconst elementLineHeightWithoutPx = elementLineHeightPx.replace(/[^\\d.]/g, '');\n\t\t\tconst elementHalfLineHeight = parseInt(elementLineHeightWithoutPx, 10) / 2;\n\n\t\t\tsetHeight(`calc(1em + ${elementHalfLineHeight}px)`);\n\t\t}\n\t}, [singleLine]);\n\n\tif (!value) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"FormattedRichText\"\n\t\t\tref={ref}\n\t\t\tclassName={classNames}\n\t\t\tstyle={height ? { maxHeight: height } : {}}\n\t\t>\n\t\t\t{plainText ? (\n\t\t\t\tshowLinks ? (\n\t\t\t\t\t<Linkify options={linkifyOptions}>\n\t\t\t\t\t\t<span>{plainTextValue}</span>\n\t\t\t\t\t</Linkify>\n\t\t\t\t) : (\n\t\t\t\t\t<span>{plainTextValue}</span>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<span dangerouslySetInnerHTML={{ __html: value }} />\n\t\t\t)}\n\t\t\t{plainText && (\n\t\t\t\t<div className=\"hiddenEditor\">\n\t\t\t\t\t<div ref={quillContainerRef} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","export const MAX_NOTE_LENGTH = 5000;\n","import React from 'react';\nimport { RichText } from '../../form/rich-text/index.js';\nimport { MAX_NOTE_LENGTH } from '../constants.js';\nimport '../styles.css';\n\nconst richTextFormats = [\n\t'background',\n\t'bold',\n\t'color',\n\t'font',\n\t'code',\n\t'italic',\n\t'link',\n\t'size',\n\t'strike',\n\t'script',\n\t'underline',\n\t'blockquote',\n\t'header',\n\t'indent',\n\t'list',\n\t'align',\n\t'direction',\n\t'code-block',\n\t'formula',\n] as const;\n\ninterface NotesSectionProps {\n\tdictionary?: typeof defaultDictionary;\n\thasInvalidData: boolean;\n\tnewNoteMessage: string;\n\tonNewNoteChange: (value: string) => void;\n\tmaxNoteLength?: number;\n}\n\nexport const defaultDictionary = {\n\taddNoteAttachment: 'Add Notes and Attachments',\n\tlengthError: `Maximum amount of characters (${MAX_NOTE_LENGTH.toLocaleString()}) exceeded.`,\n\tnotePlaceholder: 'Add note...',\n};\n\nexport function NotesSection({\n\tdictionary = defaultDictionary,\n\thasInvalidData,\n\tnewNoteMessage,\n\tonNewNoteChange,\n\tmaxNoteLength = MAX_NOTE_LENGTH,\n}: NotesSectionProps) {\n\treturn (\n\t\t<div className=\"addNote\">\n\t\t\t<label htmlFor=\"note-text\">\n\t\t\t\t{dictionary.addNoteAttachment || 'Add Notes and Attachments'}\n\t\t\t</label>\n\t\t\t<div className=\"editNote\" id=\"note-text\">\n\t\t\t\t<RichText\n\t\t\t\t\tmaxLength={maxNoteLength}\n\t\t\t\t\tonChange={({ value }: { value: string }) => onNewNoteChange(value)}\n\t\t\t\t\tplaceholder={dictionary.notePlaceholder}\n\t\t\t\t\tvalue={newNoteMessage}\n\t\t\t\t\tformats={richTextFormats}\n\t\t\t\t/>\n\t\t\t\t{hasInvalidData ? (\n\t\t\t\t\t<span className=\"validationMessage\">{dictionary.lengthError}</span>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import React from 'react';\nimport { Combobox } from '../../form/combobox/index.js';\nimport { MultiFileUpload } from '../../form/multi-file-upload/index.js';\nimport '../styles.css';\n\nexport const defaultDictionary = {\n\tattachmentTypeSelector: {\n\t\tlabel: 'Attachment Type',\n\t\tplaceholder: 'Select...',\n\t},\n\tmultiFileUpload: {\n\t\tbutton: 'Upload File',\n\t\ttextOr: 'or',\n\t\ttextDropFiles: 'Drop files here to upload',\n\t},\n};\n\ninterface AttachmentType {\n\tactive: boolean;\n\thash: string;\n\tvalue: string;\n}\n\nexport interface AttachmentsSectionProps {\n\tattachments?: File[]; // Assuming attachments are File objects\n\tattachmentType: string;\n\tattachmentTypes: AttachmentType[];\n\tdictionary?: Partial<typeof defaultDictionary>;\n\thandleDrop: (acceptedFiles: File[]) => void;\n\tremoveAttachment: (fileName: string) => void;\n\tsetAttachmentType: (value: string) => void;\n}\n\nexport function AttachmentsSection({\n\tattachments = [],\n\tattachmentType,\n\tattachmentTypes,\n\tdictionary = defaultDictionary,\n\thandleDrop,\n\tremoveAttachment,\n\tsetAttachmentType,\n}: AttachmentsSectionProps) {\n\treturn (\n\t\t<div className=\"attachments-section\">\n\t\t\t<div className=\"attachmentTypeWrapper\">\n\t\t\t\t<Combobox\n\t\t\t\t\tlabel={dictionary.attachmentTypeSelector?.label}\n\t\t\t\t\tclassName=\"attachmentType\"\n\t\t\t\t\tonChange={setAttachmentType}\n\t\t\t\t\toptions={attachmentTypes\n\t\t\t\t\t\t.filter((attachment) => attachment.active)\n\t\t\t\t\t\t.map((attachment) => ({\n\t\t\t\t\t\t\tvalue: attachment.value,\n\t\t\t\t\t\t\tlabel: attachment.value,\n\t\t\t\t\t\t}))}\n\t\t\t\t\tplaceholder={dictionary.attachmentTypeSelector?.placeholder}\n\t\t\t\t\tisSearchable\n\t\t\t\t\tvalue={attachmentType}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"fileUploadWrapper\">\n\t\t\t\t<MultiFileUpload\n\t\t\t\t\tdictionary={dictionary.multiFileUpload}\n\t\t\t\t\tdropzoneProps={{\n\t\t\t\t\t\tonDrop: handleDrop,\n\t\t\t\t\t\tdisabled: !attachmentType,\n\t\t\t\t\t}}\n\t\t\t\t\tfiles={attachments}\n\t\t\t\t\tremoveFileByName={removeAttachment}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import React, { useState, useEffect } from 'react';\nimport * as _ from 'lodash-es';\nimport { CovertButton } from '../../covert-button/index.js';\nimport { FormattedDatetime } from '../../formatted/formatted-datetime/index.js';\nimport { FormattedRichText } from '../../formatted/formatted-rich-text/index.js';\nimport { Icon } from '../../icon/index.js';\nimport { isNonEmptyArray } from '@/utils/type-checks';\nimport { useTenantContext } from '@/context/tenant';\nimport {\n\tDynamicTable,\n\tDynamicTableColumn,\n\tSortDirection,\n} from '../../dynamic-table/index.js';\nimport { Attachment, NoteWithAttachments } from '../form-note-attachments-view.js';\nimport '../styles.css';\n\nconst tableInitialSort: {\n\tcolumn: string | null;\n\tdirection: SortDirection;\n} = {\n\tcolumn: null,\n\tdirection: 'ascending' as SortDirection,\n};\n\nconst formatAttachmentTitle = (fileName: string): string => {\n\treturn fileName?.length > 70 ? `${fileName.slice(0, 70)}...` : fileName;\n};\n\nconst sortItemsByUpdated = (\n\titems: NoteWithAttachments[],\n\tsortOrder: SortDirection,\n) => {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst getLastUpdatedBy = ({ note }: any) =>\n\t\tnote.updatedBy ? note.updatedByFullName : note.createdByFullName;\n\n\tconst byKey = _.sortBy(items, [getLastUpdatedBy]);\n\n\treturn sortOrder === 'ascending' ? byKey : byKey.reverse();\n};\n\nconst tableColumns: DynamicTableColumn[] = [\n\t{\n\t\tkeys: ['note'],\n\t\tcolumnHeader: 'Note',\n\t\tid: 'note',\n\t\tsortKey: 'note',\n\t\tstyle: {\n\t\t\twidth: 300,\n\t\t\toverflow: 'hidden',\n\t\t\ttextOverflow: 'ellipsis',\n\t\t\twhiteSpace: 'nowrap',\n\t\t},\n\t},\n\t{\n\t\tkeys: ['attachmentName'],\n\t\tcolumnHeader: 'Attachment',\n\t\tid: 'attachmentName',\n\t\tsortKey: 'attachmentName',\n\t\tstyle: { width: 330 },\n\t},\n\t{\n\t\tkeys: ['attachmentType'],\n\t\tcolumnHeader: 'Attachment Type',\n\t\tid: 'attachmentType',\n\t\tsortKey: 'attachmentType',\n\t\tstyle: {\n\t\t\twidth: 300,\n\t\t\tmaxWidth: 300,\n\t\t\toverflow: 'hidden',\n\t\t\ttextOverflow: 'ellipsis',\n\t\t\twhiteSpace: 'nowrap',\n\t\t},\n\t},\n\t{\n\t\tkeys: ['updatedBy'],\n\t\tcolumnHeader: 'Last Updated By',\n\t\tid: 'updatedBy',\n\t\tsortKey: 'updatedBy',\n\t\tstyle: {\n\t\t\twidth: 300,\n\t\t\tmaxWidth: 300,\n\t\t\toverflow: 'hidden',\n\t\t\ttextOverflow: 'ellipsis',\n\t\t\twhiteSpace: 'nowrap',\n\t\t},\n\t},\n\t{\n\t\tkeys: ['date'],\n\t\tcolumnHeader: 'Date',\n\t\tid: 'date',\n\t\tsortKey: 'date',\n\t\tstyle: { width: 200 },\n\t},\n\t{\n\t\tkeys: ['actions'],\n\t\tcolumnHeader: '',\n\t\tid: 'actions',\n\t\tstyle: { padding: 5, width: 70, minWidth: 70 },\n\t},\n];\n\ninterface NoteAttachmentsTableProps {\n\titems: NoteWithAttachments[];\n\titemsPerPage: number;\n\tpageNumber: number;\n\ttotalItems: number;\n\tloadNextPage(pageNumber: number): void;\n\tcanEditNotes(createdBy: string): boolean;\n\thandleIsConfirmDeleteOpen(noteId: string): void;\n\tdownloadFile(id: string, name: string, file: Attachment): void;\n\tonNoteOpen(isOpen: boolean, noteId: string): void;\n\tupdatePageSize(pageSize: number): void;\n}\n\nexport const NoteAttachmentsTable = ({\n\tcanEditNotes,\n\tdownloadFile,\n\thandleIsConfirmDeleteOpen,\n\titems,\n\titemsPerPage,\n\tloadNextPage,\n\tonNoteOpen,\n\tpageNumber,\n\ttotalItems,\n\tupdatePageSize,\n}: NoteAttachmentsTableProps) => {\n\tconst tenantCtx = useTenantContext();\n\n\tconst [sort, setSort] = useState<typeof tableInitialSort>(tableInitialSort);\n\n\tconst [sortedFilteredItems, setSortedFilteredItems] = useState(\n\t\tsortItemsByUpdated(items, sort.direction),\n\t);\n\n\tuseEffect(() => {\n\t\tconst sorted = sortItemsByUpdated(items, sort.direction);\n\t\tsetSortedFilteredItems(sorted);\n\t}, [items, sort.direction]);\n\n\treturn (\n\t\t<div className=\"note-attachments-table\">\n\t\t\t<DynamicTable<NoteWithAttachments>\n\t\t\t\theaders={tableColumns}\n\t\t\t\trows={sortedFilteredItems}\n\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\tsortColumn={sort.column}\n\t\t\t\tsortDirection={sort.direction as SortDirection}\n\t\t\t\tonSortChange={(column, direction) => {\n\t\t\t\t\tsetSort({ column, direction });\n\t\t\t\t}}\n\t\t\t\ttotalItems={totalItems}\n\t\t\t\tpageOffset={pageNumber}\n\t\t\t\tpageSize={itemsPerPage}\n\t\t\t\tonPageChange={loadNextPage}\n\t\t\t\tonPageSizeChange={updatePageSize}\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\trenderCell={(cell: any) => {\n\t\t\t\t\tconst hasAttachment = isNonEmptyArray(cell.row.attachments);\n\n\t\t\t\t\tif (cell.column.id === 'note') {\n\t\t\t\t\t\tif (cell.row.note.message) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<FormattedRichText\n\t\t\t\t\t\t\t\t\tclassName=\"messageText\"\n\t\t\t\t\t\t\t\t\tvalue={decodeURI(cell.row.note.message)}\n\t\t\t\t\t\t\t\t\tplainText\n\t\t\t\t\t\t\t\t\tshowLinks\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn '--';\n\t\t\t\t\t}\n\t\t\t\t\tif (cell.column.id === 'attachmentName') {\n\t\t\t\t\t\tif (!hasAttachment) {\n\t\t\t\t\t\t\treturn '--';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div className=\"attachments-cell\">\n\t\t\t\t\t\t\t\t{cell.row.attachments.map((it: Attachment, k: number) => (\n\t\t\t\t\t\t\t\t\t<CovertButton\n\t\t\t\t\t\t\t\t\t\tkey={k}\n\t\t\t\t\t\t\t\t\t\tonClick={() => downloadFile(it.attachmentId, it.fileName, it)}\n\t\t\t\t\t\t\t\t\t\taria-label={`Download ${it.fileName}`}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Icon name=\"download\" />\n\t\t\t\t\t\t\t\t\t\t{formatAttachmentTitle(it.fileName)}\n\t\t\t\t\t\t\t\t\t</CovertButton>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (cell.column.id === 'attachmentType') {\n\t\t\t\t\t\tif (!hasAttachment) {\n\t\t\t\t\t\t\treturn '--';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn cell.row.attachments.map((it: Attachment, k: number) => (\n\t\t\t\t\t\t\t<span key={k}>{it.attachmentType}</span>\n\t\t\t\t\t\t));\n\t\t\t\t\t}\n\t\t\t\t\tif (cell.column.id === 'updatedBy') {\n\t\t\t\t\t\treturn cell.row.note.updatedBy\n\t\t\t\t\t\t\t? cell.row.note.updatedByFullName\n\t\t\t\t\t\t\t: cell.row.note.createdByFullName;\n\t\t\t\t\t}\n\t\t\t\t\tif (cell.column.id === 'date') {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<FormattedDatetime\n\t\t\t\t\t\t\t\tdate={cell.row.note.updatedOn ?? cell.row.note.createdOn}\n\t\t\t\t\t\t\t\ttenantTimezone={tenantCtx.data.tenant.timezone}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (cell.column.id === 'actions') {\n\t\t\t\t\t\treturn canEditNotes(cell.row.note.createdBy) ? (\n\t\t\t\t\t\t\t<div className=\"row-actions\">\n\t\t\t\t\t\t\t\t<CovertButton\n\t\t\t\t\t\t\t\t\taria-label=\"Edit note\"\n\t\t\t\t\t\t\t\t\tclassName=\"iconButton\"\n\t\t\t\t\t\t\t\t\tonClick={() => onNoteOpen(true, cell.row.note.noteId)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon name=\"pencil\" noMargin />\n\t\t\t\t\t\t\t\t</CovertButton>\n\t\t\t\t\t\t\t\t<CovertButton\n\t\t\t\t\t\t\t\t\taria-label=\"Delete note\"\n\t\t\t\t\t\t\t\t\tclassName=\"iconButton\"\n\t\t\t\t\t\t\t\t\tonClick={() => handleIsConfirmDeleteOpen(cell.row.note.noteId)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon name=\"trash\" noMargin />\n\t\t\t\t\t\t\t\t</CovertButton>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t' '\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport React, { useState } from 'react';\nimport { Button } from '../../button';\nimport { ModalDialog as Modal } from '../../modal-dialog';\nimport { CovertButton } from '../../covert-button';\nimport { Icon } from '../../icon';\nimport { RichText } from '../../form/rich-text';\nimport { findFirstActiveAttachmentType } from '../form-note-attachments-view';\nimport { AttachmentsSection } from './attachments-section';\nimport { convertToPlainText } from '../utils.js';\nimport '../styles.css';\nimport { MAX_NOTE_LENGTH } from '../constants.js';\n\nconst dictionaryDefaults = {\n\tcancelEditNote: 'Cancel',\n\tnotePlaceholder: 'Enter your note text here...',\n\tsaveEditNote: 'Save',\n\ttitle: 'Note',\n\tlengthError: `Maximum amount of characters (${MAX_NOTE_LENGTH.toLocaleString()}) exceeded.`,\n};\n\nconst initialUpdates = {\n\tisMessageChanged: false,\n\tisAttachmentsChanged: false,\n\tmessage: '',\n\tnewAttachments: [],\n\tremovedAttachments: [],\n};\n\nexport const EditNoteModal = ({\n\tattachments,\n\tattachmentTypes,\n\tdictionary,\n\tnote,\n\tisVisible,\n\tonClose,\n\ttitle,\n\tupdate,\n\tmaxNoteLength = MAX_NOTE_LENGTH,\n}) => {\n\tconst { message, noteId } = note;\n\tconst [attachmentType, setAttachmentType] = useState(\n\t\tfindFirstActiveAttachmentType(attachmentTypes),\n\t);\n\tconst [updates, setUpdates] = useState({\n\t\t...initialUpdates,\n\t\tmessage,\n\t});\n\tconst [isSaving, setIsSaving] = useState(false);\n\n\tconst onUpdateNoteChange = (value) => {\n\t\tsetUpdates((updateState) => ({\n\t\t\t...updateState,\n\t\t\tisMessageChanged: encodeURI(value) !== message,\n\t\t\tmessage: encodeURI(value),\n\t\t}));\n\t};\n\n\tconst handleDrop = (acceptedFiles) => {\n\t\tsetUpdates((updateState) => ({\n\t\t\t...updateState,\n\t\t\tisAttachmentsChanged: acceptedFiles.length !== 0,\n\t\t\tnewAttachments: [\n\t\t\t\t...updateState.newAttachments,\n\t\t\t\t...acceptedFiles.map((attachment) => ({\n\t\t\t\t\tattachment,\n\t\t\t\t\tattachmentType,\n\t\t\t\t\tnoteId,\n\t\t\t\t})),\n\t\t\t],\n\t\t}));\n\t};\n\n\tconst removeAttachment = (fileName) => {\n\t\tsetUpdates((updateState) => ({\n\t\t\t...updateState,\n\t\t\tnewAttachments: updateState.newAttachments.filter(\n\t\t\t\t(file) => file.name !== fileName,\n\t\t\t),\n\t\t}));\n\t};\n\n\tconst handleUpdate = async () => {\n\t\tsetIsSaving(true);\n\t\tupdate(noteId, updates).finally(() => {\n\t\t\tif (isVisible) {\n\t\t\t\tsetIsSaving(false);\n\t\t\t}\n\t\t});\n\t};\n\n\tconst renderAttachment = (attachment) => {\n\t\treturn (\n\t\t\t<div className=\"attachmentRow\" key={attachment.attachmentId}>\n\t\t\t\t<div>{attachment.attachmentType}</div>\n\t\t\t\t<div className=\"attachmentCell\">{attachment.fileName}</div>\n\t\t\t\t<CovertButton\n\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\tsetUpdates((updateState) => ({\n\t\t\t\t\t\t\t...updateState,\n\t\t\t\t\t\t\tisAttachmentsChanged: true,\n\t\t\t\t\t\t\tremovedAttachments: [\n\t\t\t\t\t\t\t\t...updateState.removedAttachments,\n\t\t\t\t\t\t\t\tattachment.attachmentId,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t}))\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<Icon className=\"removeAttachmentIcon\" name=\"times\" />\n\t\t\t\t</CovertButton>\n\t\t\t</div>\n\t\t);\n\t};\n\tconst renderNewAttachment = ({ attachment, attachmentType }) => {\n\t\treturn (\n\t\t\t<div className=\"attachmentRow\" key={attachment.name}>\n\t\t\t\t<div>{attachmentType}</div>\n\t\t\t\t<div className=\"attachmentCell\">{attachment.name}</div>\n\t\t\t\t<CovertButton\n\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\tsetUpdates((updateState) => ({\n\t\t\t\t\t\t\t...updateState,\n\t\t\t\t\t\t\tisAttachmentsChanged: true,\n\t\t\t\t\t\t\tnewAttachments: updateState.newAttachments.filter(\n\t\t\t\t\t\t\t\t(newAttach) => newAttach.attachment.name !== attachment.name,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t}))\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<Icon className=\"removeAttachmentIcon\" name=\"times\" />\n\t\t\t\t</CovertButton>\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst visibleAttachments = attachments.filter(\n\t\t({ attachmentId }) => !updates.removedAttachments.includes(attachmentId),\n\t);\n\n\tconst decodeAndCheckMessage = (message, check) => {\n\t\tconst decodedMessage = decodeURI(message);\n\t\tconst plainText = convertToPlainText(decodedMessage);\n\n\t\treturn check(plainText);\n\t};\n\n\tconst hasValidUpdatedMessage = () =>\n\t\t!updates.isMessageChanged ||\n\t\tdecodeAndCheckMessage(\n\t\t\tupdates.message,\n\t\t\t(text) => text.length > 0 && text.length <= maxNoteLength,\n\t\t);\n\n\tconst hasTooLongMessage = () =>\n\t\tdecodeAndCheckMessage(updates.message, (text) => text.length > maxNoteLength);\n\n\treturn (\n\t\t<Modal open={isVisible} onClose={onClose}>\n\t\t\t<Modal.Header className=\"ui header\">\n\t\t\t\t{title || dictionaryDefaults.title}\n\t\t\t</Modal.Header>\n\t\t\t<Modal.Content scrolling>\n\t\t\t\t<div className=\"editModalRichText\">\n\t\t\t\t\t<RichText\n\t\t\t\t\t\tclassName=\"richTextInput\"\n\t\t\t\t\t\tmaxLength={maxNoteLength}\n\t\t\t\t\t\tonChange={({ value }) => onUpdateNoteChange(value)}\n\t\t\t\t\t\tplaceholder={\n\t\t\t\t\t\t\tdictionary.notePlaceholder || dictionaryDefaults.notePlaceholder\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue={decodeURI(updates.message)}\n\t\t\t\t\t/>\n\t\t\t\t\t{hasTooLongMessage() && (\n\t\t\t\t\t\t<span className=\"validationMessage\">\n\t\t\t\t\t\t\t{dictionary.lengthError || dictionaryDefaults.lengthError}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t{(visibleAttachments.length > 0 || updates.newAttachments.length > 0) && (\n\t\t\t\t\t<div className=\"editModalAttachments\">\n\t\t\t\t\t\t{visibleAttachments.map(renderAttachment)}\n\t\t\t\t\t\t{updates.newAttachments.map(renderNewAttachment)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<AttachmentsSection\n\t\t\t\t\tattachments={[]}\n\t\t\t\t\tattachmentType={attachmentType}\n\t\t\t\t\tattachmentTypes={attachmentTypes}\n\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\thandleDrop={handleDrop}\n\t\t\t\t\tremoveAttachment={removeAttachment}\n\t\t\t\t\tsetAttachmentType={setAttachmentType}\n\t\t\t\t/>\n\t\t\t</Modal.Content>\n\t\t\t<Modal.Actions>\n\t\t\t\t<div className=\"field\">\n\t\t\t\t\t<Button className=\"cancelButton\" secondary onClick={onClose}>\n\t\t\t\t\t\t{dictionary.cancelEditNote || dictionaryDefaults.cancelEditNote}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tbusy={isSaving}\n\t\t\t\t\t\tonClick={handleUpdate}\n\t\t\t\t\t\tdisabled={!hasValidUpdatedMessage()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{dictionary.saveEditNote || dictionaryDefaults.saveEditNote}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</Modal.Actions>\n\t\t</Modal>\n\t);\n};\n\nEditNoteModal.defaultProps = {\n\tattachments: [],\n\tattachmentTypes: [],\n\tdictionary: {\n\t\t...dictionaryDefaults,\n\t},\n};\n","export const convertToPlainText = (string: string) => {\n\tif (string.length > 0) {\n\t\treturn string\n\t\t\t.replace(/(<([^>]+)>)/gi, '')\n\t\t\t.replace(\n\t\t\t\t/&(?:nbsp|amp|gt|lt);/g,\n\t\t\t\t(match) =>\n\t\t\t\t\t({\n\t\t\t\t\t\t'&nbsp;': ' ',\n\t\t\t\t\t\t'&amp;': '&',\n\t\t\t\t\t\t'&gt;': '>',\n\t\t\t\t\t\t'&lt;': '<',\n\t\t\t\t\t})[match]!,\n\t\t\t)\n\t\t\t.trim();\n\t}\n\n\treturn '';\n};\n","import React from 'react';\nimport { FIELD_TYPES } from '@/globals/constants';\nimport { FormattedDate } from '../formatted-date/index.js';\nimport { FormattedDatetime } from '../formatted-datetime/index.js';\nimport { FormattedRichText } from '../formatted-rich-text/index.js';\n\n// Define FIELD_TYPES values (assumed structure)\ntype FieldType =\n\t| typeof FIELD_TYPES.DATE\n\t| typeof FIELD_TYPES.DATETIME\n\t| typeof FIELD_TYPES.RICH_TEXT;\n\nexport interface FormattedValueProps {\n\ttype: FieldType;\n\tvalue?: unknown;\n\tfallback?: string;\n\t[key: string]: unknown;\n}\n\nexport const FormattedValue = React.memo(function FormattedValue({\n\ttype,\n\tvalue,\n\tfallback,\n\t...rest\n}: FormattedValueProps) {\n\tswitch (type) {\n\t\tcase FIELD_TYPES.DATE: {\n\t\t\treturn <FormattedDate date={value as string | Date} {...rest} />;\n\t\t}\n\t\tcase FIELD_TYPES.DATETIME: {\n\t\t\treturn <FormattedDatetime date={value as string | Date} {...rest} />;\n\t\t}\n\t\tcase FIELD_TYPES.RICH_TEXT: {\n\t\t\treturn <FormattedRichText value={value as string | undefined} {...rest} />;\n\t\t}\n\t\tdefault: {\n\t\t\treturn <span {...rest}>{(value as React.ReactNode) ?? fallback}</span>;\n\t\t}\n\t}\n});\n","import React, { useState, memo, useLayoutEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { components } from 'react-select';\nimport { ModalDialog } from '../modal-dialog/index.js';\nimport { notify } from '../banner-notification/index.js';\nimport { DynamicTable, SortDirection } from '../dynamic-table/index.js';\nimport { Button } from '../button/index.js';\nimport { IconButton } from '../icon-button/index.js';\nimport { Icon } from '../icon/index.js';\nimport { Combobox } from '../form/combobox/index.js';\n\nimport {\n\tLinkToMilestoneProps,\n\tMilestoneOption,\n\tSelectedTask,\n\tTask,\n} from './types.js';\nimport {\n\tdefaultDictionary,\n\tlinkTasksToMilestone,\n\tadminLoadOptions,\n\ttableColumns,\n\ttableInitialSort,\n} from './utils.js';\nimport './styles.css';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction MilestoneComboboxOption(props: any) {\n\treturn (\n\t\t<components.Option {...props}>\n\t\t\t<span className=\"link-to-milestone-combobox__option\">\n\t\t\t\t{props.data.taskCounter}\n\t\t\t\t<b>{props.data.taskName}</b>\n\t\t\t</span>\n\t\t</components.Option>\n\t);\n}\n\nexport const LinkToMilestone = memo(function LinkToMilestone<T extends Task>(\n\tprops: LinkToMilestoneProps<T>,\n) {\n\tconst {\n\t\ttasks,\n\t\tmilestoneCategory,\n\t\tonSuccess,\n\t\tloadMilestoneOptions,\n\t\ttableRenderCell,\n\t} = props;\n\n\tconst dictionary = { ...defaultDictionary, ...props.dictionary };\n\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [selectedMilestone, setSelectedMilestone] = useState<MilestoneOption | null>(\n\t\tnull,\n\t);\n\tconst [selectedTasks, setSelectedTasks] = useState<SelectedTask[]>([]);\n\tconst [sort, setSort] = useState<typeof tableInitialSort>(tableInitialSort);\n\tconst [isLoading, setIsLoading] = useState(false);\n\n\tuseLayoutEffect(() => {\n\t\tif (isOpen) {\n\t\t\tsetSelectedTasks(tasks);\n\t\t} else {\n\t\t\tsetSelectedMilestone(null);\n\t\t\tsetSelectedTasks([]);\n\t\t\tsetIsLoading(false);\n\t\t\tsetSort(tableInitialSort);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [isOpen]);\n\n\tasync function handleConfirm() {\n\t\ttry {\n\t\t\tsetIsLoading(true);\n\n\t\t\tawait linkTasksToMilestone(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n\t\t\t\tselectedMilestone?.value!,\n\t\t\t\tselectedTasks.map((task) => ({\n\t\t\t\t\ttaskId: task.id,\n\t\t\t\t\tlink: true,\n\t\t\t\t})),\n\t\t\t);\n\n\t\t\tif (typeof onSuccess === 'function') {\n\t\t\t\tawait onSuccess();\n\t\t\t}\n\n\t\t\tnotify(dictionary.successMessage, { type: 'success' });\n\t\t\tsetIsOpen(false);\n\t\t} finally {\n\t\t\tsetIsLoading(false);\n\t\t}\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Button disabled={tasks.length === 0} primary onClick={() => setIsOpen(true)}>\n\t\t\t\t<Icon name=\"add\" />\n\t\t\t\t{dictionary.triggerButtonLabel}\n\t\t\t</Button>\n\t\t\t<ModalDialog\n\t\t\t\ttitle={dictionary.modalHeader}\n\t\t\t\tisOpen={isOpen}\n\t\t\t\tonCancel={() => {\n\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t}}\n\t\t\t\tonConfirm={handleConfirm}\n\t\t\t\tconfirmText={dictionary.confirm}\n\t\t\t\tconfirmButtonProps={{\n\t\t\t\t\tdisabled: selectedTasks.length === 0 || !selectedMilestone,\n\t\t\t\t\tbusy: isLoading,\n\t\t\t\t}}\n\t\t\t\tdialogClassName=\"link-to-milestone__modal\"\n\t\t\t>\n\t\t\t\t<div className=\"link-to-milestone__modal-content\">\n\t\t\t\t\t<div className=\"link-to-milestone-combobox\">\n\t\t\t\t\t\t<label htmlFor=\"link-to-milestone-combobox\">\n\t\t\t\t\t\t\t{dictionary.comboboxLabel}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<Combobox\n\t\t\t\t\t\t\tid=\"link-to-milestone-combobox\"\n\t\t\t\t\t\t\tdisabled={isLoading}\n\t\t\t\t\t\t\tloadingMessage={dictionary.comboboxLoadingMessage}\n\t\t\t\t\t\t\tplaceholder={dictionary.comboboxPlaceholder}\n\t\t\t\t\t\t\tdescription={dictionary.comboboxDescription}\n\t\t\t\t\t\t\tloadOptions={(searchText: string) => {\n\t\t\t\t\t\t\t\tif (typeof loadMilestoneOptions === 'function') {\n\t\t\t\t\t\t\t\t\treturn loadMilestoneOptions(searchText);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn adminLoadOptions({\n\t\t\t\t\t\t\t\t\tsort: 'taskCounterNumeric',\n\t\t\t\t\t\t\t\t\tsearchText,\n\t\t\t\t\t\t\t\t\tmilestoneCategory,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\tonChange={(option) => {\n\t\t\t\t\t\t\t\tsetSelectedMilestone(option);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tvalue={selectedMilestone}\n\t\t\t\t\t\t\tcomponents={{\n\t\t\t\t\t\t\t\tOption: MilestoneComboboxOption,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<DynamicTable\n\t\t\t\t\t\theaders={tableColumns}\n\t\t\t\t\t\trows={selectedTasks}\n\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\tsortColumn={sort.column}\n\t\t\t\t\t\tsortDirection={sort.direction as SortDirection}\n\t\t\t\t\t\tonSortChange={(column: string, direction: string | null) => {\n\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\tsetSort({ column, direction });\n\t\t\t\t\t\t\tsetSelectedTasks((prev) => {\n\t\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\t\treturn prev.toSorted((a, b) => {\n\t\t\t\t\t\t\t\t\tlet aVal = String(a[column] ?? '');\n\t\t\t\t\t\t\t\t\tlet bVal = String(b[column] ?? '');\n\t\t\t\t\t\t\t\t\tif (column === 'to') {\n\t\t\t\t\t\t\t\t\t\taVal =\n\t\t\t\t\t\t\t\t\t\t\t(a.teamName ?? '').trim().toLowerCase() +\n\t\t\t\t\t\t\t\t\t\t\t(a.to ?? '').trim().toLowerCase();\n\t\t\t\t\t\t\t\t\t\tbVal =\n\t\t\t\t\t\t\t\t\t\t\t(b.teamName ?? '').trim().toLowerCase() +\n\t\t\t\t\t\t\t\t\t\t\t(b.to ?? '').trim().toLowerCase();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (aVal === '' && bVal === '') return 0;\n\t\t\t\t\t\t\t\t\t// Place empty values at the end\n\t\t\t\t\t\t\t\t\tif (aVal === '') return 1;\n\t\t\t\t\t\t\t\t\tif (bVal === '') return -1;\n\t\t\t\t\t\t\t\t\treturn direction === 'ascending'\n\t\t\t\t\t\t\t\t\t\t? aVal.localeCompare(bVal)\n\t\t\t\t\t\t\t\t\t\t: bVal.localeCompare(aVal);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\t\trenderCell={(cell: any) => {\n\t\t\t\t\t\t\tif (cell.column.id === 'taskCounter') {\n\t\t\t\t\t\t\t\tif (cell.row.category?.includes('CAYUSE_SP')) {\n\t\t\t\t\t\t\t\t\tlet href = `${cell.row.url}/task/${cell.row.id}`;\n\t\t\t\t\t\t\t\t\tif (cell.row.category === 'CAYUSE_SP_MILESTONE') {\n\t\t\t\t\t\t\t\t\t\thref = `${cell.row.url}/milestone/${cell.row.id}`;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<a href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t\t\t\t\t\t\t\t\t\t{cell.value}\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet href = cell.row.url;\n\t\t\t\t\t\t\t\tif (cell.row.category === 'CAYUSE_AD_MILESTONE') {\n\t\t\t\t\t\t\t\t\thref = `/milestones/${cell.row.id}/edit`;\n\t\t\t\t\t\t\t\t} else if (cell.row.category === 'CAYUSE_AD_HOC') {\n\t\t\t\t\t\t\t\t\thref = `/tasks/${cell.row.id}/edit`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\tto={href}\n\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{cell.value}\n\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cell.column.id === 'actions') {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\ttertiary\n\t\t\t\t\t\t\t\t\t\ticon=\"trash\"\n\t\t\t\t\t\t\t\t\t\taria-label={dictionary.removeTaskButtonLabel}\n\t\t\t\t\t\t\t\t\t\ttitle={dictionary.removeTaskButtonLabel}\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\tif (isLoading) return;\n\t\t\t\t\t\t\t\t\t\t\tsetSelectedTasks(\n\t\t\t\t\t\t\t\t\t\t\t\tselectedTasks.filter((item) => item.id !== cell.row.id),\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn tableRenderCell?.(cell) ?? cell.value;\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</ModalDialog>\n\t\t</>\n\t);\n});\n","import { request } from '@/utils/http';\nimport { FLOWABLE_BASE_URL } from '@/globals/constants';\nimport type { DynamicTableColumn } from '../dynamic-table/index.js';\nimport type { MilestoneOption } from './types.js';\n\nexport const tableInitialSort = { column: null, direction: 'ascending' };\n\nexport const tableColumns: DynamicTableColumn[] = [\n\t{\n\t\tkeys: ['taskCounter'],\n\t\tcolumnHeader: 'ID',\n\t\tid: 'taskCounter',\n\t\tsortKey: 'taskCounter',\n\t\tstyle: { width: 100 },\n\t},\n\t{\n\t\tkeys: ['task'],\n\t\tcolumnHeader: 'Title',\n\t\tid: 'task',\n\t\tsortKey: 'task',\n\t\tstyle: {\n\t\t\tmaxWidth: 250,\n\t\t\toverflow: 'hidden',\n\t\t\ttextOverflow: 'ellipsis',\n\t\t\twhiteSpace: 'nowrap',\n\t\t\ttextWrap: 'initial',\n\t\t},\n\t},\n\t{\n\t\tkeys: ['userCategory'],\n\t\tcolumnHeader: 'Category',\n\t\tid: 'userCategory',\n\t\tsortKey: 'userCategory',\n\t},\n\t{\n\t\tkeys: ['to'],\n\t\tcolumnHeader: 'Assigned to',\n\t\tid: 'to',\n\t\tsortKey: 'to',\n\t\tstyle: {\n\t\t\tmaxWidth: 180,\n\t\t},\n\t},\n\t{\n\t\tkeys: ['actions'],\n\t\tcolumnHeader: '',\n\t\tid: 'actions',\n\t\tstyle: { padding: 3, width: 30 },\n\t},\n];\n\nexport const defaultDictionary = {\n\tcomboboxPlaceholder: undefined,\n\tcomboboxLoadingMessage: 'Searching...',\n\tcomboboxLabel: 'Milestone',\n\tcomboboxDescription: 'Search for the ID or Title of a Milestone',\n\tcancel: 'Cancel',\n\tconfirm: 'Link to Milestone',\n\tmodalHeader: 'Link to Milestone',\n\ttriggerButtonLabel: 'Link to Milestone',\n\tremoveTaskButtonLabel: 'Remove task',\n\tsuccessMessage: 'Your changes have been saved.',\n};\n\nexport async function adminLoadOptions({\n\tsort,\n\torder = 'asc',\n\tsearchText,\n\tmilestoneCategory,\n\tsubmissionId,\n}: {\n\tsort: string;\n\torder?: string;\n\tsearchText: string;\n\tmilestoneCategory: string;\n\tsubmissionId?: string;\n}) {\n\tconst baseParams = {\n\t\tincludeTaskLocalVariables: true,\n\t\tincludeProcessVariables: true,\n\t\tsort,\n\t\torder,\n\t\tstart: 0,\n\t\tsize: 30,\n\t\ttype: milestoneCategory,\n\t\tfilterByStatus: 'OPEN,ON_HOLD,IN_PROGRESS',\n\t\tsearchText,\n\t\tsearchBy: 'id,name',\n\t\tsubmissionId,\n\t};\n\n\tconst searchParams = Object.entries(baseParams)\n\n\t\t.filter(([_, value]) => !!value)\n\t\t.map(\n\t\t\t([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value!)}`,\n\t\t)\n\t\t.join('&');\n\n\ttry {\n\t\tconst response = await request(\n\t\t\t`${FLOWABLE_BASE_URL}/cayuse-api/query/tasks/admin-platform-my-tasks-v2/nested?${searchParams}`,\n\t\t\tbaseParams,\n\t\t);\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\treturn response.data.map((it: any) => {\n\t\t\treturn {\n\t\t\t\tvalue: it.id,\n\t\t\t\tlabel: `${it.variables?.taskCounter} - ${it.name}`,\n\t\t\t\ttaskCounter: it.variables?.taskCounter,\n\t\t\t\ttaskName: it.name,\n\t\t\t} satisfies MilestoneOption;\n\t\t});\n\t} catch (e) {\n\t\tconsole.error('Error loading options: ', e);\n\t\treturn [] as MilestoneOption[];\n\t}\n}\n\nexport async function linkTasksToMilestone(\n\tmilestoneId: string,\n\tdata: { taskId: string; link: boolean }[],\n) {\n\tif (!data || data.length === 0) return Promise.resolve([]);\n\n\treturn await request(`${FLOWABLE_BASE_URL}/milestones/link-tasks/${milestoneId}`, {\n\t\theaders: { 'Content-Type': 'application/json' },\n\t\tmethod: 'POST',\n\t\tbody: JSON.stringify(data),\n\t});\n}\n","import React, { KeyboardEvent } from 'react';\nimport {\n\tNavLink as RouterLink,\n\tNavLinkProps as RouterLinkProps,\n} from 'react-router-dom';\nimport { KEY_CODES } from '@/globals/constants';\nimport './styles.css';\n\ninterface NavLinkProps extends Omit<RouterLinkProps, 'to'> {\n\tpath: string;\n\ttext: string;\n}\n\nexport function NavLink({ path, text, ...props }: NavLinkProps) {\n\tconst onKeydown = (event: KeyboardEvent<HTMLAnchorElement>) => {\n\t\tif (event.keyCode === KEY_CODES.SPACE) {\n\t\t\tevent.preventDefault();\n\t\t\t// @ts-expect-error type mismatch\n\t\t\tevent.target.click();\n\t\t}\n\t};\n\n\treturn (\n\t\t<RouterLink\n\t\t\tactiveClassName=\"active\"\n\t\t\tclassName=\"nav-link\"\n\t\t\tonKeyDown={onKeydown}\n\t\t\t{...props}\n\t\t\tto={path}\n\t\t>\n\t\t\t{text}\n\t\t</RouterLink>\n\t);\n}\n","import React from 'react';\nimport cn from 'classnames';\nimport './styles.css';\n\n// Define interfaces for border and radius props\ninterface BorderProps {\n\tall?: boolean;\n\ttop?: boolean;\n\tright?: boolean;\n\tbottom?: boolean;\n\tleft?: boolean;\n}\n\ninterface RadiusProps {\n\tall?: boolean;\n\ttop?: boolean;\n\ttopLeft?: boolean;\n\ttopRight?: boolean;\n\tbottom?: boolean;\n\tbottomLeft?: boolean;\n\tbottomRight?: boolean;\n}\n\ninterface PaddedCellProps {\n\t/** Content to be rendered inside the cell */\n\tchildren?: React.ReactNode;\n\t/** Additional CSS class name for the cell */\n\tclassName?: string;\n\t/** Border configuration for the cell */\n\tborder?: BorderProps;\n\t/** Border radius configuration for the cell */\n\tradius?: RadiusProps;\n}\n\nexport function PaddedCell(props: PaddedCellProps) {\n\tconst {\n\t\tchildren,\n\t\tclassName,\n\t\tradius = { top: true, bottom: true },\n\t\tborder = { all: true },\n\t} = props;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('cell', className, {\n\t\t\t\tradiusTopLeft: radius.all || radius.top || radius.topLeft,\n\t\t\t\tradiusTopRight: radius.all || radius.top || radius.topRight,\n\t\t\t\tradiusBottomLeft: radius.all || radius.bottom || radius.bottomLeft,\n\t\t\t\tradiusBottomRight: radius.all || radius.bottom || radius.bottomRight,\n\t\t\t\tborderTop: border.all || border.top,\n\t\t\t\tborderRight: border.all || border.right,\n\t\t\t\tborderBottom: border.all || border.bottom,\n\t\t\t\tborderLeft: border.all || border.left,\n\t\t\t})}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","import { useEffect, useState } from 'react';\nimport { isNonEmptyString } from '@/utils/type-checks';\n\nconst pendoSource = `\n(function (apiKey) {\n (function (p,e,n,d,o) {var v,w,x,y,z;o = p[d] = p[d] || {};o._q = [];\n v = [ \"initialize\",\"identify\",\"updateOptions\",\"pageLoad\" ];for(w = 0,x = v.length;w < x;++w) {(function (m) {\n o[m] = o[m] || function () {o._q[m === v[0] ? \"unshift\" : \"push\"]([ m ].concat([].slice.call(arguments,0)));};})(v[w]);}\n y = e.createElement(n);y.async = !0;y.src = \"https://cdn.pendo.io/agent/static/\" + apiKey + \"/pendo.js\";\n z = e.getElementsByTagName(n)[0];z.parentNode.insertBefore(y,z);})(window,document,\"script\",\"pendo\");\n})(\"__PENDO_API_KEY__\");\n`;\n\ninterface PendoProps {\n\tapiKey: string;\n\tproduct: string;\n\tuserId: string;\n\thostname: string;\n\temail?: string;\n\tzendeskKey: string;\n}\n\ninterface InitializePendoPayload {\n\tvisitor: {\n\t\tid: string;\n\t\temail?: string;\n\t};\n\taccount: {\n\t\tid: string;\n\t\tproduct: string;\n\t};\n}\n\ninterface PendoWindow extends Window {\n\tpendo?: {\n\t\tinitialize(payload: InitializePendoPayload): void;\n\t};\n}\n\ndeclare let window: PendoWindow;\n\nexport const Pendo = ({\n\tapiKey,\n\tproduct,\n\tuserId,\n\thostname,\n\temail,\n\tzendeskKey,\n}: PendoProps) => {\n\tconst [isPendoReady, setIsPendoReady] = useState<boolean>(!!window.pendo);\n\n\tuseEffect(() => {\n\t\tif (!isNonEmptyString(apiKey)) {\n\t\t\tconsole.error('No Pendo API key provided');\n\t\t\treturn;\n\t\t}\n\n\t\tconst script = document.createElement('script');\n\t\tscript.text = pendoSource.replace('__PENDO_API_KEY__', apiKey);\n\t\tscript.async = true;\n\t\tdocument.head.appendChild(script);\n\n\t\tif (!isNonEmptyString(zendeskKey)) {\n\t\t\tconsole.error('No Zendesk API key provided');\n\t\t\treturn;\n\t\t}\n\n\t\tconst scriptZendesk = document.createElement('script');\n\t\tscriptZendesk.id = 'ze-snippet';\n\t\tscriptZendesk.src = `https://static.zdassets.com/ekr/snippet.js?key=${zendeskKey}`;\n\t\tscriptZendesk.async = true;\n\t\tdocument.head.appendChild(scriptZendesk);\n\n\t\tconst interval = setInterval(() => {\n\t\t\tif (window.pendo) {\n\t\t\t\tsetIsPendoReady(true);\n\t\t\t\tclearInterval(interval);\n\t\t\t}\n\t\t}, 10);\n\n\t\treturn () => clearInterval(interval);\n\t}, [apiKey, zendeskKey]);\n\n\tuseEffect(() => {\n\t\tconst hasUserId = isNonEmptyString(userId);\n\t\tconst hasHostname = isNonEmptyString(hostname);\n\t\tconst hasProduct = isNonEmptyString(product);\n\t\tconst hasEmail = isNonEmptyString(email);\n\n\t\tif (isPendoReady && hasUserId && hasHostname && hasProduct && window.pendo) {\n\t\t\tconst payload: InitializePendoPayload = {\n\t\t\t\tvisitor: {\n\t\t\t\t\tid: userId,\n\t\t\t\t},\n\t\t\t\taccount: {\n\t\t\t\t\tid: hostname,\n\t\t\t\t\tproduct,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tif (hasEmail && email) {\n\t\t\t\tpayload.visitor.email = email;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\twindow.pendo.initialize(payload);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error initializing Pendo', error);\n\t\t\t}\n\t\t}\n\t}, [userId, hostname, isPendoReady, product, email]);\n\n\treturn null;\n};\n","import React from 'react';\nimport cn from 'classnames';\nimport { Dialog, OverlayArrow, Popover, PopoverProps } from 'react-aria-components';\nimport { Button } from '../button/index.js';\nimport './styles.css';\n\nexport interface PopupProps extends PopoverProps {\n\tchildren: React.ReactNode;\n\tdialogProps?: React.ComponentProps<typeof Dialog>;\n\tcloseButton?: React.ReactNode;\n\tcloseButtonProps?: React.ComponentProps<typeof Button>;\n}\n\nexport function Popup({\n\tisOpen,\n\tonOpenChange,\n\ttriggerRef,\n\tclassName,\n\tchildren,\n\tdialogProps,\n\tcloseButton,\n\tcloseButtonProps,\n\t...popupProps\n}: PopupProps) {\n\treturn (\n\t\t<Popover\n\t\t\tplacement=\"top\"\n\t\t\t{...popupProps}\n\t\t\tclassName={cn('popup', className)}\n\t\t\ttriggerRef={triggerRef}\n\t\t\tisOpen={isOpen}\n\t\t\tonOpenChange={onOpenChange}\n\t\t>\n\t\t\t<OverlayArrow>\n\t\t\t\t<svg width={12} height={12} viewBox=\"0 0 12 12\">\n\t\t\t\t\t<path d=\"M0 0 L6 6 L12 0\" />\n\t\t\t\t</svg>\n\t\t\t</OverlayArrow>\n\t\t\t<Dialog {...dialogProps}>\n\t\t\t\t{closeButton ?? (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (onOpenChange) {\n\t\t\t\t\t\t\t\tonOpenChange(false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ticon=\"times\"\n\t\t\t\t\t\taria-label=\"Close pop-up\"\n\t\t\t\t\t\ttertiary\n\t\t\t\t\t\t{...closeButtonProps}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{children}\n\t\t\t</Dialog>\n\t\t</Popover>\n\t);\n}\n","import React, { useEffect, useRef, forwardRef, ForwardedRef } from 'react';\nimport cn from 'classnames';\nimport { Breadcrumbs } from '../breadcrumbs/index.js';\nimport { SubHeader } from '../sub-header/index.js';\nimport './styles.css';\n\n// Define types for breadcrumbs\nexport interface BreadcrumbItem {\n\ttext: string;\n\tlink?: string;\n}\n\n// Define props interface for SectionHeader\nexport interface SectionHeaderProps {\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\t/** Loading state for the header */\n\tisLoading?: boolean;\n\t/** The main header text or node */\n\theader?: React.ReactNode;\n\t/** Array of breadcrumb items or a single React node */\n\tbreadcrumbs?: BreadcrumbItem[] | React.ReactNode;\n\t/** Array of button elements */\n\tbuttons?: React.ReactNode[];\n\t/** Heading type for SubHeader (e.g., 'h1', 'h2') */\n\theadingType?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\n\n// SectionHeader component with forwardRef\nexport const SectionHeader = forwardRef(function SectionHeader(\n\t{\n\t\tstyle,\n\t\tclassName,\n\t\tisLoading,\n\t\theader,\n\t\tbreadcrumbs,\n\t\tbuttons,\n\t\theadingType = 'h1',\n\t}: SectionHeaderProps,\n\tref: ForwardedRef<HTMLDivElement>,\n) {\n\tconst sectionHeaderRef = useRef<HTMLDivElement | null>(null);\n\n\t// Handle focus on the header when a navbar item is active\n\tuseEffect(() => {\n\t\tconst menubar = document.querySelector('#menubar');\n\t\tif (!menubar) return;\n\n\t\tconst navbarItems = document.querySelectorAll(\n\t\t\t'#menubar ul li.src-components-NavBar-styles___navbarListItem',\n\t\t);\n\t\tif (navbarItems.length === 0) return;\n\n\t\tnavbarItems.forEach((item) => {\n\t\t\tif (item.getAttribute('data-pressed') === 'true') {\n\t\t\t\tconst headerElement = sectionHeaderRef.current?.querySelector(\n\t\t\t\t\t'h1.sectionHeaderFocus',\n\t\t\t\t) as HTMLHeadingElement | null;\n\t\t\t\tif (headerElement && headerElement.getAttribute('tabindex') !== '0') {\n\t\t\t\t\theaderElement.setAttribute('tabindex', '0');\n\t\t\t\t\theaderElement.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}, []);\n\n\t// Check if buttons is a non-empty array\n\tconst hasButtons = Array.isArray(buttons) && buttons.length > 0;\n\t// Check if breadcrumbs is a non-empty array\n\tconst hasBreadcrumbsArray = Array.isArray(breadcrumbs) && breadcrumbs.length > 0;\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"SectionHeader\"\n\t\t\tref={(node) => {\n\t\t\t\tif (typeof ref === 'function') {\n\t\t\t\t\tref(node);\n\t\t\t\t} else if (ref) {\n\t\t\t\t\tref.current = node;\n\t\t\t\t}\n\t\t\t\tsectionHeaderRef.current = node;\n\t\t\t}}\n\t\t\tstyle={style}\n\t\t\tclassName={cn('layout', className)}\n\t\t>\n\t\t\t<div>\n\t\t\t\t{hasBreadcrumbsArray ? (\n\t\t\t\t\t<Breadcrumbs\n\t\t\t\t\t\tbreadcrumbs={breadcrumbs as BreadcrumbItem[]}\n\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t(breadcrumbs as React.ReactNode)\n\t\t\t\t)}\n\t\t\t\t{isLoading ? (\n\t\t\t\t\t<div className=\"section-header__sub-header__skeleton\" />\n\t\t\t\t) : header ? (\n\t\t\t\t\t<SubHeader className=\"sectionHeaderFocus\" headingType={headingType}>\n\t\t\t\t\t\t{header}\n\t\t\t\t\t</SubHeader>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t\t{hasButtons && (\n\t\t\t\t<ul className=\"buttonBar\">\n\t\t\t\t\t{buttons!.map((button, index) => (\n\t\t\t\t\t\t<li key={index}>{button}</li>\n\t\t\t\t\t))}\n\t\t\t\t</ul>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import React from 'react';\nimport cn from 'classnames';\nimport './styles.css';\n\ninterface SubHeaderProps {\n\tchildren: React.ReactNode;\n\tclassName?: string;\n\theadingType?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\n\nexport function SubHeader({\n\tchildren,\n\tclassName,\n\theadingType = 'h1',\n}: SubHeaderProps) {\n\t// eslint-disable-next-line react/no-children-prop\n\treturn React.createElement(headingType, {\n\t\tclassName: cn('subHeader', className),\n\t\tchildren,\n\t});\n}\n","import React, { type ReactNode, useState, memo, useMemo, useEffect } from 'react';\nimport { merge, isEqual } from 'lodash-es';\nimport { generateId } from '@/utils/helpers';\nimport { ModalDialog } from '../modal-dialog/index.js';\nimport { Checkbox } from '../form/checkbox/index.js';\nimport { Button } from '../button/index.js';\nimport { Icon } from '../icon/index.js';\nimport './styles.css';\n\nexport type Column = {\n\tkeys?: string[];\n\tcolumnHeader: string;\n\tid: string;\n\tsortKey?: string;\n\tdisabled?: boolean;\n\tactive?: boolean;\n};\n\nexport type SetViewProps = {\n\tinitialColumns: Column[];\n\tcolumns: Column[];\n\tonChangeColumns(columns: Column[]): void;\n\tdictionary?: Record<string, ReactNode>;\n};\n\nconst defaultDictionary = {\n\tcancel: 'Cancel',\n\tupdate: 'Update',\n\tmodalHeader: 'Set View',\n\tdescription:\n\t\t'Choose which columns to view. Settings will persist until updated by user.',\n\ttriggerButtonLabel: 'Set View',\n};\n\nexport const SetView = memo<SetViewProps>(function SetView(props) {\n\tconst { initialColumns, columns, onChangeColumns, dictionary } = props;\n\n\t// @eslint-disable-next-line\n\tconst _dictionary = merge({}, defaultDictionary, dictionary);\n\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [updatedColumns, setUpdatedColumns] = useState(columns);\n\n\tuseEffect(() => {\n\t\tsetUpdatedColumns(columns);\n\t}, [columns]);\n\n\tfunction onChange(event: React.ChangeEvent<HTMLInputElement>) {\n\t\tevent.persist();\n\t\tconst pickedColumn = initialColumns.find((c) => c.id === event.target.value);\n\t\tif (pickedColumn) {\n\t\t\tlet nextUpdatedColumns: Column[];\n\t\t\tif (event.target.checked) {\n\t\t\t\tnextUpdatedColumns = [...updatedColumns, pickedColumn];\n\t\t\t} else {\n\t\t\t\tnextUpdatedColumns = updatedColumns.filter((c) => c.id !== pickedColumn.id);\n\t\t\t}\n\t\t\tsetUpdatedColumns(nextUpdatedColumns);\n\t\t}\n\t}\n\n\tconst noChanges = isEqual(updatedColumns, columns);\n\n\tconst descriptionId = useMemo(() => generateId('modal-dialog-description'), []);\n\n\treturn (\n\t\t<>\n\t\t\t<Button primary onClick={() => setIsOpen(true)}>\n\t\t\t\t<Icon name=\"cog\" />\n\t\t\t\t{_dictionary.triggerButtonLabel}\n\t\t\t</Button>\n\t\t\t<ModalDialog\n\t\t\t\tariaDescribedBy={descriptionId}\n\t\t\t\ttitle={_dictionary.modalHeader}\n\t\t\t\tisOpen={isOpen}\n\t\t\t\tonCancel={() => {\n\t\t\t\t\tsetUpdatedColumns(columns);\n\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t}}\n\t\t\t\tonConfirm={() => {\n\t\t\t\t\tonChangeColumns(updatedColumns);\n\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t}}\n\t\t\t\tconfirmText={_dictionary.update}\n\t\t\t\tconfirmButtonProps={{\n\t\t\t\t\tdisabled: noChanges,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"set-view__modal-content\"\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\taria-label={_dictionary.description}\n\t\t\t\t>\n\t\t\t\t\t<p id={descriptionId}>{_dictionary.description}</p>\n\t\t\t\t\t<ul className=\"set-view__option-list\">\n\t\t\t\t\t\t{initialColumns\n\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\t.toSorted((a, b) => a.columnHeader.localeCompare(b.columnHeader))\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\t\t\t.map((option: any, k: number) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<li key={k}>\n\t\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\t\tlabel={option.columnHeader}\n\t\t\t\t\t\t\t\t\t\t\tvalue={option.id}\n\t\t\t\t\t\t\t\t\t\t\tchecked={!!updatedColumns.find((it) => it.id === option.id)}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={option.disabled}\n\t\t\t\t\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t</ModalDialog>\n\t\t</>\n\t);\n});\n","import { useCallback, useLayoutEffect, useState } from 'react';\nimport { isEmpty } from 'lodash-es';\nimport type { Column } from './set-view.js';\n\nexport function useActiveColumns({\n\ttableColumns,\n\tstorageKey,\n\tuserId,\n}: {\n\ttableColumns: Column[];\n\tstorageKey: string;\n\tuserId: string;\n}) {\n\tconst [selectedColumns, setSelectedColumns] = useState(() =>\n\t\ttableColumns\n\t\t\t.map((it) => {\n\t\t\t\tit.active ??= true;\n\t\t\t\treturn it;\n\t\t\t})\n\t\t\t.filter((it) => it.active),\n\t);\n\n\tuseLayoutEffect(() => {\n\t\tconst storedValue = localStorage.getItem(\n\t\t\t`${storageKey}-active-columns-${userId}`,\n\t\t);\n\t\tconst storedColumns: string[] = storedValue ? JSON.parse(storedValue) : [];\n\t\tif (!isEmpty(storedColumns)) {\n\t\t\tsetSelectedColumns(\n\t\t\t\tstoredColumns\n\t\t\t\t\t.map((colId) => {\n\t\t\t\t\t\treturn tableColumns.find((column) => column.id === colId);\n\t\t\t\t\t})\n\t\t\t\t\t.filter((v) => !!v),\n\t\t\t);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [storageKey, userId]);\n\n\tconst onChangeColumns = useCallback(\n\t\t(columns: Column[]) => {\n\t\t\tsetSelectedColumns(columns);\n\t\t\tlocalStorage.setItem(\n\t\t\t\t`${storageKey}-active-columns-${userId}`,\n\t\t\t\tJSON.stringify(columns.map((it) => it.id)),\n\t\t\t);\n\t\t},\n\t\t[storageKey, userId],\n\t);\n\n\treturn {\n\t\tcolumns: selectedColumns,\n\t\tonChangeColumns,\n\t};\n}\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Icon } from '../icon/index.js';\nimport { KEY_CODES } from '@/globals/constants';\nimport { useClickOutside } from '@/hooks/use-click-outside';\nimport { NavLink } from 'react-router-dom';\n\nimport './styles.css';\n\nexport function Submenu({ label, options }) {\n\tconst [isSubmenuOpened, setSubmenuOpened] = useState(false);\n\tconst [sections, setSections] = useState({});\n\tconst [items, setItems] = useState([]);\n\tconst [firstItemPressed, setFirstItemFocused] = useState(false);\n\tconst submenuRef = useRef();\n\tconst submenuTriggerRef = useRef();\n\tconst firstItemRef = useRef(null);\n\n\tuseClickOutside(submenuRef, () => {\n\t\tif (isSubmenuOpened) setSubmenuOpened(false);\n\t});\n\n\tuseEffect(() => {\n\t\tif (!isSubmenuOpened) {\n\t\t\tsetSections({});\n\n\t\t\tif (items.length) {\n\t\t\t\tconst sectionOptions = items.map((item) =>\n\t\t\t\t\titem.sectionId ? { ...item, visible: false } : item,\n\t\t\t\t);\n\t\t\t\tsetItems(sectionOptions);\n\t\t\t}\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [isSubmenuOpened]);\n\n\tconst setItem = (id, visible, sectionId) => ({ id, visible, sectionId });\n\n\tuseEffect(() => {\n\t\tsetItems(\n\t\t\toptions.flatMap((option) => {\n\t\t\t\tif (option.section) {\n\t\t\t\t\tconst sectionOptions = option.section.map((sectionOption) =>\n\t\t\t\t\t\tsetItem(sectionOption.id, false, option.id),\n\t\t\t\t\t);\n\t\t\t\t\treturn [setItem(option.id, true)].concat(sectionOptions);\n\t\t\t\t}\n\t\t\t\treturn setItem(option.id, true);\n\t\t\t}),\n\t\t);\n\t}, [options]);\n\n\tuseEffect(() => {\n\t\tif (isSubmenuOpened && firstItemRef.current && firstItemPressed) {\n\t\t\tfirstItemRef.current.focus();\n\t\t\tsetFirstItemFocused(false);\n\t\t}\n\t}, [isSubmenuOpened, firstItemPressed]);\n\n\tconst getActiveItems = () => items.filter((item) => item.visible);\n\n\tconst onSubmenuClick = () => {\n\t\tsetSubmenuOpened((prevState) => !prevState);\n\t};\n\n\tconst onSubmenuKeydown = (event) => {\n\t\tconst menuItems = event.currentTarget.nextElementSibling.children;\n\t\tswitch (event.keyCode) {\n\t\t\tcase KEY_CODES.ENTER:\n\t\t\tcase KEY_CODES.SPACE:\n\t\t\t\tsetFirstItemFocused(true);\n\t\t\t\tbreak;\n\t\t\tcase KEY_CODES.TAB:\n\t\t\t\tsetSubmenuOpened(false);\n\t\t\t\tbreak;\n\t\t\tcase KEY_CODES.UP_ARROW:\n\t\t\t\tevent.preventDefault();\n\t\t\t\tmenuItems[menuItems.length - 1].children[0]?.focus();\n\t\t\t\tbreak;\n\t\t\tcase KEY_CODES.ESCAPE:\n\t\t\t\tsetSubmenuOpened(false);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tconst toggleSectionItems = (sectionId, visible) => {\n\t\tconst sectionOptions = items.map((item) =>\n\t\t\titem.sectionId === sectionId ? { ...item, visible } : item,\n\t\t);\n\t\tsetItems(sectionOptions);\n\t};\n\n\tconst handleEscape = (sectionId) => {\n\t\tif (sections[sectionId]) {\n\t\t\ttoggleSectionItems(sectionId, false);\n\t\t\tsetSections((prevState) => ({\n\t\t\t\t...prevState,\n\t\t\t\t[sectionId]: false,\n\t\t\t}));\n\t\t\tsubmenuRef?.current.querySelector(`[data-id=${sectionId}`).focus();\n\t\t} else {\n\t\t\tsetSubmenuOpened(false);\n\t\t\tsubmenuTriggerRef?.current.focus();\n\t\t}\n\t};\n\n\tconst onMenuItemKeydown = (event, id, isSectionToggle, sectionId = null) => {\n\t\tconst submenu = event.target.closest('.submenu');\n\t\tconst menuItems = getActiveItems();\n\t\tconst itemsLength = menuItems.length;\n\t\tconst index = menuItems.findIndex((item) => item.id === id);\n\n\t\tswitch (event.keyCode) {\n\t\t\tcase KEY_CODES.TAB:\n\t\t\t\tsetSubmenuOpened(false);\n\t\t\t\tbreak;\n\t\t\tcase KEY_CODES.ENTER:\n\t\t\tcase KEY_CODES.SPACE:\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (isSectionToggle) {\n\t\t\t\t\tonSectionToggle(id);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tevent.target.click();\n\t\t\t\tsetSubmenuOpened(false);\n\t\t\t\tbreak;\n\n\t\t\tcase KEY_CODES.DOWN_ARROW:\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsubmenu\n\t\t\t\t\t.querySelector(\n\t\t\t\t\t\t`[data-id=${menuItems[index === itemsLength - 1 ? 0 : index + 1].id}`,\n\t\t\t\t\t)\n\t\t\t\t\t.focus();\n\t\t\t\tbreak;\n\t\t\tcase KEY_CODES.UP_ARROW:\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsubmenu\n\t\t\t\t\t.querySelector(\n\t\t\t\t\t\t`[data-id=${menuItems[index === 0 ? itemsLength - 1 : index - 1].id}`,\n\t\t\t\t\t)\n\t\t\t\t\t.focus();\n\t\t\t\tbreak;\n\t\t\tcase KEY_CODES.ESCAPE:\n\t\t\t\thandleEscape(isSectionToggle ? id : sectionId);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tconst onSectionToggle = (id) => {\n\t\ttoggleSectionItems(id, !sections[id]);\n\n\t\tsetSections((prevState) => ({\n\t\t\t...prevState,\n\t\t\t[id]: !prevState[id],\n\t\t}));\n\t};\n\n\treturn (\n\t\t<div className=\"submenu-container\" ref={submenuRef}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={`nav-link ${isSubmenuOpened ? 'active' : ''}`}\n\t\t\t\tref={submenuTriggerRef}\n\t\t\t\taria-expanded={isSubmenuOpened}\n\t\t\t\tonClick={onSubmenuClick}\n\t\t\t\tonKeyDown={onSubmenuKeydown}\n\t\t\t\taria-label={`${isSubmenuOpened ? 'Hide' : 'Show'} ${label} submenu`}\n\t\t\t>\n\t\t\t\t{label}\n\t\t\t\t<Icon\n\t\t\t\t\tclassName={`submenu-icon caret ${isSubmenuOpened ? 'up' : 'down'}`}\n\t\t\t\t\tname={`caret ${isSubmenuOpened ? 'up' : 'down'}`}\n\t\t\t\t/>\n\t\t\t</button>\n\t\t\t<ul role=\"menu\" className={isSubmenuOpened ? 'visible submenu' : 'submenu'}>\n\t\t\t\t{options.map((option, index) => {\n\t\t\t\t\tif (option.section) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<li role=\"none\" key={option.id}>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"nav-link section-trigger\"\n\t\t\t\t\t\t\t\t\tdata-id={option.id}\n\t\t\t\t\t\t\t\t\tref={index === 0 ? firstItemRef : undefined}\n\t\t\t\t\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\t\t\t\t\tonClick={() => onSectionToggle(option.id)}\n\t\t\t\t\t\t\t\t\tonKeyDown={(event) => onMenuItemKeydown(event, option.id, true)}\n\t\t\t\t\t\t\t\t\taria-expanded={sections[option.id] ?? false}\n\t\t\t\t\t\t\t\t\taria-label={`${sections[option.id] ? 'Hide' : 'Show'} ${\n\t\t\t\t\t\t\t\t\t\toption.label\n\t\t\t\t\t\t\t\t\t} submenu`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\tclassName={`chevron ${sections[option.id] ? 'up' : 'down'}`}\n\t\t\t\t\t\t\t\t\t\tname={`chevron ${sections[option.id] ? 'up' : 'down'}`}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<ul\n\t\t\t\t\t\t\t\t\trole=\"menu\"\n\t\t\t\t\t\t\t\t\tclassName={sections[option.id] ? 'visible section' : 'section'}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{option.section.map((sectionOption) => (\n\t\t\t\t\t\t\t\t\t\t<li role=\"none\" key={sectionOption.id}>\n\t\t\t\t\t\t\t\t\t\t\t<NavLink\n\t\t\t\t\t\t\t\t\t\t\t\tactiveClassName=\"active\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"nav-link\"\n\t\t\t\t\t\t\t\t\t\t\t\tdata-id={sectionOption.id}\n\t\t\t\t\t\t\t\t\t\t\t\tto={sectionOption.path}\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => setSubmenuOpened(false)}\n\t\t\t\t\t\t\t\t\t\t\t\tonKeyDown={(event) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMenuItemKeydown(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsectionOption.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toption.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{sectionOption.label}\n\t\t\t\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li role=\"none\" key={option.id}>\n\t\t\t\t\t\t\t<NavLink\n\t\t\t\t\t\t\t\tref={index === 0 ? firstItemRef : undefined}\n\t\t\t\t\t\t\t\tactiveClassName=\"active\"\n\t\t\t\t\t\t\t\tclassName=\"nav-link\"\n\t\t\t\t\t\t\t\tdata-id={option.id}\n\t\t\t\t\t\t\t\tto={option.path}\n\t\t\t\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\t\t\t\tonClick={() => setSubmenuOpened(false)}\n\t\t\t\t\t\t\t\tonKeyDown={(event) => onMenuItemKeydown(event, option.id, false)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</NavLink>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ul>\n\t\t</div>\n\t);\n}\n","import React, { RefObject } from 'react';\nimport cn from 'classnames';\nimport { useLocation, useHistory } from 'react-router-dom';\nimport { Tab } from './tab/tab.js';\nimport './styles.css';\n\ninterface Pane {\n\tmenuItem: string;\n\tref: RefObject<HTMLLIElement>;\n\trender: () => React.ReactNode;\n\tclassName?: string;\n}\n\ninterface TabsProps {\n\tclassName?: string;\n\tpanes: Pane[];\n\tdisabled?: boolean;\n}\n\nexport function Tabs({ className, panes, disabled = false }: TabsProps) {\n\tconst { search, pathname } = useLocation();\n\tconst history = useHistory();\n\n\tfunction getSelectedTab(): number {\n\t\tif (search) {\n\t\t\tconst tab = new URLSearchParams(search).get('tab');\n\t\t\tconst paneIndex = panes.findIndex((p) => p.menuItem.toLowerCase() === tab);\n\t\t\tif (tab && paneIndex >= 0) {\n\t\t\t\treturn paneIndex + 1;\n\t\t\t}\n\t\t}\n\t\treturn 1;\n\t}\n\n\tconst selectedTab: number = getSelectedTab();\n\n\tconst handleKeyPress = (event: React.KeyboardEvent<HTMLUListElement>) => {\n\t\tconst tabCount = panes.length;\n\n\t\tif (event.key === 'ArrowLeft') {\n\t\t\tconst last = tabCount;\n\t\t\tconst next = selectedTab - 1;\n\t\t\thandleNextTab(last, next, 1);\n\t\t}\n\t\tif (event.key === 'ArrowRight') {\n\t\t\tconst first = 1;\n\t\t\tconst next = selectedTab + 1;\n\t\t\thandleNextTab(first, next, tabCount);\n\t\t}\n\t};\n\n\tconst handleNextTab = (\n\t\tfirstTabInRound: number,\n\t\tnextTab: number,\n\t\tlastTabInRound: number,\n\t) => {\n\t\tconst tabToSelect = selectedTab === lastTabInRound ? firstTabInRound : nextTab;\n\t\tsetTimeout(() => {\n\t\t\tpanes[tabToSelect - 1]?.ref.current?.focus();\n\t\t}, 200);\n\t};\n\n\tconst selectTab = (tabIndex?: number) => {\n\t\tif (tabIndex === undefined) return;\n\n\t\tconst params = new URLSearchParams(search);\n\t\tconst paneName = panes[tabIndex - 1]?.menuItem?.toLowerCase();\n\t\tif (paneName) {\n\t\t\tparams.set('tab', paneName);\n\t\t\thistory.push({\n\t\t\t\tpathname: pathname,\n\t\t\t\tsearch: params.toString(),\n\t\t\t});\n\t\t}\n\t};\n\n\treturn (\n\t\t<section className={cn('tabsWrapper', className)}>\n\t\t\t<div>\n\t\t\t\t<ul\n\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\tclassName=\"tablist\"\n\t\t\t\t\taria-label=\"Tabs\"\n\t\t\t\t\tonKeyDown={handleKeyPress}\n\t\t\t\t>\n\t\t\t\t\t{panes?.map((tab, index) => (\n\t\t\t\t\t\t<Tab\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\tid={`tab${index}`}\n\t\t\t\t\t\t\tindex={index + 1}\n\t\t\t\t\t\t\thandleChange={selectTab}\n\t\t\t\t\t\t\ttitle={tab.menuItem}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\tref={tab.ref}\n\t\t\t\t\t\t\tariaSelected={selectedTab === index + 1}\n\t\t\t\t\t\t\tariaControls={selectedTab === index + 1 ? `tabPanel${index}` : ''}\n\t\t\t\t\t\t\ttabIndex={selectedTab === index + 1 ? 0 : -1}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t{panes?.map(\n\t\t\t\t(tab, index) =>\n\t\t\t\t\tselectedTab === index + 1 && (\n\t\t\t\t\t\t<section\n\t\t\t\t\t\t\tkey={`tabPanel${index}`}\n\t\t\t\t\t\t\trole=\"tabpanel\"\n\t\t\t\t\t\t\tid={`tabPanel${index}`}\n\t\t\t\t\t\t\tclassName={tab.className ?? ''}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{tab.render()}\n\t\t\t\t\t\t</section>\n\t\t\t\t\t),\n\t\t\t)}\n\t\t</section>\n\t);\n}\n","import React from 'react';\n\ninterface TabProps {\n\tid: string;\n\ttitle: string;\n\tindex: number;\n\tdisabled?: boolean;\n\thandleChange: (index: number) => void;\n\tariaSelected: boolean;\n\tariaControls: string;\n\ttabIndex: number;\n}\n\nexport const Tab = React.memo(\n\tReact.forwardRef<HTMLButtonElement, TabProps>(\n\t\t(\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\ttitle,\n\t\t\t\tindex,\n\t\t\t\tdisabled,\n\t\t\t\thandleChange,\n\t\t\t\tariaSelected,\n\t\t\t\tariaControls,\n\t\t\t\ttabIndex,\n\t\t\t},\n\t\t\tref,\n\t\t) => (\n\t\t\t<li role=\"presentation\" data-testid=\"tab\">\n\t\t\t\t<button\n\t\t\t\t\tdata-testid=\"tab-button\"\n\t\t\t\t\trole=\"tab\"\n\t\t\t\t\tid={id}\n\t\t\t\t\taria-selected={ariaSelected}\n\t\t\t\t\taria-controls={ariaControls}\n\t\t\t\t\ttabIndex={tabIndex}\n\t\t\t\t\tonClick={() => handleChange(index)}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t>\n\t\t\t\t\t{title}\n\t\t\t\t</button>\n\t\t\t</li>\n\t\t),\n\t),\n);\n","import React, {\n\tforwardRef,\n\tmemo,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n} from 'react';\nimport { identity, merge, get } from 'lodash-es';\nimport { notify } from '../banner-notification/index.js';\nimport { Button } from '../button/index.js';\nimport { ButtonGroup } from '../button-group/index.js';\nimport { isFunction, isNonEmptyString } from '@/utils/type-checks';\nimport { LoadingIndicator } from '../loading-indicator/index.js';\nimport { AccordionAttachmentsForm } from '../attachments-form/index.js';\nimport { AlertDialog } from '../modal-dialog/index.js';\nimport { useTenantContext, ITenantContext } from '@/context/tenant';\n\nimport { api } from './api.js';\nimport { AssignTo } from './assign-to/index.js';\nimport { EntityFormValues } from './types.js';\nimport {\n\tdateToTimezoneDate,\n\tgetCommentsToCreate,\n\tgetCommentsToRemove,\n\tgetCommentsToUpdate,\n\tgetRequestPayload,\n\tisUserHasAccessToEditTask,\n} from './utils.js';\nimport { Reminders } from './reminders/reminders.js';\nimport { FormContextProvider, useFormContext } from './context/form-context.js';\nimport { Comments } from './comments/comments.js';\n\nimport './styles.css';\nimport { CreatedByField } from './components/created-by-field.js';\nimport { NameField } from './components/name-field.js';\nimport { CategoryInput } from './category-input/category-input.js';\nimport { DescriptionField } from './components/description-field.js';\nimport { UrlField } from './components/url-field.js';\nimport { StatusField } from './components/status-field.js';\nimport { FormDateSelector } from './components/form-date-selector.js';\n\nimport {\n\tgetBaseFieldsFormValues,\n\tisAttachmentsChanged,\n\tisBaseFieldsChanged,\n\tisCommentsChanged,\n\tisRemindersChanged,\n} from './validators.js';\nimport { taskDictionary } from './dictionary.js';\nimport { EntityInfoField } from './components/entity-info-field.js';\nimport { MilestoneInput } from './components/milestone-input.js';\n\nexport interface Attachment {\n\t// Define attachment structure as needed\n\tid?: string;\n\tname?: string;\n\texternalUrl?: string;\n\t// Add other properties\n}\n\ninterface TaskReminder {\n\t// Define reminder structure as needed\n\tid?: string;\n\tdate?: Date;\n\t// Add other properties\n}\n\nexport interface Task {\n\tid: string;\n\townerId: string;\n\tcreatedOn: Date;\n\tdueOn: Date;\n\tname: string;\n\tdescription: string;\n\tassigneeId: string;\n\ttenantId: string;\n\tcategory: string;\n\tlastUpdatedBy: string;\n\tlastUpdated: Date;\n\tfrom: string;\n\tassignedFromId: string;\n\turl: string;\n\tcompletedBy: string;\n\tstatus: string;\n\tattachments: Attachment[];\n\tlastStatusUpdated: Date;\n\tlastStatusUpdatedBy: string;\n\ttaskCounterId: string;\n\tuserCategoryId: string;\n\tuserCategory: string;\n\tteamId: string | null;\n\tteamName: string | null;\n\treminders?: TaskReminder[];\n}\n\ninterface FieldProp {\n\tvalue?: string;\n\tcategoryGroup?: string;\n\tisAdmin?: boolean;\n\tdisabled?: boolean;\n\tsearchingMessage?: string;\n\tplaceholder?: string;\n\tmilestoneId?: string;\n}\n\nexport interface TaskFormFieldProps {\n\turl?: FieldProp;\n\tsearch?: FieldProp;\n\tpermissions?: FieldProp;\n\tcategory?: FieldProp;\n\tmilestoneInput?: FieldProp;\n}\n\nexport interface TaskFormProps {\n\tid?: string;\n\n\tonEntityLoaded?: (taskObject: EntityFormValues) => EntityFormValues;\n\tonConfirm?: (payload: Record<string, unknown>) => Promise<Record<string, unknown>>;\n\tonSuccess?: (successMessage: string, response: unknown) => void;\n\tonBeforeSuccess?: (response: unknown) => Promise<void>;\n\tonError?: (errorMessage: string, error: Error) => void;\n\tonCancel?: (\n\t\tparams: { unsavedChanges: boolean },\n\t\tevent: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n\t) => void;\n\tfieldProps?: TaskFormFieldProps;\n\trenderActions?: (node: React.ReactNode) => React.ReactNode | React.ReactPortal;\n\tallowToRemoveAttachmentsByRoles?: string[];\n\tallowToRemoveCommentsByRoles?: string[];\n\n\tdictionary?: Partial<typeof taskDictionary>;\n\ttype?: 'SP_ADHOC' | 'ADMIN_ADHOC';\n\tenableComments?: boolean;\n}\n\nconst formId = 'task-form';\n\nexport const STATUSES = {\n\tOPEN: 'Open',\n\tIN_PROGRESS: 'In Progress',\n\tON_HOLD: 'On Hold',\n\tCLOSED: 'Closed',\n} as const;\n\nfunction hasUnsavedChanges({\n\tvalues,\n\tinitialValues,\n\ttenantCtx,\n\tattachments,\n}: {\n\tvalues: EntityFormValues;\n\tinitialValues: EntityFormValues;\n\ttenantCtx: ITenantContext;\n\tattachments: Attachment[];\n}) {\n\tconst dueDateChanged =\n\t\tdateToTimezoneDate(\n\t\t\tvalues.dueOn,\n\t\t\ttenantCtx.data.tenant.timezone,\n\t\t)?.toDateString() !==\n\t\tdateToTimezoneDate(\n\t\t\tinitialValues.dueOn,\n\t\t\ttenantCtx.data.tenant.timezone,\n\t\t)?.toDateString();\n\n\tconst internalDateChanged =\n\t\tdateToTimezoneDate(\n\t\t\tvalues.internalDueOn,\n\t\t\ttenantCtx.data.tenant.timezone,\n\t\t)?.toDateString() !==\n\t\tdateToTimezoneDate(\n\t\t\tinitialValues.internalDueOn,\n\t\t\ttenantCtx.data.tenant.timezone,\n\t\t)?.toDateString();\n\n\treturn (\n\t\tisBaseFieldsChanged(values, initialValues) ||\n\t\tisAttachmentsChanged({ attachments } as EntityFormValues, initialValues) ||\n\t\tisRemindersChanged(values, initialValues) ||\n\t\tisCommentsChanged(values) ||\n\t\tdueDateChanged ||\n\t\tinternalDateChanged\n\t);\n}\n\nconst TaskFormComponent = React.forwardRef(function TaskFormComponent(\n\tprops: TaskFormProps,\n\tref,\n) {\n\tconst {\n\t\tallowToRemoveAttachmentsByRoles,\n\t\tallowToRemoveCommentsByRoles,\n\t\tonConfirm,\n\t\tonSuccess,\n\t\tonBeforeSuccess,\n\t\tonError,\n\t\tonCancel,\n\t\tfieldProps,\n\t\trenderActions,\n\t\ttype,\n\t} = props;\n\n\tconst {\n\t\tentity,\n\t\tisEntityLoading,\n\t\tdictionary,\n\n\t\tvalues,\n\t\tisValidUrl,\n\t\tisNameLimitExceeded,\n\t\tisDescriptionLimitExceeded,\n\t\tonInputChange,\n\t\tselectedPersonStatus,\n\t\tunsavedChanges,\n\t\tsubmitDisabled,\n\t\tselectedTeam,\n\n\t\tattachments,\n\t\tsetAttachments,\n\t\trejections,\n\t\tsetRejections,\n\t\tbaseFiles,\n\t\tisOpenAttachmentsDialogModal,\n\t\tsetOpenAttachmentsDialogModal,\n\t\tisAttachmentsLoading,\n\t\tsetIsAttachmentsLoading,\n\t} = useFormContext();\n\n\tconst [isSubmitLoading, setSubmitIsLoading] = useState(false);\n\tconst [isSomeFieldEditing, setIsSomeFieldEditing] = useState(false);\n\tconst [isOpenUnsavedChangesDialog, setIsOpenUnsavedChangesDialog] =\n\t\tuseState(false);\n\n\tconst { data: tenantCtx } = useTenantContext();\n\n\tconst userHasEditAccess = isUserHasAccessToEditTask({\n\t\tentity,\n\t\ttenantCtx,\n\t\tfieldProps,\n\t\tselectedTeam,\n\t});\n\tconst formDisabled =\n\t\tisNonEmptyString(entity.id) &&\n\t\t(entity.status === STATUSES.CLOSED || !userHasEditAccess);\n\n\tconst getPayload = useCallback(\n\t\t() => getRequestPayload({ tenantCtx, values, attachments, entity }),\n\t\t[tenantCtx, values, attachments, entity],\n\t);\n\n\tconst submitForm = useCallback(async () => {\n\t\ttry {\n\t\t\tsetOpenAttachmentsDialogModal(false);\n\t\t\tsetSubmitIsLoading(true);\n\n\t\t\tconst payload = isFunction(onConfirm)\n\t\t\t\t? await onConfirm(getPayload())\n\t\t\t\t: getPayload();\n\n\t\t\tlet response;\n\n\t\t\tif (entity.id) {\n\t\t\t\tconst commentsToCreate = getCommentsToCreate(\n\t\t\t\t\tvalues.commentsToRemove,\n\t\t\t\t\tvalues.newComments,\n\t\t\t\t\tvalues.editedComments,\n\t\t\t\t);\n\t\t\t\tconst commentsToUpdate = getCommentsToUpdate(\n\t\t\t\t\tvalues.commentsToRemove,\n\t\t\t\t\tvalues.editedComments,\n\t\t\t\t);\n\t\t\t\tconst commentsToDelete = getCommentsToRemove(values.commentsToRemove);\n\n\t\t\t\tconst commentCreateRequests = [\n\t\t\t\t\t...commentsToCreate,\n\t\t\t\t\t...(values.newComment.trim().length > 0 ? [values.newComment] : []),\n\t\t\t\t].map((comment) => {\n\t\t\t\t\treturn api.comments.create(entity.id!, {\n\t\t\t\t\t\tcontent: comment,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tconst commentUpdateRequests = commentsToUpdate.map((comment) => {\n\t\t\t\t\treturn api.comments.edit(comment.id, {\n\t\t\t\t\t\tcontent: comment.content,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tconst commentDeleteRequests = commentsToDelete.map((commentId) => {\n\t\t\t\t\treturn api.comments.delete(commentId);\n\t\t\t\t});\n\n\t\t\t\tawait Promise.all([\n\t\t\t\t\t...commentCreateRequests,\n\t\t\t\t\t...commentUpdateRequests,\n\t\t\t\t\t...commentDeleteRequests,\n\t\t\t\t]);\n\n\t\t\t\t// @ts-expect-error payload type mismatch\n\t\t\t\tresponse = await api.task.update(payload);\n\t\t\t} else {\n\t\t\t\t// @ts-expect-error payload type mismatch\n\t\t\t\tresponse = await api.task.create(payload);\n\t\t\t}\n\n\t\t\tif (response.error) {\n\t\t\t\tthrow new Error(response.error);\n\t\t\t}\n\n\t\t\tconst successMessage = entity?.id\n\t\t\t\t? dictionary.notifications.updated\n\t\t\t\t: dictionary.notifications.sent;\n\n\t\t\tif (isFunction(onBeforeSuccess)) {\n\t\t\t\tawait onBeforeSuccess(response);\n\t\t\t}\n\n\t\t\tif (isFunction(onSuccess)) {\n\t\t\t\tonSuccess(successMessage, response);\n\t\t\t} else {\n\t\t\t\tnotify(successMessage, { type: 'success' });\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconst error = e as Error;\n\t\t\tconst errorMessage =\n\t\t\t\terror?.message || 'There was an error saving this task. Please try again.';\n\t\t\tif (isFunction(onError)) {\n\t\t\t\tonError(errorMessage, error);\n\t\t\t} else {\n\t\t\t\tnotify(errorMessage, { type: 'error' });\n\t\t\t}\n\t\t} finally {\n\t\t\tsetSubmitIsLoading(false);\n\t\t}\n\t}, [\n\t\tsetOpenAttachmentsDialogModal,\n\t\tonConfirm,\n\t\tgetPayload,\n\t\tentity.id,\n\t\tdictionary.notifications.updated,\n\t\tdictionary.notifications.sent,\n\t\tonBeforeSuccess,\n\t\tonSuccess,\n\t\tvalues.commentsToRemove,\n\t\tvalues.newComments,\n\t\tvalues.editedComments,\n\t\tvalues.newComment,\n\t\tonError,\n\t]);\n\n\tconst onCancelEditTask: React.MouseEventHandler<HTMLButtonElement> = (event) => {\n\t\tif (isFunction(onCancel)) {\n\t\t\tonCancel({ unsavedChanges }, event);\n\t\t}\n\t};\n\n\tconst isSubmitFormButtonDisabled =\n\t\tformDisabled ||\n\t\tsubmitDisabled ||\n\t\tisSubmitLoading ||\n\t\t!selectedPersonStatus ||\n\t\tisAttachmentsLoading;\n\n\tconst onSubmit = useCallback(\n\t\tasync (e: { preventDefault: () => void }) => {\n\t\t\te.preventDefault();\n\n\t\t\tif (isSubmitFormButtonDisabled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isSomeFieldEditing) {\n\t\t\t\tsetIsOpenUnsavedChangesDialog(true);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (rejections.length > 0) {\n\t\t\t\tsetOpenAttachmentsDialogModal(true);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn submitForm();\n\t\t},\n\t\t[\n\t\t\tisSubmitFormButtonDisabled,\n\t\t\tisSomeFieldEditing,\n\t\t\trejections.length,\n\t\t\tsubmitForm,\n\t\t\tsetOpenAttachmentsDialogModal,\n\t\t],\n\t);\n\n\tif (isEntityLoading) {\n\t\treturn <LoadingIndicator />;\n\t}\n\n\tconst taskFormActions = (\n\t\t<ButtonGroup className=\"task-form_button-group\">\n\t\t\t<Button type=\"button\" secondary onClick={onCancelEditTask}>\n\t\t\t\t{dictionary.actionButtonLabels.cancel}\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\ttype=\"submit\"\n\t\t\t\tdisabled={isSubmitFormButtonDisabled}\n\t\t\t\tbusy={isSubmitLoading}\n\t\t\t\tform={formId}\n\t\t\t>\n\t\t\t\t{!entity.id\n\t\t\t\t\t? dictionary.actionButtonLabels.assignAndSend\n\t\t\t\t\t: dictionary.actionButtonLabels.saveChanges}\n\t\t\t</Button>\n\t\t</ButtonGroup>\n\t);\n\n\treturn (\n\t\t<form\n\t\t\tid={formId}\n\t\t\t// @ts-expect-error type mismatch\n\t\t\tref={ref}\n\t\t\tnoValidate\n\t\t\tdata-component=\"task-form\"\n\t\t\tclassName=\"task-form\"\n\t\t\tonSubmit={onSubmit}\n\t\t>\n\t\t\t<EntityInfoField entity={entity} dictionary={dictionary} />\n\t\t\t<div className=\"task-form-container\">\n\t\t\t\t<div className=\"task-form-left-column\">\n\t\t\t\t\t<NameField\n\t\t\t\t\t\tvalues={values}\n\t\t\t\t\t\tonInputChange={onInputChange}\n\t\t\t\t\t\tdisabled={formDisabled}\n\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\tisNameLimitExceeded={isNameLimitExceeded}\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"task-form_field\">\n\t\t\t\t\t\t<label htmlFor=\"task-milestone\">{dictionary.milestone.label}</label>\n\t\t\t\t\t\t<MilestoneInput\n\t\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\t\tdisabled={formDisabled}\n\t\t\t\t\t\t\tvalues={values}\n\t\t\t\t\t\t\tonInputChange={onInputChange}\n\t\t\t\t\t\t\tmilestoneCategory={\n\t\t\t\t\t\t\t\ttype === 'SP_ADHOC' ? 'CAYUSE_SP_MILESTONE' : 'CAYUSE_AD_MILESTONE'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"task-form_field\">\n\t\t\t\t\t\t<label htmlFor=\"task-category\">{dictionary.category}</label>\n\t\t\t\t\t\t<CategoryInput\n\t\t\t\t\t\t\ttenantId={tenantCtx.tenant?.id}\n\t\t\t\t\t\t\tcategoryGroup={get(fieldProps, 'category.categoryGroup')}\n\t\t\t\t\t\t\tvalues={values}\n\t\t\t\t\t\t\tonInputChange={onInputChange}\n\t\t\t\t\t\t\tdisabled={formDisabled}\n\t\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<DescriptionField\n\t\t\t\t\t\tvalues={values}\n\t\t\t\t\t\tonInputChange={onInputChange}\n\t\t\t\t\t\tdisabled={formDisabled}\n\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\tisDescriptionLimitExceeded={isDescriptionLimitExceeded}\n\t\t\t\t\t/>\n\t\t\t\t\t<UrlField\n\t\t\t\t\t\tvalues={values}\n\t\t\t\t\t\tonInputChange={onInputChange}\n\t\t\t\t\t\tisValidUrl={isValidUrl}\n\t\t\t\t\t\tdisabled={formDisabled}\n\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\tfieldProps={fieldProps}\n\t\t\t\t\t/>\n\t\t\t\t\t<AccordionAttachmentsForm\n\t\t\t\t\t\tsetFiles={setAttachments}\n\t\t\t\t\t\t// @ts-expect-error correct\n\t\t\t\t\t\tsetRejections={setRejections}\n\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\tfiles={baseFiles}\n\t\t\t\t\t\tlabel={dictionary.attachmentsLabel}\n\t\t\t\t\t\tdisabled={formDisabled}\n\t\t\t\t\t\tdictionary={dictionary.attachmentsForm}\n\t\t\t\t\t\tallowToRemoveByRoles={allowToRemoveAttachmentsByRoles}\n\t\t\t\t\t\t// @ts-expect-error correct\n\t\t\t\t\t\tonLoading={setIsAttachmentsLoading}\n\t\t\t\t\t\tdefaultOpen={baseFiles.length > 0}\n\t\t\t\t\t/>\n\t\t\t\t\t{}\n\t\t\t\t\t{props.enableComments && (\n\t\t\t\t\t\t<Comments\n\t\t\t\t\t\t\tdisabled={formDisabled}\n\t\t\t\t\t\t\tallowToRemoveByRoles={allowToRemoveCommentsByRoles}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"task-form-right-column\">\n\t\t\t\t\t<StatusField\n\t\t\t\t\t\tentity={entity}\n\t\t\t\t\t\tdisabled={formDisabled}\n\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\trequired\n\t\t\t\t\t\tonInputChange={onInputChange}\n\t\t\t\t\t\tvalues={values}\n\t\t\t\t\t\tlabel={dictionary.status}\n\t\t\t\t\t/>\n\t\t\t\t\t<AssignTo\n\t\t\t\t\t\tfieldProps={fieldProps}\n\t\t\t\t\t\tdisabled={formDisabled}\n\t\t\t\t\t\ttaskType={type}\n\t\t\t\t\t/>\n\t\t\t\t\t<CreatedByField entity={entity} dictionary={dictionary} />\n\t\t\t\t\t<FormDateSelector\n\t\t\t\t\t\tdisabled={formDisabled}\n\t\t\t\t\t\tlabel={dictionary.internalDueDateLabel}\n\t\t\t\t\t\tid=\"internal-due-date\"\n\t\t\t\t\t\tvalue={values.internalDueOn}\n\t\t\t\t\t\tonChange={(date: Date | null) => {\n\t\t\t\t\t\t\tonInputChange(date, 'internalDueOn');\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttimezone={tenantCtx.tenant.timezone}\n\t\t\t\t\t/>\n\t\t\t\t\t<FormDateSelector\n\t\t\t\t\t\tdisabled={formDisabled}\n\t\t\t\t\t\tlabel={dictionary.dueDate}\n\t\t\t\t\t\tid=\"external-due-date\"\n\t\t\t\t\t\tvalue={values.dueOn}\n\t\t\t\t\t\tonChange={(date: Date | null) => {\n\t\t\t\t\t\t\tonInputChange(date, 'dueOn');\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttimezone={tenantCtx.tenant.timezone}\n\t\t\t\t\t\trequired\n\t\t\t\t\t/>\n\t\t\t\t\t<Reminders\n\t\t\t\t\t\treminders={values.reminders}\n\t\t\t\t\t\tonChange={(value) => {\n\t\t\t\t\t\t\tonInputChange(value, 'reminders');\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tselectedInternalDueDate={values.internalDueOn}\n\t\t\t\t\t\tselectedDueDate={values.dueOn}\n\t\t\t\t\t\tdictionary={dictionary.reminders}\n\t\t\t\t\t\tdisabled={formDisabled}\n\t\t\t\t\t\tsetIsSomeFieldEditing={setIsSomeFieldEditing}\n\t\t\t\t\t\tincludeInternalDate\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"task-form_footer\">\n\t\t\t\t<div className=\"ml-auto\">\n\t\t\t\t\t{isFunction(renderActions)\n\t\t\t\t\t\t? renderActions(taskFormActions)\n\t\t\t\t\t\t: taskFormActions}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<AlertDialog\n\t\t\t\ttitle={dictionary.attachmentsDialogError}\n\t\t\t\tdescription={<span>{dictionary.attachmentsDialogMessage}</span>}\n\t\t\t\tisOpen={isOpenAttachmentsDialogModal}\n\t\t\t\tonCancel={() => setOpenAttachmentsDialogModal(false)}\n\t\t\t\tconfirmText={\n\t\t\t\t\t!entity.id\n\t\t\t\t\t\t? dictionary.actionButtonLabels.assignAndSend\n\t\t\t\t\t\t: dictionary.actionButtonLabels.saveChanges\n\t\t\t\t}\n\t\t\t\tonConfirm={submitForm}\n\t\t\t/>\n\t\t\t<AlertDialog\n\t\t\t\ttitle={dictionary.unsavedChangesBeforeSaveDialog.title}\n\t\t\t\tdescription={\n\t\t\t\t\t<span>{dictionary.unsavedChangesBeforeSaveDialog.description}</span>\n\t\t\t\t}\n\t\t\t\tisOpen={isOpenUnsavedChangesDialog}\n\t\t\t\tonCancel={() => setIsOpenUnsavedChangesDialog(false)}\n\t\t\t\tonConfirm={submitForm}\n\t\t\t/>\n\t\t</form>\n\t);\n});\n\nfunction TaskFormWrapper(\n\tprops: TaskFormProps,\n\tref: React.ForwardedRef<HTMLFormElement>,\n) {\n\tconst {\n\t\tid,\n\t\tonEntityLoaded = identity as TaskFormProps['onEntityLoaded'],\n\t\tfieldProps,\n\t\tdictionary: dctnr,\n\t} = props;\n\n\tconst [isEntityLoading, setIsEntityLoading] = useState(false);\n\tconst [entity, setEntity] = useState<EntityFormValues>(() =>\n\t\tgetBaseFieldsFormValues({\n\t\t\turl: get(fieldProps, 'url.value', ''),\n\t\t\tmilestoneId: get(fieldProps, 'milestoneInput.milestoneId', ''),\n\t\t}),\n\t);\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tconst loadTask = async () => {\n\t\t\tsetIsEntityLoading(true);\n\n\t\t\ttry {\n\t\t\t\tconst object = await api.task.getById(id!, false);\n\t\t\t\tlet entityValues = getBaseFieldsFormValues(object);\n\t\t\t\tif (onEntityLoaded) {\n\t\t\t\t\tentityValues = onEntityLoaded(entityValues) ?? entityValues;\n\t\t\t\t}\n\t\t\t\tif (!cancelled) {\n\t\t\t\t\tsetEntity(entityValues);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconst error = e as Error;\n\t\t\t\tnotify(error.message ?? 'Something went wrong when loading task.', {\n\t\t\t\t\ttype: 'error',\n\t\t\t\t});\n\t\t\t} finally {\n\t\t\t\tsetIsEntityLoading(false);\n\t\t\t}\n\t\t};\n\n\t\tif (id) {\n\t\t\tloadTask();\n\t\t}\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [id]);\n\n\tconst dictionary = useMemo(() => {\n\t\treturn merge(taskDictionary, dctnr);\n\t}, [dctnr]);\n\n\treturn (\n\t\t<FormContextProvider\n\t\t\tentity={entity}\n\t\t\tisEntityLoading={isEntityLoading}\n\t\t\tinitialValues={entity}\n\t\t\tdictionary={dictionary}\n\t\t\thasUnsavedChanges={hasUnsavedChanges}\n\t\t>\n\t\t\t<TaskFormComponent {...props} ref={ref} />\n\t\t</FormContextProvider>\n\t);\n}\n\n// Apply memo and forwardRef\nconst MemoizedTaskFormComponent = memo(forwardRef(TaskFormWrapper));\n\nexport { MemoizedTaskFormComponent as TaskForm };\n","import { uniq, differenceBy } from 'lodash-es';\nimport { executeRequest } from '@/utils/http';\nimport { isNonEmptyObject } from '@/utils/type-checks';\nimport { FLOWABLE_BASE_URL } from '@/globals/constants';\nimport { linkTasksToMilestone } from '../link-to-milestone/index.js';\nimport {\n\tReminder,\n\tTeam,\n\tComment,\n\tPerson,\n\tFormPayload,\n\tEntityFormValues,\n} from './types.js';\nimport { searchTasks } from './linked-tasks/utils.js';\n\nconst SP_BASE_URL = '/sp/api/users';\nconst ADMINISTRATION_PERSON_URL = '/api/v2/person';\nconst ADMINISTRATION_TEAM_URL = '/api/v2/user/adhocteam';\nconst COMMENTS_URL = `${FLOWABLE_BASE_URL}/cayuse-api/comments`;\n\ntype Pagination = {\n\tnumber: number;\n\tsize: number;\n\ttotalElements: number;\n\ttotalPages: number;\n};\n\nconst toDate = <T>(isoString: T) =>\n\ttypeof isoString === 'string'\n\t\t? new Date((isoString as string).replace('Z', ''))\n\t\t: null;\n\nconst attachment = {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tcreate: async (taskId: string, attachmentObject: any) => {\n\t\tconst options = {\n\t\t\tmethod: 'POST',\n\t\t\tbody: JSON.stringify(attachmentObject),\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t};\n\n\t\treturn await executeRequest(\n\t\t\t`${FLOWABLE_BASE_URL}/process-api/runtime/tasks/${taskId}/attachments`,\n\t\t\toptions,\n\t\t);\n\t},\n\tdelete: async (taskId: string, attachmentId: string) => {\n\t\tconst options = { method: 'DELETE' };\n\n\t\treturn await executeRequest(\n\t\t\t`${FLOWABLE_BASE_URL}/process-api/runtime/tasks/${taskId}/attachments/${attachmentId}`,\n\t\t\toptions,\n\t\t);\n\t},\n\tfindByTaskId: async (taskId: string) => {\n\t\tconst attachments = await executeRequest(\n\t\t\t`${FLOWABLE_BASE_URL}/process-api/runtime/tasks/${taskId}/attachments`,\n\t\t);\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst userIds = uniq<string>(attachments.map((a: any) => a.userId));\n\n\t\tconst users = await Promise.all(userIds.map((id) => person.findById(id)));\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tattachments.forEach((a: any) => {\n\t\t\ta.user = users.find((u) => u?.userAccountId === a.userId);\n\t\t});\n\n\t\treturn attachments;\n\t},\n};\n\nconst task = {\n\tasync getById(id: string, forMilestone: boolean = false, submissionId?: string) {\n\t\tconst [task, variables, attachments, reminders, linkedTasks] = await Promise.all(\n\t\t\t[\n\t\t\t\texecuteRequest(`${FLOWABLE_BASE_URL}/process-api/runtime/tasks/${id}`),\n\t\t\t\texecuteRequest(\n\t\t\t\t\t`${FLOWABLE_BASE_URL}/process-api/runtime/tasks/${id}/variables`,\n\t\t\t\t),\n\t\t\t\tattachment.findByTaskId(id),\n\t\t\t\tapi.reminders.getAllByTaskId(id),\n\t\t\t\tforMilestone\n\t\t\t\t\t? searchTasks({\n\t\t\t\t\t\t\tsubmissionId,\n\t\t\t\t\t\t\tmilestoneId: id,\n\t\t\t\t\t\t\tsort: 'dueDate',\n\t\t\t\t\t\t\torder: 'asc',\n\t\t\t\t\t\t\tsize: 1000,\n\t\t\t\t\t\t\tstart: 0,\n\t\t\t\t\t\t})\n\t\t\t\t\t: Promise.resolve([]),\n\t\t\t],\n\t\t);\n\n\t\tconst entity: Omit<\n\t\t\tEntityFormValues,\n\t\t\t'commentsToRemove' | 'newComment' | 'newComments' | 'editedComments'\n\t\t> = {\n\t\t\tid: task.id as string,\n\t\t\tcreatedOn: toDate(task.createTime),\n\t\t\tname: task.name as string,\n\t\t\tdescription: task.description as string,\n\t\t\tdueOn: toDate(task.dueDate),\n\t\t\tassigneeId: task.assignee as string,\n\t\t\townerId: task.owner as string,\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tassigneeName: variables.find((v: any) => v.name === 'assignee')?.value,\n\t\t\tassignedFromId: task.owner as string,\n\t\t\ttenantId: task.tenantId as string,\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tlastUpdatedBy: variables.find((v: any) => v.name === 'lastUpdatedBy')?.value,\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tlastUpdated: variables.find((v: any) => v.name === 'lastUpdated')?.value,\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tfrom: variables.find((v: any) => v.name === 'assignedFrom')?.value,\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\turl: variables.find((v: any) => v.name === 'url')?.value,\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tcompletedBy: variables.find((v: any) => v.name === 'completedBy')?.value,\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tstatus: variables.find((v: any) => v.name === 'status')?.value,\n\t\t\tattachments,\n\t\t\tlastStatusUpdatedBy: variables.find(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t(v: any) => v.name === 'lastStatusUpdatedBy',\n\t\t\t)?.value,\n\t\t\tlastStatusUpdated: variables.find(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t(v: any) => v.name === 'lastStatusUpdated',\n\t\t\t)?.value,\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\ttaskCounterId: variables.find((v: any) => v.name === 'taskCounter')?.value,\n\t\t\treminders,\n\t\t\tloadingLinkedTasks: false,\n\t\t\tlinkedTasksSort: ['dueDate', 'asc'],\n\t\t\tlinkedTasks: linkedTasks || [],\n\t\t\ttasksToLink: [],\n\t\t\ttasksIdsToRemove: [],\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tuserCategoryId: variables.find((v: any) => v.name === 'userCategoryId')\n\t\t\t\t?.value as string,\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tuserCategory: variables.find((v: any) => v.name === 'userCategory')\n\t\t\t\t?.value as string,\n\t\t\tteamId:\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t(variables.find((v: any) => v.name === 'toTeam')?.value as string) ?? null,\n\t\t\tteamName:\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t(variables.find((v: any) => v.name === 'teamName')?.value as string) ?? null,\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tmilestoneId: variables.find((v: any) => v.name === 'milestoneId')?.value as\n\t\t\t\t| string\n\t\t\t\t| undefined,\n\t\t\tmilestoneCounter: variables.find(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t(v: any) => v.name === 'milestoneCounter',\n\t\t\t)?.value as string | undefined,\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tsubmissionId: variables.find((v: any) => v.name === 'submissionId')\n\t\t\t\t?.value as string,\n\t\t\tinternalDueOn: toDate(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tvariables.find((v: any) => v.name === 'internalDueDate')?.value,\n\t\t\t),\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tcategory: variables.find((v: any) => v.name === 'category')?.value ?? '',\n\t\t};\n\n\t\treturn entity;\n\t},\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tasync saveVariables(id: string, variables: Record<string, any>) {\n\t\tconst url = `${FLOWABLE_BASE_URL}/process-api/runtime/tasks/${id}/variables`;\n\n\t\tconst body = Object.entries(variables).reduce(\n\t\t\t(acc, [key, value]) => {\n\t\t\t\tif (value) {\n\t\t\t\t\tacc.push({\n\t\t\t\t\t\tname: key,\n\t\t\t\t\t\tscope: 'local',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t[] as {\n\t\t\t\tname: string;\n\t\t\t\tscope: string;\n\t\t\t\ttype: 'string';\n\t\t\t\tvalue: unknown;\n\t\t\t}[],\n\t\t);\n\n\t\tconst options = {\n\t\t\tmethod: 'POST',\n\t\t\tbody: JSON.stringify(body),\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t};\n\n\t\treturn await executeRequest(url, options);\n\t},\n\tasync create<B extends FormPayload>(body: B) {\n\t\t// copy body but leave out the field \"attachments\" and \"variables\"\n\t\t// @ts-expect-error type mismatch\n\t\tconst { attachments, tasksToLink, variables, ...taskInfo } = body;\n\n\t\ttry {\n\t\t\tconst url = `${FLOWABLE_BASE_URL}/cayuse-tasks`;\n\t\t\tconst options = {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: JSON.stringify(taskInfo),\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t};\n\n\t\t\tconst taskResponse = await executeRequest(url, options);\n\n\t\t\tif (variables && isNonEmptyObject(variables)) {\n\t\t\t\tawait task.saveVariables(taskResponse.taskId, variables);\n\t\t\t}\n\n\t\t\tconst saved = await Promise.allSettled(\n\t\t\t\tattachments?.map((a) => attachment.create(taskResponse.taskId, a)),\n\t\t\t);\n\n\t\t\tconst linkedTasks = await linkTasksToMilestone(\n\t\t\t\ttaskResponse.taskId,\n\t\t\t\ttasksToLink,\n\t\t\t);\n\t\t\tconst showWarning = !saved.every((r) => r.status === 'fulfilled');\n\n\t\t\treturn {\n\t\t\t\t...taskResponse,\n\t\t\t\tlinkedTasks,\n\t\t\t\tattachments: saved\n\t\t\t\t\t.filter((r) => r.status === 'fulfilled')\n\t\t\t\t\t.map((r) => r.value),\n\t\t\t\twarning: showWarning\n\t\t\t\t\t? 'There was an error with the attachments saving to the task. Please open the task and re-save.'\n\t\t\t\t\t: null,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t\tthrow new Error('There was an error saving this task. Please try again.');\n\t\t}\n\t},\n\tasync update<B extends FormPayload>(body: B) {\n\t\tconst { attachments, originalAttachments, ...task } = body;\n\n\t\ttry {\n\t\t\tconst url = `${FLOWABLE_BASE_URL}/cayuse-tasks/${task.id}`;\n\t\t\tconst options = {\n\t\t\t\tmethod: 'PUT',\n\t\t\t\tbody: JSON.stringify(task),\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t};\n\n\t\t\tconst response = await executeRequest(url, options);\n\n\t\t\tconst attachmentsToCreate = attachments.filter((f) => !f.id);\n\t\t\tconst attachmentsToDelete = differenceBy(\n\t\t\t\toriginalAttachments,\n\t\t\t\tattachments,\n\t\t\t\t'id',\n\t\t\t);\n\t\t\t// We will create the attachment if it doesn't already exist, but we'll delete it if it does\n\t\t\t// exist. An empty array of attachments means we don't want to make any changes to the\n\t\t\t// attachments.\n\n\t\t\tconst saved = await Promise.allSettled([\n\t\t\t\t...attachmentsToCreate.map((a) => attachment.create(task.id!, a)),\n\t\t\t\t...attachmentsToDelete.map((a) => attachment.delete(task.id!, a.id)),\n\t\t\t]);\n\n\t\t\tconst showWarning = !saved.every((r) => r.status === 'fulfilled');\n\n\t\t\treturn {\n\t\t\t\t...response,\n\t\t\t\twarning: showWarning\n\t\t\t\t\t? 'There was an error with the attachments saving to the task. Please open the task and re-save.'\n\t\t\t\t\t: null,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t\tthrow new Error('There was an error saving this task. Please try again.');\n\t\t}\n\t},\n};\n\nconst person = {\n\tasync findAll({ searchText }: { searchText: string }) {\n\t\tconst params = new URLSearchParams({\n\t\t\tpage: String(0),\n\t\t\tsize: String(20),\n\t\t\tsearch: `fullName:*${searchText\n\t\t\t\t.toLocaleLowerCase()\n\t\t\t\t.trim()}*,active:true,user.enabled:true`,\n\t\t\tsort: 'firstName,lastName,ASC',\n\t\t});\n\n\t\tconst response = await executeRequest(\n\t\t\t`${ADMINISTRATION_PERSON_URL}?${params.toString()}`,\n\t\t);\n\n\t\treturn {\n\t\t\tpersons: (response?._embedded?.persons || []) as Person[],\n\t\t\tpage: (response?.page as Pagination) || {},\n\t\t};\n\t},\n\tasync findById(id: string, activeOnly = false): Promise<Person | undefined> {\n\t\ttry {\n\t\t\tconst query = encodeURIComponent(\n\t\t\t\t`userAccountId:${id}${activeOnly ? ',active:true,user.enabled:true' : ''}`,\n\t\t\t);\n\t\t\tconst response = await executeRequest(\n\t\t\t\t`${ADMINISTRATION_PERSON_URL}?search=${query}`,\n\t\t\t);\n\n\t\t\tconst result = response?._embedded?.persons?.[0];\n\t\t\tif (!result) {\n\t\t\t\tconsole.error(`User with ID ${id} not found or inactive`);\n\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn result as Person;\n\t\t} catch {\n\t\t\tthrow new Error(`User with ID ${id} not found`);\n\t\t}\n\t},\n};\n\nconst SP = {\n\tuser: {\n\t\tasync findAll({ searchText }: { searchText: string }) {\n\t\t\tconst params = new URLSearchParams({\n\t\t\t\tpage: String(0),\n\t\t\t\tsize: String(20),\n\t\t\t\tsearch: `fullName:${searchText.toLocaleLowerCase().trim()}`,\n\t\t\t});\n\n\t\t\tconst response = await executeRequest(`${SP_BASE_URL}?${params.toString()}`);\n\n\t\t\treturn {\n\t\t\t\tpersons: (response?.content || []) as Person[],\n\t\t\t\tpage: {\n\t\t\t\t\tsize: response?.size,\n\t\t\t\t\ttotalElements: response?.totalElements,\n\t\t\t\t\ttotalPages: response?.totalPages,\n\t\t\t\t\tnumber: response?.number,\n\t\t\t\t} satisfies Pagination,\n\t\t\t};\n\t\t},\n\t\tfindById: async (\n\t\t\tid: string,\n\t\t\tactiveOnly = false,\n\t\t): Promise<Person | undefined> => {\n\t\t\ttry {\n\t\t\t\tconst query = encodeURIComponent(\n\t\t\t\t\t`userAccountId:${id}${activeOnly ? ',active:true' : ''}`,\n\t\t\t\t);\n\t\t\t\tconst response = await executeRequest(`${SP_BASE_URL}?search=${query}`);\n\n\t\t\t\tconst result = response?.content[0];\n\t\t\t\tif (!result) {\n\t\t\t\t\tconsole.error(`User with ID ${id} not found or inactive`);\n\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\treturn result as Person;\n\t\t\t} catch {\n\t\t\t\tthrow new Error(`User with ID ${id} not found`);\n\t\t\t}\n\t\t},\n\t},\n};\n\nconst team = {\n\tasync findAll({ name }: { name: string }) {\n\t\tconst params = new URLSearchParams({\n\t\t\tpage: String(0),\n\t\t\tsize: String(100),\n\t\t\tfields: 'name,users,description,boardType',\n\t\t\tsearch: `name:*${name}*`,\n\t\t\tsort: 'name,ASC',\n\t\t});\n\n\t\tconst response = await executeRequest(\n\t\t\t`${ADMINISTRATION_TEAM_URL}?${params.toString()}`,\n\t\t);\n\n\t\treturn {\n\t\t\tteams: (response?._embedded?.adhocteams || []) as Team[],\n\t\t\tpage: (response?.page as Pagination) || {},\n\t\t};\n\t},\n\tasync findById(id: string) {\n\t\tconst response: Team = await executeRequest(`${ADMINISTRATION_TEAM_URL}/${id}`);\n\n\t\treturn response;\n\t},\n};\n\nconst reminders = {\n\tasync getAllByTaskId(taskId: string) {\n\t\ttry {\n\t\t\tconst res = await executeRequest(\n\t\t\t\t`${FLOWABLE_BASE_URL}/cayuse-tasks/${taskId}/reminders`,\n\t\t\t);\n\n\t\t\tif (typeof res === 'string') {\n\t\t\t\treturn [] as Reminder[];\n\t\t\t}\n\n\t\t\treturn res.map((it: Reminder) => ({\n\t\t\t\t...it,\n\t\t\t\tremindAt: toDate(it.remindAt),\n\t\t\t})) as Reminder[];\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\n\t\t\treturn [] as Reminder[];\n\t\t}\n\t},\n};\n\nexport type Category = {\n\tcategoryGroup: string;\n\ttenantId: string;\n\tname: string;\n\tid: string;\n};\n\nconst category = {\n\tasync findAll(tenantId: string, categoryGroup: string) {\n\t\tconst response = await executeRequest(\n\t\t\t`${FLOWABLE_BASE_URL}/task-categories?tenantId=${tenantId}&categoryGroup=${categoryGroup}`,\n\t\t);\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\treturn response.map((v: any) => {\n\t\t\treturn {\n\t\t\t\tcategoryGroup: v.categoryGroup,\n\t\t\t\ttenantId: v.tenantId,\n\t\t\t\tname: v.name,\n\t\t\t\tid: v.guid,\n\t\t\t};\n\t\t}) as Category[];\n\t},\n};\n\nconst comments = {\n\t/**\n\t * Retrieves comments for a specific task.\n\t *\n\t * @function getAllByTaskId\n\t *\n\t * @param {string} taskId - The ID of the task (required).\n\t * @param params\n\t * @param {number} [params.page=0] - The page number for pagination (optional).\n\t * @param {number} [params.size=100] - The number of comments per page (optional).\n\t * @param {string} [params.sort='createdAt,desc'] - Sorting options in the format: `field,direction`, e.g.,\n\t * `createdAt,asc`. Defaults to `createdAt,desc` (optional).\n\t */\n\tasync getAllByTaskId(\n\t\ttaskId: string,\n\t\tparams: { page?: number; size?: number; sort?: string } = {},\n\t) {\n\t\tconst searchParams = new URLSearchParams({\n\t\t\tpage: String(params.page || 0),\n\t\t\tsize: String(params.page || 100),\n\t\t\tsort: params.sort || 'createdAt,desc',\n\t\t});\n\n\t\tconst response = await executeRequest(\n\t\t\t`${COMMENTS_URL}/${taskId}?${searchParams.toString()}`,\n\t\t);\n\n\t\treturn {\n\t\t\tdata: (response?.content || []) as Comment[],\n\t\t};\n\t},\n\t/**\n\t * Creates a new comment for a specific task.\n\t *\n\t * @function create\n\t * @param {string} taskId - The task identifier for which the comment is being created (required).\n\t * @param {Object} requestBody - The request body for creating a new comment.\n\t * @param {string} requestBody.content - The text of the comment (required).\n\t * @returns {Promise<Comment>} A promise resolving to the created comment.\n\t */\n\tasync create(taskId: string, requestBody: { content: string }): Promise<Comment> {\n\t\tconst options = {\n\t\t\tmethod: 'POST',\n\t\t\tbody: JSON.stringify(requestBody),\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t};\n\n\t\treturn await executeRequest(`${COMMENTS_URL}/${taskId}`, options);\n\t},\n\t/**\n\t * Edits an existing comment.\n\t *\n\t * @function edit\n\t *\n\t * @param {string} commentId - The ID of the comment to edit (required).\n\t * @param {Object} requestBody - The request body for editing the comment.\n\t * @param {string} requestBody.content - The updated text of the comment (required).\n\t * @returns {Promise<Comment>} A promise resolving to the updated comment.\n\t */\n\tasync edit(commentId: string, requestBody: { content: string }): Promise<Comment> {\n\t\tconst options = {\n\t\t\tmethod: 'PATCH',\n\t\t\tbody: JSON.stringify(requestBody),\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t};\n\n\t\treturn await executeRequest(`${COMMENTS_URL}/${commentId}`, options);\n\t},\n\t/**\n\t * Deletes an existing comment.\n\t *\n\t * @function delete\n\t * @param {string} commentId - The ID of the comment to delete (required).\n\t * @returns {Promise<unknown>} A promise that resolves when the comment is deleted.\n\t */\n\tasync delete(commentId: string): Promise<unknown> {\n\t\treturn await executeRequest(`${COMMENTS_URL}/${commentId}`, {\n\t\t\tmethod: 'DELETE',\n\t\t});\n\t},\n};\n\nexport type MilestoneProgressResponse = {\n\tcompleted: number;\n\ttotal: number;\n\tcompletePercent: number;\n\tmilestoneId: string;\n};\n\nconst milestone = {\n\tasync getMilestoneProgress(\n\t\tmilestoneId: string,\n\t): Promise<MilestoneProgressResponse> {\n\t\tconst response = await executeRequest(\n\t\t\t`${FLOWABLE_BASE_URL}/milestones/${milestoneId}/percent-complete`,\n\t\t);\n\n\t\treturn {\n\t\t\tcompleted: response.completed,\n\t\t\ttotal: response.total,\n\t\t\tcompletePercent: response.completePercent,\n\t\t\tmilestoneId: response.milestoneId,\n\t\t};\n\t},\n};\n\nexport const api = {\n\ttask,\n\tperson,\n\tSP,\n\treminders,\n\tcategory,\n\tteam,\n\tcomments,\n\tmilestone,\n};\n","import { executeRequest, request } from '@/utils/http';\nimport { isObject, isNonEmptyObject } from '@/utils/type-checks';\nimport { isNil } from 'lodash-es';\nimport { FLOWABLE_BASE_URL } from '@/globals/constants';\n\nexport const ADMINISTRATION_PERSON_USER_URL = '/api/v2/person/user';\n\ninterface SearchTasksArgs {\n\tsize?: number;\n\tstart?: number;\n\tsort?: string;\n\torder?: string;\n\tsearchBy?: string;\n\tmilestoneId?: string;\n\tfilterByStatus?: string;\n\tsearchText?: string;\n\ttaskType?: string;\n\tsubmissionId?: string;\n\tnoMilestoneAssigned?: boolean;\n}\n\nexport const getUserAdditionalDetailsFromCache = (userId: string | null) => {\n\tif (userId) {\n\t\treturn (JSON.parse(\n\t\t\tsessionStorage.getItem('userAdditionalDetailsCache') ?? '{}',\n\t\t) || {})[userId];\n\t}\n\n\treturn '';\n};\n\nexport const getUserAdditionalDetails = async (userId: string | null) => {\n\tif (!userId) {\n\t\treturn null;\n\t}\n\n\tconst cachedData = getUserAdditionalDetailsFromCache(userId);\n\tif (cachedData) {\n\t\treturn cachedData;\n\t}\n\n\ttry {\n\t\tconst userObject = await executeRequest(\n\t\t\t`${ADMINISTRATION_PERSON_USER_URL}/${userId}`,\n\t\t);\n\n\t\tif (isObject(userObject) && isNonEmptyObject(userObject) && 'id' in userObject) {\n\t\t\tconst userAdditionalDetailsCache = JSON.parse(\n\t\t\t\tsessionStorage.getItem('userAdditionalDetailsCache') ?? '{}',\n\t\t\t);\n\t\t\tuserAdditionalDetailsCache[userId] = {\n\t\t\t\tid: userId,\n\t\t\t\tcontactEmail: userObject.contactEmail || '',\n\t\t\t\tmiddleName: userObject.middleName || '',\n\t\t\t\tfirstName: userObject.firstName || '',\n\t\t\t\tlastName: userObject.lastName || '',\n\t\t\t\tunit:\n\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\tuserObject.affiliations?.find((a) => a.primaryAppointment)?.unitName || '',\n\t\t\t\tcreatedAt: new Date(),\n\t\t\t};\n\n\t\t\tsessionStorage.setItem(\n\t\t\t\t'userAdditionalDetailsCache',\n\t\t\t\tJSON.stringify(userAdditionalDetailsCache),\n\t\t\t);\n\n\t\t\treturn userAdditionalDetailsCache[userId];\n\t\t}\n\n\t\treturn null;\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nexport async function searchTasks({\n\tsort = 'name',\n\torder = 'asc',\n\tsearchText,\n\tstart = 0,\n\tsize = 30,\n\tsearchBy,\n\tfilterByStatus,\n\ttaskType,\n\tsubmissionId,\n\tmilestoneId,\n\tnoMilestoneAssigned,\n}: SearchTasksArgs) {\n\tconst baseParams = {\n\t\tincludeTaskLocalVariables: true,\n\t\tincludeProcessVariables: true,\n\t\tnoMilestoneAssigned,\n\t\tmilestoneId,\n\t\tsort,\n\t\torder,\n\t\tstart,\n\t\tsize,\n\n\t\ttype: taskType\n\t\t\t? taskType === 'ADMIN_ADHOC'\n\t\t\t\t? 'CAYUSE_AD_HOC'\n\t\t\t\t: 'CAYUSE_SP_AD_HOC'\n\t\t\t: undefined,\n\t\tfilterByStatus,\n\t\tsearchText,\n\t\tsearchBy,\n\t\tsubmissionId,\n\t};\n\n\tconst searchParams = Object.entries(baseParams)\n\t\t.filter(([, value]) => !isNil(value))\n\t\t.map(\n\t\t\t([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value!)}`,\n\t\t)\n\t\t.join('&');\n\n\ttry {\n\t\tconst response = await request(\n\t\t\t`${FLOWABLE_BASE_URL}/cayuse-api/query/tasks/admin-platform-my-tasks-v2/nested?${searchParams}`,\n\t\t\tbaseParams,\n\t\t);\n\n\t\treturn response.data;\n\t} catch (e) {\n\t\tconsole.error('Error loading options: ', e);\n\t\treturn [];\n\t}\n}\n\nexport const SORT_DIRECTIONS_MAPPING_SEMANTIC_BY_BACKEND: Record<string, string> = {\n\tascending: 'asc',\n\tdescending: 'desc',\n};\n\nexport const SORT_DIRECTIONS_MAPPING_BACKEND_BY_SEMANTIC = Object.entries(\n\tSORT_DIRECTIONS_MAPPING_SEMANTIC_BY_BACKEND,\n).reduce(\n\t(acc, [key, value]) => {\n\t\tacc[value] = key;\n\t\treturn acc;\n\t},\n\t{} as Record<string, string>,\n);\n\nexport async function loadTaskOptions(args: SearchTasksArgs) {\n\t// @ts-expect-error type mismatch\n\treturn (await searchTasks(args)).map((it) => ({\n\t\tvalue: it.id,\n\t\tlabel: `${it.variables?.taskCounter} - ${it.name}`,\n\t\ttaskCounter: it.variables?.taskCounter,\n\t\ttaskName: it.name,\n\t\ttask: it,\n\t}));\n}\n","import { useState } from 'react';\nimport { Combobox } from '../../form/combobox/index.js';\nimport { api } from '../api.js';\nimport type { Person } from '../types.js';\nimport { normalizeUserToOption, UserComboboxOption } from './components.js';\nimport { useFormContext } from '../context/form-context.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const AssignToPerson = (props: any) => {\n\tconst [allExpanded, setAllExpanded] = useState(false);\n\tconst handleExpandAllToggle = () => {\n\t\tsetAllExpanded((prev) => !prev);\n\t};\n\n\tconst { taskType, fieldProps, disabled } = props;\n\tconst { dictionary, values, onAssigneeChange, selectedPersonStatus } =\n\t\tuseFormContext();\n\n\tconst loadPersonOptions = async (inputValue: string) => {\n\t\tlet persons;\n\t\tlet page;\n\t\tswitch (taskType) {\n\t\t\tcase 'SP_ADHOC':\n\t\t\t\t({ persons, page } = await api.SP.user.findAll({\n\t\t\t\t\tsearchText: inputValue,\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase 'ADMIN_ADHOC':\n\t\t\tdefault:\n\t\t\t\t({ persons, page } = await api.person.findAll({\n\t\t\t\t\tsearchText: inputValue,\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst personOptions = persons.map((it: Person) => normalizeUserToOption(it));\n\t\tconst options =\n\t\t\tpersonOptions.length > 0\n\t\t\t\t? [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Expand All',\n\t\t\t\t\t\t\tvalue: 'expand-all',\n\t\t\t\t\t\t\tisExpandAll: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t].concat(personOptions)\n\t\t\t\t: personOptions;\n\n\t\treturn {\n\t\t\toptions,\n\t\t\thiddenOptionsCount: page.totalPages > 1 && page.totalElements - persons.length,\n\t\t};\n\t};\n\n\treturn (\n\t\t<div>\n\t\t\t<label className=\"task-form_label\" htmlFor=\"task-assign-to\">\n\t\t\t\t<span className=\"task-form_required-indicator\" aria-hidden=\"true\">\n\t\t\t\t\t*\n\t\t\t\t</span>\n\t\t\t\t&nbsp;\n\t\t\t\t{dictionary.assignTo.person}\n\t\t\t</label>\n\t\t\t<Combobox\n\t\t\t\trequired\n\t\t\t\tid=\"task-assign-to\"\n\t\t\t\tdisabled={disabled}\n\t\t\t\tloadingMessage={\n\t\t\t\t\tfieldProps?.search?.searchingMessage ?? dictionary.search?.searchingMessage\n\t\t\t\t}\n\t\t\t\tplaceholder={\n\t\t\t\t\tfieldProps?.search?.placeholder ??\n\t\t\t\t\t`${dictionary.assignTo.placeholderPrefix} ${dictionary.assignTo.person}`\n\t\t\t\t}\n\t\t\t\tloadOptions={loadPersonOptions}\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tonChange={(option: any) => {\n\t\t\t\t\tif (option === null) {\n\t\t\t\t\t\tonAssigneeChange({\n\t\t\t\t\t\t\tassigneeId: null,\n\t\t\t\t\t\t\tassigneeName: null,\n\t\t\t\t\t\t\tassigneeEmail: null,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (option.value === 'expand-all') {\n\t\t\t\t\t\thandleExpandAllToggle();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonAssigneeChange({\n\t\t\t\t\t\t\tassigneeId: option.value,\n\t\t\t\t\t\t\tassigneeName: `${option.user.firstName} ${option.user.lastName}`,\n\t\t\t\t\t\t\tassigneeEmail: option.user.email,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tvalue={\n\t\t\t\t\tvalues.assigneeId\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tvalue: values.assigneeId,\n\t\t\t\t\t\t\t\tlabel: values.assigneeName,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: null\n\t\t\t\t}\n\t\t\t\tcomponents={{\n\t\t\t\t\tOption: UserComboboxOption,\n\t\t\t\t}}\n\t\t\t\tallExpanded={allExpanded}\n\t\t\t\tonExpandAllToggle={handleExpandAllToggle}\n\t\t\t/>\n\t\t\t<div role=\"log\" aria-live=\"polite\">\n\t\t\t\t{!selectedPersonStatus && (\n\t\t\t\t\t<div className=\"task-form_error\">{dictionary.inactiveUser}</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import React, { useEffect, useState } from 'react';\nimport { components } from 'react-select';\nimport { Icon } from '../../icon/index.js';\nimport { capitalizeAndJoin } from '@/utils/helpers';\nimport type { Person, TeamMember } from '../types.js';\n\nexport function normalizeUserToOption(userOrPersonObject: TeamMember | Person) {\n\t// @ts-ignore\n\tlet unitName = userOrPersonObject.unitName;\n\t// @ts-ignore\n\tif (!unitName && Array.isArray(userOrPersonObject.affiliations)) {\n\t\tunitName =\n\t\t\t// @ts-ignore\n\t\t\tuserOrPersonObject.affiliations.find((it) => it.primaryAppointment)\n\t\t\t\t?.unitName ?? '';\n\t}\n\n\treturn {\n\t\t// @ts-ignore\n\t\tvalue: userOrPersonObject.userAccountId || userOrPersonObject.id,\n\t\tlabel: `${userOrPersonObject.firstName} ${userOrPersonObject.lastName}`,\n\t\tisExpanded: false,\n\t\tuser: {\n\t\t\t// @ts-ignore\n\t\t\tid: userOrPersonObject.userAccountId || userOrPersonObject.id,\n\t\t\tfirstName: userOrPersonObject.firstName,\n\t\t\tlastName: userOrPersonObject.lastName,\n\t\t\t// @ts-ignore\n\t\t\temail: userOrPersonObject.email ?? userOrPersonObject.contactEmail,\n\t\t\tunitName,\n\t\t\t// @ts-ignore\n\t\t\tprofileTypes: capitalizeAndJoin(userOrPersonObject.profileTypes),\n\t\t},\n\t};\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function UserComboboxOption(props: any) {\n\tconst { data, selectProps } = props;\n\tconst { isSearchable, allExpanded, onExpandAllToggle } = selectProps;\n\tconst [isExpanded, setIsExpanded] = useState(allExpanded);\n\tconst { isExpandAll } = data;\n\n\tconst innerProps = {\n\t\t...props.innerProps,\n\t\t'data-searchable': Boolean(isSearchable),\n\t};\n\n\tif (isExpandAll) {\n\t\tinnerProps.onClick = (e: React.MouseEvent) => {\n\t\t\te.stopPropagation();\n\t\t\tonExpandAllToggle(!allExpanded);\n\t\t};\n\t}\n\n\tuseEffect(() => {\n\t\tif (!isExpandAll) {\n\t\t\tsetIsExpanded(allExpanded);\n\t\t}\n\t}, [allExpanded, isExpandAll]);\n\n\tif (data.subType === 'narrow-criteria-hint') {\n\t\tinnerProps['data-group'] = true;\n\t\tinnerProps.onClick = undefined;\n\t\tinnerProps.role = undefined;\n\n\t\treturn (\n\t\t\t<components.Option {...props}>\n\t\t\t\t<span className=\"combobox__has-more-options\">{props.children}</span>\n\t\t\t</components.Option>\n\t\t);\n\t}\n\n\tconst handleExpandClick = (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tif (isExpandAll) {\n\t\t\tonExpandAllToggle(!allExpanded);\n\t\t} else {\n\t\t\tsetIsExpanded(!isExpanded);\n\t\t}\n\t};\n\n\tconst optionLabelText = isExpandAll\n\t\t? allExpanded\n\t\t\t? 'Collapse All'\n\t\t\t: 'Expand All'\n\t\t: data.label;\n\n\tconst optionLabel = (\n\t\t<span className={!isExpandAll ? 'combobox__option-container--indented' : ''}>\n\t\t\t<span onClick={handleExpandClick}>\n\t\t\t\t<Icon\n\t\t\t\t\tcolor=\"grey\"\n\t\t\t\t\tname={`chevron-${\n\t\t\t\t\t\tisExpandAll\n\t\t\t\t\t\t\t? allExpanded\n\t\t\t\t\t\t\t\t? 'down'\n\t\t\t\t\t\t\t\t: 'right'\n\t\t\t\t\t\t\t: isExpanded\n\t\t\t\t\t\t\t\t? 'down'\n\t\t\t\t\t\t\t\t: 'right'\n\t\t\t\t\t}`}\n\t\t\t\t/>\n\t\t\t</span>\n\t\t\t<span\n\t\t\t\tclassName={\n\t\t\t\t\tisExpandAll\n\t\t\t\t\t\t? 'combobox__option--expand-all-label'\n\t\t\t\t\t\t: 'combobox__option--text'\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{optionLabelText}\n\t\t\t</span>\n\t\t</span>\n\t);\n\n\treturn (\n\t\t<components.Option {...props} innerProps={innerProps}>\n\t\t\t<div className=\"combobox__option-container\">\n\t\t\t\t{optionLabel}\n\t\t\t\t{!isExpandAll && isExpanded && (\n\t\t\t\t\t<div className=\"combobox__option--expanded\">\n\t\t\t\t\t\t<div>{props.data.user.email}</div>\n\t\t\t\t\t\t<div>{props.data.user.unitName}</div>\n\t\t\t\t\t\t<div>{props.data.user.profileTypes}</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</components.Option>\n\t);\n}\n","import React, {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport { isNonEmptyString } from '@/utils/type-checks';\nimport { useTenantContext } from '@/context/tenant';\nimport { isEmpty, isNil, isEqual, merge } from 'lodash-es';\nimport {\n\tFormDictionary,\n\tmilestoneDictionary,\n\ttaskDictionary,\n} from '../dictionary.js';\nimport { useMilestoneProgress } from '../hooks/use-milestone-progress.js';\nimport { EntityFormValues, Person, Team } from '../types.js';\nimport { useAssignTo } from '../hooks/use-assign-to.js';\nimport { useAttachments } from '../hooks/use-attachments.js';\nimport {\n\tisValidUrl,\n\tisNameLimitExceeded,\n\tisDescriptionLimitExceeded,\n\tisNewCommentLimitExceeded,\n\tisSomeReminderInvalid,\n\tgetBaseFieldsFormValues,\n\tvalidateCommentsLength,\n} from '../validators.js';\nimport { searchTasks } from '../linked-tasks/utils.js';\n\nexport interface FormContextValue\n\textends ReturnType<typeof useAssignTo>,\n\t\tReturnType<typeof useAttachments> {\n\tentity: EntityFormValues;\n\tisEntityLoading: boolean;\n\tdictionary: FormDictionary;\n\n\tvalues: EntityFormValues;\n\n\tselectedPersonStatus: boolean;\n\tsubmissionId?: string;\n\tisAssignToTeam: boolean;\n\tisValidUrl: boolean;\n\tisNameLimitExceeded: boolean;\n\tisDescriptionLimitExceeded: boolean;\n\tisNewCommentLimitExceeded: boolean;\n\tunsavedChanges: boolean;\n\tsubmitDisabled: boolean;\n\tassignError: boolean;\n\tonInputChange<V>(value: V, key: string): void;\n\trefreshLinkedTasks(sort?: [string, string]): void;\n\n\tmilestoneProgress: ReturnType<typeof useMilestoneProgress>;\n}\n\n/**\n * FormContext - React Context for managing task form state.\n */\nexport const FormContext = createContext({\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tentity: {} as any, // Entity object\n\tisEntityLoading: false, // Boolean indicating if the task is loading\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdictionary: {} as any, // Translation or dynamic content dictionary\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tvalues: {} as any,\n\tsubmissionId: undefined,\n\tisValidUrl: true, // Validation flag for URL\n\tisNameLimitExceeded: false, // Validation flag for task name length\n\tisDescriptionLimitExceeded: false, // Validation flag for task description length\n\tisNewCommentLimitExceeded: false, // Validation flag for task comment length\n\tunsavedChanges: false, // Whether there are unsaved changes\n\tsubmitDisabled: true, // Whether the submit button is disabled\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tonInputChange: (_value: any, _key: string) => {},\n\n\trefreshLinkedTasks: (_sort?: [string, string]) => {},\n\n\tonAssigneeChange: (_payload: {\n\t\tteamId?: string | null;\n\t\tteamName?: string | null;\n\t\tassigneeId?: string | null;\n\t\tassigneeName?: string | null;\n\t\tassigneeEmail?: string | null;\n\t}) => {}, // Function to handle assignee changes\n\n\tisAssignToTeam: false, // Boolean for team assignment state\n\n\tsetIsAssignToTeam: (_value: boolean) => {}, // Function to toggle assignment type\n\n\tselectedPersonStatus: true, // Status of the selected person/team\n\n\tselectedUser: null, // Selected user\n\n\tsetSelectedUser: (_value: Person | null) => {},\n\tselectedTeam: null, // Selected team\n\n\tsetSelectedTeam: (_value: Team | null) => {}, // Function to set the selected team\n\n\tattachments: [], // Attachments related to the task\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tsetAttachments: (_files: any[]) => {}, // Function to set an attachment\n\tbaseFiles: [],\n\tisAttachmentsLoading: false,\n\tisOpenAttachmentsDialogModal: false,\n\trejections: [],\n\tassignError: false,\n\tsetIsAttachmentsLoading(): void {},\n\n\tsetOpenAttachmentsDialogModal(): void {},\n\tsetRejections(): void {},\n\n\tmilestoneProgress: {\n\t\tdata: null,\n\t\tisLoading: true,\n\t\tisLoaded: false,\n\t},\n});\n\n/**\n * Custom hook to access the TaskFormContext.\n *\n * @returns {object} The context value provided by `TaskFormContextProvider`.\n */\n\nexport function useFormContext() {\n\t// @ts-expect-error type mismatch\n\treturn useContext<FormContextValue>(FormContext);\n}\n\nexport function FormContextProvider({\n\tchildren,\n\tinitialValues,\n\tentity,\n\tisEntityLoading,\n\tdictionary,\n\tsubmissionId,\n\thasUnsavedChanges,\n}: {\n\tchildren: React.ReactNode;\n\tinitialValues: EntityFormValues;\n\tsubmissionId?: string;\n\tentity: EntityFormValues;\n\tisEntityLoading: boolean;\n\tdictionary: typeof milestoneDictionary | typeof taskDictionary;\n\thasUnsavedChanges(args: {\n\t\tvalues: EntityFormValues;\n\t\tinitialValues: EntityFormValues;\n\t\ttenantCtx: ReturnType<typeof useTenantContext>;\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tattachments: any[];\n\t}): boolean;\n}) {\n\tconst tenantCtx = useTenantContext();\n\tconst { attachments, ...attachmentsHookRest } = useAttachments({ entity });\n\n\tconst prevInitialValues = useRef(initialValues);\n\n\tconst [values, setValues] = useState(() => getBaseFieldsFormValues(initialValues));\n\n\tconst [isAssignToTeam, _setIsAssignToTeam] = useState(false);\n\tconst [selectedPersonStatus] = useState(true);\n\n\tuseEffect(() => {\n\t\tif (!isEqual(prevInitialValues.current, initialValues)) {\n\t\t\tconst nextValues = merge({}, values, initialValues);\n\t\t\tsetValues(nextValues);\n\t\t\tprevInitialValues.current = initialValues;\n\n\t\t\tif (initialValues.teamId) {\n\t\t\t\t_setIsAssignToTeam(true);\n\t\t\t}\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [initialValues]);\n\n\tconst onInputChange: FormContextValue['onInputChange'] = useCallback(\n\t\t(value, key) => {\n\t\t\tsetValues((prev) => ({\n\t\t\t\t...prev,\n\t\t\t\t[key]: value,\n\t\t\t}));\n\t\t},\n\t\t[],\n\t);\n\n\tconst refreshLinkedTasks: FormContextValue['refreshLinkedTasks'] = useCallback(\n\t\t(sort?: [string, string]) => {\n\t\t\tif (isNil(entity.id)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonInputChange(true, 'loadingLinkedTasks');\n\t\t\tsearchTasks({\n\t\t\t\tsubmissionId,\n\t\t\t\tmilestoneId: entity.id,\n\t\t\t\tsort: sort?.[0] || values.linkedTasksSort[0],\n\t\t\t\torder: sort?.[1] || values.linkedTasksSort[1],\n\t\t\t\tsize: 1000,\n\t\t\t\tstart: 0,\n\t\t\t})\n\t\t\t\t.then((options) => onInputChange(options, 'linkedTasks'))\n\t\t\t\t.finally(() => onInputChange(false, 'loadingLinkedTasks'));\n\t\t},\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[entity.id, values.linkedTasksSort, values.tasksToLink, values.tasksIdsToRemove],\n\t);\n\n\tconst unsavedChanges = hasUnsavedChanges({\n\t\tvalues,\n\t\tinitialValues,\n\t\ttenantCtx,\n\t\tattachments,\n\t});\n\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\tconst _isValidUrl = useMemo(() => isValidUrl(values), [values.url]);\n\n\tconst _isNameLimitExceeded = useMemo(\n\t\t() => isNameLimitExceeded(values),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[values.name],\n\t);\n\n\tconst _isDescriptionLimitExceeded = useMemo(\n\t\t() => isDescriptionLimitExceeded(values),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[values.description],\n\t);\n\tconst { isSomeCommentChangedExceedLimit, isSomeCommentEmpty } = useMemo(\n\t\t() => validateCommentsLength(values),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[values.newComments, values.editedComments, values.commentsToRemove],\n\t);\n\n\tconst _isNewCommentLimitExceeded = isNewCommentLimitExceeded(values);\n\n\tconst _isSomeReminderInvalid = useMemo(\n\t\t() => isSomeReminderInvalid(values),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[values.reminders],\n\t);\n\n\tfunction isSubmitDisabled() {\n\t\tconst description: boolean = isNonEmptyString(values.description?.trim());\n\t\tconst name: boolean = isNonEmptyString(values.name?.trim());\n\t\tconst dueOn = Boolean(values.dueOn);\n\n\t\tlet isAssignToEmpty: boolean;\n\t\tif (isAssignToTeam) {\n\t\t\tisAssignToEmpty = isEmpty(values.teamId);\n\t\t} else {\n\t\t\tisAssignToEmpty = isEmpty(values.assigneeId);\n\t\t}\n\n\t\treturn (\n\t\t\tisAssignToEmpty ||\n\t\t\t!description ||\n\t\t\t!name ||\n\t\t\t!dueOn ||\n\t\t\t!unsavedChanges ||\n\t\t\t!_isValidUrl ||\n\t\t\t_isNameLimitExceeded ||\n\t\t\t_isSomeReminderInvalid ||\n\t\t\t_isDescriptionLimitExceeded ||\n\t\t\t_isNewCommentLimitExceeded ||\n\t\t\tisSomeCommentChangedExceedLimit ||\n\t\t\tisSomeCommentEmpty\n\t\t);\n\t}\n\n\tconst assignToHookRest = useAssignTo({\n\t\tentity: values,\n\t\tsetValues,\n\t\t_setIsAssignToTeam,\n\t});\n\n\tconst milestoneProgress = useMilestoneProgress({ entity });\n\n\treturn (\n\t\t<FormContext.Provider\n\t\t\tvalue={{\n\t\t\t\tentity,\n\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\tsubmissionId,\n\t\t\t\tisEntityLoading,\n\t\t\t\tdictionary,\n\t\t\t\tvalues,\n\t\t\t\trefreshLinkedTasks,\n\t\t\t\tisValidUrl: _isValidUrl,\n\t\t\t\tisNameLimitExceeded: _isNameLimitExceeded,\n\t\t\t\tisDescriptionLimitExceeded: _isDescriptionLimitExceeded,\n\t\t\t\tisNewCommentLimitExceeded: _isNewCommentLimitExceeded,\n\t\t\t\tonInputChange,\n\t\t\t\tselectedPersonStatus,\n\t\t\t\tunsavedChanges,\n\t\t\t\tsubmitDisabled: isSubmitDisabled(),\n\n\t\t\t\tisAssignToTeam,\n\t\t\t\t...assignToHookRest,\n\n\t\t\t\tattachments,\n\t\t\t\t...attachmentsHookRest,\n\n\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\tmilestoneProgress,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</FormContext.Provider>\n\t);\n}\n","import { useEffect, useState } from 'react';\nimport { notify } from '../../banner-notification/index.js';\nimport { api, MilestoneProgressResponse } from '../api.js';\nimport { EntityFormValues } from '../types.js';\n\ninterface MilestoneProgressProps {\n\tentity: EntityFormValues;\n}\n\ntype MilestoneProgress = MilestoneProgressResponse & {\n\tisCompleted: boolean;\n};\n\nexport function useMilestoneProgress({ entity }: MilestoneProgressProps): {\n\tdata: MilestoneProgress | null;\n\tisLoading: boolean;\n\tisLoaded: boolean;\n} {\n\tconst [data, setData] = useState<MilestoneProgress | null>(null);\n\tconst [isLoading, setIsLoading] = useState(false);\n\n\tuseEffect(() => {\n\t\tlet canceled = false;\n\n\t\tasync function loadData() {\n\t\t\ttry {\n\t\t\t\tsetIsLoading(true);\n\t\t\t\tconst response = await api.milestone.getMilestoneProgress(entity.id!);\n\t\t\t\tif (!canceled) {\n\t\t\t\t\tsetData({\n\t\t\t\t\t\t...response,\n\t\t\t\t\t\tisCompleted: response.total === response.completed,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tnotify('Something went wrong when loading progress of the milestone.', {\n\t\t\t\t\ttype: 'error',\n\t\t\t\t});\n\t\t\t} finally {\n\t\t\t\tif (!canceled) {\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tentity.id &&\n\t\t\t(entity.category === 'CAYUSE_SP_MILESTONE' ||\n\t\t\t\tentity.category === 'CAYUSE_AD_MILESTONE')\n\t\t) {\n\t\t\tloadData();\n\t\t}\n\n\t\treturn () => {\n\t\t\tcanceled = true;\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [entity.id]);\n\n\treturn {\n\t\tdata,\n\t\tisLoading,\n\t\tisLoaded: !isLoading && data !== null,\n\t};\n}\n","import React, { useEffect, useRef, useState, useCallback } from 'react';\nimport { api } from '../api.js';\nimport { EntityFormValues, Person, Team } from '../types.js';\n\nexport interface UseAssignTo<E> {\n\tentity: E;\n\tsetValues: React.Dispatch<React.SetStateAction<E>>;\n\t_setIsAssignToTeam: (value: boolean) => void;\n}\n\nexport function useAssignTo<E extends EntityFormValues>({\n\tentity,\n\tsetValues,\n\t_setIsAssignToTeam,\n}: UseAssignTo<E>) {\n\tconst canceled = useRef(false);\n\n\tconst [selectedTeam, setSelectedTeam] = useState<Team | null>(null);\n\tconst [selectedUser, setSelectedUser] = useState<Person | null>(null);\n\tconst [assignError, setAssignError] = useState<boolean>(false);\n\n\tasync function loadTeam(id: string) {\n\t\ttry {\n\t\t\tconst teamObject: Team = await api.team.findById(id);\n\t\t\tif (!canceled.current) {\n\t\t\t\tsetSelectedTeam(teamObject);\n\t\t\t\tsetValues((prev) => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\tteamId: teamObject.id,\n\t\t\t\t\tteamName: teamObject.name,\n\t\t\t\t}));\n\t\t\t}\n\t\t} catch {\n\t\t\tsetAssignError(true);\n\t\t\tsetValues((prev) => ({\n\t\t\t\t...prev,\n\t\t\t\tteamId: null,\n\t\t\t\tteamName: null,\n\t\t\t}));\n\t\t}\n\t}\n\n\tasync function loadUser(id: string) {\n\t\ttry {\n\t\t\tconst user = await api.person.findById(id);\n\t\t\tif (user && !canceled.current) {\n\t\t\t\tsetSelectedUser(user);\n\t\t\t\tsetValues((prev) => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\tassigneeId: user.userAccountId,\n\t\t\t\t\tassigneeName: `${user.firstName} ${user.lastName}`,\n\t\t\t\t\tassigneeEmail: user.contactEmail,\n\t\t\t\t}));\n\t\t\t}\n\t\t} catch {\n\t\t\tsetAssignError(true);\n\t\t\tsetValues((prev) => ({\n\t\t\t\t...prev,\n\t\t\t\tassigneeId: null,\n\t\t\t\tassigneeName: null,\n\t\t\t\tassigneeEmail: null,\n\t\t\t}));\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tif (entity.id) {\n\t\t\tcanceled.current = false;\n\n\t\t\tif (entity.teamId) {\n\t\t\t\tloadTeam(entity.teamId);\n\t\t\t}\n\t\t\tif (entity.assigneeId) {\n\t\t\t\tloadUser(entity.assigneeId);\n\t\t\t}\n\t\t}\n\n\t\treturn () => {\n\t\t\tcanceled.current = true;\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [entity.id]);\n\n\tuseEffect(() => {\n\t\tif (!entity.teamId) {\n\t\t\tsetSelectedTeam(null);\n\t\t}\n\t}, [entity.teamId]);\n\n\tconst onAssigneeChange = useCallback(\n\t\t({\n\t\t\tteamId,\n\t\t\tteamName,\n\t\t\tassigneeId,\n\t\t\tassigneeName,\n\t\t\tassigneeEmail,\n\t\t}: {\n\t\t\tteamId?: string | null;\n\t\t\tteamName?: string | null;\n\t\t\tassigneeId?: string | null;\n\t\t\tassigneeName?: string | null;\n\t\t\tassigneeEmail?: string | null;\n\t\t}) => {\n\t\t\tsetValues((prev) => {\n\t\t\t\tconst next = { ...prev };\n\n\t\t\t\tif (teamId !== undefined) {\n\t\t\t\t\tnext.teamId = teamId;\n\t\t\t\t\tnext.teamName = teamName!;\n\t\t\t\t}\n\n\t\t\t\tif (assigneeId !== undefined) {\n\t\t\t\t\tnext.assigneeId = assigneeId;\n\t\t\t\t\tnext.assigneeName = assigneeName;\n\t\t\t\t\tnext.assigneeEmail = assigneeEmail;\n\t\t\t\t}\n\n\t\t\t\treturn next;\n\t\t\t});\n\t\t\tsetAssignError(false);\n\t\t},\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[],\n\t);\n\n\tconst setIsAssignToTeam = useCallback((value: boolean) => {\n\t\t_setIsAssignToTeam(value);\n\t\tsetValues((prev) => ({\n\t\t\t...prev,\n\t\t\tteamId: null,\n\t\t\tteamName: null,\n\t\t\tassigneeId: null,\n\t\t\tassigneeName: null,\n\t\t\tassigneeEmail: null,\n\t\t}));\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\n\treturn {\n\t\tselectedUser,\n\t\tsetSelectedUser,\n\t\tselectedTeam,\n\t\tsetSelectedTeam,\n\n\t\tonAssigneeChange,\n\t\tsetIsAssignToTeam,\n\t\tassignError,\n\t};\n}\n","import { useState, useMemo, useCallback } from 'react';\nimport { EntityFormValues } from '../types.js';\n\nexport type BaseFile = {\n\tcontentUrl: string | null;\n\tdescription: string;\n\texternalUrl: string;\n\tid: string;\n\tname: string;\n\tprocessInstanceUrl: string | null;\n\ttaskUrl: string;\n\ttime: string;\n\ttype: string | null;\n\turl: string;\n\tuserId: string;\n};\n\nexport function useAttachments({ entity }: { entity: EntityFormValues }) {\n\tconst [attachments, setAttachments] = useState([]);\n\tconst [rejections, setRejections] = useState([]);\n\n\tconst [isOpenAttachmentsDialogModal, setOpenAttachmentsDialogModal] =\n\t\tuseState(false);\n\tconst [isAttachmentsLoading, setIsAttachmentsLoading] = useState(false);\n\n\tconst baseFiles: BaseFile[] = useMemo(() => entity.attachments || [], [entity]);\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst setAttachmentsCallback = useCallback((files: any) => {\n\t\tsetAttachments(\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tfiles.map((file: any) => ({\n\t\t\t\tid: file.referenceId,\n\t\t\t\tname: file.fileName,\n\t\t\t\ttime: file.createdAt,\n\t\t\t\tuserId: file.uploadedBy,\n\t\t\t\tdescription: JSON.stringify(file),\n\t\t\t\texternalUrl: `platform://${file.id}`,\n\t\t\t})),\n\t\t);\n\t}, []);\n\n\treturn {\n\t\tbaseFiles,\n\t\tattachments,\n\t\tsetAttachments: setAttachmentsCallback,\n\n\t\trejections,\n\t\tsetRejections,\n\n\t\tisOpenAttachmentsDialogModal,\n\t\tsetOpenAttachmentsDialogModal,\n\t\tisAttachmentsLoading,\n\t\tsetIsAttachmentsLoading,\n\t};\n}\n","import { defaultTo, isEqual, sortBy } from 'lodash-es';\nimport { isNonEmptyString, isUrl } from '@/utils/type-checks';\nimport { EntityFormValues, Comment } from './types.js';\n\nexport const NAME_MAX_LENGTH = 100;\nexport const DESCRIPTION_MAX_LENGTH = 4_000;\nexport const COMMENT_MAX_LENGTH = 1_000;\n\nexport function getBaseFieldsFormValues(\n\tinitialValues?: Partial<EntityFormValues>,\n): EntityFormValues {\n\treturn {\n\t\townerId: initialValues?.ownerId ?? undefined,\n\t\tdueOn: initialValues?.dueOn ?? null,\n\t\tname: initialValues?.name ?? '',\n\t\tdescription: initialValues?.description ?? '',\n\t\turl: initialValues?.url ?? '',\n\t\tid: initialValues?.id ?? undefined,\n\t\tassigneeId: initialValues?.assigneeId ?? null,\n\t\tassigneeName: initialValues?.assigneeName ?? null,\n\t\tassigneeEmail: initialValues?.assigneeEmail || null,\n\t\tstatus: initialValues?.status ?? null,\n\t\tcompletedBy: initialValues?.completedBy ?? null,\n\t\tfrom: initialValues?.from ?? null,\n\t\tlastUpdated: initialValues?.lastUpdated ?? null,\n\t\tcreatedOn: initialValues?.createdOn ?? null,\n\t\tlinkedTasks: initialValues?.linkedTasks ?? [],\n\t\ttasksIdsToRemove: initialValues?.tasksIdsToRemove ?? [],\n\t\ttasksToLink: initialValues?.tasksToLink ?? [],\n\t\tloadingLinkedTasks: initialValues?.loadingLinkedTasks ?? true,\n\t\tlinkedTasksSort: initialValues?.linkedTasksSort ?? ['dueDate', 'asc'],\n\n\t\treminders: initialValues?.reminders ?? [],\n\t\tuserCategoryId: initialValues?.userCategoryId ?? null,\n\t\tuserCategory: initialValues?.userCategory ?? null,\n\t\tteamId: initialValues?.teamId ?? null,\n\t\tteamName: initialValues?.teamName ?? null,\n\t\tnewComment: '',\n\t\tcommentsToRemove: [],\n\t\tnewComments: [],\n\t\teditedComments: {},\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tattachments: initialValues?.attachments ?? ([] as any[]),\n\t\tlastStatusUpdated: initialValues?.lastStatusUpdated,\n\t\tlastStatusUpdatedBy: initialValues?.lastStatusUpdatedBy,\n\t\ttaskCounterId: initialValues?.taskCounterId,\n\t\tinternalDueOn: initialValues?.internalDueOn ?? null,\n\t\tcategory: initialValues?.category ?? null,\n\n\t\tmilestoneId: initialValues?.milestoneId,\n\t\tmilestoneCounter: initialValues?.milestoneCounter,\n\t\tsubmissionId: initialValues?.submissionId,\n\t};\n}\n\nexport function isCommentsChanged<V extends EntityFormValues>(values: V) {\n\tconst removeSet = new Set(values.commentsToRemove || []);\n\n\tconst hasCommentsToRemove =\n\t\tvalues.commentsToRemove.filter((a) => !a.startsWith('NEW'))?.length > 0;\n\tconst hasNewCommentsToAdd =\n\t\tvalues.newComments.filter((n) => !removeSet.has(n.id!))?.length > 0;\n\tconst hasCommentsToUpdate =\n\t\tObject.entries(values.editedComments || {}).filter(\n\t\t\t([id]) => !id.startsWith('NEW') && !removeSet.has(id),\n\t\t)?.length > 0;\n\n\tconst newCommentChanged = values.newComment.trim().length > 0;\n\n\treturn (\n\t\thasCommentsToRemove ||\n\t\thasCommentsToUpdate ||\n\t\thasNewCommentsToAdd ||\n\t\tnewCommentChanged\n\t);\n}\n\nexport function isLinkedTasksChanged<V extends EntityFormValues>(values: V) {\n\tconst tasksToLink = (values.tasksToLink || []).filter(\n\t\t(v) => !values.tasksIdsToRemove.includes(v.id),\n\t);\n\n\tif (tasksToLink.length > 0) {\n\t\treturn true;\n\t}\n\n\tconst linkedTasksIds = new Set((values.linkedTasks || []).map(({ id }) => id));\n\n\treturn values.tasksIdsToRemove.some((v) => linkedTasksIds.has(v));\n}\n\nexport function isBaseFieldsChanged<V extends EntityFormValues>(\n\tvalues: V,\n\tinitialValues: V,\n) {\n\tconst nameChanged = !isEqual(values.name, initialValues.name);\n\tconst descriptionChanged = !isEqual(values.description, initialValues.description);\n\tconst userChanged = !isEqual(values.assigneeId, initialValues.assigneeId);\n\tconst teamChanged = !isEqual(values.teamId, initialValues.teamId);\n\tconst urlChanged = !isEqual(values.url, initialValues.url);\n\tconst statusChanged = !isEqual(values.status, initialValues.status);\n\tconst categoryChanged =\n\t\tdefaultTo(values.userCategoryId, '') !==\n\t\tdefaultTo(initialValues.userCategoryId, '');\n\tconst milestoneChanged =\n\t\tdefaultTo(values.milestoneId, '') !== defaultTo(initialValues.milestoneId, '');\n\n\treturn (\n\t\tnameChanged ||\n\t\tdescriptionChanged ||\n\t\tuserChanged ||\n\t\tteamChanged ||\n\t\turlChanged ||\n\t\tstatusChanged ||\n\t\tcategoryChanged ||\n\t\tmilestoneChanged\n\t);\n}\n\n/**\n * @description compare by 'externalUrl' because 'id' is unstable, and it's undefined for new files\n */\nexport function isAttachmentsChanged<V extends Partial<EntityFormValues>>(\n\tvalues: V,\n\tinitialValues: V,\n) {\n\treturn !isEqual(\n\t\tsortBy(values.attachments?.map((a) => a.externalUrl)),\n\t\tsortBy((initialValues.attachments ?? []).map((a) => a.externalUrl)),\n\t);\n}\n\nexport function isRemindersChanged<V extends EntityFormValues>(\n\tvalues: V,\n\tinitialValues: V,\n) {\n\treturn !isEqual(\n\t\t(values.reminders ?? []).map((it) => it.id),\n\t\t(initialValues.reminders ?? []).map((it) => it.id),\n\t);\n}\n\nexport function isValidUrl<V extends EntityFormValues>(values: V): boolean {\n\tif (values.url && isNonEmptyString(values.url)) {\n\t\treturn isUrl(values.url) || values.url.startsWith('/sp');\n\t}\n\n\treturn true;\n}\n\nexport function isNameLimitExceeded(values: EntityFormValues) {\n\tif (values.name && isNonEmptyString(values.name)) {\n\t\treturn values.name.trim().length > NAME_MAX_LENGTH;\n\t}\n\n\treturn false;\n}\n\nexport function isDescriptionLimitExceeded(values: EntityFormValues) {\n\tif (isNonEmptyString(values.description)) {\n\t\treturn values.description.trim().length > DESCRIPTION_MAX_LENGTH;\n\t}\n\n\treturn false;\n}\n\nexport function isSomeCommentChangedExceedLimit<V extends EntityFormValues>(\n\tvalues: V,\n) {\n\tconst commentsToRemoveSet = new Set(values.commentsToRemove || []);\n\n\treturn [\n\t\t...((values.newComments ?? [])\n\t\t\t.filter(({ id }) => !commentsToRemoveSet.has(id!))\n\t\t\t.map((it) => it.content!) || []),\n\t\t...Object.entries(values.editedComments || {})\n\t\t\t.filter(([id]) => !commentsToRemoveSet.has(id))\n\t\t\t.map(([, content]) => content),\n\t].some((it) => {\n\t\tif (typeof it === 'string') {\n\t\t\treturn it.trim().length > COMMENT_MAX_LENGTH;\n\t\t}\n\t\treturn it.content.trim().length > COMMENT_MAX_LENGTH;\n\t});\n}\n\nfunction someCommentHasInvalidLength(it: string | Comment) {\n\tif (typeof it === 'string') {\n\t\treturn it.trim().length > COMMENT_MAX_LENGTH;\n\t}\n\treturn it.content.trim().length > COMMENT_MAX_LENGTH;\n}\n\nfunction someCommentEmpty(it: string | Comment) {\n\tif (typeof it === 'string') {\n\t\treturn it.trim().length === 0;\n\t}\n\treturn it.content.trim().length === 0;\n}\n\nexport function validateCommentsLength(values: EntityFormValues) {\n\tconst commentsToRemoveSet = new Set(values.commentsToRemove || []);\n\n\tconst newAndEditedComments = [\n\t\t...(values.newComments\n\t\t\t?.filter(({ id }) => !commentsToRemoveSet.has(id!))\n\t\t\t.map((it) => it.content!) || []),\n\t\t// eslint-disable-next-line no-unsafe-optional-chaining\n\t\t...Object.entries(values.editedComments || {})\n\t\t\t?.filter(([id]) => !commentsToRemoveSet.has(id))\n\t\t\t.map(([, content]) => content),\n\t];\n\n\tconst isSomeCommentChangedExceedLimit = newAndEditedComments.some(\n\t\tsomeCommentHasInvalidLength,\n\t);\n\tconst isSomeCommentEmpty = newAndEditedComments.some(someCommentEmpty);\n\n\treturn {\n\t\tisSomeCommentChangedExceedLimit,\n\t\tisSomeCommentEmpty,\n\t};\n}\n\nexport function isNewCommentLimitExceeded<V extends EntityFormValues>(values: V) {\n\treturn values.newComment.trim().length > COMMENT_MAX_LENGTH;\n}\n\nexport function isSomeReminderInvalid(values: EntityFormValues): boolean {\n\treturn values.reminders.some((it) => !!it.error);\n}\n","import React, { useEffect, useState } from 'react';\nimport { Combobox } from '../../form/combobox/index.js';\nimport { api } from '../api.js';\nimport { normalizeUserToOption, UserComboboxOption } from './components.js';\nimport { useFormContext } from '../context/form-context.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const AssignToTeam = (props: any) => {\n\tconst { disabled, taskType } = props;\n\n\tconst [teamMemberOptions, setTeamMemberOptions] = useState([]);\n\tconst [loadingTeamMemberOptions, setLoadingTeamMemberOptions] = useState(false);\n\tconst [allExpanded, setAllExpanded] = useState(false);\n\n\tconst handleExpandAllToggle = () => {\n\t\tsetAllExpanded((prev) => !prev);\n\t};\n\n\tconst {\n\t\tdictionary,\n\t\tvalues,\n\t\tonAssigneeChange,\n\t\tselectedTeam,\n\t\tselectedUser,\n\t\tsetSelectedUser,\n\t\tassignError,\n\t} = useFormContext();\n\n\tconst loadTeamOptions = async (inputValue: string) => {\n\t\tconst response = await api.team.findAll({\n\t\t\tname: inputValue,\n\t\t});\n\n\t\treturn {\n\t\t\toptions: response.teams.map((team) => ({\n\t\t\t\tvalue: team.id,\n\t\t\t\tlabel: team.name,\n\t\t\t\t// description: `${team.users.length} members`,\n\t\t\t\t// todo need to be updated once admin will fix their API (maybe Q2 2025)\n\t\t\t\tdescription: ``,\n\t\t\t\tusers: team.users,\n\t\t\t})),\n\t\t};\n\t};\n\n\t// Load team members and put options in state\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst loadTeamMemberOptions = async (team: any, isCanceled: boolean) => {\n\t\tif (!isCanceled) {\n\t\t\tsetLoadingTeamMemberOptions(true);\n\t\t\tswitch (taskType) {\n\t\t\t\tcase 'SP_ADHOC':\n\t\t\t\t\tPromise.allSettled(\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\t\tteam.users.map((user: any) => api.SP.user.findById(user.id, true)),\n\t\t\t\t\t).then((res) => {\n\t\t\t\t\t\tif (!isCanceled) {\n\t\t\t\t\t\t\tconst memberOptions = res\n\t\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\t\t.filter((v) => !!v.value)\n\t\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\t\t.map(({ value: user }) => normalizeUserToOption(user));\n\t\t\t\t\t\t\tconst options =\n\t\t\t\t\t\t\t\tmemberOptions.length > 0\n\t\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: 'Expand All',\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: 'expand-all',\n\t\t\t\t\t\t\t\t\t\t\t\tisExpandAll: true,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\t\t\t\t].concat(memberOptions)\n\t\t\t\t\t\t\t\t\t: memberOptions;\n\n\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\tsetTeamMemberOptions(options);\n\t\t\t\t\t\t\tsetLoadingTeamMemberOptions(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ADMIN_ADHOC':\n\t\t\t\tdefault:\n\t\t\t\t\tPromise.allSettled(\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\t\tteam.users.map((user: any) => api.person.findById(user.id, true)),\n\t\t\t\t\t).then((res) => {\n\t\t\t\t\t\tif (!isCanceled) {\n\t\t\t\t\t\t\tconst memberOptions = res\n\t\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\t\t.filter((v) => !!v?.value)\n\t\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\t\t.map(({ value: user }) => normalizeUserToOption(user)); // todo\n\t\t\t\t\t\t\tconst options =\n\t\t\t\t\t\t\t\tmemberOptions.length > 0\n\t\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: 'Expand All',\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: 'expand-all',\n\t\t\t\t\t\t\t\t\t\t\t\tisExpandAll: true,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\t\t\t\t].concat(memberOptions)\n\t\t\t\t\t\t\t\t\t: memberOptions;\n\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\tsetTeamMemberOptions(options);\n\t\t\t\t\t\t\tsetLoadingTeamMemberOptions(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tlet canceled = false;\n\n\t\tif (selectedTeam) {\n\t\t\tloadTeamMemberOptions(selectedTeam, canceled);\n\t\t}\n\n\t\treturn () => {\n\t\t\tcanceled = true;\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [selectedTeam]);\n\n\treturn (\n\t\t<div className=\"task-form__assign-to-team\">\n\t\t\t<div className=\"task-form__assign-to-team__select-team-wrapper\">\n\t\t\t\t<Combobox\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\trequired\n\t\t\t\t\tlabel={dictionary.assignTo.team}\n\t\t\t\t\tloadOptions={loadTeamOptions}\n\t\t\t\t\tplaceholder={`${dictionary.assignTo.placeholderPrefix} ${dictionary.assignTo.team}`}\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\tonChange={(option: any) => {\n\t\t\t\t\t\tif (option === null) {\n\t\t\t\t\t\t\tonAssigneeChange({\n\t\t\t\t\t\t\t\tteamId: null,\n\t\t\t\t\t\t\t\tteamName: null,\n\t\t\t\t\t\t\t\tassigneeId: null,\n\t\t\t\t\t\t\t\tassigneeName: null,\n\t\t\t\t\t\t\t\tassigneeEmail: null,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tsetTeamMemberOptions([]);\n\t\t\t\t\t\t} else if (option.value === 'expand-all') {\n\t\t\t\t\t\t\thandleExpandAllToggle();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tonAssigneeChange({\n\t\t\t\t\t\t\t\tteamId: option.value,\n\t\t\t\t\t\t\t\tteamName: option.label,\n\t\t\t\t\t\t\t\tassigneeId: null,\n\t\t\t\t\t\t\t\tassigneeName: null,\n\t\t\t\t\t\t\t\tassigneeEmail: null,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\tloadTeamMemberOptions(option);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tvalue={\n\t\t\t\t\t\tvalues.teamId ? { value: values.teamId, label: values.teamName } : null\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"task-form__select-team-member-wrapper\">\n\t\t\t\t<Combobox\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tlabel={dictionary.assignTo.teamMember}\n\t\t\t\t\toptions={teamMemberOptions}\n\t\t\t\t\tplaceholder={\n\t\t\t\t\t\tloadingTeamMemberOptions\n\t\t\t\t\t\t\t? 'Loading...'\n\t\t\t\t\t\t\t: `${dictionary.assignTo.placeholderPrefix} ${dictionary.assignTo.teamMember}`\n\t\t\t\t\t}\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\tonChange={(option: any) => {\n\t\t\t\t\t\tif (option === null) {\n\t\t\t\t\t\t\tonAssigneeChange({\n\t\t\t\t\t\t\t\tassigneeId: null,\n\t\t\t\t\t\t\t\tassigneeName: null,\n\t\t\t\t\t\t\t\tassigneeEmail: null,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tsetSelectedUser(null);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tonAssigneeChange({\n\t\t\t\t\t\t\t\tassigneeId: option.value,\n\t\t\t\t\t\t\t\tassigneeName: `${option.user.firstName} ${option.user.lastName}`,\n\t\t\t\t\t\t\t\tassigneeEmail: option.user.email,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tsetSelectedUser(option.user);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tvalue={\n\t\t\t\t\t\tassignError || !values.assigneeId\n\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tvalue: values.assigneeId,\n\t\t\t\t\t\t\t\t\tlabel: selectedUser\n\t\t\t\t\t\t\t\t\t\t? values.assigneeName\n\t\t\t\t\t\t\t\t\t\t: values.assigneeName?.replace(values.teamName ?? '', ''),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcomponents={{\n\t\t\t\t\t\tOption: UserComboboxOption,\n\t\t\t\t\t}}\n\t\t\t\t\tallExpanded={allExpanded}\n\t\t\t\t\tonExpandAllToggle={handleExpandAllToggle}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import React from 'react';\nimport { RadioGroup } from '../../form/radio-group/index.js';\nimport { AssignToPerson } from './assign-to-person.js';\nimport { AssignToTeam } from './assign-to-team.js';\nimport { useFormContext } from '../context/form-context.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const AssignTo = (props: any) => {\n\tconst { disabled } = props;\n\n\tconst { dictionary, isAssignToTeam, setIsAssignToTeam, assignError } =\n\t\tuseFormContext();\n\n\treturn (\n\t\t<div className=\"task-form__assign-to\">\n\t\t\t{assignError && (\n\t\t\t\t<div style={{ color: 'red' }}>{dictionary.assignTo.error}</div>\n\t\t\t)}\n\t\t\t<RadioGroup\n\t\t\t\tdisabled={disabled}\n\t\t\t\trequired\n\t\t\t\tlabel={dictionary.assignTo.groupLabel}\n\t\t\t\tonChange={(value: string) => {\n\t\t\t\t\tsetIsAssignToTeam(value === dictionary.assignTo.team);\n\t\t\t\t}}\n\t\t\t\tdefaultValue={\n\t\t\t\t\tisAssignToTeam ? dictionary.assignTo.team : dictionary.assignTo.person\n\t\t\t\t}\n\t\t\t\toptions={[\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: dictionary.assignTo.person,\n\t\t\t\t\t\tvalue: dictionary.assignTo.person,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: dictionary.assignTo.team,\n\t\t\t\t\t\tvalue: dictionary.assignTo.team,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t/>\n\t\t\t{!isAssignToTeam ? <AssignToPerson {...props} /> : null}\n\t\t\t{isAssignToTeam ? <AssignToTeam {...props} /> : null}\n\t\t</div>\n\t);\n};\n","/* eslint-disable */\nimport React from 'react';\nimport { components } from 'react-select';\nimport { format } from 'date-fns';\nimport { utcToZonedTime } from 'date-fns-tz';\nimport { isEmpty, pick } from 'lodash-es';\nimport { Icon } from '../icon/index.js';\nimport { baseClearIcon } from '../form/combobox/index.js';\nimport { TenantContextData } from '@/context/tenant';\nimport { TaskWithVariables } from '../link-to-milestone/index.js';\nimport { STATUSES } from './milestone-form/milestone-form.js';\nimport { TaskFormFieldProps } from './task-form.js';\nimport { EntityFormValues, FormPayload, Comment, Team } from './types.js';\n\nexport const Control = ({ children, ...props }: any) => (\n\t//@ts-ignore\n\t<components.Control {...props}>\n\t\t<Icon name=\"search\" className=\"icon\" />\n\t\t{children}\n\t</components.Control>\n);\n\nexport const DropdownIndicator = () => (\n\t<div className=\"task-form_category__indicator task-form_category__clear-indicator\">\n\t\t<i aria-hidden=\"true\" className=\"dropdown icon\" />\n\t</div>\n);\n\n//@ts-ignore\nexport const ClearIndicator = (props) => {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\taria-label=\"Clear\"\n\t\t\tref={props.innerProps.ref}\n\t\t\tonMouseDown={props.innerProps.onMouseDown}\n\t\t\tonKeyDown={(event) => {\n\t\t\t\tif (event.key === 'Enter') {\n\t\t\t\t\tprops.innerProps.onMouseDown(event);\n\t\t\t\t}\n\t\t\t}}\n\t\t\tclassName=\"task-form__clear-indicator\"\n\t\t\tdata-action=\"clear\"\n\t\t>\n\t\t\t{baseClearIcon}\n\t\t</button>\n\t);\n};\n\n/**\n * Convert a date to a timezone-specific date.\n * If a timezone is provided, the date will be converted to the corresponding timezone.\n * If no timezone is provided, the date will remain unchanged.\n *\n * @param {Date | null} date - The date to convert.\n * @param {string} [timezone] - The timezone to convert the date to.\n * @returns {Date} - The converted date.\n */\nexport const dateToTimezoneDate = (date: Date | null, timezone?: string) => {\n\t// Check if both date and timezone are provided\n\tif (date && timezone) {\n\t\t// Convert the date to the specified timezone\n\t\tconst timeZonedDate = utcToZonedTime(date, timezone);\n\n\t\t// If the converted date is invalid, return the original date\n\t\tif (timeZonedDate.toString() === 'Invalid Date') {\n\t\t\tconsole.error(`dateToTimezoneDate: Invalid timezone: ${timezone}`);\n\t\t\treturn date;\n\t\t}\n\n\t\t// Return the converted date\n\t\treturn timeZonedDate;\n\t}\n\n\t// If no timezone is provided, return the original date\n\treturn date;\n};\n\nexport function isUserHasAccessToEditTask({\n\tentity,\n\ttenantCtx,\n\tfieldProps,\n\tselectedTeam,\n}: {\n\tentity: EntityFormValues;\n\ttenantCtx: TenantContextData;\n\tfieldProps?: TaskFormFieldProps;\n\tselectedTeam: Team | null;\n}) {\n\tconst isCurrentUserExistsInSelectedTeam = Boolean(\n\t\tentity.teamId &&\n\t\t\tselectedTeam?.users?.some(\n\t\t\t\t(user) => user.id === tenantCtx.person.userAccountId,\n\t\t\t),\n\t);\n\n\treturn (\n\t\tentity.ownerId === tenantCtx.person.userAccountId ||\n\t\tentity.assigneeId === tenantCtx.person.userAccountId ||\n\t\tfieldProps?.permissions?.isAdmin ||\n\t\tisCurrentUserExistsInSelectedTeam\n\t);\n}\n\nexport function isUserHasAccessToEditMilestone({\n\tentity,\n\ttenantCtx,\n\tfieldProps,\n\tselectedTeam,\n}: {\n\tentity: EntityFormValues;\n\ttenantCtx: TenantContextData;\n\tfieldProps?: TaskFormFieldProps;\n\tselectedTeam: Team | null;\n}) {\n\tconst isCurrentUserExistsInSelectedTeam = Boolean(\n\t\tentity.teamId &&\n\t\t\tselectedTeam?.users?.some(\n\t\t\t\t(user) => user.id === tenantCtx.person.userAccountId,\n\t\t\t),\n\t);\n\n\treturn (\n\t\tentity.ownerId === tenantCtx.person.userAccountId ||\n\t\tentity.assigneeId === tenantCtx.person.userAccountId ||\n\t\tfieldProps?.permissions?.isAdmin ||\n\t\tisCurrentUserExistsInSelectedTeam\n\t);\n}\n\nexport function getCommentsToUpdate(\n\tcommentsToRemove: string[],\n\t//@ts-ignore\n\teditedComments,\n) {\n\tconst toRemoveSet = new Set(commentsToRemove || []);\n\n\treturn Object.entries(editedComments || {})\n\t\t?.filter(([id]) => {\n\t\t\treturn !id.startsWith('NEW') && !toRemoveSet.has(id);\n\t\t})\n\t\t.map(([id, content]) => ({ id, content: (content as string).trim() }));\n}\n\nexport function getCommentsToRemove(commentsToRemove: string[]) {\n\treturn (commentsToRemove || []).filter(\n\t\t(commentId) => !commentId.startsWith('NEW'),\n\t);\n}\n\nexport function getTasksToLinkAndUnlinkPayload(\n\ttasksToLink: TaskWithVariables[],\n\ttasksToUnlink: string[],\n) {\n\treturn [\n\t\t...tasksToLink.map((task) => ({ taskId: task.id, link: true })),\n\t\t...tasksToUnlink.map((taskId) => ({ taskId, link: false })),\n\t];\n}\n\nexport function getCommentsToCreate(\n\tcommentsToRemove: string[],\n\tnewComments: Partial<Comment>[],\n\teditedComments = {},\n) {\n\tconst toRemoveSet = new Set(commentsToRemove || []);\n\n\treturn (newComments || [])\n\t\t.filter((comment) => {\n\t\t\treturn !toRemoveSet.has(comment.id!);\n\t\t})\n\t\t.map((comment) => {\n\t\t\t//@ts-ignore\n\t\t\treturn (editedComments[comment.id!] || comment.content).trim();\n\t\t});\n}\n\nexport const getRequestPayload = (props: {\n\ttenantCtx: TenantContextData;\n\tvalues: EntityFormValues;\n\tattachments: any[];\n\tentity: EntityFormValues;\n}): FormPayload => {\n\tconst { tenantCtx, values, attachments, entity } = props;\n\n\tconst { person, user, tenant } = tenantCtx;\n\n\tif (isEmpty(tenant) || (isEmpty(person) && isEmpty(user))) {\n\t\tthrow new Error(\"Can't retrieve user or tenant data.\");\n\t}\n\n\tconst fullName: string = person?.fullName ?? 'Unlinked User';\n\n\tconst firstName: string = isEmpty(person) ? user.firstName : person.firstName;\n\tconst lastName: string = isEmpty(person) ? user.lastName : person.lastName;\n\tconst middleName: string = isEmpty(person) ? '' : person.middleName;\n\n\tconst payload: FormPayload = {\n\t\ttenantId: tenant.id,\n\t\tname: values.name,\n\t\tdescription: values.description.trim(),\n\t\tassigneeId: values.assigneeId || null,\n\t\tassigneeName: values.assigneeName || null,\n\t\tassigneeEmail: values.assigneeEmail || null,\n\t\tassignedFromId: entity.assignedFromId || (user.id as string),\n\t\tassignedFromName: entity.from ?? fullName,\n\t\tfirstName,\n\t\tmiddleName,\n\t\tlastName,\n\t\tstatus: 'Open',\n\t\tcategory: 'CAYUSE_AD_HOC',\n\t\turl: values.url,\n\t\tapplicationHostUrl: `${window.location.protocol}//${window.location.hostname}/`,\n\t\tattachments,\n\t\toriginalAttachments: entity.attachments || [],\n\t\t//@ts-ignore\n\t\treminders: values.reminders.map((it) => {\n\t\t\t// remove id if it's a new reminder\n\t\t\tif (!it.createdAt) {\n\t\t\t\treturn pick(it, ['daysTillExecute', 'isAfter', 'isForInternalDueDate']);\n\t\t\t}\n\n\t\t\treturn it;\n\t\t}),\n\t\tuserCategoryId: values.userCategoryId,\n\t\ttoTeam: values.teamId,\n\t\tteamName: values.teamName,\n\t\tmilestoneId: values.milestoneId,\n\t\tmilestoneCounter: values.milestoneCounter,\n\t\tcomment: values.newComment.trim() || null,\n\t\tdueOn: values.dueOn ? format(values.dueOn, 'yyyy-MM-dd') : '',\n\t\tinternalDueDate: values.internalDueOn\n\t\t\t? format(values.internalDueOn, 'yyyy-MM-dd')\n\t\t\t: null,\n\t};\n\n\tif (entity.id) {\n\t\tpayload.id = entity.id;\n\t\tpayload.taskId = entity.id;\n\t\tpayload.createdOn = format(entity.createdOn!, 'yyyy-MM-dd');\n\t\tpayload.lastUpdatedBy = fullName;\n\t\tpayload.status = values.status;\n\t\tpayload.completedBy = values.status === STATUSES.CLOSED ? fullName : undefined;\n\t}\n\n\treturn payload;\n};\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport React, {\n\tforwardRef,\n\tmemo,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n} from 'react';\nimport { Form } from 'react-aria-components';\nimport { identity, merge, get } from 'lodash-es';\nimport { linkTasksToMilestone } from '../../link-to-milestone/index.js';\nimport { notify } from '../../banner-notification';\nimport { Button } from '../../button';\nimport { ButtonGroup } from '../../button-group';\nimport { isFunction, isNonEmptyString } from '@/utils/type-checks';\nimport { LoadingIndicator } from '../../loading-indicator';\nimport { AccordionAttachmentsForm } from '../../attachments-form';\nimport { AlertDialog } from '../../modal-dialog';\nimport {\n\tuseTenantContext,\n\tTenantContextData,\n\tITenantContext,\n} from '@/context/tenant';\n\nimport { api } from '../api.js';\nimport { AssignTo } from '../assign-to/index.js';\nimport { CategoryInput } from '../category-input/category-input.js';\nimport { CreatedByField } from '../components/created-by-field.js';\nimport { DescriptionField } from '../components/description-field.js';\nimport { EntityInfoField } from '../components/entity-info-field.js';\nimport { FormDateSelector } from '../components/form-date-selector.js';\nimport { NameField } from '../components/name-field.js';\nimport { StatusField } from '../components/status-field.js';\nimport { UrlField } from '../components/url-field.js';\nimport { FormContextProvider, useFormContext } from '../context/form-context.js';\nimport { milestoneDictionary } from '../dictionary.js';\nimport { LinkedTasks } from '../linked-tasks/linked-tasks.js';\nimport { FormProps, EntityFormValues, FormPayload } from '../types.js';\nimport {\n\tdateToTimezoneDate,\n\tgetCommentsToCreate,\n\tgetCommentsToRemove,\n\tgetCommentsToUpdate,\n\tgetRequestPayload,\n\tgetTasksToLinkAndUnlinkPayload,\n\tisUserHasAccessToEditMilestone,\n} from '../utils.js';\nimport { Reminders } from '../reminders/reminders.js';\nimport { Comments } from '../comments/comments.js';\nimport {\n\tgetBaseFieldsFormValues,\n\tisAttachmentsChanged,\n\tisBaseFieldsChanged,\n\tisCommentsChanged,\n\tisLinkedTasksChanged,\n\tisRemindersChanged,\n} from '../validators.js';\nimport '../styles.css';\nimport { Attachment } from '../task-form.js';\n\nexport const STATUSES = {\n\tOPEN: 'Open',\n\tIN_PROGRESS: 'In Progress',\n\tON_HOLD: 'On Hold',\n\tCLOSED: 'Closed',\n} as const;\n\nfunction hasUnsavedChanges({\n\tvalues,\n\tinitialValues,\n\ttenantCtx,\n\tattachments,\n}: {\n\tvalues: EntityFormValues;\n\tinitialValues: EntityFormValues;\n\ttenantCtx: ITenantContext;\n\tattachments: Attachment[];\n}) {\n\tconst internalDateChanged =\n\t\tdateToTimezoneDate(\n\t\t\tvalues.internalDueOn,\n\t\t\ttenantCtx.data.tenant.timezone,\n\t\t)?.toDateString() !==\n\t\tdateToTimezoneDate(\n\t\t\tinitialValues.internalDueOn,\n\t\t\ttenantCtx.data.tenant.timezone,\n\t\t)?.toDateString();\n\n\tconst dueDateChanged =\n\t\tdateToTimezoneDate(\n\t\t\tvalues.dueOn,\n\t\t\ttenantCtx.data.tenant.timezone,\n\t\t)?.toDateString() !==\n\t\tdateToTimezoneDate(\n\t\t\tinitialValues.dueOn,\n\t\t\ttenantCtx.data.tenant.timezone,\n\t\t)?.toDateString();\n\n\treturn (\n\t\tisBaseFieldsChanged(values, initialValues) ||\n\t\tisAttachmentsChanged({ attachments }, initialValues) ||\n\t\tisRemindersChanged(values, initialValues) ||\n\t\tisCommentsChanged(values) ||\n\t\tisLinkedTasksChanged(values) ||\n\t\tinternalDateChanged ||\n\t\tdueDateChanged\n\t);\n}\n\nconst getMilestoneRequestPayload = (args: {\n\ttenantCtx: TenantContextData;\n\tvalues: EntityFormValues;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tattachments: any[];\n\tentity: EntityFormValues;\n}) => {\n\tconst basePayload = getRequestPayload(args);\n\n\treturn {\n\t\t...basePayload,\n\t\tcategory: 'CAYUSE_AD_MILESTONE',\n\t} satisfies FormPayload;\n};\n\nconst MilestoneFormComponent = memo(\n\tforwardRef(function MilestoneFormComponent(props: FormProps, ref) {\n\t\tconst {\n\t\t\tallowToRemoveAttachmentsByRoles,\n\t\t\tallowToRemoveCommentsByRoles,\n\t\t\tonConfirm,\n\t\t\tonSuccess,\n\t\t\tonBeforeSuccess,\n\t\t\tonError,\n\t\t\tonCancel,\n\t\t\tfieldProps,\n\t\t\trenderActions,\n\t\t\ttype,\n\t\t\tenableComments = true,\n\t\t\tenableLinkedTasks = true,\n\t\t} = props;\n\n\t\tconst {\n\t\t\tentity,\n\t\t\tisEntityLoading,\n\t\t\tdictionary,\n\n\t\t\tvalues,\n\t\t\tisValidUrl,\n\t\t\tisNameLimitExceeded,\n\t\t\tisDescriptionLimitExceeded,\n\t\t\tonInputChange,\n\t\t\tselectedPersonStatus,\n\t\t\tunsavedChanges,\n\t\t\tsubmitDisabled,\n\t\t\tselectedTeam,\n\n\t\t\tattachments,\n\t\t\tsetAttachments,\n\t\t\trejections,\n\t\t\tsetRejections,\n\t\t\tbaseFiles,\n\t\t\tisOpenAttachmentsDialogModal,\n\t\t\tsetOpenAttachmentsDialogModal,\n\t\t\tisAttachmentsLoading,\n\t\t\tsetIsAttachmentsLoading,\n\t\t} = useFormContext();\n\n\t\tconst [isSubmitLoading, setSubmitIsLoading] = useState(false);\n\n\t\tconst [isSomeFieldEditing, setIsSomeFieldEditing] = useState(false);\n\t\tconst [isOpenUnsavedChangesDialog, setIsOpenUnsavedChangesDialog] =\n\t\t\tuseState(false);\n\n\t\tconst { data: tenantCtx } = useTenantContext();\n\n\t\tconst userHasEditAccess = isUserHasAccessToEditMilestone({\n\t\t\tentity,\n\t\t\ttenantCtx,\n\t\t\tfieldProps,\n\t\t\tselectedTeam,\n\t\t});\n\n\t\tconst isStatusClosed = entity.status === STATUSES.CLOSED;\n\t\tconst formDisabled = isNonEmptyString(entity.id) && !userHasEditAccess;\n\n\t\tconst getPayload = useCallback(\n\t\t\t() =>\n\t\t\t\tgetMilestoneRequestPayload({\n\t\t\t\t\ttenantCtx,\n\t\t\t\t\tvalues,\n\t\t\t\t\tattachments,\n\t\t\t\t\tentity,\n\t\t\t\t}),\n\t\t\t[tenantCtx, values, attachments, entity],\n\t\t);\n\n\t\tconst submitForm = useCallback(async () => {\n\t\t\ttry {\n\t\t\t\tsetOpenAttachmentsDialogModal(false);\n\t\t\t\tsetSubmitIsLoading(true);\n\n\t\t\t\tconst payload = isFunction(onConfirm)\n\t\t\t\t\t? await onConfirm!(getPayload())\n\t\t\t\t\t: getPayload();\n\n\t\t\t\tlet response;\n\n\t\t\t\tconst tasksToLinkAndUnlinkPayload = getTasksToLinkAndUnlinkPayload(\n\t\t\t\t\tvalues.tasksToLink,\n\t\t\t\t\tvalues.tasksIdsToRemove,\n\t\t\t\t);\n\n\t\t\t\tif (entity.id) {\n\t\t\t\t\tconst commentsToCreate = getCommentsToCreate(\n\t\t\t\t\t\tvalues.commentsToRemove,\n\t\t\t\t\t\tvalues.newComments,\n\t\t\t\t\t\tvalues.editedComments,\n\t\t\t\t\t);\n\t\t\t\t\tconst commentsToUpdate = getCommentsToUpdate(\n\t\t\t\t\t\tvalues.commentsToRemove,\n\t\t\t\t\t\tvalues.editedComments,\n\t\t\t\t\t);\n\t\t\t\t\tconst commentsToDelete = getCommentsToRemove(values.commentsToRemove);\n\n\t\t\t\t\tconst commentCreateRequests = commentsToCreate\n\t\t\t\t\t\t.concat(values.newComment ? [values.newComment] : [])\n\t\t\t\t\t\t.map((content: string) => {\n\t\t\t\t\t\t\treturn api.comments.create(entity.id, { content });\n\t\t\t\t\t\t});\n\t\t\t\t\tconst commentUpdateRequests = commentsToUpdate.map((comment) => {\n\t\t\t\t\t\treturn api.comments.edit(comment.id, {\n\t\t\t\t\t\t\tcontent: comment.content,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tconst commentDeleteRequests = commentsToDelete.map((commentId) => {\n\t\t\t\t\t\treturn api.comments.delete(commentId);\n\t\t\t\t\t});\n\n\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\t...commentCreateRequests,\n\t\t\t\t\t\t...commentUpdateRequests,\n\t\t\t\t\t\t...commentDeleteRequests,\n\t\t\t\t\t\tlinkTasksToMilestone(entity.id, tasksToLinkAndUnlinkPayload),\n\t\t\t\t\t]);\n\n\t\t\t\t\tresponse = await api.task.update(payload);\n\t\t\t\t} else {\n\t\t\t\t\tresponse = await api.task.create({\n\t\t\t\t\t\t...payload,\n\t\t\t\t\t\ttasksToLink: tasksToLinkAndUnlinkPayload,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (response.error) {\n\t\t\t\t\tthrow new Error(response.error);\n\t\t\t\t}\n\n\t\t\t\tconst successMessage = entity?.id\n\t\t\t\t\t? dictionary.notifications.updated\n\t\t\t\t\t: dictionary.notifications.sent;\n\n\t\t\t\tif (isFunction(onBeforeSuccess)) {\n\t\t\t\t\tawait onBeforeSuccess!(response);\n\t\t\t\t}\n\n\t\t\t\tif (isFunction(onSuccess)) {\n\t\t\t\t\tonSuccess!(successMessage, response);\n\t\t\t\t} else {\n\t\t\t\t\tnotify(successMessage, { type: 'success' });\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconst errorMessage =\n\t\t\t\t\terror.message ||\n\t\t\t\t\t'There was an error saving this milestone. Please try again.';\n\t\t\t\tif (isFunction(onError)) {\n\t\t\t\t\tonError!(errorMessage, error);\n\t\t\t\t} else {\n\t\t\t\t\tnotify(errorMessage, { type: 'error' });\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tsetSubmitIsLoading(false);\n\t\t\t}\n\t\t}, [\n\t\t\tsetOpenAttachmentsDialogModal,\n\t\t\tonConfirm,\n\t\t\tgetPayload,\n\t\t\tentity.id,\n\t\t\tdictionary.notifications.updated,\n\t\t\tdictionary.notifications.sent,\n\t\t\tonBeforeSuccess,\n\t\t\tonSuccess,\n\t\t\tvalues.tasksToLink,\n\t\t\tvalues.tasksIdsToRemove,\n\t\t\tvalues.commentsToRemove,\n\t\t\tvalues.newComments,\n\t\t\tvalues.editedComments,\n\t\t\tvalues.newComment,\n\t\t\tonError,\n\t\t]);\n\n\t\tconst onCancelEdit: React.MouseEventHandler<HTMLButtonElement> = (event) => {\n\t\t\tif (isFunction(onCancel)) {\n\t\t\t\tonCancel!({ unsavedChanges }, event);\n\t\t\t}\n\t\t};\n\n\t\tconst isSubmitFormButtonDisabled =\n\t\t\tformDisabled ||\n\t\t\tsubmitDisabled ||\n\t\t\tisSubmitLoading ||\n\t\t\t!selectedPersonStatus ||\n\t\t\tisAttachmentsLoading;\n\n\t\tconst onSubmit = useCallback(\n\t\t\tasync (e) => {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (isSubmitFormButtonDisabled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (isSomeFieldEditing) {\n\t\t\t\t\tsetIsOpenUnsavedChangesDialog(true);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (rejections.length > 0) {\n\t\t\t\t\tsetOpenAttachmentsDialogModal(true);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\treturn submitForm();\n\t\t\t},\n\t\t\t[\n\t\t\t\tisSubmitFormButtonDisabled,\n\t\t\t\tisSomeFieldEditing,\n\t\t\t\trejections.length,\n\t\t\t\tsubmitForm,\n\t\t\t\tsetOpenAttachmentsDialogModal,\n\t\t\t],\n\t\t);\n\n\t\tif (isEntityLoading) {\n\t\t\treturn <LoadingIndicator />;\n\t\t}\n\n\t\tconst formActions = (\n\t\t\t<ButtonGroup className=\"task-form_button-group\">\n\t\t\t\t<Button type=\"button\" secondary onClick={onCancelEdit}>\n\t\t\t\t\t{dictionary.actionButtonLabels.cancel}\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tdisabled={isSubmitFormButtonDisabled}\n\t\t\t\t\tbusy={isSubmitLoading}\n\t\t\t\t\tform=\"milestone-form\"\n\t\t\t\t>\n\t\t\t\t\t{!entity.id\n\t\t\t\t\t\t? dictionary.actionButtonLabels.assignAndSend\n\t\t\t\t\t\t: dictionary.actionButtonLabels.saveChanges}\n\t\t\t\t</Button>\n\t\t\t</ButtonGroup>\n\t\t);\n\n\t\treturn (\n\t\t\t<Form\n\t\t\t\tid=\"milestone-form\"\n\t\t\t\tref={ref}\n\t\t\t\tnoValidate=\"novalidate\"\n\t\t\t\tdata-component=\"task-form\"\n\t\t\t\tclassName=\"task-form\"\n\t\t\t\tonSubmit={onSubmit}\n\t\t\t>\n\t\t\t\t<EntityInfoField entity={entity} dictionary={dictionary} />\n\t\t\t\t<div className=\"task-form-container\">\n\t\t\t\t\t<div className=\"task-form-left-column\">\n\t\t\t\t\t\t<NameField\n\t\t\t\t\t\t\tvalues={values}\n\t\t\t\t\t\t\tonInputChange={onInputChange}\n\t\t\t\t\t\t\tdisabled={isStatusClosed || formDisabled}\n\t\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\t\tisNameLimitExceeded={isNameLimitExceeded}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div className=\"task-form_field\">\n\t\t\t\t\t\t\t<label htmlFor=\"task-category\">{dictionary.category}</label>\n\t\t\t\t\t\t\t<CategoryInput\n\t\t\t\t\t\t\t\ttenantId={tenantCtx.tenant?.id}\n\t\t\t\t\t\t\t\tcategoryGroup={get(fieldProps, 'category.categoryGroup')}\n\t\t\t\t\t\t\t\tvalues={values}\n\t\t\t\t\t\t\t\tonInputChange={onInputChange}\n\t\t\t\t\t\t\t\tdisabled={isStatusClosed || formDisabled}\n\t\t\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<DescriptionField\n\t\t\t\t\t\t\tvalues={values}\n\t\t\t\t\t\t\tonInputChange={onInputChange}\n\t\t\t\t\t\t\tdisabled={isStatusClosed || formDisabled}\n\t\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\t\tisDescriptionLimitExceeded={isDescriptionLimitExceeded}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<UrlField\n\t\t\t\t\t\t\tvalues={values}\n\t\t\t\t\t\t\tonInputChange={onInputChange}\n\t\t\t\t\t\t\tisValidUrl={isValidUrl}\n\t\t\t\t\t\t\tdisabled={isStatusClosed || formDisabled}\n\t\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\t\tfieldProps={fieldProps}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<AccordionAttachmentsForm\n\t\t\t\t\t\t\tsetFiles={setAttachments}\n\t\t\t\t\t\t\tsetRejections={setRejections}\n\t\t\t\t\t\t\tfiles={baseFiles}\n\t\t\t\t\t\t\tlabel={dictionary.attachmentsLabel}\n\t\t\t\t\t\t\tdisabled={isStatusClosed || formDisabled}\n\t\t\t\t\t\t\tdictionary={dictionary.attachmentsForm}\n\t\t\t\t\t\t\tallowToRemoveByRoles={allowToRemoveAttachmentsByRoles}\n\t\t\t\t\t\t\tonLoading={setIsAttachmentsLoading}\n\t\t\t\t\t\t\tdefaultOpen={baseFiles.length > 0}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{enableComments && (\n\t\t\t\t\t\t\t<Comments\n\t\t\t\t\t\t\t\tdisabled={isStatusClosed || formDisabled}\n\t\t\t\t\t\t\t\tallowToRemoveByRoles={allowToRemoveCommentsByRoles}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"task-form-right-column\">\n\t\t\t\t\t\t<StatusField\n\t\t\t\t\t\t\tentity={entity}\n\t\t\t\t\t\t\tdisabled={formDisabled}\n\t\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\tonInputChange={onInputChange}\n\t\t\t\t\t\t\tvalues={values}\n\t\t\t\t\t\t\tlabel={dictionary.status}\n\t\t\t\t\t\t\tisMilestone\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<AssignTo\n\t\t\t\t\t\t\tfieldProps={fieldProps}\n\t\t\t\t\t\t\tdisabled={isStatusClosed || formDisabled}\n\t\t\t\t\t\t\ttaskType={type}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<CreatedByField entity={entity} dictionary={dictionary} />\n\t\t\t\t\t\t<FormDateSelector\n\t\t\t\t\t\t\tdisabled={isStatusClosed || formDisabled}\n\t\t\t\t\t\t\tlabel={(dictionary as typeof milestoneDictionary).internalDueDateLabel}\n\t\t\t\t\t\t\tid=\"internal-due-date\"\n\t\t\t\t\t\t\tvalue={values.internalDueOn}\n\t\t\t\t\t\t\tonChange={(date) => {\n\t\t\t\t\t\t\t\tonInputChange(date, 'internalDueOn');\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttimezone={tenantCtx.tenant.timezone}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<FormDateSelector\n\t\t\t\t\t\t\tdisabled={isStatusClosed || formDisabled}\n\t\t\t\t\t\t\tlabel={dictionary.dueDate}\n\t\t\t\t\t\t\tid=\"external-due-date\"\n\t\t\t\t\t\t\tvalue={values.dueOn}\n\t\t\t\t\t\t\tonChange={(date) => {\n\t\t\t\t\t\t\t\tonInputChange(date, 'dueOn');\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttimezone={tenantCtx.tenant.timezone}\n\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Reminders\n\t\t\t\t\t\t\treminders={values.reminders}\n\t\t\t\t\t\t\tonChange={(value) => {\n\t\t\t\t\t\t\t\tonInputChange(value, 'reminders');\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tselectedInternalDueDate={values.internalDueOn}\n\t\t\t\t\t\t\tselectedDueDate={values.dueOn}\n\t\t\t\t\t\t\tdictionary={dictionary.reminders}\n\t\t\t\t\t\t\tdisabled={isStatusClosed || formDisabled}\n\t\t\t\t\t\t\tsetIsSomeFieldEditing={setIsSomeFieldEditing}\n\t\t\t\t\t\t\tincludeInternalDate\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t{enableLinkedTasks && (\n\t\t\t\t\t<LinkedTasks\n\t\t\t\t\t\tdisabled={isStatusClosed || formDisabled}\n\t\t\t\t\t\ttaskType={type}\n\t\t\t\t\t\t{...get(fieldProps, 'linkedTasks')}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<div className=\"task-form_footer\">\n\t\t\t\t\t<div className=\"ml-auto\">\n\t\t\t\t\t\t{isFunction(renderActions) ? renderActions!(formActions) : formActions}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<AlertDialog\n\t\t\t\t\ttitle={dictionary.attachmentsDialogError}\n\t\t\t\t\tdescription={<span>{dictionary.attachmentsDialogMessage}</span>}\n\t\t\t\t\tisOpen={isOpenAttachmentsDialogModal}\n\t\t\t\t\tonCancel={() => setOpenAttachmentsDialogModal(false)}\n\t\t\t\t\tconfirmText={\n\t\t\t\t\t\t!entity.id\n\t\t\t\t\t\t\t? dictionary.actionButtonLabels.assignAndSend\n\t\t\t\t\t\t\t: dictionary.actionButtonLabels.saveChanges\n\t\t\t\t\t}\n\t\t\t\t\tonConfirm={submitForm}\n\t\t\t\t/>\n\t\t\t\t<AlertDialog\n\t\t\t\t\ttitle={dictionary.unsavedChangesBeforeSaveDialog.title}\n\t\t\t\t\tdescription={\n\t\t\t\t\t\t<span>{dictionary.unsavedChangesBeforeSaveDialog.description}</span>\n\t\t\t\t\t}\n\t\t\t\t\tisOpen={isOpenUnsavedChangesDialog}\n\t\t\t\t\tonCancel={() => setIsOpenUnsavedChangesDialog(false)}\n\t\t\t\t\tonConfirm={submitForm}\n\t\t\t\t/>\n\t\t\t</Form>\n\t\t);\n\t}),\n);\n\nfunction MilestoneFormWrapper(props: FormProps, ref) {\n\tconst {\n\t\tid,\n\t\tonEntityLoaded = identity,\n\t\tfieldProps,\n\t\tsubmissionId,\n\t\tdictionary: dctnr,\n\t} = props;\n\n\tconst [isEntityLoading, setIsEntityLoading] = useState(false);\n\tconst [entity, setEntity] = useState(() =>\n\t\tgetBaseFieldsFormValues({ url: get(fieldProps, 'url.value', '') }),\n\t);\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tconst loadTask = async () => {\n\t\t\tsetIsEntityLoading(true);\n\n\t\t\ttry {\n\t\t\t\tconst object = await api.task.getById(id!, true, submissionId);\n\t\t\t\tlet entityValues = getBaseFieldsFormValues(object);\n\t\t\t\tentityValues = onEntityLoaded(entityValues) ?? entityValues;\n\t\t\t\tif (!cancelled) {\n\t\t\t\t\tsetEntity(entityValues);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tnotify(e.message ?? 'Something went wrong when loading milestone.', {\n\t\t\t\t\ttype: 'error',\n\t\t\t\t});\n\t\t\t} finally {\n\t\t\t\tsetIsEntityLoading(false);\n\t\t\t}\n\t\t};\n\n\t\tif (id) {\n\t\t\tloadTask();\n\t\t}\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [id]);\n\n\tconst dictionary = useMemo(() => {\n\t\treturn merge({}, milestoneDictionary, dctnr);\n\t}, [dctnr]);\n\n\treturn (\n\t\t<FormContextProvider\n\t\t\tentity={entity}\n\t\t\tsubmissionId={submissionId}\n\t\t\tisEntityLoading={isEntityLoading}\n\t\t\tinitialValues={entity}\n\t\t\tdictionary={dictionary}\n\t\t\thasUnsavedChanges={hasUnsavedChanges}\n\t\t>\n\t\t\t<MilestoneFormComponent {...props} ref={ref} />\n\t\t</FormContextProvider>\n\t);\n}\n\nexport const MilestoneForm = memo(forwardRef(MilestoneFormWrapper));\n","import React, { memo, useEffect, useState } from 'react';\nimport ReactSelect from 'react-select';\nimport { api } from '../api.js';\nimport { EntityFormValues } from '../types.js';\nimport { ClearIndicator, Control, DropdownIndicator } from '../utils.js';\n\nexport interface CategoryInputProps<T, D> {\n\ttenantId: string;\n\tcategoryGroup?: string;\n\tvalues: EntityFormValues;\n\tonInputChange: T;\n\tdisabled: boolean;\n\tdictionary: D;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const CategoryInput = memo<CategoryInputProps<any, any>>(\n\tfunction CategoryInput(props) {\n\t\tconst { tenantId, categoryGroup, values, onInputChange, disabled, dictionary } =\n\t\t\tprops;\n\n\t\tconst [preselectedCategoryOptions, setPreselectedCategoryOptions] = useState<\n\t\t\t{ label: string; value: string; id: string }[]\n\t\t>([]);\n\n\t\tuseEffect(() => {\n\t\t\tlet cancelled = false;\n\n\t\t\tconst fetchUserCategories = async (\n\t\t\t\ttenantId_: string,\n\t\t\t\tcategoryGroup_: string,\n\t\t\t) => {\n\t\t\t\tawait api.category.findAll(tenantId_, categoryGroup_).then((response) => {\n\t\t\t\t\tif (!cancelled) {\n\t\t\t\t\t\tsetPreselectedCategoryOptions(\n\t\t\t\t\t\t\tresponse.map((v) => {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tlabel: v.name,\n\t\t\t\t\t\t\t\t\tvalue: v.name,\n\t\t\t\t\t\t\t\t\tid: v.id,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tif (tenantId && categoryGroup) {\n\t\t\t\tfetchUserCategories(tenantId, categoryGroup);\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tcancelled = true;\n\t\t\t};\n\t\t}, [tenantId, categoryGroup]);\n\n\t\treturn (\n\t\t\t// @ts-ignore\n\t\t\t<ReactSelect\n\t\t\t\toptions={preselectedCategoryOptions}\n\t\t\t\tvalue={\n\t\t\t\t\tvalues.userCategory\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tlabel: values.userCategory,\n\t\t\t\t\t\t\t\tvalue: values.userCategory,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: null\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tonChange={(option: any) => {\n\t\t\t\t\tonInputChange(option?.id, 'userCategoryId');\n\t\t\t\t\tonInputChange(option?.value, 'userCategory');\n\t\t\t\t}}\n\t\t\t\tisDisabled={disabled}\n\t\t\t\tisSearchable\n\t\t\t\tisClearable\n\t\t\t\tdata-ui-name=\"task-category\"\n\t\t\t\tid=\"task-category\"\n\t\t\t\taria-label={dictionary.category}\n\t\t\t\tplaceholder={dictionary.categorySearch.placeholder}\n\t\t\t\tclassName=\"task-form_category\"\n\t\t\t\tclassNamePrefix=\"task-form_category\"\n\t\t\t\tcomponents={{\n\t\t\t\t\tControl,\n\t\t\t\t\tDropdownIndicator,\n\t\t\t\t\tClearIndicator,\n\t\t\t\t}}\n\t\t\t\trequired={false}\n\t\t\t\tstyles={{\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tcontrol: (css: React.CSSProperties) => ({\n\t\t\t\t\t\t...css,\n\t\t\t\t\t\tpaddingLeft: '1rem',\n\t\t\t\t\t}),\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\t},\n);\n","import React, { memo } from 'react';\nimport { EntityFormValues } from '../types.js';\n\nexport interface CreatedByFieldProps {\n\tentity: EntityFormValues;\n\tdictionary: {\n\t\tcreatedBy: string;\n\t};\n}\n\nexport const CreatedByField = memo(function CreatedByField(\n\tprops: CreatedByFieldProps,\n) {\n\tconst { entity, dictionary } = props;\n\n\tif (!entity.id) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"task-form_created-by\">\n\t\t\t<p>\n\t\t\t\t<strong role=\"log\" aria-live=\"polite\">\n\t\t\t\t\t{dictionary.createdBy}:\n\t\t\t\t</strong>{' '}\n\t\t\t\t{entity.from}\n\t\t\t</p>\n\t\t</div>\n\t);\n});\n","import React, { memo } from 'react';\nimport cn from 'classnames';\nimport { TextArea } from '../../form/text-area/index.js';\nimport { EntityFormValues } from '../types.js';\n\ninterface DescriptionFieldProps<E> {\n\tvalues: E;\n\tonInputChange: (value: string, key: string) => void;\n\tdisabled: boolean;\n\tdictionary: {\n\t\tdescription: string;\n\t\tdescriptionCharLimitExceeded: string;\n\t\tdescriptionCharLimitInfo: string;\n\t};\n\tisDescriptionLimitExceeded: boolean;\n}\n\nexport const DescriptionField = memo(function DescriptionField<\n\tE extends EntityFormValues,\n>(props: DescriptionFieldProps<E>) {\n\tconst { values, onInputChange, disabled, dictionary, isDescriptionLimitExceeded } =\n\t\tprops;\n\n\treturn (\n\t\t<div className=\"task-form_field\">\n\t\t\t<label htmlFor=\"task-description\">\n\t\t\t\t<span className=\"task-form_required-indicator\" aria-hidden=\"true\">\n\t\t\t\t\t*\n\t\t\t\t</span>\n\t\t\t\t&nbsp;\n\t\t\t\t{dictionary.description}\n\t\t\t</label>\n\t\t\t<TextArea\n\t\t\t\tid=\"task-description\"\n\t\t\t\tlabel={dictionary.description}\n\t\t\t\tonChange={(e) => {\n\t\t\t\t\tonInputChange(e.target.value, 'description');\n\t\t\t\t}}\n\t\t\t\trows={10}\n\t\t\t\trequired\n\t\t\t\tvalue={values.description}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tclassName={cn(disabled ? 'task-form_input_disabled' : '', {\n\t\t\t\t\t'task-form_error_input': isDescriptionLimitExceeded,\n\t\t\t\t})}\n\t\t\t\taria-label=\"Task description\"\n\t\t\t/>\n\t\t\t{isDescriptionLimitExceeded && (\n\t\t\t\t<div className=\"task-form_error\" role=\"alert\" aria-live=\"polite\">\n\t\t\t\t\t{dictionary.descriptionCharLimitExceeded}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!isDescriptionLimitExceeded && (\n\t\t\t\t<div className=\"task-form_info\">{dictionary.descriptionCharLimitInfo}</div>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import React, { memo } from 'react';\nimport { isEmpty } from 'lodash-es';\nimport { EntityFormValues } from '../types.js';\n\nexport interface EntityInfoFieldProps {\n\tentity: EntityFormValues;\n\tdictionary: {\n\t\tentityId?: string;\n\t};\n}\n\nexport const EntityInfoField = memo(function EntityInfoField(\n\tprops: EntityInfoFieldProps,\n) {\n\tconst { entity, dictionary } = props;\n\n\tif (!isEmpty(entity.taskCounterId)) {\n\t\treturn (\n\t\t\t<div className=\"task-form-info-block\">\n\t\t\t\t<p>\n\t\t\t\t\t<strong>{dictionary.entityId}:</strong> {entity.taskCounterId!}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn null;\n});\n","import React, { memo } from 'react';\nimport cn from 'classnames';\nimport { DateSelector } from '../../date-selector/index.js';\nimport { dateToTimezoneDate } from '../utils.js';\n\nexport interface FormDateSelectorProps {\n\tdisabled: boolean;\n\tlabel: string;\n\tid: string;\n\tvalue: Date | null;\n\tonChange: (date: Date | null) => void;\n\ttimezone: string;\n\trequired?: boolean;\n}\n\nexport const FormDateSelector = memo<FormDateSelectorProps>(\n\tfunction FormDateSelector(props: FormDateSelectorProps) {\n\t\tconst { disabled, label, id, value, onChange, timezone, required } = props;\n\n\t\treturn (\n\t\t\t<DateSelector\n\t\t\t\tid={id}\n\t\t\t\tonChange={onChange}\n\t\t\t\tselectedDate={value}\n\t\t\t\tminDate={dateToTimezoneDate(new Date(), timezone) || undefined}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tcustomInputClass={cn({ 'task-form_input_disabled': disabled })}\n\t\t\t\trequired={required}\n\t\t\t\tlabel={label}\n\t\t\t/>\n\t\t);\n\t},\n);\n","import React, { memo } from 'react';\nimport cn from 'classnames';\nimport { Input } from '../../form/input/index.js';\nimport { FormDictionary } from '../dictionary.js';\nimport { EntityFormValues } from '../types.js';\n\ninterface NameFieldProps<E> {\n\tvalues: E;\n\tonInputChange: (value: string, key: string) => void;\n\tdisabled: boolean;\n\tdictionary: FormDictionary;\n\tisNameLimitExceeded: boolean;\n}\n\nexport const NameField = memo(function NameField<E extends EntityFormValues>(\n\tprops: NameFieldProps<E>,\n) {\n\tconst { values, onInputChange, disabled, dictionary, isNameLimitExceeded } = props;\n\n\treturn (\n\t\t<div className=\"task-form_field\">\n\t\t\t<Input\n\t\t\t\tlabel={dictionary.nameLabel}\n\t\t\t\tonChange={(e) => {\n\t\t\t\t\tonInputChange(e.target.value, 'name');\n\t\t\t\t}}\n\t\t\t\trequired\n\t\t\t\tvalue={values.name}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tclassName={cn('no-margin-bottom', {\n\t\t\t\t\t'task-form_input_error': isNameLimitExceeded,\n\t\t\t\t})}\n\t\t\t/>\n\t\t\t{isNameLimitExceeded && (\n\t\t\t\t<div role=\"alert\" aria-live=\"polite\" className=\"task-form_error\">\n\t\t\t\t\t{dictionary.nameCharLimitExceeded}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!isNameLimitExceeded && (\n\t\t\t\t<div className=\"task-form_info\">{dictionary.nameCharLimitInfo}</div>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import React, { memo } from 'react';\nimport { CustomDropdown } from '../../custom-dropdown/index.js';\nimport { FormattedDate } from '../../formatted/formatted-date/index.js';\nimport { useFormContext } from '../context/form-context.js';\nimport { STATUSES } from '../milestone-form/milestone-form.js';\nimport { EntityFormValues } from '../types.js';\n\nexport interface StatusFieldProps<E> {\n\tlabel: string;\n\tentity: E;\n\tdisabled: boolean;\n\tdictionary: {\n\t\topen: string;\n\t\tinProgress: string;\n\t\tonHold: string;\n\t\tclosed: string;\n\t\tstatus: string;\n\t};\n\trequired?: boolean;\n\tonInputChange: (value: string, key: string) => void;\n\tvalues: E;\n\tisMilestone?: boolean;\n}\n\nexport const StatusField = memo(function StatusField<E extends EntityFormValues>(\n\tprops: StatusFieldProps<E>,\n) {\n\tconst {\n\t\tentity,\n\t\tdisabled,\n\t\tdictionary,\n\t\trequired,\n\t\tonInputChange,\n\t\tvalues,\n\t\tlabel,\n\t\tisMilestone,\n\t} = props;\n\n\tconst { milestoneProgress } = useFormContext();\n\n\tif (!entity.id) {\n\t\treturn null;\n\t}\n\n\tconst statusOptions = [\n\t\t{ label: dictionary.open, value: STATUSES.OPEN },\n\t\t{ label: dictionary.inProgress, value: STATUSES.IN_PROGRESS },\n\t\t{ label: dictionary.onHold, value: STATUSES.ON_HOLD },\n\t\t{\n\t\t\tlabel: dictionary.closed,\n\t\t\tvalue: STATUSES.CLOSED,\n\t\t\tdisabled: isMilestone && milestoneProgress.data?.isCompleted === false,\n\t\t},\n\t];\n\n\tconst onChange = (value: string) => {\n\t\tonInputChange(value, 'status');\n\t};\n\n\tconst notClosed =\n\t\tentity.status === STATUSES.OPEN ||\n\t\tentity.status === STATUSES.IN_PROGRESS ||\n\t\tentity.status === STATUSES.ON_HOLD;\n\n\treturn (\n\t\t<div className=\"task-form_field\">\n\t\t\t<label>\n\t\t\t\t{required && (\n\t\t\t\t\t<span className=\"task-form_required-indicator\" aria-hidden=\"true\">\n\t\t\t\t\t\t*\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t&nbsp;\n\t\t\t\t{label}\n\t\t\t</label>\n\t\t\t<div role=\"application\">\n\t\t\t\t<CustomDropdown\n\t\t\t\t\tcustomClassname=\"task-form_status-dropdown\"\n\t\t\t\t\toptions={statusOptions}\n\t\t\t\t\tvalue={statusOptions.find(({ value }) => value === values.status)?.value}\n\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t\tlabel={`${label} field. ${statusOptions.find(({ value }) => value === values.status)?.value} selected`}\n\t\t\t\t\tariaLabel={`Select task status ${required ? 'required' : ''}`}\n\t\t\t\t\tisCustomized\n\t\t\t\t\tisCustomStyling\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t{entity.id && entity.status === STATUSES.CLOSED && (\n\t\t\t\t<div role=\"log\" aria-live=\"polite\" className=\"ui task-form_status_closed-by\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\t<b>by:</b> {entity.completedBy}\n\t\t\t\t\t</p>\n\t\t\t\t\t<FormattedDate date={entity.lastUpdated ?? ''} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{entity.id &&\n\t\t\t\tentity.status &&\n\t\t\t\tentity.lastStatusUpdatedBy &&\n\t\t\t\tentity.lastStatusUpdated &&\n\t\t\t\tnotClosed && (\n\t\t\t\t\t<div\n\t\t\t\t\t\trole=\"log\"\n\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\tclassName=\"ui task-form_status_closed-by\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<b>by:</b> {entity.lastStatusUpdatedBy}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<FormattedDate date={entity.lastStatusUpdated} />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t</div>\n\t);\n});\n","import React, { memo } from 'react';\nimport { AccordionFormWrapper } from '../../attachments-form/index.js';\nimport { Input } from '../../form/input/index.js';\nimport { isNonEmptyString } from '@/utils/type-checks';\nimport { EntityFormValues, FormProps } from '../types.js';\n\ninterface UrlFieldProps<E> {\n\tvalues: E;\n\tonInputChange: (value: string, key: string) => void;\n\tisValidUrl: boolean;\n\tdisabled: boolean;\n\tdictionary: {\n\t\turl: string;\n\t\turlPlaceholder: string;\n\t\tinvalidUrl: string;\n\t};\n\tfieldProps?: FormProps['fieldProps'];\n}\n\nexport const UrlField = memo(function UrlField<E extends EntityFormValues>(\n\tprops: UrlFieldProps<E>,\n) {\n\tconst { values, onInputChange, isValidUrl, disabled, dictionary, fieldProps } =\n\t\tprops;\n\n\treturn (\n\t\t<AccordionFormWrapper\n\t\t\tlabel={dictionary.url}\n\t\t\tdefaultOpen={!!values.url && values.url.length > 0}\n\t\t\tdisabled={disabled}\n\t\t>\n\t\t\t<div className=\"task-form_field\">\n\t\t\t\t{(!disabled || !isNonEmptyString(values.url)) && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\ttype=\"url\"\n\t\t\t\t\t\t\tplaceholder={dictionary.urlPlaceholder}\n\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\tonInputChange(e.target.value, 'url');\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tvalue={values.url ?? ''}\n\t\t\t\t\t\t\tclassName={`task-form_url-input ${\n\t\t\t\t\t\t\t\t!isValidUrl ? 'task-form_url_error_input' : ''\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\tdisabled={disabled || fieldProps?.url?.disabled}\n\t\t\t\t\t\t\taria-describedby={!isValidUrl ? 'task-url-error' : undefined}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{!isValidUrl && (\n\t\t\t\t\t\t\t<div className=\"task-form_error\" id=\"task-url-error\">\n\t\t\t\t\t\t\t\t{dictionary.invalidUrl}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t\t{disabled && isNonEmptyString(values.url) && (\n\t\t\t\t\t<p>\n\t\t\t\t\t\t<a href={values.url}>{values.url}</a>\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</AccordionFormWrapper>\n\t);\n});\n","import { DESCRIPTION_MAX_LENGTH, NAME_MAX_LENGTH } from './validators.js';\n\nconst attachmentsFormDictionary = {\n\tdescription:\n\t\t'Add up to nine (9) attachments per task. File size limit is 75 MB per attachment. Attachments with file type .exe cannot be accepted.',\n\tfileInput: {\n\t\tdropFilesText: 'Drop files here to upload',\n\t\tdivider: 'or',\n\t\tbuttonText: 'Upload File',\n\t\tuploadingText: 'Uploading attachment...',\n\t},\n\ttableFileList: {\n\t\tcolumns: [\n\t\t\t'Attachment Name',\n\t\t\t'Date and Time Uploaded',\n\t\t\t'Uploaded By',\n\t\t\t'File Size',\n\t\t],\n\t\tremoveFileButtonLabel: 'Remove file',\n\t},\n\tfileUploaderHook: {\n\t\texceedsSize: 'The uploaded file exceeds the %{size} limit',\n\t},\n};\n\nexport const remindersDictionary = {\n\tdueDate: 'Due Date',\n\tlabel: 'Reminders',\n\taddButton: 'Add Reminder',\n\tstatusSent: 'Sent',\n\tstatusError: 'Not Sent',\n\tstatusUnknown: 'N/A',\n\tformLabel: 'New Reminder',\n\tpastDateError:\n\t\t'Reminders cannot be set to a past date. Please select a new value.',\n\tsingleReminderPastDateError:\n\t\t'Reminder cannot be set for a past date. Please select a new value.',\n\tinternalDateEmptyError: 'Internal Due Date is not set',\n\texternalDateEmptyError: 'External Due Date is not set',\n\tremindBeforeLabel: 'Before due date',\n\tremindAfterLabel: 'After due date',\n\tinternalLabel: 'Internal Due Date',\n\texternalLabel: 'External Due Date',\n\tremindBeforeInternalLabel: 'Before Internal Due Date',\n\tremindAfterInternalLabel: 'After Internal Due Date',\n\tremindBeforeExternalLabel: 'Before External Due Date',\n\tremindAfterExternalLabel: 'After External Due Date',\n\tsaveNewReminder: 'Save',\n\tcancelNewReminder: 'Cancel',\n\temptyList: 'No reminders',\n};\n\nexport const commonDictionary = {\n\tattachmentsDialogError: 'Attachments not uploaded',\n\tattachmentsDialogMessage:\n\t\t'One or more attachments have not successfully uploaded to your task. Send task without uploaded attachments?',\n\tconfirmCancelTitle: 'Unsaved Task',\n\tconfirmCancel: 'There are unsaved changes. Are you sure you want to lose them?',\n\tdescription: 'Description',\n\tdueDate: 'Due Date',\n\topen: 'Open',\n\tinProgress: 'In Progress',\n\tonHold: 'On Hold',\n\tclosed: 'Closed',\n\tcreatedBy: 'Created by',\n\tassignTo: {\n\t\tgroupLabel: 'Assign to',\n\t\tplaceholderPrefix: 'Select',\n\t\tteam: 'Team',\n\t\tperson: 'Person',\n\t\tteamMember: 'Team Member',\n\t\terror: 'The task must be assigned.',\n\t},\n\tcategory: 'Category',\n\tinactiveUser: 'Selected user is inactive.',\n\turlPlaceholder: 'Add url...',\n\turl: 'URL',\n\tinvalidUrl: 'Please include http or https in the URL.',\n\tcomments: {\n\t\tlabel: 'Add Comment',\n\t\tcharLimitInfo: '1,000 character limit',\n\t\tcharLimitExceeded:\n\t\t\t'You have reached the 1,000 character limit. Please edit and try again.',\n\t\temptyComment: 'Comment can not be empty',\n\t\taddCommentButton: 'Add Comment',\n\t\tsaveCommentButton: 'Save Changes',\n\t\tcancelCommentButton: 'Cancel',\n\t},\n\tnameCharLimitInfo: `${NAME_MAX_LENGTH} character limit`,\n\tdescriptionCharLimitInfo: `${String(DESCRIPTION_MAX_LENGTH).replace(\n\t\t'_',\n\t\t',',\n\t)} character limit`,\n\tnameCharLimitExceeded: `You have reached the ${NAME_MAX_LENGTH} character limit. Please edit and try again.`,\n\tdescriptionCharLimitExceeded: `You have reached the ${String(\n\t\tDESCRIPTION_MAX_LENGTH,\n\t).replace('_', ',')} character limit. Please edit and try again.`,\n\tstatus: 'Status',\n\tattachmentsLabel: 'Add Attachment',\n\tsearch: {\n\t\tsearchingMessage: 'Searching',\n\t},\n\tcategorySearch: {\n\t\tsearchingMessage: 'Searching',\n\t\tplaceholder: 'Select Category',\n\t},\n\tattachmentsForm: attachmentsFormDictionary,\n\treminders: remindersDictionary,\n\tunsavedChangesBeforeSaveDialog: {\n\t\ttitle: 'Continue saving?',\n\t\tdescription:\n\t\t\t'Some fields are still editable. Save the form without these changes?',\n\t},\n\tmilestone: {\n\t\tlabel: 'Milestone',\n\t\tplaceholder: 'Select Milestone',\n\t},\n};\n\nexport const taskDictionary = {\n\t...structuredClone(commonDictionary),\n\tentityId: 'ID',\n\ttask: 'Task',\n\tnameLabel: 'Title',\n\tactionButtonLabels: {\n\t\tassignAndSend: 'Assign and Send',\n\t\tsaveChanges: 'Save Changes',\n\t\tclose: 'Close Task',\n\t\tcancel: 'Cancel',\n\t\tbusy: 'Creating task',\n\t},\n\tnotifications: {\n\t\tsent: 'Your new task has been assigned and sent.',\n\t\tupdated: 'Your changes have been saved.',\n\t},\n\tinternalDueDateLabel: 'Internal Due Date',\n\tdueDate: 'External Due Date',\n};\n\nexport const milestoneDictionary = {\n\t...structuredClone(commonDictionary),\n\tentityId: 'ID',\n\tnameLabel: 'Title',\n\tinternalDueDateLabel: 'Internal Due Date',\n\tdueDate: 'External Due Date',\n\tnotifications: {\n\t\tsent: 'Your new Milestone has been assigned and sent.',\n\t\tupdated: 'Your changes have been saved.',\n\t},\n\tactionButtonLabels: {\n\t\tassignAndSend: 'Assign and Send',\n\t\tsaveChanges: 'Save Changes',\n\t\tclose: 'Close Milestone',\n\t\tcancel: 'Cancel',\n\t\tbusy: 'Creating milestone',\n\t},\n\tlinkedTasks: {\n\t\taccordionLabel: 'Linked Tasks',\n\t\taddTaskButtonLabel: 'Add',\n\t\tcreateTaskButtonLabel: 'New Task',\n\t\tcomboboxPlaceholder: 'Search for Task by ID or Title',\n\t\tcomboboxLoadingMessage: 'Searching...',\n\t\tremoveLinkButtonLabel: 'Unlink Task',\n\t},\n};\n\nexport type FormDictionary = typeof taskDictionary | typeof milestoneDictionary;\n","import React, { memo, useRef, useState } from 'react';\nimport { AccordionFormWrapper } from '../../attachments-form/index.js';\nimport { Combobox } from '../../form/combobox/index.js';\nimport { Button } from '../../button/index.js';\nimport { Icon } from '../../icon/index.js';\nimport { TaskWithVariables } from '../../link-to-milestone/index.js';\nimport { milestoneDictionary } from '../dictionary.js';\nimport { FormProps, LinkedTasksFieldProps } from '../types.js';\nimport { TableLinkedTasksList } from './table-linked-tasks-list.js';\nimport { useFormContext } from '../context/form-context.js';\nimport './styles.css';\nimport { loadTaskOptions } from './utils.js';\n\ninterface LinkedTasksProps extends LinkedTasksFieldProps {\n\tdisabled: boolean;\n\ttaskType: FormProps['type'];\n}\n\nexport const LinkedTasks = memo(function LinkedTasks(props: LinkedTasksProps) {\n\tconst { disabled, taskType, onCreateTaskClick } = props;\n\n\tconst accordionRef = useRef<HTMLDivElement>(null);\n\tconst { dictionary, values, submissionId, onInputChange, refreshLinkedTasks } =\n\t\tuseFormContext();\n\tconst [selectedTask, setSelectedTask] = useState<{\n\t\ttask: TaskWithVariables;\n\t} | null>(null);\n\n\treturn (\n\t\t<AccordionFormWrapper\n\t\t\tdefaultOpen={values?.linkedTasks?.length > 0}\n\t\t\t// @ts-expect-error type mismatch\n\t\t\tref={accordionRef}\n\t\t\tlabel={(dictionary as typeof milestoneDictionary).linkedTasks.accordionLabel}\n\t\t>\n\t\t\t<div className=\"task-form__linked-tasks\">\n\t\t\t\t<div className=\"task-form__linked-tasks__toolbar\">\n\t\t\t\t\t<Combobox\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tplaceholder={\n\t\t\t\t\t\t\t(dictionary as typeof milestoneDictionary).linkedTasks\n\t\t\t\t\t\t\t\t.comboboxPlaceholder\n\t\t\t\t\t\t}\n\t\t\t\t\t\tid=\"linked-tasks-search-tasks-combobox\"\n\t\t\t\t\t\tloadingMessage={\n\t\t\t\t\t\t\t(dictionary as typeof milestoneDictionary).linkedTasks\n\t\t\t\t\t\t\t\t.comboboxLoadingMessage\n\t\t\t\t\t\t}\n\t\t\t\t\t\tloadOptions={(searchText: string) => {\n\t\t\t\t\t\t\treturn loadTaskOptions({\n\t\t\t\t\t\t\t\tsearchText,\n\t\t\t\t\t\t\t\tsort: 'taskCounterNumeric',\n\t\t\t\t\t\t\t\ttaskType,\n\t\t\t\t\t\t\t\tsearchBy: 'id,name',\n\t\t\t\t\t\t\t\tnoMilestoneAssigned: true,\n\t\t\t\t\t\t\t\tsubmissionId: values.submissionId || submissionId,\n\t\t\t\t\t\t\t}).then((options) => {\n\t\t\t\t\t\t\t\t// exclude tasks that already linked\n\t\t\t\t\t\t\t\tconst currentTasksToLink = new Set(\n\t\t\t\t\t\t\t\t\tvalues.tasksToLink.map((task) => task.id),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\t\treturn options.filter((option) => {\n\t\t\t\t\t\t\t\t\treturn !currentTasksToLink.has(option.task.id);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\tonChange={(option) => {\n\t\t\t\t\t\t\tsetSelectedTask(option);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tvalue={selectedTask}\n\t\t\t\t\t/>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tprimary\n\t\t\t\t\t\tdisabled={disabled || !selectedTask}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tonInputChange(\n\t\t\t\t\t\t\t\t[selectedTask?.task, ...values.tasksToLink],\n\t\t\t\t\t\t\t\t'tasksToLink',\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tonInputChange(\n\t\t\t\t\t\t\t\tvalues.tasksIdsToRemove.filter((id) => id !== selectedTask?.task.id),\n\t\t\t\t\t\t\t\t'tasksIdsToRemove',\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\trefreshLinkedTasks();\n\t\t\t\t\t\t\tsetSelectedTask(null);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"add\" />\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t(dictionary as typeof milestoneDictionary).linkedTasks\n\t\t\t\t\t\t\t\t.addTaskButtonLabel\n\t\t\t\t\t\t}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button primary disabled={disabled} onClick={onCreateTaskClick}>\n\t\t\t\t\t\t<Icon name=\"add\" />\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t(dictionary as typeof milestoneDictionary).linkedTasks\n\t\t\t\t\t\t\t\t.createTaskButtonLabel\n\t\t\t\t\t\t}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t<TableLinkedTasksList disabled={disabled} />\n\t\t\t</div>\n\t\t</AccordionFormWrapper>\n\t);\n});\n","import React from 'react';\nimport { DynamicTable, SortDirection } from '../../dynamic-table/index.js';\nimport { IconButton } from '../../icon-button/index.js';\nimport { FormattedValue } from '../../formatted/formatted-value/index.js';\nimport { milestoneDictionary } from '../dictionary.js';\nimport { useFormContext } from '../context/form-context.js';\nimport { TaskCounterCell } from './task-counter-cell.js';\nimport { AssignedToCell } from './assigned-to-cell.js';\nimport {\n\tSORT_DIRECTIONS_MAPPING_BACKEND_BY_SEMANTIC,\n\tSORT_DIRECTIONS_MAPPING_SEMANTIC_BY_BACKEND,\n} from './utils.js';\nimport { TaskTitleCell } from '../components/task-title-cell.js';\n\nconst tableColumns = [\n\t{\n\t\tkeys: ['taskCounter'],\n\t\tcolumnHeader: 'ID',\n\t\tid: 'taskCounter',\n\t\tsortKey: 'taskCounterNumeric',\n\t\tstyle: { width: 130 },\n\t},\n\t{\n\t\tkeys: ['name'],\n\t\tcolumnHeader: 'Title',\n\t\tid: 'name',\n\t\tsortKey: 'nameLowercase',\n\t\tstyle: {\n\t\t\toverflow: 'hidden',\n\t\t\ttextOverflow: 'ellipsis',\n\t\t\twhiteSpace: 'nowrap',\n\t\t},\n\t},\n\t{\n\t\tkeys: ['assignedTo'],\n\t\tcolumnHeader: 'Assigned to',\n\t\tid: 'assignedTo',\n\t\tsortKey: 'assignee',\n\t\tstyle: {\n\t\t\twidth: 320,\n\t\t},\n\t},\n\t{\n\t\tkeys: ['dueDate'],\n\t\tcolumnHeader: 'External Due Date',\n\t\tid: 'dueDate',\n\t\ttype: 'date',\n\t\tstyle: {\n\t\t\twidth: 160,\n\t\t},\n\t\tsortKey: 'dueDate',\n\t},\n\t{\n\t\tkeys: ['status'],\n\t\tcolumnHeader: 'Status',\n\t\tid: 'status',\n\t\tstyle: {\n\t\t\twidth: 130,\n\t\t},\n\t},\n\t{\n\t\tkeys: ['actions'],\n\t\tcolumnHeader: '',\n\t\tid: 'actions',\n\t\tstyle: { padding: 3, width: 30, minWidth: 30 },\n\t},\n];\n\nexport function TableLinkedTasksList({ disabled }: { disabled: boolean }) {\n\tconst { values, onInputChange, refreshLinkedTasks } = useFormContext();\n\n\tconst rows = React.useMemo(() => {\n\t\treturn [...values.tasksToLink, ...values.linkedTasks].filter(\n\t\t\t(task) => !values.tasksIdsToRemove?.includes(task.id),\n\t\t);\n\t}, [values.tasksToLink, values.linkedTasks, values.tasksIdsToRemove]);\n\n\treturn (\n\t\t<DynamicTable\n\t\t\theaders={tableColumns}\n\t\t\trows={rows}\n\t\t\tsortColumn={values.linkedTasksSort[0]}\n\t\t\tsortDirection={\n\t\t\t\tSORT_DIRECTIONS_MAPPING_BACKEND_BY_SEMANTIC[\n\t\t\t\t\tvalues.linkedTasksSort[1]\n\t\t\t\t] as SortDirection\n\t\t\t}\n\t\t\trenderCell={(cell) => {\n\t\t\t\tif (cell.column.id === 'name') {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<TaskTitleCell\n\t\t\t\t\t\t\ttitle={cell.row.name}\n\t\t\t\t\t\t\texternalDueDate={cell.row.dueDate}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (cell.column.id === 'assignedTo') {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<AssignedToCell\n\t\t\t\t\t\t\tassignedTo={cell.row.assignee}\n\t\t\t\t\t\t\tto={cell.row.variables.assignee}\n\t\t\t\t\t\t\tteamName={cell.row.variables.teamName}\n\t\t\t\t\t\t\ttoTeamId={cell.row.variables.toTeam}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (cell.column.id === 'taskCounter') {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<TaskCounterCell\n\t\t\t\t\t\t\tid={cell.row.id}\n\t\t\t\t\t\t\tcategory={cell.row.variables.category}\n\t\t\t\t\t\t\turl={cell.row.variables.url}\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\tisMilestoneColumn={false}\n\t\t\t\t\t\t\tlinkValue={cell.row.variables.taskCounter}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (cell.column.id === 'status') {\n\t\t\t\t\treturn cell.row.variables.status;\n\t\t\t\t}\n\t\t\t\tif (cell.column.id === 'actions') {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\ttertiary\n\t\t\t\t\t\t\tclassName={`table-linked-tasks-list__action-button ${disabled ? 'disabled' : ''}`}\n\t\t\t\t\t\t\ticon=\"trash\"\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\taria-label={milestoneDictionary.linkedTasks.removeLinkButtonLabel}\n\t\t\t\t\t\t\ttitle={milestoneDictionary.linkedTasks.removeLinkButtonLabel}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tconst newTasksToLink = values.tasksToLink.filter(\n\t\t\t\t\t\t\t\t\t(task) => task.id !== cell.row.id,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif (newTasksToLink.length !== values.tasksToLink.length) {\n\t\t\t\t\t\t\t\t\tonInputChange(newTasksToLink, 'tasksToLink');\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tonInputChange(\n\t\t\t\t\t\t\t\t\t\t[...values.tasksIdsToRemove, cell.row.id],\n\t\t\t\t\t\t\t\t\t\t'tasksIdsToRemove',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\trefreshLinkedTasks();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (cell.column.type === 'date') {\n\t\t\t\t\treturn <FormattedValue value={cell.value} type=\"date\" fallback=\"--\" />;\n\t\t\t\t}\n\n\t\t\t\treturn cell.value;\n\t\t\t}}\n\t\t\tonSortChange={(column, direction) => {\n\t\t\t\tonInputChange(\n\t\t\t\t\t[column, SORT_DIRECTIONS_MAPPING_SEMANTIC_BY_BACKEND[direction as string]],\n\t\t\t\t\t'linkedTasksSort',\n\t\t\t\t);\n\t\t\t\trefreshLinkedTasks([\n\t\t\t\t\tcolumn,\n\t\t\t\t\tSORT_DIRECTIONS_MAPPING_SEMANTIC_BY_BACKEND[direction as string]!,\n\t\t\t\t]);\n\t\t\t}}\n\t\t/>\n\t);\n}\n","export const TASK_CATEGORIES = {\n\tCAYUSE_AD_HOC: 'CAYUSE_AD_HOC',\n\tCAYUSE_AD_MILESTONE: 'CAYUSE_AD_MILESTONE',\n\tCAYUSE_SP_AD_HOC: 'CAYUSE_SP_AD_HOC',\n\tCAYUSE_SP_SYSTEM: 'CAYUSE_SP_SYSTEM',\n\tCAYUSE_SP_MILESTONE: 'CAYUSE_SP_MILESTONE',\n\tCAYUSE_COI_DISCLOSURE: 'CAYUSE_COI_DISCLOSURE',\n\tCAYUSE_MY_REQUEST: 'CAYUSE_MY_REQUEST',\n\tCAYUSE_SP_REVIEW: 'CAYUSE_SP_REVIEW',\n\tTASK_TYPE_RT_CERTIFICATION: 'TASK_TYPE_RT_CERTIFICATION',\n};\n\nexport const TASK_TYPES = {\n\t[TASK_CATEGORIES.CAYUSE_AD_HOC]: 'Ad Hoc Task',\n\t[TASK_CATEGORIES.CAYUSE_AD_MILESTONE]: 'Admin Milestone',\n\t[TASK_CATEGORIES.CAYUSE_SP_AD_HOC]: 'SP Ad Hoc Task',\n\t[TASK_CATEGORIES.CAYUSE_SP_SYSTEM]: 'SP System Task',\n\t[TASK_CATEGORIES.CAYUSE_SP_MILESTONE]: 'SP Milestone',\n\t[TASK_CATEGORIES.CAYUSE_COI_DISCLOSURE]: 'COI Disclosure',\n\t[TASK_CATEGORIES.CAYUSE_MY_REQUEST]: 'Request',\n\t[TASK_CATEGORIES.CAYUSE_SP_REVIEW]: 'SP Review',\n\t[TASK_CATEGORIES.TASK_TYPE_RT_CERTIFICATION]: 'SP Certification',\n};\n\nexport function isSystemTask(category: string) {\n\treturn (\n\t\tcategory === TASK_CATEGORIES.CAYUSE_SP_REVIEW ||\n\t\tcategory === TASK_CATEGORIES.TASK_TYPE_RT_CERTIFICATION ||\n\t\tTASK_TYPES[category] === undefined\n\t);\n}\n","import { isNonEmptyString } from '@/utils/type-checks';\nimport React, { HTMLAttributeAnchorTarget } from 'react';\nimport { isSystemTask, TASK_CATEGORIES } from './vo/task-categories.vo.js';\n\nexport interface TaskCounterCellProps {\n\turl?: string;\n\tcategory: string;\n\tid: string;\n\tmilestoneId?: string;\n\tisMilestoneColumn: boolean;\n\tlinkValue: string;\n\ttarget?: HTMLAttributeAnchorTarget | undefined;\n}\n\nexport const TaskCounterCell: React.FC<TaskCounterCellProps> = ({\n\tisMilestoneColumn,\n\turl,\n\tcategory,\n\ttarget,\n\tmilestoneId,\n\tid,\n\tlinkValue,\n}) => {\n\tif (url?.includes('sp')) {\n\t\tconst systemTask = isSystemTask(category);\n\t\tconst type =\n\t\t\tcategory === TASK_CATEGORIES.CAYUSE_SP_MILESTONE ? 'milestone' : 'task';\n\n\t\tconst rowId = isMilestoneColumn ? milestoneId : id;\n\n\t\treturn (\n\t\t\t<a\n\t\t\t\ttarget={target}\n\t\t\t\thref={systemTask ? url : `${url}/${type}/${rowId}`}\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t>\n\t\t\t\t{linkValue}\n\t\t\t</a>\n\t\t);\n\t}\n\n\tlet href = url;\n\n\tif (isMilestoneColumn) {\n\t\thref = `/milestones/${milestoneId}/edit`;\n\t} else if (category === TASK_CATEGORIES.CAYUSE_AD_MILESTONE) {\n\t\thref = `/milestones/${id}/edit`;\n\t} else if (category === TASK_CATEGORIES.CAYUSE_AD_HOC) {\n\t\thref = `/tasks/${id}/edit`;\n\t}\n\n\tif (isNonEmptyString(href)) {\n\t\treturn (\n\t\t\t<a target={target} href={href} onClick={(e) => e.stopPropagation()}>\n\t\t\t\t{linkValue}\n\t\t\t</a>\n\t\t);\n\t}\n\n\treturn <span>--</span>;\n};\n","import React, { useEffect, useState } from 'react';\nimport { isNonEmptyObject } from '@/utils/type-checks';\nimport { LoadingIndicator } from '../../loading-indicator/index.js';\nimport { getUserAdditionalDetails } from './utils.js';\n\nexport interface AssigneeExtractDetails {\n\tcontactEmail: string;\n\tfirstName: string;\n\tlastName: string;\n\tmiddleName: string;\n\tunit?: string;\n}\n\nexport interface AssignedToCellProps {\n\tassignedTo?: string;\n\tto: string;\n\tteamName: string | undefined;\n\ttoTeamId?: string;\n}\n\nexport const AssignedToCell: React.FC<AssignedToCellProps> = ({\n\tto,\n\tassignedTo,\n\tteamName,\n\ttoTeamId,\n}) => {\n\tconst [isLoadingUserDetails, setLoadingUserDetails] = useState<boolean>(true);\n\tconst [assigneeExtra, setAssigneeExtra] = useState<AssigneeExtractDetails>();\n\n\tuseEffect(() => {\n\t\tlet canceled = false;\n\n\t\tif (assignedTo) {\n\t\t\tgetUserAdditionalDetails(assignedTo)\n\t\t\t\t.then((v) => !canceled && setAssigneeExtra(v))\n\t\t\t\t.finally(() => !canceled && setLoadingUserDetails(false));\n\t\t}\n\n\t\treturn () => {\n\t\t\tcanceled = true;\n\t\t};\n\t}, [assignedTo]);\n\n\tif (isLoadingUserDetails) {\n\t\treturn <LoadingIndicator />;\n\t}\n\n\tconst isTeamAssigned = Boolean(toTeamId);\n\n\tif (isNonEmptyObject(assigneeExtra)) {\n\t\tconst userDisplayName = [\n\t\t\tassigneeExtra?.firstName,\n\t\t\tassigneeExtra?.middleName,\n\t\t\tassigneeExtra?.lastName,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ');\n\n\t\treturn (\n\t\t\t<span data-cell=\"assignee\">\n\t\t\t\t{isTeamAssigned && (\n\t\t\t\t\t<span className=\"assign-to-line\">\n\t\t\t\t\t\t<b>{teamName}</b>\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t<span className=\"assign-to-line\">\n\t\t\t\t\t{isTeamAssigned ? userDisplayName : <b>{userDisplayName}</b>}\n\t\t\t\t</span>\n\t\t\t\t<span className=\"assign-to-line\">{assigneeExtra?.contactEmail}</span>\n\t\t\t\t{!isTeamAssigned && (\n\t\t\t\t\t<span className=\"assign-to-line\">{assigneeExtra?.unit}</span>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t);\n\t}\n\n\t// remove team name for old tasks\n\tconst userName = (to ?? '').replace(teamName ?? '', '');\n\n\treturn (\n\t\t<span data-cell=\"assignee\">\n\t\t\t{isTeamAssigned && (\n\t\t\t\t<span className=\"assign-to-line\">\n\t\t\t\t\t<b>{teamName}</b>\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t<span className=\"assign-to-line\">\n\t\t\t\t<b>{userName}</b>\n\t\t\t</span>\n\t\t</span>\n\t);\n};\n","import React, { memo } from 'react';\nimport { ClockIcon } from './clock-icon.js';\n\nexport interface TaskTitleCellProps {\n\ttitle: string;\n\texternalDueDate: Date | string;\n}\n\nexport const TaskTitleCell = memo(function TaskTitleCell({\n\ttitle,\n\texternalDueDate,\n}: TaskTitleCellProps) {\n\treturn (\n\t\t<span data-cell=\"task\">\n\t\t\t<span className=\"task-form__task-title-cell\">\n\t\t\t\t<span className=\"task-form__task-title-cell-clock-icon\">\n\t\t\t\t\t<ClockIcon externalDueDate={externalDueDate} />\n\t\t\t\t</span>\n\t\t\t\t<span>{title}</span>\n\t\t\t</span>\n\t\t</span>\n\t);\n});\n","import React, { memo } from 'react';\nimport { useTenantContext } from '@/context/tenant';\nimport { differenceInCalendarDays, startOfDay, parse } from 'date-fns';\nimport { utcToZonedTime } from 'date-fns-tz';\n\nexport interface ClockIconProps {\n\texternalDueDate: Date | string;\n}\n\nconst colors = {\n\tYELLOW: 'rgb(253,221,109)',\n\tRED: 'rgb(253,74,62)',\n} as const;\n\nfunction getDueDate(date: Date | string, now: Date): Date {\n\tif (typeof date === 'string') {\n\t\tconst calendarString = date.substring(0, 10);\n\t\treturn parse(calendarString, 'yyyy-MM-dd', now);\n\t}\n\treturn startOfDay(date);\n}\n\nexport const ClockIcon = memo(function ClockIcon(props: ClockIconProps) {\n\tconst { externalDueDate } = props;\n\n\tconst tenantCtx = useTenantContext();\n\n\tif (!externalDueDate) {\n\t\treturn null;\n\t}\n\n\tconst now = utcToZonedTime(new Date(), tenantCtx?.data?.tenant?.timezone);\n\tconst dueDate = getDueDate(externalDueDate, now);\n\tconst diffDays = differenceInCalendarDays(dueDate, now);\n\n\tlet clockColour: string | null = null;\n\tif (diffDays < 0) {\n\t\tclockColour = colors.RED;\n\t} else if (diffDays <= 30) {\n\t\tclockColour = colors.YELLOW;\n\t}\n\n\tif (!clockColour) {\n\t\treturn null;\n\t}\n\n\tlet accessibleText = '';\n\tif (clockColour === colors.YELLOW) {\n\t\taccessibleText = 'Task due date within the next 30 days';\n\t} else if (clockColour === colors.RED) {\n\t\taccessibleText = 'Task due date has passed';\n\t}\n\n\treturn (\n\t\t<svg\n\t\t\tclassName=\"clockIcon\"\n\t\t\trole=\"img\"\n\t\t\taria-label={accessibleText}\n\t\t\tdata-testid={`clock-${clockColour}`}\n\t\t\ttabIndex={0}\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth={20}\n\t\t\theight={20}\n\t\t\tviewBox=\"0 0 92 92\"\n\t\t\txmlSpace=\"preserve\"\n\t\t\tpreserveAspectRatio=\"xMidYMid meet\"\n\t\t>\n\t\t\t<title>{accessibleText}</title>\n\t\t\t<g transform=\"translate(1.4066 1.4066)\">\n\t\t\t\t<circle cx=\"45\" cy=\"45\" r=\"45\" fill={clockColour} />\n\t\t\t\t<polygon\n\t\t\t\t\tpoints=\"68.18,63.32 40.61,47.55 40.61,16.52 49.39,16.52 49.39,42.45 72.54,55.7\"\n\t\t\t\t\tfill=\"white\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t</svg>\n\t);\n});\n","import React, { memo, useEffect, useState } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport { Button } from '../../button/index.js';\nimport { useTenantContext } from '@/context/tenant';\nimport { remindersDictionary } from '../dictionary.js';\nimport { Reminder } from '../types.js';\nimport { validatePendingReminder } from './utils.js';\nimport { AddReminderForm } from './add-reminder-form.js';\nimport { CurrentReminders } from './current-reminders.js';\nimport './styles.css';\n\nexport interface RemindersProps {\n\treminders: Reminder[];\n\n\tonChange(reminders: Reminder[]): void;\n\n\tselectedDueDate: Date | null;\n\tselectedInternalDueDate?: Date | null;\n\tdisabled: boolean;\n\n\tsetIsSomeFieldEditing(value: boolean): void;\n\n\tdictionary: typeof remindersDictionary;\n\tincludeInternalDate?: boolean;\n}\n\nexport const Reminders = memo(function Reminders(props: RemindersProps) {\n\tconst {\n\t\treminders,\n\t\tonChange,\n\t\tselectedDueDate,\n\t\tdisabled,\n\t\tsetIsSomeFieldEditing,\n\t\tdictionary,\n\t\tselectedInternalDueDate,\n\t\tincludeInternalDate,\n\t} = props;\n\n\tconst [{ labelId, descriptionId }] = useState({\n\t\tlabelId: uuidv4(),\n\t\tdescriptionId: uuidv4(),\n\t});\n\tconst [isFormVisible, setIsFormVisible] = useState(false);\n\n\tconst { timezone } = useTenantContext().data.tenant;\n\n\tuseEffect(() => {\n\t\t// Update reminders when the date changes\n\t\tonChange(\n\t\t\treminders.map((reminder) => {\n\t\t\t\treturn validatePendingReminder({\n\t\t\t\t\treminder,\n\t\t\t\t\tselectedDueDate,\n\t\t\t\t\tselectedInternalDueDate,\n\t\t\t\t\tdictionary,\n\t\t\t\t\ttimezone,\n\t\t\t\t});\n\t\t\t}),\n\t\t);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [selectedDueDate, selectedInternalDueDate]);\n\n\tconst onAdd = (newReminder: Reminder) => {\n\t\tonChange([...reminders, newReminder]);\n\t\tsetIsFormVisible(false);\n\t\tsetIsSomeFieldEditing(false);\n\t};\n\n\tconst onRemove = (reminderId: string) => {\n\t\tonChange(reminders.filter((reminder) => reminder.id !== reminderId));\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"reminders\"\n\t\t\taria-labelledby={labelId}\n\t\t\taria-describedby={descriptionId}\n\t\t\ttabIndex={0}\n\t\t>\n\t\t\t<div className=\"current-reminders\">\n\t\t\t\t<p id={labelId} className=\"current-reminders__title\">\n\t\t\t\t\t{dictionary.label}\n\t\t\t\t</p>\n\t\t\t\t{reminders.length === 0 ? (\n\t\t\t\t\t<p id={descriptionId} className=\"current-reminders__reminder\">\n\t\t\t\t\t\t<em>{dictionary.emptyList}</em>\n\t\t\t\t\t</p>\n\t\t\t\t) : (\n\t\t\t\t\t<CurrentReminders\n\t\t\t\t\t\treminders={reminders}\n\t\t\t\t\t\tonRemove={onRemove}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\tincludeInternalDate={includeInternalDate}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{isFormVisible && (\n\t\t\t\t<AddReminderForm\n\t\t\t\t\tselectedInternalDueDate={selectedInternalDueDate}\n\t\t\t\t\tincludeInternalDate={includeInternalDate}\n\t\t\t\t\tselectedDueDate={selectedDueDate!}\n\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\tonSave={onAdd}\n\t\t\t\t\tonCancel={() => {\n\t\t\t\t\t\tsetIsFormVisible(false);\n\t\t\t\t\t\tsetIsSomeFieldEditing(false);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<Button\n\t\t\t\tsmall\n\t\t\t\tsecondary\n\t\t\t\tclassName=\"reminders__small-action-button\"\n\t\t\t\tdisabled={disabled || isFormVisible}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tsetIsSomeFieldEditing(true);\n\t\t\t\t\tsetIsFormVisible(true);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<span>+</span>\n\t\t\t\t{dictionary.addButton}\n\t\t\t</Button>\n\t\t</div>\n\t);\n});\n","import { add, isBefore, sub } from 'date-fns';\nimport { remindersDictionary } from '../dictionary.js';\nimport { Reminder } from '../types.js';\nimport { dateToTimezoneDate } from '../utils.js';\n\nexport function getRemindAtDate({\n\tisAfter,\n\tdays,\n\tdate,\n}: {\n\tisAfter: boolean;\n\tdays: number;\n\tdate: Date | null;\n}): Date | null {\n\tlet res = null;\n\n\tif (date && parseInt(String(days), 10) >= 0) {\n\t\tif (isAfter) {\n\t\t\tres = add(date, { days });\n\t\t} else {\n\t\t\tres = sub(date, { days });\n\t\t}\n\t}\n\n\treturn res;\n}\n\nexport function isInvalidReminder(\n\t{ status, remindAt, error }: Pick<Reminder, 'status' | 'remindAt' | 'error'>,\n\ttimezone: string,\n) {\n\treturn (\n\t\t!!error ||\n\t\t(status === 'PENDING' &&\n\t\t\tremindAt &&\n\t\t\tisBefore(remindAt, dateToTimezoneDate(new Date(), timezone)!))\n\t);\n}\n\nexport function hasInvalidRemindDate(\n\t{ status, remindAt }: Pick<Reminder, 'status' | 'remindAt'>,\n\ttimezone: string,\n) {\n\treturn (\n\t\tstatus === 'PENDING' &&\n\t\tremindAt &&\n\t\tisBefore(remindAt, dateToTimezoneDate(new Date(), timezone)!)\n\t);\n}\n\nexport function validateForm({\n\tremindAt,\n\ttimezone,\n\tdictionary,\n}: {\n\tremindAt: Date | null;\n\ttimezone: string;\n\tdictionary: typeof remindersDictionary;\n}) {\n\tlet errorMessage = '';\n\tlet isInvalid = true;\n\n\tif (remindAt) {\n\t\tif (isInvalidReminder({ status: 'PENDING', remindAt }, timezone)) {\n\t\t\terrorMessage = dictionary.pastDateError;\n\t\t} else {\n\t\t\tisInvalid = false;\n\t\t}\n\t}\n\n\treturn { isInvalid, errorMessage };\n}\n\nexport const sortRemindersByOffset = (a: Reminder, b: Reminder) =>\n\t// @ts-expect-error type mismatch\n\tnew Date(a.remindAt) - new Date(b.remindAt);\n\nexport function validatePendingReminder({\n\treminder,\n\tselectedDueDate,\n\tselectedInternalDueDate,\n\tdictionary,\n\ttimezone,\n}: {\n\treminder: Reminder;\n\tselectedDueDate: Date | null;\n\tselectedInternalDueDate?: Date | null;\n\tdictionary: typeof remindersDictionary;\n\ttimezone: string;\n}) {\n\tif (reminder.status === 'PENDING') {\n\t\tif (reminder.isForInternalDueDate && !selectedInternalDueDate) {\n\t\t\treminder.error = dictionary.internalDateEmptyError;\n\t\t} else if (!reminder.isForInternalDueDate && !selectedDueDate) {\n\t\t\treminder.error = dictionary.externalDateEmptyError;\n\t\t} else {\n\t\t\treminder.remindAt = getRemindAtDate({\n\t\t\t\tisAfter: reminder.isAfter,\n\t\t\t\tdays: reminder.daysTillExecute,\n\t\t\t\tdate: reminder.isForInternalDueDate\n\t\t\t\t\t? selectedInternalDueDate!\n\t\t\t\t\t: selectedDueDate,\n\t\t\t})!;\n\t\t\tif (hasInvalidRemindDate(reminder, timezone)) {\n\t\t\t\treminder.error = dictionary.singleReminderPastDateError;\n\t\t\t} else {\n\t\t\t\tdelete reminder.error;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn reminder;\n}\n","import React, { useState } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport { useTenantContext } from '@/context/tenant';\nimport { Number } from '../../form/number/index.js';\nimport { Radio } from '../../form/radio/index.js';\nimport { Button } from '../../button/index.js';\nimport { remindersDictionary } from '../dictionary.js';\nimport { Reminder } from '../types.js';\nimport { getRemindAtDate, validateForm } from './utils.js';\n\ninterface AddReminderFormProps {\n\tselectedInternalDueDate?: Date | null;\n\tselectedDueDate: Date;\n\tonCancel(): void;\n\tonSave(reminder: Partial<Reminder>): void;\n\tdictionary: typeof remindersDictionary;\n\tincludeInternalDate?: boolean;\n}\n\nenum ReminderType {\n\tBefore = 'before',\n\tAfter = 'after',\n\tInternalBefore = 'internal-before',\n\tInternalAfter = 'internal-after',\n}\n\nexport function AddReminderForm(props: AddReminderFormProps) {\n\tconst {\n\t\tselectedDueDate,\n\t\tonCancel,\n\t\tonSave,\n\t\tdictionary,\n\t\tselectedInternalDueDate,\n\t\tincludeInternalDate,\n\t} = props;\n\n\tconst [invalidId] = useState(() => uuidv4());\n\tconst [days, setDays] = useState('');\n\tconst [reminderType, setReminderType] = useState<ReminderType>(\n\t\tReminderType.Before,\n\t);\n\n\tconst { timezone } = useTenantContext().data.tenant;\n\tconst reminderTypeIsInternal =\n\t\treminderType === ReminderType.InternalBefore ||\n\t\treminderType === ReminderType.InternalAfter;\n\tconst isAfter =\n\t\treminderType === ReminderType.After ||\n\t\treminderType === ReminderType.InternalAfter;\n\n\tconst remindAt = getRemindAtDate({\n\t\tisAfter,\n\t\tdays: parseInt(days, 10),\n\t\tdate: reminderTypeIsInternal ? selectedInternalDueDate! : selectedDueDate,\n\t});\n\tconst { isInvalid, errorMessage } = validateForm({\n\t\tdictionary,\n\t\tremindAt,\n\t\ttimezone,\n\t});\n\n\treturn (\n\t\t<div className=\"add-reminder-form\">\n\t\t\t\\\n\t\t\t<label>\n\t\t\t\t<span className=\"task-form_required-indicator\" aria-hidden=\"true\">\n\t\t\t\t\t*\n\t\t\t\t</span>\n\t\t\t\t&nbsp;{dictionary.formLabel}\n\t\t\t</label>\n\t\t\t<div className=\"add-reminder-form__inputs\">\n\t\t\t\t<div className=\"add-reminder-form__days-input\">\n\t\t\t\t\t<Number\n\t\t\t\t\t\tid=\"remind-at\"\n\t\t\t\t\t\tinteger\n\t\t\t\t\t\tautoFocus\n\t\t\t\t\t\tvalue={days}\n\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\tif (e.target.value.length <= 4) {\n\t\t\t\t\t\t\t\tsetDays(e.target.value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\t{...(isInvalid && errorMessage\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t'aria-invalid': true,\n\t\t\t\t\t\t\t\t\t'aria-describedby': invalidId,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {})}\n\t\t\t\t\t/>\n\t\t\t\t\t<label htmlFor=\"remind-at\">Days</label>\n\t\t\t\t</div>\n\t\t\t\t{isInvalid && errorMessage && (\n\t\t\t\t\t<span className=\"reminder__invalid-date\" id={invalidId}>\n\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t<div className=\"add-reminder-form__radio\">\n\t\t\t\t\t{includeInternalDate ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<Radio\n\t\t\t\t\t\t\t\tlabel={dictionary.remindBeforeInternalLabel}\n\t\t\t\t\t\t\t\tname=\"remind\"\n\t\t\t\t\t\t\t\tchecked={reminderType === ReminderType.InternalBefore}\n\t\t\t\t\t\t\t\tonChange={() => setReminderType(ReminderType.InternalBefore)}\n\t\t\t\t\t\t\t\tdisabled={!selectedInternalDueDate}\n\t\t\t\t\t\t\t\tvalue={reminderType}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Radio\n\t\t\t\t\t\t\t\tvalue={reminderType}\n\t\t\t\t\t\t\t\tlabel={dictionary.remindAfterInternalLabel}\n\t\t\t\t\t\t\t\tname=\"remind\"\n\t\t\t\t\t\t\t\tchecked={reminderType === ReminderType.InternalAfter}\n\t\t\t\t\t\t\t\tonChange={() => setReminderType(ReminderType.InternalAfter)}\n\t\t\t\t\t\t\t\tdisabled={!selectedInternalDueDate}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Radio\n\t\t\t\t\t\t\t\tvalue={reminderType}\n\t\t\t\t\t\t\t\tlabel={dictionary.remindBeforeExternalLabel}\n\t\t\t\t\t\t\t\tname=\"remind\"\n\t\t\t\t\t\t\t\tchecked={reminderType === ReminderType.Before}\n\t\t\t\t\t\t\t\tonChange={() => setReminderType(ReminderType.Before)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Radio\n\t\t\t\t\t\t\t\tvalue={reminderType}\n\t\t\t\t\t\t\t\tlabel={dictionary.remindAfterExternalLabel}\n\t\t\t\t\t\t\t\tname=\"remind\"\n\t\t\t\t\t\t\t\tchecked={reminderType === ReminderType.After}\n\t\t\t\t\t\t\t\tonChange={() => setReminderType(ReminderType.After)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<Radio\n\t\t\t\t\t\t\t\tvalue={reminderType}\n\t\t\t\t\t\t\t\tlabel={dictionary.remindBeforeLabel}\n\t\t\t\t\t\t\t\tname=\"remind\"\n\t\t\t\t\t\t\t\tchecked={reminderType === ReminderType.Before}\n\t\t\t\t\t\t\t\tonChange={() => setReminderType(ReminderType.Before)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Radio\n\t\t\t\t\t\t\t\tvalue={reminderType}\n\t\t\t\t\t\t\t\tlabel={dictionary.remindAfterLabel}\n\t\t\t\t\t\t\t\tname=\"remind\"\n\t\t\t\t\t\t\t\tchecked={reminderType === ReminderType.After}\n\t\t\t\t\t\t\t\tonChange={() => setReminderType(ReminderType.After)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"add-reminder-form__actions\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tsecondary\n\t\t\t\t\t\tsmall\n\t\t\t\t\t\tclassName=\"reminders__small-action-button\"\n\t\t\t\t\t\tonClick={onCancel}\n\t\t\t\t\t>\n\t\t\t\t\t\t{dictionary.cancelNewReminder}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsmall\n\t\t\t\t\t\tprimary\n\t\t\t\t\t\tdisabled={isInvalid}\n\t\t\t\t\t\tclassName=\"reminders__small-action-button\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tonSave({\n\t\t\t\t\t\t\t\tid: uuidv4(),\n\t\t\t\t\t\t\t\tdaysTillExecute: parseInt(days, 10),\n\t\t\t\t\t\t\t\tisAfter,\n\t\t\t\t\t\t\t\tremindAt: remindAt!,\n\t\t\t\t\t\t\t\tstatus: 'PENDING',\n\t\t\t\t\t\t\t\tisForInternalDueDate:\n\t\t\t\t\t\t\t\t\treminderType === ReminderType.InternalBefore ||\n\t\t\t\t\t\t\t\t\treminderType === ReminderType.InternalAfter,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{dictionary.saveNewReminder}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import React from 'react';\nimport { Icon } from '../../icon/index.js';\nimport { IconButton } from '../../icon-button/index.js';\nimport { FormattedDate } from '../../formatted/formatted-date/index.js';\nimport { format as formatter, parseISO, isValid } from 'date-fns';\nimport { isNonEmptyString } from '@/utils/type-checks';\nimport { getDatetimeFormat } from '@/utils/helpers';\nimport { Reminder } from '../types.js';\nimport { remindersDictionary } from '../dictionary.js';\nimport { sortRemindersByOffset } from './utils.js';\n\ninterface CurrentRemindersProps {\n\tincludeInternalDate?: boolean;\n\treminders: Reminder[];\n\tonRemove(id: string): void;\n\tdisabled: boolean;\n\tdictionary: typeof remindersDictionary;\n}\n\nconst getFormattedDateTextValue = (date: Date | string) => {\n\tconst format = getDatetimeFormat().date;\n\n\tlet parsedDate;\n\n\tif (date instanceof Date) {\n\t\tparsedDate = date;\n\t} else if (date.includes('00:00:00.000') || date.includes('00:00:00Z')) {\n\t\tparsedDate = parseISO(date.replace(/T.*$/, ''));\n\t} else {\n\t\tparsedDate = parseISO(date);\n\t}\n\n\tlet formattedDate = '--';\n\n\tif (isValid(parsedDate)) {\n\t\tformattedDate = formatter(parsedDate, format);\n\t}\n\n\tif (isNonEmptyString(formattedDate)) {\n\t\treturn formattedDate;\n\t}\n\n\treturn null;\n};\n\nconst ReminderStatusContent = (props: {\n\treminder: Reminder;\n\tdictionary: CurrentRemindersProps['dictionary'];\n\tincludeInternalDate?: boolean;\n}) => {\n\tconst { status } = props.reminder;\n\n\tif (status === 'PENDING') {\n\t\treturn null;\n\t}\n\n\tlet value = (\n\t\t<span>\n\t\t\t{}\n\t\t\t<b>{props.dictionary.statusUnknown}</b>\n\t\t</span>\n\t);\n\tconst isSP = window.location.href.includes('/sp');\n\tif (status === 'SENT') {\n\t\tvalue = (\n\t\t\t<b>\n\t\t\t\t{}\n\t\t\t\t{props.dictionary.statusSent}{' '}\n\t\t\t\t<Icon\n\t\t\t\t\tname={isSP ? 'check circle circle-check' : 'circle-check'}\n\t\t\t\t\tremoveMargin\n\t\t\t\t/>\n\t\t\t</b>\n\t\t);\n\t} else if (status === 'ERROR') {\n\t\tvalue = (\n\t\t\t<b className=\"error\">\n\t\t\t\t{}\n\t\t\t\t{props.dictionary.statusError}\n\t\t\t\t<Icon\n\t\t\t\t\tname={\n\t\t\t\t\t\tisSP ? 'exclamation circle circle-exclamation' : 'circle-exclamation'\n\t\t\t\t\t}\n\t\t\t\t\tremoveMargin\n\t\t\t\t/>\n\t\t\t</b>\n\t\t);\n\t}\n\n\treturn <p className=\"current-reminders__reminder-status\">{value}</p>;\n};\n\nconst ReminderActions = ({\n\treminder,\n\tdisabled,\n\tonRemove,\n\tdictionary,\n\tincludeInternalDate,\n}: Pick<\n\tCurrentRemindersProps,\n\t'disabled' | 'onRemove' | 'dictionary' | 'includeInternalDate'\n> & {\n\treminder: Reminder;\n}) => {\n\tconst { status, id, daysTillExecute, isAfter, isForInternalDueDate, remindAt } =\n\t\treminder;\n\tconst { internalLabel, externalLabel, dueDate } = dictionary;\n\n\tconst deleteAriaLabel = `${daysTillExecute} ${daysTillExecute === 1 ? 'day' : 'days'} ${isAfter ? 'after' : 'before'} ${includeInternalDate ? (isForInternalDueDate ? internalLabel : externalLabel) : dueDate} - ${getFormattedDateTextValue(remindAt.toISOString())}`;\n\n\tif (disabled || status !== 'PENDING') {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"current-reminders__actions\">\n\t\t\t<IconButton\n\t\t\t\ttertiary\n\t\t\t\ticon=\"trash\"\n\t\t\t\taria-label={`Remove ${deleteAriaLabel} reminder`}\n\t\t\t\tclassName=\"current-reminders__remove-btn\"\n\t\t\t\tonClick={() => {\n\t\t\t\t\tonRemove(id);\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n\nconst ReminderItem = (\n\tprops: Omit<CurrentRemindersProps, 'reminders'> & { reminder: Reminder },\n) => {\n\tconst { includeInternalDate, reminder, onRemove, disabled, dictionary } = props;\n\n\treturn (\n\t\t<li className=\"current-reminders__reminder\" data-invalid={!!reminder.error}>\n\t\t\t<div>\n\t\t\t\t<p className={reminder.status !== 'PENDING' ? 'line-through' : ''}>\n\t\t\t\t\t<b>\n\t\t\t\t\t\t{reminder.daysTillExecute}&nbsp;\n\t\t\t\t\t\t{reminder.daysTillExecute === 1 ? 'day' : 'days'}&nbsp;\n\t\t\t\t\t\t{reminder.isAfter ? 'after' : 'before'}&nbsp;\n\t\t\t\t\t\t{includeInternalDate\n\t\t\t\t\t\t\t? reminder.isForInternalDueDate\n\t\t\t\t\t\t\t\t? dictionary.internalLabel\n\t\t\t\t\t\t\t\t: dictionary.externalLabel\n\t\t\t\t\t\t\t: dictionary.dueDate}\n\t\t\t\t\t\t&nbsp;-&nbsp;\n\t\t\t\t\t</b>\n\t\t\t\t\t<FormattedDate date={reminder.remindAt.toISOString()} />\n\t\t\t\t</p>\n\t\t\t\t{reminder.error ? (\n\t\t\t\t\t<span className=\"reminder__invalid-date\">{reminder.error}</span>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t\t<ReminderStatusContent\n\t\t\t\treminder={reminder}\n\t\t\t\tdictionary={dictionary}\n\t\t\t\tincludeInternalDate={includeInternalDate}\n\t\t\t/>\n\t\t\t<ReminderActions\n\t\t\t\treminder={reminder}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tdictionary={dictionary}\n\t\t\t\tincludeInternalDate={includeInternalDate}\n\t\t\t\tonRemove={onRemove}\n\t\t\t/>\n\t\t</li>\n\t);\n};\n\nexport function CurrentReminders(props: CurrentRemindersProps) {\n\tconst { includeInternalDate, reminders, onRemove, disabled, dictionary } = props;\n\n\treturn (\n\t\t<ul className=\"current-reminders__reminder-list\">\n\t\t\t{/*@ts-expect-error fix toSorted*/}\n\t\t\t{reminders.toSorted(sortRemindersByOffset).map((reminder) => (\n\t\t\t\t<ReminderItem\n\t\t\t\t\tkey={reminder.id}\n\t\t\t\t\treminder={reminder}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\tonRemove={onRemove}\n\t\t\t\t\tincludeInternalDate={includeInternalDate}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</ul>\n\t);\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { TextArea } from '../../form/text-area/index.js';\nimport { AccordionFormWrapper } from '../../attachments-form/index.js';\nimport { Button } from '../../button/index.js';\nimport { useTenantContext } from '@/context/tenant';\nimport { api } from '../api.js';\nimport { TableCommentList } from './table-comment-list.js';\nimport { useFormContext } from '../context/form-context.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function Comments(props: any) {\n\tconst { disabled, allowToRemoveByRoles } = props;\n\n\tconst accordionRef = useRef /** @type HTMLDivElement */();\n\tconst { dictionary, values, onInputChange, isNewCommentLimitExceeded } =\n\t\tuseFormContext();\n\tconst [comments, setComments] = useState(/** @type Comment[] */ []);\n\tconst [nextCommentId, setNextCommentId] = useState(0);\n\n\tconst tenantCtx = useTenantContext();\n\n\tconst loadComments = useCallback(() => {\n\t\tif (!values.id) {\n\t\t\treturn;\n\t\t}\n\t\tlet isMounted = true;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tapi.comments.getAllByTaskId(values.id).then(({ data }: any) => {\n\t\t\tif (isMounted) {\n\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\tsetComments([...(values.newComments || []), ...data]);\n\n\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\tif (data.length > 0) accordionRef?.current?.setOpen(true);\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tisMounted = false;\n\t\t};\n\t}, [values.id, values.newComments]);\n\n\tuseEffect(() => {\n\t\tconst cleanup = loadComments();\n\n\t\treturn () => {\n\t\t\tif (cleanup) {\n\t\t\t\tcleanup();\n\t\t\t}\n\t\t};\n\t}, [loadComments, values.id]);\n\n\treturn (\n\t\t<AccordionFormWrapper\n\t\t\tlabel={dictionary.comments.label}\n\t\t\tdefaultOpen={comments.length > 0}\n\t\t\t// @ts-expect-error type mismatch\n\t\t\tref={accordionRef}\n\t\t>\n\t\t\t<div className=\"task-form_field\">\n\t\t\t\t<TextArea\n\t\t\t\t\tonChange={(_, { value }: { value: string }) => {\n\t\t\t\t\t\tonInputChange(value, 'newComment');\n\t\t\t\t\t}}\n\t\t\t\t\trows={3}\n\t\t\t\t\tvalue={values.newComment}\n\t\t\t\t\treadOnly={disabled}\n\t\t\t\t\tclassName={`task-new-comment ${disabled ? 'task-form_input_disabled' : 'ui input'} ${\n\t\t\t\t\t\tisNewCommentLimitExceeded ? 'task-form_error_input' : ''\n\t\t\t\t\t}`}\n\t\t\t\t\taria-label={dictionary.comments.label}\n\t\t\t\t/>\n\t\t\t\t{isNewCommentLimitExceeded && (\n\t\t\t\t\t<div className=\"task-form_error\" role=\"alert\" aria-live=\"polite\">\n\t\t\t\t\t\t{dictionary.comments.charLimitExceeded}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{!isNewCommentLimitExceeded && (\n\t\t\t\t\t<div className=\"task-form_info\">{dictionary.comments.charLimitInfo}</div>\n\t\t\t\t)}\n\t\t\t\t{values.id && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tclassName=\"task-form_save_new_comment_button\"\n\t\t\t\t\t\tdisabled={\n\t\t\t\t\t\t\tdisabled ||\n\t\t\t\t\t\t\tisNewCommentLimitExceeded ||\n\t\t\t\t\t\t\tvalues.newComment.trim().length === 0\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClick={async () => {\n\t\t\t\t\t\t\tconst comments = values.newComments || [];\n\t\t\t\t\t\t\tcomments.unshift({\n\t\t\t\t\t\t\t\tid: `NEW-${nextCommentId}`,\n\t\t\t\t\t\t\t\tcontent: values.newComment,\n\t\t\t\t\t\t\t\tcreatedBy: tenantCtx?.data?.user?.id,\n\t\t\t\t\t\t\t\tauthor: [\n\t\t\t\t\t\t\t\t\ttenantCtx?.data?.user?.firstName,\n\t\t\t\t\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\t\t\t\t\ttenantCtx?.data?.user?.middleName,\n\t\t\t\t\t\t\t\t\ttenantCtx?.data?.user?.lastName,\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t.filter((a) => a)\n\t\t\t\t\t\t\t\t\t.join(' '),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tsetNextCommentId(nextCommentId + 1);\n\n\t\t\t\t\t\t\tonInputChange('', 'newComment');\n\t\t\t\t\t\t\tonInputChange([...comments], 'newComments');\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{dictionary.comments.addCommentButton}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\n\t\t\t\t<TableCommentList\n\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\tcomments={comments}\n\t\t\t\t\tallowToRemoveByRoles={allowToRemoveByRoles}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</AccordionFormWrapper>\n\t);\n}\n","import React, { useState } from 'react';\nimport { merge } from 'lodash-es';\nimport { TableRow } from './table-row.js';\nimport './styles.css';\nimport { useFormContext } from '../context/form-context.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TableCommentList = (props: any) => {\n\tconst { comments, disabled, dictionary: dctnr, allowToRemoveByRoles } = props;\n\n\tconst [order, setOrder] = useState('descending');\n\tconst { values } = useFormContext();\n\n\tif (!comments || comments?.length === 0) {\n\t\treturn null;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst commentsOrdered = comments.sort((a: any, b: any) => {\n\t\tconst leftCreatedAt = a.createdAt ? new Date(a.createdAt).getTime() : null;\n\t\tconst rightCreatedAt = b.createdAt ? new Date(b.createdAt).getTime() : null;\n\n\t\tif (leftCreatedAt === null && rightCreatedAt === null) {\n\t\t\treturn 0; // Both null, keep their relative order\n\t\t}\n\t\tif (leftCreatedAt === null) {\n\t\t\treturn -1; // a comes first\n\t\t}\n\t\tif (rightCreatedAt === null) {\n\t\t\treturn 1; // b comes first\n\t\t}\n\n\t\t// Sort by createdAt as before\n\t\treturn order === 'ascending'\n\t\t\t? leftCreatedAt - rightCreatedAt\n\t\t\t: rightCreatedAt - leftCreatedAt;\n\t});\n\n\tconst dictionary = merge({}, TableCommentList.defaultProps.dictionary, dctnr);\n\tconst recordIdsToRemove = new Set(values.commentsToRemove || []);\n\n\treturn (\n\t\t<table className=\"ui sortable fixed table table-comment-list\">\n\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t\t<th className=\"nine wide\">{dictionary.columns[0]}</th>\n\t\t\t\t\t<th\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tconst desc = order === 'descending';\n\n\t\t\t\t\t\t\tif (desc) {\n\t\t\t\t\t\t\t\tsetOrder('ascending');\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsetOrder('descending');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={`sorted ${order} five wide`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{dictionary.columns[1]}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th className=\"actions-header three wide\" />\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t{\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\tcommentsOrdered.map((comment: any) => {\n\t\t\t\t\t\t// hide comments that are marked for removal\n\t\t\t\t\t\tif (recordIdsToRemove.has(comment.id)) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\t\tkey={comment.id}\n\t\t\t\t\t\t\t\tcomment={comment}\n\t\t\t\t\t\t\t\tdictionary={dictionary}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tallowToRemoveByRoles={allowToRemoveByRoles}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t</tbody>\n\t\t</table>\n\t);\n};\n\nTableCommentList.defaultProps = {\n\tdisabled: false,\n\tcomments: [],\n\tdictionary: {\n\t\tcolumns: ['Comment History', 'Date and Time'],\n\t\tremoveCommentButtonLabel: 'Remove comment',\n\t\teditCommentButtonLabel: 'Edit comment',\n\t\tremoveCommentDialog: {\n\t\t\ttitle: 'Delete your comment?',\n\t\t\tcancelText: 'Cancel',\n\t\t\tconfirmText: 'Delete Comment',\n\t\t},\n\t\tcancelCommentEditingDialog: {\n\t\t\ttitle: 'Discard Changes?',\n\t\t\tdescription:\n\t\t\t\t'There are unsaved changes. Are you sure you want to discard your changes?',\n\t\t\tcancelText: 'Cancel',\n\t\t\tconfirmText: 'Discard Changes',\n\t\t},\n\t},\n};\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-nocheck\nimport React from 'react';\nimport cn from 'classnames';\nimport { FormattedDatetime } from '../../formatted/formatted-datetime';\nimport { useTenantContext } from '@/context/tenant';\nimport { isNil } from 'lodash-es';\nimport './styles.css';\nimport { IconButton } from '../../icon-button';\nimport { AlertDialog } from '../../modal-dialog';\nimport { TextArea } from '../../form/text-area';\nimport { Button } from '../../button';\nimport { useFormContext } from '../context/form-context.js';\n\n/*\n{\n \"id\": \"e436d3e1-e86f-403e-9958-99889973eef2\",\n \"content\": \"third comment on FT\",\n \"createdAt\": \"2024-11-26T16:57:49.951+00:00\",\n \"updatedAt\": \"2024-11-26T16:57:49.951+00:00\",\n \"createdBy\": \"420f632a-f65e-4314-a0f4-8ac39836d103\",\n \"updatedBy\": \"420f632a-f65e-4314-a0f4-8ac39836d103\",\n \"author\": \"Jeff Uhlorn\",\n \"taskId\": \"TSK-0b0e9616-4b31-11ee-934a-0a1712aeca79\"\n}\n*/\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TableRow = (props: any) => {\n\tconst [commentToRemove, setCommentToRemove] = React.useState(null);\n\tconst [editingComment, setEditingComment] = React.useState(false);\n\tconst [showCancelCommentEditingModal, setShowCancelCommentEditingModal] =\n\t\tReact.useState(false);\n\tconst { values, onInputChange } = useFormContext();\n\n\tconst tenantCtx = useTenantContext();\n\n\tconst { allowToRemoveByRoles, comment, disabled, dictionary } = props;\n\n\tconst allowActions =\n\t\ttenantCtx?.data?.user?.id === comment?.createdBy ||\n\t\ttenantCtx.data.groups.find((f) =>\n\t\t\t(allowToRemoveByRoles || []).includes(f.groupGroupName),\n\t\t);\n\n\tconst editCommentLengthExceeded =\n\t\tvalues.editedComments?.[comment.id]?.length > 1000;\n\n\tconst emptyComment = values.editedComments?.[comment.id]?.trim()?.length === 0;\n\n\tconst disabledActions = disabled || editingComment;\n\n\treturn (\n\t\t<tr>\n\t\t\t<AlertDialog\n\t\t\t\ttitle={<span>{dictionary.removeCommentDialog.title}</span>}\n\t\t\t\tdescription={\n\t\t\t\t\t<span className=\"delete-dialog-description\">\n\t\t\t\t\t\t{commentToRemove?.content?.slice(0, 50)}\n\t\t\t\t\t\t{commentToRemove?.contentLengthMoreThanAllowed ? '...' : ''}\n\t\t\t\t\t</span>\n\t\t\t\t}\n\t\t\t\tisOpen={Boolean(commentToRemove)}\n\t\t\t\tonCancel={() => setCommentToRemove(null)}\n\t\t\t\tconfirmText={dictionary.removeCommentDialog.confirmText}\n\t\t\t\tcancelText={dictionary.removeCommentDialog.cancelText}\n\t\t\t\tonConfirm={async () => {\n\t\t\t\t\tconst toRemove = values.commentsToRemove || [];\n\t\t\t\t\ttoRemove.push(commentToRemove.id);\n\n\t\t\t\t\tonInputChange([...toRemove], 'commentsToRemove');\n\t\t\t\t\tsetCommentToRemove(null);\n\t\t\t\t}}\n\t\t\t/>\n\n\t\t\t<AlertDialog\n\t\t\t\ttitle={<span>{dictionary.cancelCommentEditingDialog.title}</span>}\n\t\t\t\tdescription={\n\t\t\t\t\t<span className=\"delete-dialog-description\">\n\t\t\t\t\t\t{dictionary.cancelCommentEditingDialog.description}\n\t\t\t\t\t</span>\n\t\t\t\t}\n\t\t\t\tisOpen={Boolean(showCancelCommentEditingModal)}\n\t\t\t\tonCancel={() => setShowCancelCommentEditingModal(false)}\n\t\t\t\tconfirmText={dictionary.cancelCommentEditingDialog.confirmText}\n\t\t\t\tcancelText={dictionary.cancelCommentEditingDialog.cancelText}\n\t\t\t\tonConfirm={async () => {\n\t\t\t\t\tconst comments = values.editedComments || {};\n\t\t\t\t\tconst currentComment = comments[comment.id];\n\n\t\t\t\t\tif (\n\t\t\t\t\t\teditingComment === comment.content ||\n\t\t\t\t\t\teditingComment === currentComment\n\t\t\t\t\t) {\n\t\t\t\t\t\tdelete comments[comment.id];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcomments[comment.id] = editingComment;\n\t\t\t\t\t}\n\t\t\t\t\tonInputChange(comments, 'editedComments');\n\t\t\t\t\tsetShowCancelCommentEditingModal(false);\n\t\t\t\t\tsetEditingComment(null);\n\t\t\t\t}}\n\t\t\t/>\n\n\t\t\t{editingComment && (\n\t\t\t\t<td colSpan={2}>\n\t\t\t\t\t<div className=\"task-form_field\">\n\t\t\t\t\t\t<TextArea\n\t\t\t\t\t\t\tonChange={(e, { value }) => {\n\t\t\t\t\t\t\t\tconst allEditedCommented = values.editedComments || {};\n\t\t\t\t\t\t\t\tif (value === editingComment) {\n\t\t\t\t\t\t\t\t\tdelete allEditedCommented[comment.id];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tallEditedCommented[comment.id] = value;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tonInputChange(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t...allEditedCommented,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t`editedComments`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\trows={2}\n\t\t\t\t\t\t\tclassName={cn('task-edit-comment', {\n\t\t\t\t\t\t\t\t'task-form_error_input': editCommentLengthExceeded || emptyComment,\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\tvalue={\n\t\t\t\t\t\t\t\tisNil(values.editedComments?.[comment.id])\n\t\t\t\t\t\t\t\t\t? editingComment\n\t\t\t\t\t\t\t\t\t: values.editedComments?.[comment.id]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taria-label={dictionary.comments.label}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{editCommentLengthExceeded && (\n\t\t\t\t\t\t\t<div className=\"task-form_error\" role=\"alert\" aria-live=\"polite\">\n\t\t\t\t\t\t\t\t{dictionary.comments.charLimitExceeded}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{emptyComment && (\n\t\t\t\t\t\t\t<div className=\"task-form_error\" role=\"alert\" aria-live=\"polite\">\n\t\t\t\t\t\t\t\t{dictionary.comments.emptyComment}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!editCommentLengthExceeded && (\n\t\t\t\t\t\t\t<div className=\"task-form_info\">\n\t\t\t\t\t\t\t\t{dictionary.comments.charLimitInfo}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className=\"task-form_save_edit-comment-actions\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tsecondary\n\t\t\t\t\t\t\t\tclassName=\"task-form_save_new_comment_button\"\n\t\t\t\t\t\t\t\tonClick={async () => {\n\t\t\t\t\t\t\t\t\tconst comments = values.editedComments || {};\n\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t!isNil(comments[comment.id]) &&\n\t\t\t\t\t\t\t\t\t\teditingComment !== comments[comment.id]\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tsetShowCancelCommentEditingModal(true);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif (comments[comment.id]) {\n\t\t\t\t\t\t\t\t\t\t\tif (comment.content === comments[comment.id]) {\n\t\t\t\t\t\t\t\t\t\t\t\tdelete comments[comment.id];\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonInputChange(comments, 'editedComments');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tsetEditingComment(null);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{dictionary.comments.cancelCommentButton}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tclassName=\"task-form_save_new_comment_button\"\n\t\t\t\t\t\t\t\tdisabled={\n\t\t\t\t\t\t\t\t\teditCommentLengthExceeded ||\n\t\t\t\t\t\t\t\t\t!values.editedComments?.[comment.id] ||\n\t\t\t\t\t\t\t\t\tvalues.editedComments?.[comment.id] === editingComment ||\n\t\t\t\t\t\t\t\t\tvalues.editedComments?.[comment.id] === comment.content ||\n\t\t\t\t\t\t\t\t\temptyComment\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonClick={async () => {\n\t\t\t\t\t\t\t\t\tsetEditingComment(null);\n\t\t\t\t\t\t\t\t\t// if content match the original one, remove it from the editedComments to disable save button\n\t\t\t\t\t\t\t\t\tif (values.editedComments?.[comment.id] === comment.content) {\n\t\t\t\t\t\t\t\t\t\tconst allComments = values.editedComments || {};\n\t\t\t\t\t\t\t\t\t\tdelete allComments[comment.id];\n\t\t\t\t\t\t\t\t\t\tonInputChange(\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t...allComments,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t'editedComments',\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{dictionary.comments.saveCommentButton}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</td>\n\t\t\t)}\n\n\t\t\t{!editingComment && (\n\t\t\t\t<>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<b>{comment.author}</b> added a comment:\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<p className=\"comment-content\">\n\t\t\t\t\t\t\t{values.editedComments?.[comment.id]\n\t\t\t\t\t\t\t\t? values.editedComments?.[comment.id]\n\t\t\t\t\t\t\t\t: comment.content}\n\t\t\t\t\t\t\t{comment.id.startsWith('NEW')\n\t\t\t\t\t\t\t\t? ' (New)'\n\t\t\t\t\t\t\t\t: (values.editedComments?.[comment.id] &&\n\t\t\t\t\t\t\t\t\t\t\tvalues.editedComments?.[comment.id] !== comment.content) ||\n\t\t\t\t\t\t\t\t\t comment.updatedAt !== comment.createdAt\n\t\t\t\t\t\t\t\t\t? ' (Edited)'\n\t\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t{comment.createdAt && (\n\t\t\t\t\t\t\t<FormattedDatetime\n\t\t\t\t\t\t\t\tdate={comment.createdAt}\n\t\t\t\t\t\t\t\ttimezone={tenantCtx?.data?.tenant?.timezone}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</td>\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t<td className=\"actions-content\">\n\t\t\t\t{allowActions && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\ttertiary\n\t\t\t\t\t\t\ticon=\"pencil\"\n\t\t\t\t\t\t\tdisabled={disabledActions}\n\t\t\t\t\t\t\tclassName={`table-comment-list__action-comment-edit-button table-comment-list__action-comment-button ${disabledActions ? 'disabled' : ''}`}\n\t\t\t\t\t\t\tdata-testid=\"edit-icon-button\"\n\t\t\t\t\t\t\taria-label={`${dictionary.editCommentButtonLabel}`}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tconst allEditedComments = values.editedComments || {};\n\t\t\t\t\t\t\t\tconst content = allEditedComments[comment.id] || comment.content;\n\t\t\t\t\t\t\t\tsetEditingComment(content);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttitle={`${dictionary.editCommentButtonLabel}`}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\ttertiary\n\t\t\t\t\t\t\ticon=\"trash\"\n\t\t\t\t\t\t\tdisabled={disabledActions}\n\t\t\t\t\t\t\tclassName={`table-comment-list__action-comment-button ${disabledActions ? 'disabled' : ''}`}\n\t\t\t\t\t\t\tdata-testid=\"trash-icon-button\"\n\t\t\t\t\t\t\taria-label={`${dictionary.removeCommentButtonLabel}`}\n\t\t\t\t\t\t\ttitle={`${dictionary.removeCommentButtonLabel}`}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tconst content = values.editedComments?.[comment?.id]\n\t\t\t\t\t\t\t\t\t? values.editedComments[comment.id]\n\t\t\t\t\t\t\t\t\t: comment?.content;\n\n\t\t\t\t\t\t\t\tconst contentLengthMoreThanAllowed = content.length > 50;\n\n\t\t\t\t\t\t\t\tsetCommentToRemove({\n\t\t\t\t\t\t\t\t\t...comment,\n\t\t\t\t\t\t\t\t\tcontent,\n\t\t\t\t\t\t\t\t\tcontentLengthMoreThanAllowed,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</td>\n\t\t</tr>\n\t);\n};\n","import React, { memo, useEffect, useState } from 'react';\nimport { Combobox } from '../../form/combobox/index.js';\nimport { adminLoadOptions } from '../../link-to-milestone/index.js';\nimport { api } from '../api.js';\nimport { EntityFormValues } from '../types.js';\nimport { Control, DropdownIndicator } from '../utils.js';\n\nexport interface MilestoneInputProps<D> {\n\tonInputChange: (value: string, key: string) => void;\n\tvalues: EntityFormValues;\n\tdisabled: boolean;\n\tdictionary: D;\n\tmilestoneCategory: string;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const MilestoneInput = memo<MilestoneInputProps<any>>(\n\tfunction MilestoneInput(props) {\n\t\tconst { onInputChange, disabled, dictionary, values, milestoneCategory } = props;\n\n\t\tconst [selectedOption, setSelectedOption] = useState<{\n\t\t\tvalue: string;\n\t\t\tlabel: string;\n\t\t} | null>(null);\n\n\t\tuseEffect(() => {\n\t\t\tlet canceled = false;\n\n\t\t\tif (values.milestoneId) {\n\t\t\t\tapi.task\n\t\t\t\t\t.getById(values.milestoneId)\n\t\t\t\t\t.then((milestoneTask) => {\n\t\t\t\t\t\tif (!canceled) {\n\t\t\t\t\t\t\tsetSelectedOption({\n\t\t\t\t\t\t\t\tvalue: values.milestoneId!,\n\t\t\t\t\t\t\t\tlabel: `${milestoneTask.taskCounterId} - ${milestoneTask.name}`,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tonInputChange(milestoneTask.taskCounterId!, 'milestoneCounter');\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tconsole.error('Error during milestone loading', error);\n\t\t\t\t\t\tif (!canceled) {\n\t\t\t\t\t\t\tsetSelectedOption(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t} else if (!canceled) {\n\t\t\t\tsetSelectedOption(null);\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tcanceled = true;\n\t\t\t};\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t}, []);\n\n\t\tconst loadOptions = async (inputValue: string) => {\n\t\t\tlet submissionId;\n\t\t\tif (milestoneCategory === 'CAYUSE_SP_MILESTONE') {\n\t\t\t\tconst urlParts = values.url?.split('/');\n\t\t\t\tsubmissionId = values.submissionId ?? urlParts?.[urlParts.length - 1];\n\t\t\t}\n\t\t\ttry {\n\t\t\t\treturn await adminLoadOptions({\n\t\t\t\t\tsort: 'taskCounterNumeric',\n\t\t\t\t\tsearchText: inputValue,\n\t\t\t\t\tmilestoneCategory,\n\t\t\t\t\tsubmissionId,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error during milestone loading', error);\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst onChange = (option: any) => {\n\t\t\tonInputChange(option?.value, 'milestoneId');\n\t\t\tonInputChange(option?.taskCounter, 'milestoneCounter');\n\t\t\tif (option) {\n\t\t\t\tsetSelectedOption({\n\t\t\t\t\tlabel: `${option?.taskCounter} - ${option?.taskName}`,\n\t\t\t\t\tvalue: option?.value,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsetSelectedOption(null);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<Combobox\n\t\t\t\tid=\"task-milestone\"\n\t\t\t\tvalue={selectedOption}\n\t\t\t\tloadOptions={loadOptions}\n\t\t\t\tonChange={onChange}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tplaceholder={dictionary.milestone.placeholder}\n\t\t\t\taria-label={dictionary.milestone}\n\t\t\t\tclassName=\"task-form_milestone\"\n\t\t\t\tclassNamePrefix=\"task-form_milestone\"\n\t\t\t\tcomponents={{ Control, DropdownIndicator }}\n\t\t\t\tstyles={{\n\t\t\t\t\t// @ts-expect-error type mismatch\n\t\t\t\t\tcontrol: (css) => ({ ...css, paddingLeft: '1rem' }),\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\t},\n);\n","import React, { memo } from 'react';\nimport { useFormContext } from '../context/form-context.js';\nimport { MilestoneProgressView } from './milestone-progress-view.js';\n\nexport interface MilestoneProgressProps {\n\tlabel?: string;\n}\n\nexport const MilestoneProgress = memo(function MilestoneProgress(\n\tprops: MilestoneProgressProps,\n) {\n\tconst { milestoneProgress } = useFormContext();\n\n\treturn (\n\t\t<MilestoneProgressView\n\t\t\tlabel={props.label}\n\t\t\tisLoading={milestoneProgress.isLoading}\n\t\t\tcompletePercent={milestoneProgress.data?.completePercent}\n\t\t/>\n\t);\n});\n","import React, { memo, useState } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport interface MilestoneProgressViewProps {\n\tlabel?: string;\n\tcompletePercent?: number;\n\tisLoading?: boolean;\n}\n\nexport const MilestoneProgressView = memo(function MilestoneProgress(\n\tprops: MilestoneProgressViewProps,\n) {\n\tconst { label = 'Progress', isLoading, completePercent } = props;\n\n\tconst [progressId] = useState(() => uuidv4());\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<div className=\"task-form__milestone-progress-placeholder\">\n\t\t\t\t<span />\n\t\t\t\t<span />\n\t\t\t\t<span />\n\t\t\t</div>\n\t\t);\n\t}\n\tif (completePercent === null) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"task-form__milestone-progress\">\n\t\t\t{label && <label htmlFor={progressId}>{label}:</label>}\n\t\t\t<progress id={progressId} value={completePercent} max={100} />\n\t\t\t<span>{completePercent}%</span>\n\t\t</div>\n\t);\n});\n","import React, { memo } from 'react';\nimport { ClockIcon } from './clock-icon.js';\n\nexport interface TaskFormHeaderProps {\n\ttitle: string;\n\texternalDueDate: Date;\n}\n\nexport const TaskFormHeader = memo(function TaskFormHeader(\n\tprops: TaskFormHeaderProps,\n) {\n\tconst { title, externalDueDate } = props;\n\n\treturn (\n\t\t<div className=\"task-form__header-text-container\">\n\t\t\t<span className=\"task-form__header-text\">{title}</span>\n\t\t\t<span className=\"task-form__header-clock-icon\">\n\t\t\t\t<ClockIcon externalDueDate={externalDueDate} />\n\t\t\t</span>\n\t\t</div>\n\t);\n});\n"],"mappings":"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","names":["React","useState","useCallback","useEffect","useMemo","merge","useEffect","cn","React","cn","Icon","jsx","Button","cn","jsx","jsx","jsxs","jsx","useEffect","cn","React","cn","jsx","jsxs","cn","cn","jsx","jsxs","cn","jsx","jsxs","React","FileUpload","React","jsx","jsxs","React","AlertDialog","forwardRef","useEffect","createPortal","FocusTrap","Fragment","jsx","jsxs","forwardRef","ModalDialog","useEffect","createPortal","FocusTrap","React","jsx","React","FormattedDate","format","jsx","format","React","jsx","React","jsx","jsxs","jsx","jsxs","defaultDictionary","jsx","jsxs","useState","useEffect","useMemo","useCallback","rejections","React","AttachmentsForm","merge","add","React","merge","jsx","jsxs","defaultDictionary","React","merge","React","jsx","jsxs","React","AccordionFormWrapper","cn","jsx","cn","React","jsx","React","Breadcrumbs","cn","jsx","cn","useCallback","useEffect","jsx","useCallback","useEffect","cn","jsx","jsxs","cn","React","cn","jsx","React","CovertButton","cn","useState","useEffect","useRef","useCallback","useId","cn","jsx","jsxs","CustomDropdown","useId","useRef","useState","useEffect","useCallback","cn","React","cn","useObjectRef","jsx","jsxs","React","DateSelector","useObjectRef","format","cn","cn","jsx","cn","jsx","jsxs","forwardRef","useEffect","useRef","useState","useId","cn","Fragment","memo","jsx","jsxs","baseDictionary","memo","Pagination","Fragment","forwardRef","memo","useEffect","useRef","jsx","jsxs","memo","forwardRef","Checkbox","useRef","useEffect","label","jsx","jsx","jsxs","React","React","cn","jsx","jsxs","React","Radio","cn","jsx","jsx","jsxs","renderCell","Fragment","jsx","jsxs","renderCell","React","jsx","jsxs","jsx","jsxs","forwardRef","DynamicTable","useRef","useId","useState","useEffect","_","cn","forwardRef","memo","useId","jsx","jsxs","memo","forwardRef","Input","useId","jsx","Number","React","cn","jsx","jsxs","React","RadioGroup","cn","React","cn","jsx","jsxs","React","Toggle","cn","React","cn","React","React","jsx","jsxs","React","Input","jsx","jsxs","React","Combobox","components","cn","Input","useDropzone","jsx","jsxs","defaultDictionary","useDropzone","useRef","forwardRef","useCallback","useEffect","cn","jsx","forwardRef","RichText","useRef","useEffect","useCallback","cn","cn","jsx","cn","useCallback","useState","useEffect","useState","components","jsx","jsxs","useState","useEffect","components","jsx","useState","useCallback","React","useState","useEffect","merge","memo","useEffect","jsx","PreventLeaveDialog","React","useRef","useEffect","useState","cn","Quill","jsx","jsxs","React","FormattedRichText","useRef","useState","cn","useEffect","Quill","jsx","jsxs","defaultDictionary","jsx","jsxs","defaultDictionary","attachment","useState","useEffect","jsx","jsxs","useState","useEffect","useState","jsx","jsxs","useState","attachment","attachmentType","message","jsx","jsxs","defaultDictionary","baseDictionary","merge","useState","useEffect","React","attachment","message","React","jsx","React","FormattedValue","useState","memo","Link","components","tableInitialSort","tableColumns","defaultDictionary","_","Fragment","jsx","jsxs","components","memo","LinkToMilestone","defaultDictionary","useState","tableInitialSort","task","tableColumns","href","Link","jsx","cn","jsx","cn","useEffect","useState","useState","useEffect","cn","Dialog","Popover","jsx","jsxs","Popover","cn","Dialog","useEffect","useRef","forwardRef","cn","React","cn","React","cn","jsx","jsxs","forwardRef","SectionHeader","useRef","useEffect","cn","useState","memo","useMemo","useEffect","merge","Fragment","jsx","jsxs","defaultDictionary","memo","SetView","merge","useState","useEffect","useMemo","useCallback","useLayoutEffect","useState","isEmpty","tableColumns","useEffect","useRef","useState","NavLink","jsx","jsxs","useState","useRef","useEffect","NavLink","cn","React","jsx","jsx","jsxs","cn","React","forwardRef","memo","useCallback","useEffect","useMemo","useState","identity","merge","get","isNil","isNil","task","reminders","useState","useEffect","useState","components","jsx","jsxs","normalizeUserToOption","UserComboboxOption","useState","useEffect","components","useCallback","useEffect","useMemo","useRef","useState","isEmpty","isNil","isEqual","merge","useEffect","useState","useState","useEffect","useEffect","useRef","useState","useCallback","useRef","useState","useEffect","useCallback","useState","useMemo","useCallback","isEqual","sortBy","isEqual","sortBy","jsx","hasUnsavedChanges","useRef","useState","useEffect","isEqual","merge","useCallback","isNil","useMemo","isEmpty","jsx","jsxs","useState","normalizeUserToOption","UserComboboxOption","useEffect","useState","jsx","jsxs","useState","team","normalizeUserToOption","useEffect","UserComboboxOption","jsx","jsxs","components","utcToZonedTime","isEmpty","forwardRef","memo","useCallback","useEffect","useMemo","useState","merge","get","memo","useEffect","useState","ReactSelect","jsx","memo","CategoryInput","useState","useEffect","ReactSelect","Control","DropdownIndicator","ClearIndicator","memo","jsx","jsxs","CreatedByField","memo","cn","jsx","jsxs","memo","DescriptionField","isDescriptionLimitExceeded","cn","memo","isEmpty","jsx","jsxs","EntityInfoField","memo","cn","jsx","memo","FormDateSelector","cn","memo","cn","jsx","jsxs","memo","NameField","isNameLimitExceeded","cn","memo","jsx","jsxs","memo","StatusField","memo","Fragment","jsx","jsxs","memo","UrlField","isValidUrl","memo","useRef","useState","React","category","jsx","category","useEffect","useState","jsx","jsxs","useState","useEffect","memo","memo","utcToZonedTime","jsx","jsxs","memo","ClockIcon","jsx","jsxs","memo","TaskTitleCell","jsx","tableColumns","React","task","jsx","jsxs","memo","LinkedTasks","useRef","useState","task","memo","useEffect","useState","uuidv4","useState","uuidv4","Fragment","jsx","jsxs","useState","uuidv4","jsxs","jsx","Number","Fragment","formatter","parseISO","isValid","jsx","jsxs","format","parseISO","isValid","formatter","reminders","jsx","jsxs","memo","Reminders","reminders","useState","uuidv4","useEffect","useCallback","useEffect","useRef","useState","useState","merge","React","cn","isNil","Fragment","jsx","jsxs","TableRow","React","comments","cn","isNil","jsx","jsxs","comments","useState","merge","TableRow","jsx","jsxs","useRef","isNewCommentLimitExceeded","comments","useState","useCallback","useEffect","_","jsx","jsxs","memo","forwardRef","MilestoneFormComponent","isValidUrl","isNameLimitExceeded","isDescriptionLimitExceeded","useState","useCallback","get","useEffect","useMemo","merge","jsx","jsxs","Control","components","DropdownIndicator","ClearIndicator","utcToZonedTime","task","person","isEmpty","memo","useEffect","useState","jsx","memo","MilestoneInput","useState","useEffect","Control","DropdownIndicator","jsx","jsxs","STATUSES","hasUnsavedChanges","React","TaskFormComponent","isValidUrl","isNameLimitExceeded","isDescriptionLimitExceeded","useState","useCallback","get","identity","useEffect","useMemo","merge","memo","forwardRef","memo","memo","useState","uuidv4","jsx","jsxs","jsx","MilestoneProgress","memo","memo","jsx","jsxs","memo","TaskFormHeader"]}