@corva/ui 3.77.0-9 → 3.78.0-0
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.
- package/MCP_README.md +9 -6
- package/README.md +6 -0
- package/cjs-bundle/components/AssetEditorV2/components/MultipleAssetsToggle.js.map +1 -1
- package/cjs-bundle/components/AssetEditorV2/components/PrimaryAssetSelect.js +1 -1
- package/cjs-bundle/components/AssetEditorV2/components/PrimaryAssetSelect.js.map +1 -1
- package/cjs-bundle/components/AssetEditorV2/components/PrimaryAssetSelectV2.js +1 -1
- package/cjs-bundle/components/AssetEditorV2/components/PrimaryAssetSelectV2.js.map +1 -1
- package/cjs-bundle/components/AssetEditorV2/components/SecondaryAssetSelect.js +1 -1
- package/cjs-bundle/components/AssetEditorV2/components/SecondaryAssetSelect.js.map +1 -1
- package/cjs-bundle/components/AssetEditorV2/components/SelectItem.js +1 -1
- package/cjs-bundle/components/AssetEditorV2/components/SelectItem.js.map +1 -1
- package/cjs-bundle/components/AssetEditorV2/constants.js.map +1 -1
- package/cjs-bundle/components/AssetEditorV2/effects/assetResponse.js +2 -0
- package/cjs-bundle/components/AssetEditorV2/effects/assetResponse.js.map +1 -0
- package/cjs-bundle/components/AssetEditorV2/effects/index.js +1 -1
- package/cjs-bundle/components/AssetEditorV2/effects/index.js.map +1 -1
- package/cjs-bundle/components/AssetEditorV2/effects/usePrimaryAssetSelectData.js +1 -1
- package/cjs-bundle/components/AssetEditorV2/effects/usePrimaryAssetSelectData.js.map +1 -1
- package/cjs-bundle/components/AssetEditorV2/index.js +1 -1
- package/cjs-bundle/components/AssetEditorV2/index.js.map +1 -1
- package/cjs-bundle/components/AssetEditorV2/utils/index.js +1 -1
- package/cjs-bundle/components/AssetEditorV2/utils/index.js.map +1 -1
- package/cjs-bundle/components/AttachmentLightbox/AttachmentDocument.js +1 -1
- package/cjs-bundle/components/AttachmentLightbox/AttachmentDocument.js.map +1 -1
- package/cjs-bundle/components/CommentComposer/useAttachmentUpload.js +1 -1
- package/cjs-bundle/components/CommentComposer/useAttachmentUpload.js.map +1 -1
- package/cjs-bundle/components/DevCenter/DevCenterAppContainer/components/AppSettingsDialog/AppSettingsDialog.js +1 -1
- package/cjs-bundle/components/DevCenter/DevCenterAppContainer/components/AppSettingsDialog/AppSettingsDialog.js.map +1 -1
- package/cjs-bundle/components/DevCenter/DevCenterRouterContext/UniversalLink/UniversalLink.js +1 -1
- package/cjs-bundle/components/DevCenter/DevCenterRouterContext/UniversalLink/UniversalLink.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Filter/components/PeriodFilterSelect/PeriodFilterSelect.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/MetricsCells/MetricsCells.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/MetricsCells/MetricsCells.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.module.css.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableRow/OffsetWellsTableRow.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableRow/OffsetWellsTableRow.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/constants.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/constants.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useAdvancedWells.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useAdvancedWells.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/stores/filter-store/types.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/utils/getTimestampByPeriod.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/utils/getTimestampByPeriod.js.map +1 -1
- package/cjs-bundle/components/Search/Search.js.map +1 -1
- package/cjs-bundle/config/mapbox/index.js +1 -1
- package/cjs-bundle/config/mapbox/index.js.map +1 -1
- package/cjs-bundle/hocs/withAssetEditorLockHOC.js +1 -1
- package/cjs-bundle/hocs/withAssetEditorLockHOC.js.map +1 -1
- package/components/AssetEditorV2/__tests__/AssetEditorV2.test.d.ts +2 -0
- package/components/AssetEditorV2/__tests__/AssetEditorV2.test.d.ts.map +1 -0
- package/components/AssetEditorV2/__tests__/consumerTypes.test.d.ts +2 -0
- package/components/AssetEditorV2/__tests__/consumerTypes.test.d.ts.map +1 -0
- package/components/AssetEditorV2/components/MultipleAssetsToggle.d.ts +17 -6
- package/components/AssetEditorV2/components/MultipleAssetsToggle.d.ts.map +1 -1
- package/components/AssetEditorV2/components/MultipleAssetsToggle.js.map +1 -1
- package/components/AssetEditorV2/components/PrimaryAssetSelect.d.ts +30 -39
- package/components/AssetEditorV2/components/PrimaryAssetSelect.d.ts.map +1 -1
- package/components/AssetEditorV2/components/PrimaryAssetSelect.js +1 -1
- package/components/AssetEditorV2/components/PrimaryAssetSelect.js.map +1 -1
- package/components/AssetEditorV2/components/PrimaryAssetSelectV2.d.ts +4 -41
- package/components/AssetEditorV2/components/PrimaryAssetSelectV2.d.ts.map +1 -1
- package/components/AssetEditorV2/components/PrimaryAssetSelectV2.js +1 -1
- package/components/AssetEditorV2/components/PrimaryAssetSelectV2.js.map +1 -1
- package/components/AssetEditorV2/components/SecondaryAssetSelect.d.ts +22 -18
- package/components/AssetEditorV2/components/SecondaryAssetSelect.d.ts.map +1 -1
- package/components/AssetEditorV2/components/SecondaryAssetSelect.js +1 -1
- package/components/AssetEditorV2/components/SecondaryAssetSelect.js.map +1 -1
- package/components/AssetEditorV2/components/SelectItem.d.ts +10 -1
- package/components/AssetEditorV2/components/SelectItem.d.ts.map +1 -1
- package/components/AssetEditorV2/components/SelectItem.js +1 -1
- package/components/AssetEditorV2/components/SelectItem.js.map +1 -1
- package/components/AssetEditorV2/components/__tests__/AssetSelectors.test.d.ts +2 -0
- package/components/AssetEditorV2/components/__tests__/AssetSelectors.test.d.ts.map +1 -0
- package/components/AssetEditorV2/components/__tests__/MultipleAssetsToggle.test.d.ts.map +1 -1
- package/components/AssetEditorV2/components/__tests__/SelectItem.test.d.ts.map +1 -1
- package/components/AssetEditorV2/components/index.d.ts.map +1 -1
- package/components/AssetEditorV2/constants.d.ts +2 -9
- package/components/AssetEditorV2/constants.d.ts.map +1 -1
- package/components/AssetEditorV2/constants.js.map +1 -1
- package/components/AssetEditorV2/effects/__tests__/assetResponse.test.d.ts +2 -0
- package/components/AssetEditorV2/effects/__tests__/assetResponse.test.d.ts.map +1 -0
- package/components/AssetEditorV2/effects/__tests__/useLegacyPrimaryAssetSelectData.test.d.ts +2 -0
- package/components/AssetEditorV2/effects/__tests__/useLegacyPrimaryAssetSelectData.test.d.ts.map +1 -0
- package/components/AssetEditorV2/effects/__tests__/usePrimaryAssetSelectData.test.d.ts +2 -0
- package/components/AssetEditorV2/effects/__tests__/usePrimaryAssetSelectData.test.d.ts.map +1 -0
- package/components/AssetEditorV2/effects/assetResponse.d.ts +4 -0
- package/components/AssetEditorV2/effects/assetResponse.d.ts.map +1 -0
- package/components/AssetEditorV2/effects/assetResponse.js +2 -0
- package/components/AssetEditorV2/effects/assetResponse.js.map +1 -0
- package/components/AssetEditorV2/effects/index.d.ts +34 -28
- package/components/AssetEditorV2/effects/index.d.ts.map +1 -1
- package/components/AssetEditorV2/effects/index.js +1 -1
- package/components/AssetEditorV2/effects/index.js.map +1 -1
- package/components/AssetEditorV2/effects/usePrimaryAssetSelectData.d.ts +21 -17
- package/components/AssetEditorV2/effects/usePrimaryAssetSelectData.d.ts.map +1 -1
- package/components/AssetEditorV2/effects/usePrimaryAssetSelectData.js +1 -1
- package/components/AssetEditorV2/effects/usePrimaryAssetSelectData.js.map +1 -1
- package/components/AssetEditorV2/index.d.ts +36 -67
- package/components/AssetEditorV2/index.d.ts.map +1 -1
- package/components/AssetEditorV2/index.js +1 -1
- package/components/AssetEditorV2/index.js.map +1 -1
- package/components/AssetEditorV2/types.d.ts +82 -0
- package/components/AssetEditorV2/types.d.ts.map +1 -0
- package/components/AssetEditorV2/utils/__tests__/utils.test.d.ts.map +1 -1
- package/components/AssetEditorV2/utils/index.d.ts +23 -19
- package/components/AssetEditorV2/utils/index.d.ts.map +1 -1
- package/components/AssetEditorV2/utils/index.js +1 -1
- package/components/AssetEditorV2/utils/index.js.map +1 -1
- package/components/AttachmentLightbox/AttachmentDocument.d.ts.map +1 -1
- package/components/AttachmentLightbox/AttachmentDocument.js +1 -1
- package/components/AttachmentLightbox/AttachmentDocument.js.map +1 -1
- package/components/CommentComposer/__tests__/useAttachmentUpload.local.test.d.ts +2 -0
- package/components/CommentComposer/__tests__/useAttachmentUpload.local.test.d.ts.map +1 -0
- package/components/CommentComposer/useAttachmentUpload.d.ts.map +1 -1
- package/components/CommentComposer/useAttachmentUpload.js +1 -1
- package/components/CommentComposer/useAttachmentUpload.js.map +1 -1
- package/components/DevCenter/DevCenterAppContainer/components/AppSettingsDialog/AppSettingsDialog.d.ts.map +1 -1
- package/components/DevCenter/DevCenterAppContainer/components/AppSettingsDialog/AppSettingsDialog.js +1 -1
- package/components/DevCenter/DevCenterAppContainer/components/AppSettingsDialog/AppSettingsDialog.js.map +1 -1
- package/components/DevCenter/DevCenterRouterContext/UniversalLink/UniversalLink.d.ts.map +1 -1
- package/components/DevCenter/DevCenterRouterContext/UniversalLink/UniversalLink.js +1 -1
- package/components/DevCenter/DevCenterRouterContext/UniversalLink/UniversalLink.js.map +1 -1
- package/components/Drillstring/BHAComponentDetail/constants.d.ts +2 -2
- package/components/OffsetWellPickerV4/effects/__tests__/useCompanyMetricKey.test.d.ts +2 -0
- package/components/OffsetWellPickerV4/effects/__tests__/useCompanyMetricKey.test.d.ts.map +1 -0
- package/components/OffsetWellPickerV4/effects/useCompanyMetricKey.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/__tests__/constants.test.d.ts +2 -0
- package/components/OffsetWellPickerV5/__tests__/constants.test.d.ts.map +1 -0
- package/components/OffsetWellPickerV5/components/Filter/components/PeriodFilterSelect/PeriodFilterSelect.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/MetricsCells/MetricsCells.d.ts +2 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/MetricsCells/MetricsCells.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/MetricsCells/MetricsCells.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/MetricsCells/MetricsCells.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.d.ts +3 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.module.css.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/__tests__/MetricCell.test.d.ts +2 -0
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/__tests__/MetricCell.test.d.ts.map +1 -0
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableRow/OffsetWellsTableRow.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableRow/OffsetWellsTableRow.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableRow/OffsetWellsTableRow.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.d.ts +0 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.js.map +1 -1
- package/components/OffsetWellPickerV5/constants.d.ts +26 -3
- package/components/OffsetWellPickerV5/constants.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/constants.js +1 -1
- package/components/OffsetWellPickerV5/constants.js.map +1 -1
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/__tests__/useAdvancedWells.test.d.ts +2 -0
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/__tests__/useAdvancedWells.test.d.ts.map +1 -0
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/__tests__/useCompanyMetricKey.test.d.ts +2 -0
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/__tests__/useCompanyMetricKey.test.d.ts.map +1 -0
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useAdvancedWells.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useAdvancedWells.js +1 -1
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useAdvancedWells.js.map +1 -1
- package/components/OffsetWellPickerV5/stores/filter-store/types.d.ts +2 -1
- package/components/OffsetWellPickerV5/stores/filter-store/types.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/stores/filter-store/types.js.map +1 -1
- package/components/OffsetWellPickerV5/utils/__tests__/getTimestampByPeriod.test.d.ts +2 -0
- package/components/OffsetWellPickerV5/utils/__tests__/getTimestampByPeriod.test.d.ts.map +1 -0
- package/components/OffsetWellPickerV5/utils/getTimestampByPeriod.d.ts +4 -0
- package/components/OffsetWellPickerV5/utils/getTimestampByPeriod.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/utils/getTimestampByPeriod.js +1 -1
- package/components/OffsetWellPickerV5/utils/getTimestampByPeriod.js.map +1 -1
- package/components/Search/Search.d.ts +6 -3
- package/components/Search/Search.d.ts.map +1 -1
- package/components/Search/Search.js.map +1 -1
- package/components/index.d.ts +1 -0
- package/components/index.d.ts.map +1 -1
- package/config/mapbox/index.d.ts.map +1 -1
- package/config/mapbox/index.js +1 -1
- package/config/mapbox/index.js.map +1 -1
- package/hocs/__tests__/withAssetEditorLockHOC.test.d.ts +2 -0
- package/hocs/__tests__/withAssetEditorLockHOC.test.d.ts.map +1 -0
- package/hocs/withAssetEditorLockHOC.d.ts +11 -1
- package/hocs/withAssetEditorLockHOC.d.ts.map +1 -1
- package/hocs/withAssetEditorLockHOC.js +1 -1
- package/hocs/withAssetEditorLockHOC.js.map +1 -1
- package/mcp-server/server.mjs +312 -73
- package/mcp-server/setup.mjs +129 -44
- package/package.json +3 -2
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAttachmentUpload.js","sources":["../../../../src/components/CommentComposer/useAttachmentUpload.ts"],"sourcesContent":["import { ChangeEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport S3Upload from 'react-s3-uploader/s3upload';\n\nimport type {\n AttachmentKind,\n AttachmentPreviewItem,\n} from '../AttachmentPreview/AttachmentPreview.types';\nimport { getAttachmentKind } from '../AttachmentPreview/getAttachmentKind';\nimport { ACCEPTED_ATTACHMENT_TYPES } from '../AttachFileButton';\n\nimport { getS3SignedUrl } from '~/clients/jsonApi';\nimport { getUrlFileName } from '~/utils/links';\nimport { getSignedLink, peekSignedLink } from '~/utils/signedLinkCache';\n\nexport type UploadedAttachment = {\n url: string;\n name: string;\n size?: number;\n};\n\ntype UseAttachmentUploadOptions = {\n value: UploadedAttachment[];\n onChange: (attachments: UploadedAttachment[]) => void;\n onError?: (message: string | null) => void;\n maxSizeBytes?: number;\n maxFiles?: number;\n /** Mirrors the file input's `accept`; also gates drag-and-drop. */\n accept?: string;\n};\n\n/** A picked or already-stored file, in the order the user arranged it. */\ntype Entry = {\n id: string;\n name: string;\n /** Set while the file is local; cleared entries come from `value`. */\n file: File | null;\n previewUrl: string;\n isUploading: boolean;\n error: string | null;\n uploaded: UploadedAttachment | null;\n};\n\nexport const DEFAULT_MAX_ATTACHMENTS = 10;\n\n/** Same rules the file input enforces via `accept`, so drag-and-drop can't smuggle a type past it. */\nconst isAcceptedType = (file: File, accept: string) =>\n accept\n .split(',')\n .map(rule => rule.trim().toLowerCase())\n .filter(Boolean)\n .some(rule => {\n if (rule.startsWith('.')) return file.name.toLowerCase().endsWith(rule);\n if (rule.endsWith('/*')) {\n const type = file.type.toLowerCase();\n if (type) return type.startsWith(rule.slice(0, -1));\n\n return getAttachmentKind({ name: file.name }) === rule.slice(0, -1);\n }\n\n return file.type.toLowerCase() === rule;\n });\n\nconst getFileKind = (file: File): AttachmentKind => {\n if (file.type.startsWith('image/')) return 'image';\n if (file.type.startsWith('video/')) return 'video';\n return 'file';\n};\n\nconst formatMb = (bytes: number) => (bytes / (1024 * 1024)).toFixed(1);\n\nconst getUploaded = (entries: Entry[]) =>\n entries.map(entry => entry.uploaded).filter(Boolean) as UploadedAttachment[];\n\nconst isSameList = (a: UploadedAttachment[], b: UploadedAttachment[]) =>\n a.length === b.length && a.every((item, index) => item.url === b[index].url);\n\nconst toStoredEntry = (attachment: UploadedAttachment): Entry => ({\n id: attachment.url,\n name: attachment.name,\n file: null,\n previewUrl: '',\n isUploading: false,\n error: null,\n uploaded: attachment,\n});\n\nlet entrySeq = 0;\nconst nextEntryId = () => {\n entrySeq += 1;\n return `attachment-${entrySeq}`;\n};\n\nexport const useAttachmentUpload = ({\n value,\n onChange,\n onError,\n maxSizeBytes,\n maxFiles = DEFAULT_MAX_ATTACHMENTS,\n accept = ACCEPTED_ATTACHMENT_TYPES,\n}: UseAttachmentUploadOptions) => {\n const [entries, setEntries] = useState<Entry[]>([]);\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n const uploadersRef = useRef(new Map<string, S3Upload>());\n // Bumped per attempt so a superseded upload can't write state for a restarted entry.\n const sessionsRef = useRef(new Map<string, number>());\n // Mutations are driven from async upload callbacks, so the latest list lives in a ref.\n const entriesRef = useRef<Entry[]>([]);\n const onChangeRef = useRef(onChange);\n const onErrorRef = useRef(onError);\n\n onChangeRef.current = onChange;\n onErrorRef.current = onError;\n\n // What we last handed the parent. A `value` that still matches it is our own change echoing\n // back; anything else is a parent-driven reset we must adopt.\n const emittedRef = useRef<UploadedAttachment[]>([]);\n\n const commit = useCallback((updater: (prev: Entry[]) => Entry[]) => {\n const next = updater(entriesRef.current);\n entriesRef.current = next;\n setEntries(next);\n emittedRef.current = getUploaded(next);\n onChangeRef.current(emittedRef.current);\n }, []);\n\n const patchEntry = useCallback(\n (id: string, patch: Partial<Entry>) =>\n commit(prev => prev.map(entry => (entry.id === id ? { ...entry, ...patch } : entry))),\n [commit]\n );\n\n const abortUpload = useCallback((id: string) => {\n uploadersRef.current.get(id)?.abortUpload();\n uploadersRef.current.delete(id);\n // Bump, never delete: deleting would let the next attempt reuse session 1, so a callback\n // still in flight from the aborted attempt would pass `isCurrent` and clobber it.\n sessionsRef.current.set(id, (sessionsRef.current.get(id) ?? 0) + 1);\n }, []);\n\n const releasePreview = useCallback((entry?: Entry) => {\n if (entry?.previewUrl) URL.revokeObjectURL(entry.previewUrl);\n }, []);\n\n // The banner is shared by every tile, so recompute it rather than clear it — one file\n // succeeding must not hide a sibling that is still failing.\n const syncError = useCallback(() => {\n onErrorRef.current?.(entriesRef.current.find(entry => entry.error)?.error ?? null);\n }, []);\n\n useEffect(\n () => () => {\n uploadersRef.current.forEach(uploader => uploader.abortUpload());\n uploadersRef.current.clear();\n entriesRef.current.forEach(entry => {\n if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);\n });\n },\n []\n );\n\n const startUpload = useCallback(\n (id: string, file: File) => {\n const session = (sessionsRef.current.get(id) ?? 0) + 1;\n sessionsRef.current.set(id, session);\n // A superseded upload must not write state for an entry that is gone or restarted.\n const isCurrent = () => sessionsRef.current.get(id) === session;\n\n const fail = (message: string) => {\n if (!isCurrent()) return;\n patchEntry(id, { isUploading: false, error: message });\n onErrorRef.current?.(message);\n };\n\n let storedKey = '';\n\n const uploader = new S3Upload({\n files: [file],\n preprocess: (target: File, next: (file: File) => void) => next(target),\n onProgress: () => {},\n getSignedUrl: async (\n target: File,\n callback: (data: { signedUrl: string; [key: string]: unknown }) => void\n ) => {\n try {\n const data = await getS3SignedUrl(target.name, target.type);\n storedKey = data.file_name;\n callback({ ...data, signedUrl: data.signed_url });\n } catch (e) {\n fail((e as Error)?.message || 'Failed to upload the file');\n }\n },\n onFinishS3Put: async () => {\n try {\n const url = await getSignedLink(storedKey);\n if (!isCurrent()) return;\n\n uploadersRef.current.delete(id);\n patchEntry(id, {\n isUploading: false,\n error: null,\n uploaded: { url, name: storedKey, size: file.size },\n });\n syncError();\n } catch (e) {\n fail((e as Error)?.message || 'Failed to upload the file');\n }\n },\n onError: (message: string) => fail(message || 'Failed to upload the file'),\n });\n\n uploadersRef.current.set(id, uploader);\n },\n [patchEntry, syncError]\n );\n\n /** Nothing is uploaded: a comment attachment is a url, so the link itself is the attachment. */\n const addLinkedImage = useCallback(\n (url: string) => {\n const name = getUrlFileName(url);\n\n if (!name) return;\n if (entriesRef.current.length >= maxFiles) {\n onErrorRef.current?.(`You can attach up to ${maxFiles} files.`);\n\n return;\n }\n\n if (entriesRef.current.some(entry => entry.uploaded?.url === url)) return;\n\n commit(prev => [\n ...prev,\n {\n id: nextEntryId(),\n name,\n file: null,\n previewUrl: url,\n isUploading: false,\n error: null,\n uploaded: { url, name },\n },\n ]);\n },\n [commit, maxFiles]\n );\n\n /** Attaches files already in S3 (e.g. Wellhub picks): nothing to upload, the key is signed. */\n const addStoredFiles = useCallback(\n async (files: { fileName: string; size?: number }[]) => {\n const fresh = files.filter(\n (file, index, list) =>\n !entriesRef.current.some(entry => entry.uploaded?.name === file.fileName) &&\n list.findIndex(other => other.fileName === file.fileName) === index\n );\n if (!fresh.length) return;\n\n const room = maxFiles - entriesRef.current.length;\n if (room <= 0) {\n onErrorRef.current?.(`You can attach up to ${maxFiles} files.`);\n\n return;\n }\n\n const accepted = fresh.slice(0, room);\n const signed = await Promise.all(\n accepted.map(file =>\n getSignedLink(file.fileName)\n .then(url => ({ url, name: file.fileName, size: file.size }))\n .catch(() => null)\n )\n );\n const attachments = signed.filter(Boolean) as UploadedAttachment[];\n\n // Files may have been dropped in while the keys were signing, so re-check the room.\n let added = 0;\n if (attachments.length) {\n commit(prev => {\n const fitting = attachments.slice(0, Math.max(maxFiles - prev.length, 0));\n added = fitting.length;\n\n return [\n ...prev,\n ...fitting.map(attachment => ({ ...toStoredEntry(attachment), id: nextEntryId() })),\n ];\n });\n }\n\n const failed = signed.length - attachments.length;\n const overflow = fresh.length > accepted.length || added < attachments.length;\n onErrorRef.current?.(\n (failed &&\n `Could not attach ${failed === 1 ? 'a file' : `${failed} files`} from Wellhub.`) ||\n (overflow && `You can attach up to ${maxFiles} files.`) ||\n entriesRef.current.find(entry => entry.error)?.error ||\n null\n );\n },\n [commit, maxFiles]\n );\n\n const addFiles = useCallback(\n (files: File[]) => {\n const supported = files.filter(file => isAcceptedType(file, accept));\n const skipped = supported.length < files.length;\n // One banner, one message: report the most actionable reason once, at the end. Reporting\n // as we go would let a later call overwrite an earlier warning on a mixed drop.\n const unsupported = skipped\n ? (files.length === 1 && 'That file type is not supported.') ||\n 'Some files were skipped — unsupported file type.'\n : null;\n const tooMany = `You can attach up to ${maxFiles} files.`;\n\n const room = maxFiles - entriesRef.current.length;\n if (!supported.length || room <= 0) {\n onErrorRef.current?.(supported.length ? tooMany : unsupported);\n return;\n }\n\n const accepted = supported.slice(0, room);\n const added: Entry[] = accepted.map(file => {\n const kind = getFileKind(file);\n const isTooLarge = !!maxSizeBytes && file.size > maxSizeBytes;\n\n return {\n id: nextEntryId(),\n name: file.name,\n file,\n previewUrl: kind === 'file' ? '' : URL.createObjectURL(file),\n isUploading: !isTooLarge,\n error: isTooLarge\n ? `File is too large (${formatMb(file.size)} MB). Maximum size is ${formatMb(\n maxSizeBytes as number\n )} MB.`\n : null,\n uploaded: null,\n };\n });\n\n commit(prev => [...prev, ...added]);\n\n const overflow = supported.length > accepted.length ? tooMany : null;\n onErrorRef.current?.(\n entriesRef.current.find(entry => entry.error)?.error ?? unsupported ?? overflow\n );\n\n added\n .filter(entry => !entry.error)\n .forEach(entry => startUpload(entry.id, entry.file as File));\n },\n [commit, maxFiles, maxSizeBytes, startUpload, accept]\n );\n\n const handleFileSelect = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files ?? []);\n // Reset the input so re-picking the same file still fires a change event.\n if (fileInputRef.current) fileInputRef.current.value = '';\n if (files.length) addFiles(files);\n },\n [addFiles]\n );\n\n const openFileDialog = useCallback(() => fileInputRef.current?.click(), []);\n\n const removeAttachment = useCallback(\n (id: AttachmentPreviewItem['id']) => {\n const key = String(id);\n abortUpload(key);\n releasePreview(entriesRef.current.find(entry => entry.id === key));\n commit(prev => prev.filter(entry => entry.id !== key));\n syncError();\n },\n [abortUpload, releasePreview, commit, syncError]\n );\n\n const handleRetry = useCallback(\n (id: AttachmentPreviewItem['id']) => {\n const key = String(id);\n const entry = entriesRef.current.find(item => item.id === key);\n if (!entry?.file) return;\n\n abortUpload(key);\n patchEntry(key, { isUploading: true, error: null });\n syncError();\n startUpload(key, entry.file);\n },\n [abortUpload, patchEntry, startUpload, syncError]\n );\n\n const reorderAttachments = useCallback(\n (orderedIds: AttachmentPreviewItem['id'][]) =>\n commit(prev => {\n const byId = new Map(prev.map(entry => [entry.id, entry]));\n const reordered = orderedIds.map(id => byId.get(String(id))).filter(Boolean) as Entry[];\n // Unlisted ids (a race with a removal) keep their place at the end.\n const missing = prev.filter(entry => !orderedIds.some(id => String(id) === entry.id));\n return [...reordered, ...missing];\n }),\n [commit]\n );\n\n const clearAttachments = useCallback(() => {\n entriesRef.current.forEach(entry => {\n abortUpload(entry.id);\n releasePreview(entry);\n });\n commit(() => []);\n onErrorRef.current?.(null);\n }, [abortUpload, commit, releasePreview]);\n\n // Adopt a value we didn't produce — an edit form's initial attachments, or a parent-side reset.\n // Compared against what we emitted, not against the current entries: a failed-only or\n // mid-upload list emits `[]` too, and treating that as \"in sync\" would strand those tiles\n // on screen and let a late upload write itself back into freshly reset parent state.\n useEffect(() => {\n if (isSameList(emittedRef.current, value)) return;\n\n entriesRef.current.forEach(entry => {\n abortUpload(entry.id);\n if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);\n });\n entriesRef.current = value.map(toStoredEntry);\n emittedRef.current = value;\n setEntries(entriesRef.current);\n onErrorRef.current?.(null);\n }, [value, abortUpload]);\n\n // A stored url has expired by now, so re-sign it for the preview.\n const [storedSrcs, setStoredSrcs] = useState<Record<string, string>>(() =>\n value.reduce<Record<string, string>>((acc, attachment) => {\n const src = peekSignedLink(attachment.name, 'inline');\n if (src) acc[attachment.name] = src;\n\n return acc;\n }, {})\n );\n const storedSrcsRef = useRef(storedSrcs);\n storedSrcsRef.current = storedSrcs;\n\n const storedNames = entries\n // A linked image carries its own url, so there is no key of ours to sign.\n .filter(entry => !entry.file && !entry.previewUrl && entry.uploaded)\n .map(entry => (entry.uploaded as UploadedAttachment).name)\n .join('|');\n\n useEffect(() => {\n const pending = storedNames.split('|').filter(name => name && !(name in storedSrcsRef.current));\n if (!pending.length) return undefined;\n\n let isActive = true;\n Promise.all(\n pending.map(name =>\n getSignedLink(name, 'inline')\n .then(url => [name, url] as const)\n .catch(error => {\n console.error(`Failed to sign stored attachment \"${name}\"`, error);\n\n return [name, ''] as const;\n })\n )\n ).then(resolved => {\n if (isActive) setStoredSrcs(prev => ({ ...prev, ...Object.fromEntries(resolved) }));\n });\n\n return () => {\n isActive = false;\n };\n }, [storedNames]);\n\n const items = entries.reduce<AttachmentPreviewItem[]>((acc, entry) => {\n if (entry.file) {\n acc.push({\n id: entry.id,\n name: entry.name,\n src: entry.previewUrl,\n kind: getFileKind(entry.file),\n size: entry.file.size,\n isUploading: entry.isUploading,\n hideDownload: true,\n error: entry.error ?? undefined,\n });\n return acc;\n }\n\n const stored = entry.uploaded as UploadedAttachment;\n const kind = getAttachmentKind(stored);\n // A linked image is already a url; only one of ours has an S3 key worth signing.\n const src = entry.previewUrl || storedSrcs[stored.name];\n // A thumbnail without its signed url would paint as a broken image, so hold it back.\n if (kind !== 'file' && !src) return acc;\n\n acc.push({ id: entry.id, name: stored.name, src, kind, size: stored.size, hideDownload: true });\n return acc;\n }, []);\n\n return {\n items,\n fileInputRef,\n openFileDialog,\n handleFileSelect,\n addFiles,\n addLinkedImage,\n addStoredFiles,\n removeAttachment,\n handleRetry,\n reorderAttachments,\n clearAttachments,\n isUploading: entries.some(entry => entry.isUploading),\n error: entries.find(entry => entry.error)?.error ?? null,\n count: entries.length,\n isFull: entries.length >= maxFiles,\n maxFiles,\n };\n};\n"],"names":["getFileKind","file","type","startsWith","formatMb","bytes","toFixed","toStoredEntry","attachment","id","url","name","previewUrl","isUploading","error","uploaded","entrySeq","nextEntryId","concat","_ref","_entries$find$error","_entries$find","value","onChange","onError","maxSizeBytes","_ref$maxFiles","maxFiles","_ref$accept","accept","ACCEPTED_ATTACHMENT_TYPES","useState","_useState2","_slicedToArray","_useState","entries","setEntries","fileInputRef","useRef","uploadersRef","Map","sessionsRef","entriesRef","onChangeRef","onErrorRef","current","emittedRef","commit","useCallback","updater","next","map","entry","filter","Boolean","getUploaded","patchEntry","patch","prev","abortUpload","_uploadersRef$current","_sessionsRef$current$","get","delete","set","releasePreview","URL","revokeObjectURL","syncError","_onErrorRef$current","_entriesRef$current$f","_entriesRef$current$f2","find","useEffect","forEach","uploader","clear","startUpload","_sessionsRef$current$2","session","_onFinishS3Put","_getSignedUrl","isCurrent","fail","message","_onErrorRef$current2","storedKey","S3Upload","files","preprocess","target","onProgress","getSignedUrl","_asyncToGenerator","_regeneratorRuntime","mark","_callee","callback","_data","wrap","_context","getS3SignedUrl","data","sent","file_name","signedUrl","signed_url","t0","stop","_x","_x2","apply","this","arguments","onFinishS3Put","_callee2","_context2","getSignedLink","abrupt","size","addLinkedImage","_onErrorRef$current3","getUrlFileName","length","some","_entry$uploaded","_toConsumableArray","addStoredFiles","_ref2","_onErrorRef$current5","_entriesRef$current$f3","fresh","room","_onErrorRef$current4","accepted","signed","attachments","added","failed","overflow","_context3","index","list","_entry$uploaded2","fileName","findIndex","other","slice","Promise","all","then","catch","fitting","Math","max","_callee3","_x3","addFiles","_onErrorRef$current7","_ref3","_entriesRef$current$f4","_entriesRef$current$f5","supported","split","rule","trim","toLowerCase","endsWith","getAttachmentKind","isAcceptedType","unsupported","tooMany","_onErrorRef$current6","kind","isTooLarge","createObjectURL","handleFileSelect","event","_event$target$files","Array","from","openFileDialog","_fileInputRef$current","click","removeAttachment","key","String","handleRetry","item","reorderAttachments","orderedIds","byId","reordered","missing","clearAttachments","_onErrorRef$current8","_onErrorRef$current9","a","b","every","_useState3","reduce","acc","src","peekSignedLink","_useState4","storedSrcs","setStoredSrcs","storedSrcsRef","storedNames","join","pending","isActive","console","resolved","_objectSpread","Object","fromEntries","items","_entry$error","push","hideDownload","undefined","stored","count","isFull"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useAttachmentUpload.js","sources":["../../../../src/components/CommentComposer/useAttachmentUpload.ts"],"sourcesContent":["import { ChangeEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport S3Upload from 'react-s3-uploader/s3upload';\n\nimport type {\n AttachmentKind,\n AttachmentPreviewItem,\n} from '../AttachmentPreview/AttachmentPreview.types';\nimport { getAttachmentKind } from '../AttachmentPreview/getAttachmentKind';\nimport { ACCEPTED_ATTACHMENT_TYPES } from '../AttachFileButton';\n\nimport { getS3SignedUrl } from '~/clients/jsonApi';\nimport { getUrlFileName } from '~/utils/links';\nimport { getSignedLink, peekSignedLink } from '~/utils/signedLinkCache';\n\nexport type UploadedAttachment = {\n url: string;\n name: string;\n size?: number;\n};\n\ntype UseAttachmentUploadOptions = {\n value: UploadedAttachment[];\n onChange: (attachments: UploadedAttachment[]) => void;\n onError?: (message: string | null) => void;\n maxSizeBytes?: number;\n maxFiles?: number;\n /** Mirrors the file input's `accept`; also gates drag-and-drop. */\n accept?: string;\n};\n\n/** A picked or already-stored file, in the order the user arranged it. */\ntype Entry = {\n id: string;\n name: string;\n /** Set while the file is local; cleared entries come from `value`. */\n file: File | null;\n previewUrl: string;\n isUploading: boolean;\n error: string | null;\n uploaded: UploadedAttachment | null;\n};\n\nexport const DEFAULT_MAX_ATTACHMENTS = 10;\n\n/** Same rules the file input enforces via `accept`, so drag-and-drop can't smuggle a type past it. */\nconst isAcceptedType = (file: File, accept: string) =>\n accept\n .split(',')\n .map(rule => rule.trim().toLowerCase())\n .filter(Boolean)\n .some(rule => {\n if (rule.startsWith('.')) return file.name.toLowerCase().endsWith(rule);\n if (rule.endsWith('/*')) {\n const type = file.type.toLowerCase();\n if (type) return type.startsWith(rule.slice(0, -1));\n\n return getAttachmentKind({ name: file.name }) === rule.slice(0, -1);\n }\n\n return file.type.toLowerCase() === rule;\n });\n\nconst getFileKind = (file: File): AttachmentKind => {\n if (file.type.startsWith('image/')) return 'image';\n if (file.type.startsWith('video/')) return 'video';\n return 'file';\n};\n\nconst formatMb = (bytes: number) => (bytes / (1024 * 1024)).toFixed(1);\n\nconst getUploaded = (entries: Entry[]) =>\n entries.map(entry => entry.uploaded).filter(Boolean) as UploadedAttachment[];\n\nconst isSameList = (a: UploadedAttachment[], b: UploadedAttachment[]) =>\n a.length === b.length && a.every((item, index) => item.url === b[index].url);\n\nconst toStoredEntry = (attachment: UploadedAttachment): Entry => ({\n id: attachment.url,\n name: attachment.name,\n file: null,\n previewUrl: '',\n isUploading: false,\n error: null,\n uploaded: attachment,\n});\n\nlet entrySeq = 0;\nconst nextEntryId = () => {\n entrySeq += 1;\n return `attachment-${entrySeq}`;\n};\n\nexport const useAttachmentUpload = ({\n value,\n onChange,\n onError,\n maxSizeBytes,\n maxFiles = DEFAULT_MAX_ATTACHMENTS,\n accept = ACCEPTED_ATTACHMENT_TYPES,\n}: UseAttachmentUploadOptions) => {\n const [entries, setEntries] = useState<Entry[]>([]);\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n const uploadersRef = useRef(new Map<string, S3Upload>());\n // Bumped per attempt so a superseded upload can't write state for a restarted entry.\n const sessionsRef = useRef(new Map<string, number>());\n // Mutations are driven from async upload callbacks, so the latest list lives in a ref.\n const entriesRef = useRef<Entry[]>([]);\n const onChangeRef = useRef(onChange);\n const onErrorRef = useRef(onError);\n\n onChangeRef.current = onChange;\n onErrorRef.current = onError;\n\n // What we last handed the parent. A `value` that still matches it is our own change echoing\n // back; anything else is a parent-driven reset we must adopt.\n const emittedRef = useRef<UploadedAttachment[]>([]);\n\n const commit = useCallback((updater: (prev: Entry[]) => Entry[]) => {\n const next = updater(entriesRef.current);\n entriesRef.current = next;\n setEntries(next);\n emittedRef.current = getUploaded(next);\n onChangeRef.current(emittedRef.current);\n }, []);\n\n const patchEntry = useCallback(\n (id: string, patch: Partial<Entry>) =>\n commit(prev => prev.map(entry => (entry.id === id ? { ...entry, ...patch } : entry))),\n [commit]\n );\n\n const abortUpload = useCallback((id: string) => {\n uploadersRef.current.get(id)?.abortUpload();\n uploadersRef.current.delete(id);\n // Bump, never delete: deleting would let the next attempt reuse session 1, so a callback\n // still in flight from the aborted attempt would pass `isCurrent` and clobber it.\n sessionsRef.current.set(id, (sessionsRef.current.get(id) ?? 0) + 1);\n }, []);\n\n const releasePreview = useCallback((entry?: Entry) => {\n if (entry?.previewUrl) URL.revokeObjectURL(entry.previewUrl);\n }, []);\n\n // The banner is shared by every tile, so recompute it rather than clear it — one file\n // succeeding must not hide a sibling that is still failing.\n const syncError = useCallback(() => {\n onErrorRef.current?.(entriesRef.current.find(entry => entry.error)?.error ?? null);\n }, []);\n\n useEffect(\n () => () => {\n uploadersRef.current.forEach(uploader => uploader.abortUpload());\n uploadersRef.current.clear();\n entriesRef.current.forEach(entry => {\n if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);\n });\n },\n []\n );\n\n const startUpload = useCallback(\n (id: string, file: File) => {\n const session = (sessionsRef.current.get(id) ?? 0) + 1;\n sessionsRef.current.set(id, session);\n // A superseded upload must not write state for an entry that is gone or restarted.\n const isCurrent = () => sessionsRef.current.get(id) === session;\n\n const fail = (message: string) => {\n if (!isCurrent()) return;\n patchEntry(id, { isUploading: false, error: message });\n onErrorRef.current?.(message);\n };\n\n let storedKey = '';\n\n const uploader = new S3Upload({\n files: [file],\n preprocess: (target: File, next: (file: File) => void) => next(target),\n onProgress: () => {},\n getSignedUrl: async (\n target: File,\n callback: (data: { signedUrl: string; [key: string]: unknown }) => void\n ) => {\n try {\n const data = await getS3SignedUrl(target.name, target.type);\n storedKey = data.file_name;\n callback({ ...data, signedUrl: data.signed_url });\n } catch (e) {\n fail((e as Error)?.message || 'Failed to upload the file');\n }\n },\n onFinishS3Put: async () => {\n try {\n const url = await getSignedLink(storedKey);\n if (!isCurrent()) return;\n\n uploadersRef.current.delete(id);\n patchEntry(id, {\n isUploading: false,\n error: null,\n uploaded: { url, name: storedKey, size: file.size },\n });\n syncError();\n } catch (e) {\n fail((e as Error)?.message || 'Failed to upload the file');\n }\n },\n onError: (message: string) => fail(message || 'Failed to upload the file'),\n });\n\n uploadersRef.current.set(id, uploader);\n },\n [patchEntry, syncError]\n );\n\n /** Nothing is uploaded: a comment attachment is a url, so the link itself is the attachment. */\n const addLinkedImage = useCallback(\n (url: string) => {\n const name = getUrlFileName(url);\n\n if (!name) return;\n if (entriesRef.current.length >= maxFiles) {\n onErrorRef.current?.(`You can attach up to ${maxFiles} files.`);\n\n return;\n }\n\n if (entriesRef.current.some(entry => entry.uploaded?.url === url)) return;\n\n commit(prev => [\n ...prev,\n {\n id: nextEntryId(),\n name,\n file: null,\n previewUrl: url,\n isUploading: false,\n error: null,\n uploaded: { url, name },\n },\n ]);\n },\n [commit, maxFiles]\n );\n\n /** Attaches files already in S3 (e.g. Wellhub picks): nothing to upload, the key is signed. */\n const addStoredFiles = useCallback(\n async (files: { fileName: string; size?: number }[]) => {\n const fresh = files.filter(\n (file, index, list) =>\n !entriesRef.current.some(entry => entry.uploaded?.name === file.fileName) &&\n list.findIndex(other => other.fileName === file.fileName) === index\n );\n if (!fresh.length) return;\n\n const room = maxFiles - entriesRef.current.length;\n if (room <= 0) {\n onErrorRef.current?.(`You can attach up to ${maxFiles} files.`);\n\n return;\n }\n\n const accepted = fresh.slice(0, room);\n const signed = await Promise.all(\n accepted.map(file =>\n getSignedLink(file.fileName)\n .then(url => ({ url, name: file.fileName, size: file.size }))\n .catch(() => null)\n )\n );\n const attachments = signed.filter(Boolean) as UploadedAttachment[];\n\n // Files may have been dropped in while the keys were signing, so re-check the room.\n let added = 0;\n if (attachments.length) {\n commit(prev => {\n const fitting = attachments.slice(0, Math.max(maxFiles - prev.length, 0));\n added = fitting.length;\n\n return [\n ...prev,\n ...fitting.map(attachment => ({ ...toStoredEntry(attachment), id: nextEntryId() })),\n ];\n });\n }\n\n const failed = signed.length - attachments.length;\n const overflow = fresh.length > accepted.length || added < attachments.length;\n onErrorRef.current?.(\n (failed &&\n `Could not attach ${failed === 1 ? 'a file' : `${failed} files`} from Wellhub.`) ||\n (overflow && `You can attach up to ${maxFiles} files.`) ||\n entriesRef.current.find(entry => entry.error)?.error ||\n null\n );\n },\n [commit, maxFiles]\n );\n\n const addFiles = useCallback(\n (files: File[]) => {\n const supported = files.filter(file => isAcceptedType(file, accept));\n const skipped = supported.length < files.length;\n // One banner, one message: report the most actionable reason once, at the end. Reporting\n // as we go would let a later call overwrite an earlier warning on a mixed drop.\n const unsupported = skipped\n ? (files.length === 1 && 'That file type is not supported.') ||\n 'Some files were skipped — unsupported file type.'\n : null;\n const tooMany = `You can attach up to ${maxFiles} files.`;\n\n const room = maxFiles - entriesRef.current.length;\n if (!supported.length || room <= 0) {\n onErrorRef.current?.(supported.length ? tooMany : unsupported);\n return;\n }\n\n const accepted = supported.slice(0, room);\n const added: Entry[] = accepted.map(file => {\n const isTooLarge = !!maxSizeBytes && file.size > maxSizeBytes;\n\n return {\n id: nextEntryId(),\n name: file.name,\n file,\n // Every kind gets an object url: media paints its thumbnail from it, and the\n // lightbox's document viewers read a draft pdf/csv/text through it — without one\n // the preview reports the file as unopenable until the comment is sent.\n previewUrl: URL.createObjectURL(file),\n isUploading: !isTooLarge,\n error: isTooLarge\n ? `File is too large (${formatMb(file.size)} MB). Maximum size is ${formatMb(\n maxSizeBytes as number\n )} MB.`\n : null,\n uploaded: null,\n };\n });\n\n commit(prev => [...prev, ...added]);\n\n const overflow = supported.length > accepted.length ? tooMany : null;\n onErrorRef.current?.(\n entriesRef.current.find(entry => entry.error)?.error ?? unsupported ?? overflow\n );\n\n added\n .filter(entry => !entry.error)\n .forEach(entry => startUpload(entry.id, entry.file as File));\n },\n [commit, maxFiles, maxSizeBytes, startUpload, accept]\n );\n\n const handleFileSelect = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files ?? []);\n // Reset the input so re-picking the same file still fires a change event.\n if (fileInputRef.current) fileInputRef.current.value = '';\n if (files.length) addFiles(files);\n },\n [addFiles]\n );\n\n const openFileDialog = useCallback(() => fileInputRef.current?.click(), []);\n\n const removeAttachment = useCallback(\n (id: AttachmentPreviewItem['id']) => {\n const key = String(id);\n abortUpload(key);\n releasePreview(entriesRef.current.find(entry => entry.id === key));\n commit(prev => prev.filter(entry => entry.id !== key));\n syncError();\n },\n [abortUpload, releasePreview, commit, syncError]\n );\n\n const handleRetry = useCallback(\n (id: AttachmentPreviewItem['id']) => {\n const key = String(id);\n const entry = entriesRef.current.find(item => item.id === key);\n if (!entry?.file) return;\n\n abortUpload(key);\n patchEntry(key, { isUploading: true, error: null });\n syncError();\n startUpload(key, entry.file);\n },\n [abortUpload, patchEntry, startUpload, syncError]\n );\n\n const reorderAttachments = useCallback(\n (orderedIds: AttachmentPreviewItem['id'][]) =>\n commit(prev => {\n const byId = new Map(prev.map(entry => [entry.id, entry]));\n const reordered = orderedIds.map(id => byId.get(String(id))).filter(Boolean) as Entry[];\n // Unlisted ids (a race with a removal) keep their place at the end.\n const missing = prev.filter(entry => !orderedIds.some(id => String(id) === entry.id));\n return [...reordered, ...missing];\n }),\n [commit]\n );\n\n const clearAttachments = useCallback(() => {\n entriesRef.current.forEach(entry => {\n abortUpload(entry.id);\n releasePreview(entry);\n });\n commit(() => []);\n onErrorRef.current?.(null);\n }, [abortUpload, commit, releasePreview]);\n\n // Adopt a value we didn't produce — an edit form's initial attachments, or a parent-side reset.\n // Compared against what we emitted, not against the current entries: a failed-only or\n // mid-upload list emits `[]` too, and treating that as \"in sync\" would strand those tiles\n // on screen and let a late upload write itself back into freshly reset parent state.\n useEffect(() => {\n if (isSameList(emittedRef.current, value)) return;\n\n entriesRef.current.forEach(entry => {\n abortUpload(entry.id);\n if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);\n });\n entriesRef.current = value.map(toStoredEntry);\n emittedRef.current = value;\n setEntries(entriesRef.current);\n onErrorRef.current?.(null);\n }, [value, abortUpload]);\n\n // A stored url has expired by now, so re-sign it for the preview.\n const [storedSrcs, setStoredSrcs] = useState<Record<string, string>>(() =>\n value.reduce<Record<string, string>>((acc, attachment) => {\n const src = peekSignedLink(attachment.name, 'inline');\n if (src) acc[attachment.name] = src;\n\n return acc;\n }, {})\n );\n const storedSrcsRef = useRef(storedSrcs);\n storedSrcsRef.current = storedSrcs;\n\n const storedNames = entries\n // A linked image carries its own url, so there is no key of ours to sign.\n .filter(entry => !entry.file && !entry.previewUrl && entry.uploaded)\n .map(entry => (entry.uploaded as UploadedAttachment).name)\n .join('|');\n\n useEffect(() => {\n const pending = storedNames.split('|').filter(name => name && !(name in storedSrcsRef.current));\n if (!pending.length) return undefined;\n\n let isActive = true;\n Promise.all(\n pending.map(name =>\n getSignedLink(name, 'inline')\n .then(url => [name, url] as const)\n .catch(error => {\n console.error(`Failed to sign stored attachment \"${name}\"`, error);\n\n return [name, ''] as const;\n })\n )\n ).then(resolved => {\n if (isActive) setStoredSrcs(prev => ({ ...prev, ...Object.fromEntries(resolved) }));\n });\n\n return () => {\n isActive = false;\n };\n }, [storedNames]);\n\n const items = entries.reduce<AttachmentPreviewItem[]>((acc, entry) => {\n if (entry.file) {\n acc.push({\n id: entry.id,\n name: entry.name,\n src: entry.previewUrl,\n kind: getFileKind(entry.file),\n size: entry.file.size,\n isUploading: entry.isUploading,\n hideDownload: true,\n error: entry.error ?? undefined,\n });\n return acc;\n }\n\n const stored = entry.uploaded as UploadedAttachment;\n const kind = getAttachmentKind(stored);\n // A linked image is already a url; only one of ours has an S3 key worth signing.\n const src = entry.previewUrl || storedSrcs[stored.name];\n // A thumbnail without its signed url would paint as a broken image, so hold it back.\n if (kind !== 'file' && !src) return acc;\n\n acc.push({ id: entry.id, name: stored.name, src, kind, size: stored.size, hideDownload: true });\n return acc;\n }, []);\n\n return {\n items,\n fileInputRef,\n openFileDialog,\n handleFileSelect,\n addFiles,\n addLinkedImage,\n addStoredFiles,\n removeAttachment,\n handleRetry,\n reorderAttachments,\n clearAttachments,\n isUploading: entries.some(entry => entry.isUploading),\n error: entries.find(entry => entry.error)?.error ?? null,\n count: entries.length,\n isFull: entries.length >= maxFiles,\n maxFiles,\n };\n};\n"],"names":["formatMb","bytes","toFixed","toStoredEntry","attachment","id","url","name","file","previewUrl","isUploading","error","uploaded","entrySeq","nextEntryId","concat","_ref","_entries$find$error","_entries$find","value","onChange","onError","maxSizeBytes","_ref$maxFiles","maxFiles","_ref$accept","accept","ACCEPTED_ATTACHMENT_TYPES","useState","_useState2","_slicedToArray","_useState","entries","setEntries","fileInputRef","useRef","uploadersRef","Map","sessionsRef","entriesRef","onChangeRef","onErrorRef","current","emittedRef","commit","useCallback","updater","next","map","entry","filter","Boolean","getUploaded","patchEntry","patch","prev","abortUpload","_uploadersRef$current","_sessionsRef$current$","get","delete","set","releasePreview","URL","revokeObjectURL","syncError","_onErrorRef$current","_entriesRef$current$f","_entriesRef$current$f2","find","useEffect","forEach","uploader","clear","startUpload","_sessionsRef$current$2","session","_onFinishS3Put","_getSignedUrl","isCurrent","fail","message","_onErrorRef$current2","storedKey","S3Upload","files","preprocess","target","onProgress","getSignedUrl","_asyncToGenerator","_regeneratorRuntime","mark","_callee","callback","_data","wrap","_context","getS3SignedUrl","type","data","sent","file_name","signedUrl","signed_url","t0","stop","_x","_x2","apply","this","arguments","onFinishS3Put","_callee2","_context2","getSignedLink","abrupt","size","addLinkedImage","_onErrorRef$current3","getUrlFileName","length","some","_entry$uploaded","_toConsumableArray","addStoredFiles","_ref2","_onErrorRef$current5","_entriesRef$current$f3","fresh","room","_onErrorRef$current4","accepted","signed","attachments","added","failed","overflow","_context3","index","list","_entry$uploaded2","fileName","findIndex","other","slice","Promise","all","then","catch","fitting","Math","max","_callee3","_x3","addFiles","_onErrorRef$current7","_ref3","_entriesRef$current$f4","_entriesRef$current$f5","supported","split","rule","trim","toLowerCase","startsWith","endsWith","getAttachmentKind","isAcceptedType","unsupported","tooMany","_onErrorRef$current6","isTooLarge","createObjectURL","handleFileSelect","event","_event$target$files","Array","from","openFileDialog","_fileInputRef$current","click","removeAttachment","key","String","handleRetry","item","reorderAttachments","orderedIds","byId","reordered","missing","clearAttachments","_onErrorRef$current8","_onErrorRef$current9","a","b","every","_useState3","reduce","acc","src","peekSignedLink","_useState4","storedSrcs","setStoredSrcs","storedSrcsRef","storedNames","join","pending","isActive","console","resolved","_objectSpread","Object","fromEntries","items","_entry$error","push","kind","hideDownload","undefined","stored","count","isFull"],"mappings":"8xCA0CO,IA0BDA,EAAW,SAACC,GAAa,OAAMA,EAAK,SAAkBC,QAAQ,EAAE,EAQhEC,EAAgB,SAACC,GAA8B,MAAa,CAChEC,GAAID,EAAWE,IACfC,KAAMH,EAAWG,KACjBC,KAAM,KACNC,WAAY,GACZC,aAAa,EACbC,MAAO,KACPC,SAAUR,EACX,EAEGS,EAAW,EACTC,EAAc,WAElB,MAAA,cAAAC,OADAF,GAAY,EAEd,kCAhDuC,+BAkDJ,SAODG,GAAA,IAAAC,EAAAC,EANhCC,IAAAA,MACAC,IAAAA,SACAC,IAAAA,QACAC,IAAAA,aAAYC,EAAAP,EACZQ,SAAAA,aAvDqC,GAuDHD,EAAAE,EAAAT,EAClCU,OAAAA,aAASC,EAAAA,0BAAyBF,EAEJG,EAAAA,EAAQA,SAAU,IAAGC,EAAAC,EAAAA,QAAAC,EAAA,GAA5CC,EAAOH,EAAA,GAAEI,EAAUJ,EAAA,GAEpBK,EAAeC,SAAyB,MACxCC,EAAeD,EAAAA,OAAO,IAAIE,KAE1BC,EAAcH,EAAAA,OAAO,IAAIE,KAEzBE,EAAaJ,SAAgB,IAC7BK,EAAcL,SAAOf,GACrBqB,EAAaN,SAAOd,GAE1BmB,EAAYE,QAAUtB,EACtBqB,EAAWC,QAAUrB,EAIrB,IAAMsB,EAAaR,SAA6B,IAE1CS,EAASC,eAAY,SAACC,GAC1B,IAAMC,EAAOD,EAAQP,EAAWG,SAChCH,EAAWG,QAAUK,EACrBd,EAAWc,GACXJ,EAAWD,QApDK,SAACV,GAAgB,OACnCA,EAAQgB,KAAI,SAAAC,GAAK,OAAIA,EAAMrC,QAAQ,IAAEsC,OAAOC,QAAQ,CAmD7BC,CAAYL,GACjCP,EAAYE,QAAQC,EAAWD,QAChC,GAAE,IAEGW,EAAaR,EAAAA,aACjB,SAACxC,EAAYiD,GAAqB,OAChCV,GAAO,SAAAW,GAAI,OAAIA,EAAKP,KAAI,SAAAC,GAAK,OAAKA,EAAM5C,KAAOA,SAAU4C,GAAUK,GAAUL,CAAK,SACpF,CAACL,IAGGY,EAAcX,eAAY,SAACxC,GAAe,IAAAoD,EAAAC,EAClB,QAA5BtB,EAAAA,EAAaM,QAAQiB,IAAItD,UAAG,IAAAoD,GAA5BA,EAA8BD,cAC9BpB,EAAaM,QAAQkB,OAAOvD,GAG5BiC,EAAYI,QAAQmB,IAAIxD,aAAKiC,EAAYI,QAAQiB,IAAItD,kBAAO,GAAK,EAClE,GAAE,IAEGyD,EAAiBjB,eAAY,SAACI,GAC9BA,SAAAA,EAAOxC,YAAYsD,IAAIC,gBAAgBf,EAAMxC,WAClD,GAAE,IAIGwD,EAAYpB,EAAAA,aAAY,WAAM,IAAAqB,EAAAC,EAAAC,EAChB,QAAlBF,EAAAzB,EAAWC,eAAO,IAAAwB,GAAlBA,OAAAzB,EAAyE,QAA/D0B,EAAW,QAAXC,EAAW7B,EAAWG,QAAQ2B,MAAK,SAAApB,GAAK,OAAIA,EAAMtC,KAAK,WAA5C,IAAAyD,OAAA,EAAAA,EAA+CzD,aAAK,IAAAwD,EAAAA,EAAI,KAC9E,GAAE,IAEHG,EAAAA,WACE,WAAA,OAAM,WACJlC,EAAaM,QAAQ6B,SAAQ,SAAAC,GAAQ,OAAIA,EAAShB,iBAClDpB,EAAaM,QAAQ+B,QACrBlC,EAAWG,QAAQ6B,SAAQ,SAAAtB,GACrBA,EAAMxC,YAAYsD,IAAIC,gBAAgBf,EAAMxC,WAClD,IACD,GACD,IAGF,IAAMiE,EAAc7B,EAAAA,aAClB,SAACxC,EAAYG,GAAe,IAAAmE,EACpBC,GAA0C,QAA/BtC,EAAAA,EAAYI,QAAQiB,IAAItD,UAAO,IAAAsE,EAAAA,EAAA,GAAK,EACrDrC,EAAYI,QAAQmB,IAAIxD,EAAIuE,GAE5B,IA0BiBC,EAZDC,EAdVC,EAAY,WAAH,OAASzC,EAAYI,QAAQiB,IAAItD,KAAQuE,CAAO,EAEzDI,EAAO,SAACC,GAAoB,IAAAC,EAC3BH,MACL1B,EAAWhD,EAAI,CAAEK,aAAa,EAAOC,MAAOsE,IAC1B,QAAlBxC,EAAAA,EAAWC,eAAO,IAAAwC,GAAlBA,OAAAzC,EAAqBwC,KAGnBE,EAAY,GAEVX,EAAW,IAAIY,UAAS,CAC5BC,MAAO,CAAC7E,GACR8E,WAAY,SAACC,EAAcxC,GAA0B,OAAKA,EAAKwC,EAAO,EACtEC,WAAY,WAAQ,EACpBC,cAAcX,EAAAY,EAAAA,QAAAC,EAAA,QAAAC,MAAA,SAAAC,EACZN,EACAO,GAAuE,IAAAC,EAAA,OAAAJ,UAAAK,MAAA,SAAAC,GAAA,OAAA,OAAAA,EAAA1C,KAAA0C,EAAAlD,MAAA,KAAA,EAAA,OAAAkD,EAAA1C,KAAA,EAAA0C,EAAAlD,KAAA,EAGlDmD,EAAcA,eAACX,EAAOhF,KAAMgF,EAAOY,MAAK,KAAA,EAArDC,EAAIH,EAAAI,KACVlB,EAAYiB,EAAKE,UACjBR,SAAcM,GAAI,CAAA,EAAA,CAAEG,UAAWH,EAAKI,cAAcP,EAAAlD,KAAA,GAAA,MAAA,KAAA,EAAAkD,EAAA1C,KAAA,EAAA0C,EAAAQ,GAAAR,EAAA,MAAA,GAElDjB,GAAK,OAAAiB,EAAAQ,SAAA,IAAAR,EAAAQ,QAAA,EAAAR,EAAAQ,GAAcxB,UAAW,6BAA6B,KAAA,GAAA,IAAA,MAAA,OAAAgB,EAAAS,OAAA,GAAAb,EAAA,KAAA,CAAA,CAAA,EAAA,IAE9D,KAAA,SAAAc,EAAAC,GAAA,OAAA9B,EAAA+B,MAAAC,KAAAC,UAAA,GACDC,eAAenC,EAAAa,EAAA,QAAAC,EAAA,QAAAC,MAAA,SAAAqB,IAAA,IAAA3G,EAAA,OAAAqF,UAAAK,MAAA,SAAAkB,GAAA,OAAA,OAAAA,EAAA3D,KAAA2D,EAAAnE,MAAA,KAAA,EAAA,OAAAmE,EAAA3D,KAAA,EAAA2D,EAAAnE,KAAA,EAEOoE,EAAAA,cAAchC,GAAU,KAAA,EAAjC,GAAH7E,EAAG4G,EAAAb,KACJtB,IAAW,CAAAmC,EAAAnE,KAAA,EAAA,KAAA,CAAA,OAAAmE,EAAAE,OAAA,UAAA,KAAA,EAEhBhF,EAAaM,QAAQkB,OAAOvD,GAC5BgD,EAAWhD,EAAI,CACbK,aAAa,EACbC,MAAO,KACPC,SAAU,CAAEN,IAAAA,EAAKC,KAAM4E,EAAWkC,KAAM7G,EAAK6G,QAE/CpD,IAAYiD,EAAAnE,KAAA,GAAA,MAAA,KAAA,GAAAmE,EAAA3D,KAAA,GAAA2D,EAAAT,GAAAS,EAAA,MAAA,GAEZlC,GAAK,OAAAkC,EAAAT,SAAA,IAAAS,EAAAT,QAAA,EAAAS,EAAAT,GAAcxB,UAAW,6BAA6B,KAAA,GAAA,IAAA,MAAA,OAAAiC,EAAAR,OAAA,GAAAO,EAAA,KAAA,CAAA,CAAA,EAAA,KAE9D,KAAA,WAAA,OAAApC,EAAAgC,MAAAC,KAAAC,UAAA,GACD1F,QAAS,SAAC4D,GAAe,OAAKD,EAAKC,GAAW,4BAA4B,IAG5E7C,EAAaM,QAAQmB,IAAIxD,EAAImE,EAC/B,GACA,CAACnB,EAAYY,IAITqD,EAAiBzE,eACrB,SAACvC,GACC,IAG2CiH,EAHrChH,EAAOiH,iBAAelH,GAEvBC,IACDgC,EAAWG,QAAQ+E,QAAUjG,EACb,QAAlBiB,EAAAA,EAAWC,eAAO,IAAA6E,GAAlBA,OAAA9E,EAAU,wBAAA1B,OAAmCS,EAAkB,YAK7De,EAAWG,QAAQgF,MAAK,SAAAzE,GAAK,IAAA0E,EAAA,eAAIA,EAAA1E,EAAMrC,6BAAN+G,EAAgBrH,OAAQA,CAAG,KAEhEsC,GAAO,SAAAW,GAAI,MAAA,GAAAxC,OAAA6G,UACNrE,GACH,CAAA,CACElD,GAAIS,IACJP,KAAAA,EACAC,KAAM,KACNC,WAAYH,EACZI,aAAa,EACbC,MAAO,KACPC,SAAU,CAAEN,IAAAA,EAAKC,KAAAA,KAClB,IAEL,GACA,CAACqC,EAAQpB,IAILqG,EAAiBhF,EAAAA,YAAW,WAAA,IAAAiF,EAAApC,EAAAA,QAAAC,EAAAA,QAAAC,MAChC,WAAOP,GAA4C,IAAA0C,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAA9C,UAAAK,MAAA,SAAA0C,GAAA,OAAA,OAAAA,EAAAnF,KAAAmF,EAAA3F,MAAA,KAAA,EAKhD,GAJKkF,EAAQ5C,EAAMnC,QAClB,SAAC1C,EAAMmI,EAAOC,GAAI,OACfrG,EAAWG,QAAQgF,MAAK,SAAAzE,GAAK,IAAA4F,EAAA,OAAkB,QAAdA,EAAA5F,EAAMrC,gBAAQ,IAAAiI,OAAA,EAAdA,EAAgBtI,QAASC,EAAKsI,QAAQ,KACxEF,EAAKG,WAAU,SAAAC,GAAK,OAAIA,EAAMF,WAAatI,EAAKsI,QAAQ,MAAMH,KAE7DV,EAAMR,OAAM,CAAAiB,EAAA3F,KAAA,EAAA,KAAA,CAAA,OAAA2F,EAAAtB,OAAA,UAAA,KAAA,EAEgC,MAA3Cc,EAAO1G,EAAWe,EAAWG,QAAQ+E,SAC/B,GAAC,CAAAiB,EAAA3F,KAAA,EAAA,KAAA,CACqD,OAA9C,QAAlBN,EAAAA,EAAWC,eAAO,IAAAyF,GAAlBA,OAAA1F,EAAU,wBAAA1B,OAAmCS,EAAkB,YAACkH,EAAAtB,OAAA,UAAA,KAAA,EAK7B,OAA/BgB,EAAWH,EAAMgB,MAAM,EAAGf,GAAKQ,EAAA3F,KAAA,GAChBmG,QAAQC,IAC3Bf,EAASpF,KAAI,SAAAxC,GAAI,OACf2G,EAAAA,cAAc3G,EAAKsI,UAChBM,MAAK,SAAA9I,GAAG,MAAK,CAAEA,IAAAA,EAAKC,KAAMC,EAAKsI,SAAUzB,KAAM7G,EAAK6G,SACpDgC,OAAM,WAAA,OAAM,OAAK,KAEvB,KAAA,GANKhB,EAAMK,EAAArC,KAONiC,EAAcD,EAAOnF,OAAOC,SAG9BoF,EAAQ,EACRD,EAAYb,QACd7E,GAAO,SAAAW,GACL,IAAM+F,EAAUhB,EAAYW,MAAM,EAAGM,KAAKC,IAAIhI,EAAW+B,EAAKkE,OAAQ,IAGtE,OAFAc,EAAQe,EAAQ7B,OAEhB,GAAA1G,OAAA6G,EAAAA,QACKrE,GACA+F,EAAAA,QAAAA,EAAQtG,KAAI,SAAA5C,GAAU,OAAUD,EAAAA,EAAAA,CAAAA,EAAAA,EAAcC,IAAW,GAAA,CAAEC,GAAIS,KAAgB,KAEtF,IAGI0H,EAASH,EAAOZ,OAASa,EAAYb,OACrCgB,EAAWR,EAAMR,OAASW,EAASX,QAAUc,EAAQD,EAAYb,OACrD,QAAlBM,EAAAtF,EAAWC,eAAO,IAAAqF,GAAlBA,EAAAtF,KAAAA,EACG+F,GACqBA,oBAAAA,OAAW,IAAXA,EAAe,SAAQ,GAAAzH,OAAMyH,EAAM,UAAwB,mBAC9EC,GAAQ,wBAAA1H,OAA4BS,EAAkB,aACvD,QADuDwG,EACvDzF,EAAWG,QAAQ2B,MAAK,SAAApB,GAAK,OAAIA,EAAMtC,KAAK,WAA5C,IAAAqH,OAAA,EAAAA,EAA+CrH,QAC/C,MACF,KAAA,GAAA,IAAA,MAAA,OAAA+H,EAAAhC,OAAA,GAAA+C,EACH,KAAA,OAAA,SAAAC,GAAA,OAAA5B,EAAAjB,MAAAC,KAAAC,UAAA,CAAA,CAjD+B,GAkDhC,CAACnE,EAAQpB,IAGLmI,EAAW9G,eACf,SAACwC,GAAkB,IAAAuE,EAAAC,EAAAC,EAAAC,EACXC,EAAY3E,EAAMnC,QAAO,SAAA1C,GAAI,OAjQlB,SAACA,EAAYkB,GAAc,OAChDA,EACGuI,MAAM,KACNjH,KAAI,SAAAkH,GAAI,OAAIA,EAAKC,OAAOC,aAAc,IACtClH,OAAOC,SACPuE,MAAK,SAAAwC,GACJ,GAAIA,EAAKG,WAAW,KAAM,OAAO7J,EAAKD,KAAK6J,cAAcE,SAASJ,GAClE,GAAIA,EAAKI,SAAS,MAAO,CACvB,IAAMnE,EAAO3F,EAAK2F,KAAKiE,cACvB,OAAIjE,EAAaA,EAAKkE,WAAWH,EAAKjB,MAAM,GAAI,IAEzCsB,oBAAkB,CAAEhK,KAAMC,EAAKD,SAAY2J,EAAKjB,MAAM,GAAI,EACnE,CAEA,OAAOzI,EAAK2F,KAAKiE,gBAAkBF,CACrC,GAAE,CAkPuCM,CAAehK,EAAMkB,MAItD+I,EAHUT,EAAUvC,OAASpC,EAAMoC,OAInB,IAAjBpC,EAAMoC,OAAgB,mCACvB,mDACA,KACEiD,EAAkClJ,wBAAAA,OAAAA,EAAiB,WAEnD0G,EAAO1G,EAAWe,EAAWG,QAAQ+E,OAC3C,IAAKuC,EAAUvC,QAAUS,GAAQ,EAAjC,CAAoC,IAAAyC,EAChB,QAAlBA,EAAAlI,EAAWC,eAAO,IAAAiI,GAAlBA,OAAAlI,EAAqBuH,EAAUvC,OAASiD,EAAUD,EAEpD,KAHA,CAKA,IAAMrC,EAAW4B,EAAUf,MAAM,EAAGf,GAC9BK,EAAiBH,EAASpF,KAAI,SAAAxC,GAClC,IAAMoK,IAAetJ,GAAgBd,EAAK6G,KAAO/F,EAEjD,MAAO,CACLjB,GAAIS,IACJP,KAAMC,EAAKD,KACXC,KAAAA,EAIAC,WAAYsD,IAAI8G,gBAAgBrK,GAChCE,aAAckK,EACdjK,MAAOiK,EACmB5K,sBAAAA,OAAAA,EAASQ,EAAK6G,uCAA8BrH,EAChEsB,WAEF,KACJV,SAAU,KAEd,IAEAgC,GAAO,SAAAW,GAAI,MAAQA,GAAAA,OAAAA,EAAAA,QAAAA,aAASgF,GAAK,IAEjC,IAAME,EAAWuB,EAAUvC,OAASW,EAASX,OAASiD,EAAU,KAC9C,QAAlBd,EAAAnH,EAAWC,eAAO,IAAAkH,GAAlBA,OAAAnH,EACqE,QAD3DoH,UAAAC,UAAAC,EACRxH,EAAWG,QAAQ2B,MAAK,SAAApB,GAAK,OAAIA,EAAMtC,KAAK,wBAA5CoJ,EAA+CpJ,qBAAS8J,SAAW,IAAAZ,EAAAA,EAAIpB,GAGzEF,EACGrF,QAAO,SAAAD,GAAK,OAAKA,EAAMtC,KAAK,IAC5B4D,SAAQ,SAAAtB,GAAK,OAAIyB,EAAYzB,EAAM5C,GAAI4C,EAAMzC,QAjChD,CAkCF,GACA,CAACoC,EAAQpB,EAAUF,EAAcoD,EAAahD,IAG1CoJ,EAAmBjI,eACvB,SAACkI,GAAyC,IAAAC,EAClC3F,EAAQ4F,MAAMC,KAAuB,QAAnBF,EAACD,EAAMxF,OAAOF,aAAK,IAAA2F,EAAAA,EAAI,IAE3C9I,EAAaQ,UAASR,EAAaQ,QAAQvB,MAAQ,IACnDkE,EAAMoC,QAAQkC,EAAStE,EAC7B,GACA,CAACsE,IAGGwB,EAAiBtI,EAAAA,aAAY,WAAA,IAAAuI,EAAA,OAAM,QAANA,EAAMlJ,EAAaQ,eAAb,IAAA0I,OAAA,EAAAA,EAAsBC,OAAO,GAAE,IAElEC,EAAmBzI,eACvB,SAACxC,GACC,IAAMkL,EAAMC,OAAOnL,GACnBmD,EAAY+H,GACZzH,EAAevB,EAAWG,QAAQ2B,MAAK,SAAApB,GAAK,OAAIA,EAAM5C,KAAOkL,CAAG,KAChE3I,GAAO,SAAAW,GAAI,OAAIA,EAAKL,QAAO,SAAAD,GAAK,OAAIA,EAAM5C,KAAOkL,QACjDtH,GACD,GACD,CAACT,EAAaM,EAAgBlB,EAAQqB,IAGlCwH,EAAc5I,eAClB,SAACxC,GACC,IAAMkL,EAAMC,OAAOnL,GACb4C,EAAQV,EAAWG,QAAQ2B,MAAK,SAAAqH,GAAI,OAAIA,EAAKrL,KAAOkL,KACrDtI,SAAAA,EAAOzC,OAEZgD,EAAY+H,GACZlI,EAAWkI,EAAK,CAAE7K,aAAa,EAAMC,MAAO,OAC5CsD,IACAS,EAAY6G,EAAKtI,EAAMzC,MACxB,GACD,CAACgD,EAAaH,EAAYqB,EAAaT,IAGnC0H,EAAqB9I,eACzB,SAAC+I,GAAyC,OACxChJ,GAAO,SAAAW,GACL,IAAMsI,EAAO,IAAIxJ,IAAIkB,EAAKP,KAAI,SAAAC,GAAK,MAAI,CAACA,EAAM5C,GAAI4C,EAAM,KAClD6I,EAAYF,EAAW5I,KAAI,SAAA3C,GAAE,OAAIwL,EAAKlI,IAAI6H,OAAOnL,GAAI,IAAE6C,OAAOC,SAE9D4I,EAAUxI,EAAKL,QAAO,SAAAD,GAAK,OAAK2I,EAAWlE,MAAK,SAAArH,GAAE,OAAImL,OAAOnL,KAAQ4C,EAAM5C,SACjF,MAAWyL,GAAAA,OAAAA,EAAAA,QAAAA,aAAcC,GAC3B,MACF,CAACnJ,IAGGoJ,EAAmBnJ,EAAAA,aAAY,WAAM,IAAAoJ,EACzC1J,EAAWG,QAAQ6B,SAAQ,SAAAtB,GACzBO,EAAYP,EAAM5C,IAClByD,EAAeb,EACjB,IACAL,GAAO,WAAA,MAAM,MACK,QAAlBH,EAAAA,EAAWC,eAAO,IAAAuJ,GAAlBA,OAAAxJ,EAAqB,KACtB,GAAE,CAACe,EAAaZ,EAAQkB,IAMzBQ,EAAAA,WAAU,WAAM,IAAA4H,EAvVEC,EAAyBC,GAAzBD,EAwVDxJ,EAAWD,QAxVe0J,EAwVNjL,EAvVrCgL,EAAE1E,SAAW2E,EAAE3E,QAAU0E,EAAEE,OAAM,SAACX,EAAM/C,GAAK,OAAK+C,EAAKpL,MAAQ8L,EAAEzD,GAAOrI,UAyVtEiC,EAAWG,QAAQ6B,SAAQ,SAAAtB,GACzBO,EAAYP,EAAM5C,IACd4C,EAAMxC,YAAYsD,IAAIC,gBAAgBf,EAAMxC,WAClD,IACA8B,EAAWG,QAAUvB,EAAM6B,IAAI7C,GAC/BwC,EAAWD,QAAUvB,EACrBc,EAAWM,EAAWG,SACJ,QAAlBD,EAAAA,EAAWC,eAAO,IAAAwJ,GAAlBA,OAAAzJ,EAAqB,MACvB,GAAG,CAACtB,EAAOqC,IAGX,IAAA8I,EAAoC1K,EAAAA,UAAiC,WAAA,OACnET,EAAMoL,QAA+B,SAACC,EAAKpM,GACzC,IAAMqM,EAAMC,EAAcA,eAACtM,EAAWG,KAAM,UAG5C,OAFIkM,IAAKD,EAAIpM,EAAWG,MAAQkM,GAEzBD,CACR,GAAE,CAAE,MACNG,EAAA7K,EAAAA,QAAAwK,EAAA,GAPMM,GAAUD,EAAA,GAAEE,GAAaF,EAAA,GAQ1BG,GAAgB3K,SAAOyK,IAC7BE,GAAcpK,QAAUkK,GAExB,IAAMG,GAAc/K,EAEjBkB,QAAO,SAAAD,GAAK,OAAKA,EAAMzC,OAASyC,EAAMxC,YAAcwC,EAAMrC,QAAQ,IAClEoC,KAAI,SAAAC,GAAK,OAAKA,EAAMrC,SAAgCL,IAAI,IACxDyM,KAAK,KAoDR,OAlDA1I,EAAAA,WAAU,WACR,IAAM2I,EAAUF,GAAY9C,MAAM,KAAK/G,QAAO,SAAA3C,GAAI,OAAIA,KAAUA,KAAQuM,GAAcpK,YACtF,GAAKuK,EAAQxF,OAAb,CAEA,IAAIyF,GAAW,EAef,OAdAhE,QAAQC,IACN8D,EAAQjK,KAAI,SAAAzC,GAAI,OACd4G,EAAAA,cAAc5G,EAAM,UACjB6I,MAAK,SAAA9I,GAAG,MAAI,CAACC,EAAMD,EAAI,IACvB+I,OAAM,SAAA1I,GAGL,OAFAwM,QAAQxM,MAAK,qCAAAI,OAAsCR,EAAI,KAAKI,GAErD,CAACJ,EAAM,GAChB,GAAE,KAEN6I,MAAK,SAAAgE,GACDF,GAAUL,IAAc,SAAAtJ,GAAI,OAAA8J,EAAAA,EAAA,GAAU9J,GAAS+J,OAAOC,YAAYH,GAAS,GACjF,IAEO,WACLF,GAAW,EAlBwB,CAoBvC,GAAG,CAACH,KA4BG,CACLS,MA3BYxL,EAAQuK,QAAgC,SAACC,EAAKvJ,GAC1C,IAAAwK,EA1ZCjN,EA0ZjB,GAAIyC,EAAMzC,KAWR,OAVAgM,EAAIkB,KAAK,CACPrN,GAAI4C,EAAM5C,GACVE,KAAM0C,EAAM1C,KACZkM,IAAKxJ,EAAMxC,WACXkN,MA/ZanN,EA+ZKyC,EAAMzC,KA9Z1BA,EAAK2F,KAAKkE,WAAW,UAAkB,QACvC7J,EAAK2F,KAAKkE,WAAW,UAAkB,QACpC,QA6ZDhD,KAAMpE,EAAMzC,KAAK6G,KACjB3G,YAAauC,EAAMvC,YACnBkN,cAAc,EACdjN,MAAsBkN,QAAf5K,EAAAA,EAAMtC,aAASkN,IAAAA,EAAAA,OAAAA,IAEjBrB,EAGT,IAAMsB,EAAS7K,EAAMrC,SACf+M,EAAOpD,oBAAkBuD,GAEzBrB,EAAMxJ,EAAMxC,YAAcmM,GAAWkB,EAAOvN,MAElD,MAAa,SAAToN,GAAoBlB,GAExBD,EAAIkB,KAAK,CAAErN,GAAI4C,EAAM5C,GAAIE,KAAMuN,EAAOvN,KAAMkM,IAAAA,EAAKkB,KAAAA,EAAMtG,KAAMyG,EAAOzG,KAAMuG,cAAc,IACjFpB,GAH6BA,CAIrC,GAAE,IAIDtK,aAAAA,EACAiJ,eAAAA,EACAL,iBAAAA,EACAnB,SAAAA,EACArC,eAAAA,EACAO,eAAAA,EACAyD,iBAAAA,EACAG,YAAAA,EACAE,mBAAAA,EACAK,iBAAAA,EACAtL,YAAasB,EAAQ0F,MAAK,SAAAzE,GAAK,OAAIA,EAAMvC,eACzCC,MAAgD,UAAzC,UAAAqB,EAAQqC,MAAK,SAAApB,GAAK,OAAIA,EAAMtC,KAAK,WAAjC,IAAAO,OAAA,EAAAA,EAAoCP,aAAK,IAAAM,EAAAA,EAAI,KACpD8M,MAAO/L,EAAQyF,OACfuG,OAAQhM,EAAQyF,QAAUjG,EAC1BA,SAAAA,EAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),s=require("@babel/runtime/helpers/slicedToArray"),i=require("react"),n=require("lodash"),o=require("@material-ui/core"),r=require("@material-ui/icons"),t=require("../../../../EmptyState/EmptyState.js"),c=require("../../utils.js"),u=require("./components/RemoveAppButton.js"),a=require("./components/SettingsAccordion.js"),l=require("./styles.js");require("@babel/runtime/helpers/objectWithoutProperties"),require("@material-ui/pickers"),require("@date-io/moment"),require("moment"),require("../../../../../config/theme/index.js");var p=require("react/jsx-runtime"),d=require("../../../../../hocs/withAssetEditorLockHOC.js"),m=require("../../../../ErrorBoundary/ErrorBoundary.js"),j=require("../../../../ErrorBoundary/DevCenterAppErrorView/DevCenterAppErrorView.js"),q=require("../../../../Button/components/Button/index.js");require("moment-timezone"),require("classnames"),require("../../../../Button/components/LiveButton/components/LiveButtonStateIndicator/index.js"),require("../../../../Button/components/LiveButton/styles.js"),require("@icon-park/react/es/all"),require("../../../../../icons/IconParkProvider.js"),require("../../../../../icons/customIcons/icons/AddMessage.js"),require("../../../../../icons/customIcons/icons/DragOne.js"),require("../../../../../icons/customIcons/icons/Attention.js"),require("../../../../../icons/customIcons/icons/Collapse.js"),require("../../../../../icons/customIcons/icons/Dashboard.js"),require("../../../../../icons/customIcons/icons/Expand.js"),require("../../../../../icons/customIcons/icons/FolderClosed.js"),require("../../../../../icons/customIcons/icons/FolderClosedFilled.js"),require("../../../../../icons/customIcons/icons/FolderOpened.js"),require("../../../../../icons/customIcons/icons/GreaterOrEqual.js"),require("../../../../../icons/customIcons/icons/LessOrEqual.js"),require("../../../../../icons/customIcons/icons/Search.js"),require("../../../../../icons/customIcons/icons/SearchOne.js"),require("../../../../../icons/customIcons/icons/Wellhub.js"),require("../../../../../icons/customIcons/icons/MultiRuler.js"),require("../../../../../icons/customIcons/icons/Checkbox.js"),require("../../../../../icons/customIcons/icons/CheckboxChecked.js"),require("../../../../../icons/customIcons/icons/CheckboxIndeterminate.js"),require("../../../../../icons/customIcons/icons/Radio.js"),require("../../../../../icons/customIcons/icons/RadioChecked.js"),require("../../../../../icons/customIcons/icons/SimulFrac.js"),require("../../../../../icons/customIcons/icons/ZipperFrac.js"),require("../../../../../icons/customIcons/icons/CautionFilled.js"),require("../../../../../icons/customIcons/icons/InfoRounded.js"),require("../../../../../icons/customIcons/icons/FlameFilled.js"),require("../../../../../icons/customIcons/icons/MoreApp.js"),require("../../../../../icons/customIcons/icons/Pad.js"),require("../../../../../icons/customIcons/icons/DrilloutUnit.js"),require("../../../../../icons/customIcons/icons/FracFleet.js"),require("../../../../../icons/customIcons/icons/Global.js"),require("../../../../../icons/customIcons/icons/Program.js"),require("../../../../../icons/customIcons/icons/Rig.js"),require("../../../../../icons/customIcons/icons/Well.js"),require("../../../../../icons/customIcons/icons/Gap.js"),require("../../../../../icons/customIcons/icons/Pin.js"),require("../../../../../icons/customIcons/icons/PinOne.js"),require("../../../../../icons/customIcons/icons/PinOneCrossed.js"),require("../../../../../icons/customIcons/icons/CloseOneFilled.js"),require("../../../../../icons/customIcons/icons/AttentionFilled.js"),require("../../../../../icons/customIcons/icons/CheckOneFilled.js"),require("../../../../../icons/customIcons/icons/Archive.js"),require("../../../../../icons/customIcons/icons/ArchiveCancel.js"),require("../../../../../icons/customIcons/icons/Unarchive.js"),require("../../../../../icons/customIcons/icons/Archived.js"),require("../../../../../icons/customIcons/icons/InterventionUnit.js"),require("../../../../../icons/customIcons/icons/CloudDelete.js"),require("../../../../../icons/customIcons/icons/Lasso.js"),require("../../../../../icons/customIcons/icons/Radius.js"),require("../../../../../icons/customIcons/icons/ErrorOps.js"),require("../../../../../icons/customIcons/icons/DataTypeOps.js"),require("../../../../../icons/customIcons/icons/FalsePositiveOps.js"),require("../../../../../icons/customIcons/icons/CalibrationOps.js"),require("../../../../../icons/customIcons/icons/CriticalOps.js"),require("../../../../../icons/customIcons/icons/Company.js"),require("../../../../../icons/customIcons/icons/ArchiveOne.js"),require("../../../../../icons/customIcons/icons/ParseBotFusion.js"),require("../../../../../icons/customIcons/icons/Connect.js"),require("../../../../../icons/customIcons/icons/PuzzleOne.js"),require("../../../../../icons/customIcons/icons/Feed.js"),require("../../../../../icons/customIcons/icons/Prompt.js"),require("../../../../../icons/customIcons/icons/Companies.js"),require("../../../../../icons/customIcons/icons/ClipboardAi.js"),require("../../../../../icons/customIcons/icons/Key.js"),require("../../../../../icons/customIcons/icons/AtSignCrossed.js"),require("../../../../../icons/customIcons/icons/MappingManual.js"),require("../../../../../icons/customIcons/icons/Mapping.js"),require("../../../../../icons/customIcons/icons/Metrics.js"),require("../../../../../icons/customIcons/icons/Drops.js"),require("../../../../../icons/customIcons/icons/ClipboardSearch.js"),require("../../../../../icons/customIcons/icons/Template.js"),require("../../../../../icons/customIcons/icons/ClipboardMetrics.js"),require("../../../../../icons/customIcons/icons/ClipboardBuilder.js"),require("../../../../../icons/customIcons/icons/UnitConversion.js"),require("../../../../../icons/customIcons/icons/NPT.js"),require("../../../../../icons/customIcons/icons/GuidedFrac.js");var I=require("../../../../Modal/Modal.js"),v=require("../../../../../constants/devcenter.js");require("../../../../../constants/goals.js");var g=require("../../../../../constants/segment.js");require("../../../../../constants/alerts.js"),require("../../../../../constants/apps.js"),require("../../../../../constants/drillstring.js"),require("../../../../../constants/completion.js"),require("../../../../../constants/appPackages.js"),require("../../../../../constants/notifications.js"),require("../../../../../constants/feed.js"),require("../../../../../constants/bha.js");var f=require("../../../../../constants/assetTypes.js");require("../../../../../constants/corvaCompanyId.js"),require("../../../../GradientManager/configuration/constants.js");var h=require("../../../../AssetEditorV2/index.js"),S=require("../../../../AppVersionsSelect/AppVersionsSelect.js"),C=require("../../../../DisabledSettingsMessage/DisabledSettingsMessage.js"),b=require("../../../../ConfirmationDialog.js");require("../../../../UserMention/utils/index.js"),require("../../../../../utils/convert.js"),require("@babel/runtime/helpers/asyncToGenerator"),require("@babel/runtime/regenerator"),require("../../../../../utils/casing/validation.js"),require("lodash/mean"),require("../../../../../constants/streamSourceType.js"),require("lodash/get"),require("file-saver");var y=require("../../../../../utils/devcenter.js");require("../../../../../utils/drillstring/conversion.js"),require("lodash/set"),require("lodash/cloneDeep"),require("@babel/runtime/helpers/toConsumableArray"),require("lodash/isNumber"),require("lodash/has"),require("../../../../../utils/ga.js"),require("../../../../../utils/goalsConfig/goalsConfig.js"),require("../../../../../utils/lasParser.js"),require("../../../../../utils/main.js"),require("../../../../../utils/metrics/metricsConfig.js");var A=require("../../../../../utils/mobileDetect.js");require("../../../../../utils/feed.js"),require("../../../../../utils/reports.js");var x=require("../../../../../utils/notificationToasts.js");require("@babel/runtime/helpers/typeof"),require("../../../../../utils/dashboardReports.js"),require("../../../../../utils/env.js"),require("file-extension"),require("image-extensions"),require("video-extensions"),require("../../../../../utils/jsonaDataFormatter.js"),require("../../../../../utils/bha.js"),require("jsona"),require("../../../../../clients/jsonApi/index.js"),require("../../../../../utils/charts/Styles.scss.js"),require("../../../../../utils/getSingleAsset.js");var O=require("../../../../AppIcon/AppIcon.js"),E=require("../../../../../permissions/usePermissions.js"),P=require("../../../../../permissions/constants/index.js");require("../../../../../permissions/withPermissionsHOC.js"),require("../../../../../permissions/ProvidePermissions.js"),require("../../../../../permissions/PermissionsContext.js");var k=require("../../../../../componentsV2/HideInNativeApp/index.js"),D=require("../../../../../componentsV2/AppHeader/V3/VersionSelect/VersionSelect.constants.js");function N(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var M=N(e),T=N(s);function R(e,s){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),i.push.apply(i,n)}return i}function w(e){for(var s=1;s<arguments.length;s++){var i=null!=arguments[s]?arguments[s]:{};s%2?R(Object(i),!0).forEach((function(s){M.default(e,s,i[s])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):R(Object(i)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(i,s))}))}return e}var F="DC_appSettings",B=function(){return null},V=d(h),_=h,G=C,L=g.SEGMENT_TO_ASSET_TYPE,H=function(){return null};exports.PAGE_NAME=F,exports.default=function(e){var s,d,h,C,N,R,U=e.AppSettingsComponent,z=void 0===U?H:U,W=e.app,K=e.appData,Y=e.appName,Z=e.currentUser,J=e.disableAppAssetSelection,Q=void 0!==J&&J,X=e.isMultiRig,$=e.isSettingsDialogHidden,ee=void 0!==$&&$,se=e.layoutEnvironment,ie=e.onAppRemove,ne=e.onCloneDashboard,oe=void 0===ne?n.noop:ne,re=e.onSettingsChange,te=e.openIntercom,ce=e.rigId,ue=e.toggleAppSettingsDialog,ae=y.getAppSegment(W),le=i.useState("string"==typeof ae?ae:g.SEGMENTS.DRILLING),pe=T.default(le,2),de=pe[0],me=pe[1],je=i.useState(!1),qe=T.default(je,2),Ie=qe[0],ve=qe[1],ge=i.useState(!0),fe=T.default(ge,2),he=fe[0],Se=fe[1],Ce=i.useState(""),be=T.default(Ce,2),ye=be[0],Ae=be[1],xe=i.useState((function(){var e,s,i=n.cloneDeep(null!==(e=W.settings)&&void 0!==e?e:{}),o="string"==typeof i.package?i.package:void 0,r="string"==typeof(null===(s=W.package)||void 0===s?void 0:s.version)?W.package.version:void 0;return w(w({},i),{},{package:o||r})})),Oe=T.default(xe,2),Ee=Oe[0],Pe=Oe[1],ke=i.useRef(ce),De=i.useRef(null),Ne=i.useRef(null),Me=E([P.PERMISSIONS.getCanReadAppPackages(W.app.id)]),Te=T.default(Me,1)[0],Re=Te.active,we=Te.loading,Fe=Array.isArray(W.segment)?W.segment.filter((function(e){return"string"==typeof e})):[],Be=Fe.length>1,Ve=de===g.SEGMENTS.COMPLETION,_e=L[de],Ge="asset"===(null==se?void 0:se.type),Le=W.id===v.DEV_CENTER_CLI_APP_ID,He=c.getIsSustainabilityApp(null==W||null===(s=W.app)||void 0===s?void 0:s.id),Ue=!(Q||A.isInsideNewMobileApp||X||Ge&&Ve),ze=!A.isInsideNewMobileApp&&!ee&&!!ie,We=we||Re||Boolean(null===(d=De.current)||void 0===d?void 0:d.clientHeight),Ke=Boolean(null===(h=Ne.current)||void 0===h?void 0:h.clientHeight),Ye=We&&Ke,Ze=Ge?V:_,Je="string"==typeof W.app.app_key?W.app.app_key:null,Qe="string"==typeof Ee.package?Ee.package:void 0,Xe=l.useStyles({isCompletionApp:Ve,isSustainabilityApp:He,isAccordionRequired:Ye,isRemoveButtonVisible:ze}),$e=function(e,s){return Pe((function(i){return w(w({},i),{},M.default({},e,s))}))},es=function(e){return Pe((function(s){return w(w({},s),e)}))};i.useEffect((function(){he||Se(!0)}),[he]),i.useEffect((function(){n.debounce(ve,200)(!0)}),[]);var ss=p.jsxs("div",{className:Xe.modalTitleContainer,children:[p.jsx(O.AppIcon,{className:Xe.appIcon,segment:[de],iconUrl:null==W||null===(C=W.app)||void 0===C||null===(N=C.icon)||void 0===N?void 0:N.url,height:48,width:48}),p.jsxs("div",{children:[p.jsx("div",{children:"".concat(Y," Settings")}),p.jsx(k.HideInNativeApp,{children:p.jsxs("div",{"data-testid":"".concat(F,"_appstoreLink"),className:Xe.appStoreButton,onClick:function(){var e,s;return window.open((s=null==W||null===(e=W.app)||void 0===e?void 0:e.id,"/app-store/app/".concat(s)),"_top")},children:["Open in Appstore ",p.jsx(r.ArrowForward,{className:Xe.arrowIcon})]})})]})]}),is=p.jsxs("div",{className:Xe.modalActions,children:[ze&&p.jsx(u.default,{appName:Y,onAppRemove:ie}),p.jsxs("div",{children:[p.jsx(q,{"data-testid":"".concat(F,"_cancel"),variation:"secondary",onClick:ue,children:"Cancel"}),ee&&p.jsx(q,{variation:"primary",onClick:function(){return oe()},children:"Copy Dashboard"}),!ee&&p.jsx(q,{"data-testid":"".concat(F,"_save"),className:Xe.saveButton,variation:"primary",onClick:function(){if(Ee.package||Le){if(Ue&&!Ge){var e,s,i,n,o=null==_e||null===(e=_e.primaryAsset)||void 0===e||null===(s=e.assetType)||void 0===s?void 0:s.id,r=null==_e||null===(i=_e.primaryAsset)||void 0===i||null===(n=i.assetType)||void 0===n?void 0:n.label;if(o&&!Ee[o])return void Ae("Please select ".concat(r))}re(Ee),x.showSuccessNotification("Successfully saved"),ue()}else Ae("Please select app version")},children:"Save"})]})]});return p.jsx(I,{actions:is,closeIconClassName:Xe.closeIcon,contentContainerClassName:Xe.modalContainer,modalTitleClassName:Xe.modalTitle,onClose:ue,open:!0,title:ss,children:p.jsxs(m,{ErrorView:j,openIntercom:te,children:[p.jsx(b,{open:!!ye,isShowCancel:!1,title:"Validation failed",text:ye,handleOk:function(){return Ae("")},classes:{confirmation:Xe.confirmationText}}),ee&&p.jsx(G,{}),!ee&&Ie&&!Ke&&!We&&p.jsx(t,{image:t.IMAGES.UnderConstruction,title:"No app settings"}),!ee&&p.jsxs(p.Fragment,{children:[p.jsxs(a.SettingsAccordion,{defaultExpanded:!0,className:Xe.assetAccordion,accordionDetailsRef:De,isAccordionRequired:Ye,summary:"Asset",children:[Be&&p.jsxs(o.FormControl,{className:Xe.segmentSelector,children:[p.jsx(o.InputLabel,{children:"Segment"}),p.jsx(o.Select,{value:de,onChange:function(e){var s=String(e.target.value);ke.current=null,Se(!1),me(s),Pe(w(w({package:Ee.package,segment:s},n.mapValues(n.keyBy(f.ASSET_TYPES,"id"),(function(){return null}))),{},{assets:null}))},children:Fe.map((function(e){return p.jsx(o.MenuItem,{className:Xe.segmentMenuItem,value:e,children:e},e)}))})]}),Ue&&he&&p.jsx(Ze,{appKey:Le?null:Je,appType:_e,defaultValue:ke.current,secondaryDefaultValue:+(null==K||null===(R=K.well)||void 0===R?void 0:R.id),isHiddenTitle:!0,isNullable:Ge,label:"Asset",onSettingsChange:es,settings:Ee}),p.jsx(S.default,{className:Xe.appVersionSelect,appId:W.app.id,value:Qe,onChange:function(e,s,i){return i&&D.isReact18Host()?es({package:e,react18AutoSwitchDisabled:!0}):$e("package",e)}})]}),p.jsx(m,{ErrorView:B,openIntercom:te,children:p.jsx(a.SettingsAccordion,{accordionDetailsRef:Ne,className:Xe.accordion,defaultExpanded:!0,isAccordionRequired:Ye,summary:"App Settings",children:z&&p.jsx(z,{app:W,appData:K,settings:Ee,onSettingChange:$e,onSettingsChange:es,layoutEnvironment:se,currentUser:Z})})})]})]})})};
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),s=require("@babel/runtime/helpers/slicedToArray"),i=require("react"),n=require("lodash"),o=require("@material-ui/core"),r=require("@material-ui/icons"),t=require("../../../../EmptyState/EmptyState.js"),c=require("../../utils.js"),u=require("./components/RemoveAppButton.js"),a=require("./components/SettingsAccordion.js"),l=require("./styles.js");require("@babel/runtime/helpers/objectWithoutProperties"),require("@material-ui/pickers"),require("@date-io/moment"),require("moment"),require("../../../../../config/theme/index.js");var p=require("react/jsx-runtime"),d=require("../../../../../hocs/withAssetEditorLockHOC.js"),m=require("../../../../ErrorBoundary/ErrorBoundary.js"),j=require("../../../../ErrorBoundary/DevCenterAppErrorView/DevCenterAppErrorView.js"),q=require("../../../../Button/components/Button/index.js");require("moment-timezone"),require("classnames"),require("../../../../Button/components/LiveButton/components/LiveButtonStateIndicator/index.js"),require("../../../../Button/components/LiveButton/styles.js"),require("@icon-park/react/es/all"),require("../../../../../icons/IconParkProvider.js"),require("../../../../../icons/customIcons/icons/AddMessage.js"),require("../../../../../icons/customIcons/icons/DragOne.js"),require("../../../../../icons/customIcons/icons/Attention.js"),require("../../../../../icons/customIcons/icons/Collapse.js"),require("../../../../../icons/customIcons/icons/Dashboard.js"),require("../../../../../icons/customIcons/icons/Expand.js"),require("../../../../../icons/customIcons/icons/FolderClosed.js"),require("../../../../../icons/customIcons/icons/FolderClosedFilled.js"),require("../../../../../icons/customIcons/icons/FolderOpened.js"),require("../../../../../icons/customIcons/icons/GreaterOrEqual.js"),require("../../../../../icons/customIcons/icons/LessOrEqual.js"),require("../../../../../icons/customIcons/icons/Search.js"),require("../../../../../icons/customIcons/icons/SearchOne.js"),require("../../../../../icons/customIcons/icons/Wellhub.js"),require("../../../../../icons/customIcons/icons/MultiRuler.js"),require("../../../../../icons/customIcons/icons/Checkbox.js"),require("../../../../../icons/customIcons/icons/CheckboxChecked.js"),require("../../../../../icons/customIcons/icons/CheckboxIndeterminate.js"),require("../../../../../icons/customIcons/icons/Radio.js"),require("../../../../../icons/customIcons/icons/RadioChecked.js"),require("../../../../../icons/customIcons/icons/SimulFrac.js"),require("../../../../../icons/customIcons/icons/ZipperFrac.js"),require("../../../../../icons/customIcons/icons/CautionFilled.js"),require("../../../../../icons/customIcons/icons/InfoRounded.js"),require("../../../../../icons/customIcons/icons/FlameFilled.js"),require("../../../../../icons/customIcons/icons/MoreApp.js"),require("../../../../../icons/customIcons/icons/Pad.js"),require("../../../../../icons/customIcons/icons/DrilloutUnit.js"),require("../../../../../icons/customIcons/icons/FracFleet.js"),require("../../../../../icons/customIcons/icons/Global.js"),require("../../../../../icons/customIcons/icons/Program.js"),require("../../../../../icons/customIcons/icons/Rig.js"),require("../../../../../icons/customIcons/icons/Well.js"),require("../../../../../icons/customIcons/icons/Gap.js"),require("../../../../../icons/customIcons/icons/Pin.js"),require("../../../../../icons/customIcons/icons/PinOne.js"),require("../../../../../icons/customIcons/icons/PinOneCrossed.js"),require("../../../../../icons/customIcons/icons/CloseOneFilled.js"),require("../../../../../icons/customIcons/icons/AttentionFilled.js"),require("../../../../../icons/customIcons/icons/CheckOneFilled.js"),require("../../../../../icons/customIcons/icons/Archive.js"),require("../../../../../icons/customIcons/icons/ArchiveCancel.js"),require("../../../../../icons/customIcons/icons/Unarchive.js"),require("../../../../../icons/customIcons/icons/Archived.js"),require("../../../../../icons/customIcons/icons/InterventionUnit.js"),require("../../../../../icons/customIcons/icons/CloudDelete.js"),require("../../../../../icons/customIcons/icons/Lasso.js"),require("../../../../../icons/customIcons/icons/Radius.js"),require("../../../../../icons/customIcons/icons/ErrorOps.js"),require("../../../../../icons/customIcons/icons/DataTypeOps.js"),require("../../../../../icons/customIcons/icons/FalsePositiveOps.js"),require("../../../../../icons/customIcons/icons/CalibrationOps.js"),require("../../../../../icons/customIcons/icons/CriticalOps.js"),require("../../../../../icons/customIcons/icons/Company.js"),require("../../../../../icons/customIcons/icons/ArchiveOne.js"),require("../../../../../icons/customIcons/icons/ParseBotFusion.js"),require("../../../../../icons/customIcons/icons/Connect.js"),require("../../../../../icons/customIcons/icons/PuzzleOne.js"),require("../../../../../icons/customIcons/icons/Feed.js"),require("../../../../../icons/customIcons/icons/Prompt.js"),require("../../../../../icons/customIcons/icons/Companies.js"),require("../../../../../icons/customIcons/icons/ClipboardAi.js"),require("../../../../../icons/customIcons/icons/Key.js"),require("../../../../../icons/customIcons/icons/AtSignCrossed.js"),require("../../../../../icons/customIcons/icons/MappingManual.js"),require("../../../../../icons/customIcons/icons/Mapping.js"),require("../../../../../icons/customIcons/icons/Metrics.js"),require("../../../../../icons/customIcons/icons/Drops.js"),require("../../../../../icons/customIcons/icons/ClipboardSearch.js"),require("../../../../../icons/customIcons/icons/Template.js"),require("../../../../../icons/customIcons/icons/ClipboardMetrics.js"),require("../../../../../icons/customIcons/icons/ClipboardBuilder.js"),require("../../../../../icons/customIcons/icons/UnitConversion.js"),require("../../../../../icons/customIcons/icons/NPT.js"),require("../../../../../icons/customIcons/icons/GuidedFrac.js");var I=require("../../../../Modal/Modal.js"),v=require("../../../../../constants/devcenter.js");require("../../../../../constants/goals.js");var g=require("../../../../../constants/segment.js");require("../../../../../constants/alerts.js"),require("../../../../../constants/apps.js"),require("../../../../../constants/drillstring.js"),require("../../../../../constants/completion.js"),require("../../../../../constants/appPackages.js"),require("../../../../../constants/notifications.js"),require("../../../../../constants/feed.js"),require("../../../../../constants/bha.js");var f=require("../../../../../constants/assetTypes.js");require("../../../../../constants/corvaCompanyId.js"),require("../../../../GradientManager/configuration/constants.js");var h=require("../../../../AssetEditorV2/index.js"),S=require("../../../../AppVersionsSelect/AppVersionsSelect.js"),C=require("../../../../DisabledSettingsMessage/DisabledSettingsMessage.js"),b=require("../../../../ConfirmationDialog.js");require("../../../../UserMention/utils/index.js"),require("../../../../../utils/convert.js"),require("@babel/runtime/helpers/asyncToGenerator"),require("@babel/runtime/regenerator"),require("../../../../../utils/casing/validation.js"),require("lodash/mean"),require("../../../../../constants/streamSourceType.js"),require("lodash/get"),require("file-saver");var y=require("../../../../../utils/devcenter.js");require("../../../../../utils/drillstring/conversion.js"),require("lodash/set"),require("lodash/cloneDeep"),require("@babel/runtime/helpers/toConsumableArray"),require("lodash/isNumber"),require("lodash/has"),require("../../../../../utils/ga.js"),require("../../../../../utils/goalsConfig/goalsConfig.js"),require("../../../../../utils/lasParser.js"),require("../../../../../utils/main.js"),require("../../../../../utils/metrics/metricsConfig.js");var A=require("../../../../../utils/mobileDetect.js");require("../../../../../utils/feed.js"),require("../../../../../utils/reports.js");var x=require("../../../../../utils/notificationToasts.js");require("@babel/runtime/helpers/typeof"),require("../../../../../utils/dashboardReports.js"),require("../../../../../utils/env.js"),require("file-extension"),require("image-extensions"),require("video-extensions"),require("../../../../../utils/jsonaDataFormatter.js"),require("../../../../../utils/bha.js"),require("jsona"),require("../../../../../clients/jsonApi/index.js"),require("../../../../../utils/charts/Styles.scss.js"),require("../../../../../utils/getSingleAsset.js");var O=require("../../../../AppIcon/AppIcon.js"),E=require("../../../../../permissions/usePermissions.js"),P=require("../../../../../permissions/constants/index.js");require("../../../../../permissions/withPermissionsHOC.js"),require("../../../../../permissions/ProvidePermissions.js"),require("../../../../../permissions/PermissionsContext.js");var k=require("../../../../../componentsV2/HideInNativeApp/index.js"),D=require("../../../../../componentsV2/AppHeader/V3/VersionSelect/VersionSelect.constants.js");function N(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var M=N(e),T=N(s);function R(e,s){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),i.push.apply(i,n)}return i}function w(e){for(var s=1;s<arguments.length;s++){var i=null!=arguments[s]?arguments[s]:{};s%2?R(Object(i),!0).forEach((function(s){M.default(e,s,i[s])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):R(Object(i)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(i,s))}))}return e}var F="DC_appSettings",B=function(){return null},V=d(h),_=C,G=g.SEGMENT_TO_ASSET_TYPE,L=function(){return null};exports.PAGE_NAME=F,exports.default=function(e){var s,d,C,N,R,H,U=e.AppSettingsComponent,z=void 0===U?L:U,W=e.app,K=e.appData,Y=e.appName,Z=e.currentUser,J=e.disableAppAssetSelection,Q=void 0!==J&&J,X=e.isMultiRig,$=e.isSettingsDialogHidden,ee=void 0!==$&&$,se=e.layoutEnvironment,ie=e.onAppRemove,ne=e.onCloneDashboard,oe=void 0===ne?n.noop:ne,re=e.onSettingsChange,te=e.openIntercom,ce=e.rigId,ue=e.toggleAppSettingsDialog,ae=y.getAppSegment(W),le=i.useState("string"==typeof ae?ae:g.SEGMENTS.DRILLING),pe=T.default(le,2),de=pe[0],me=pe[1],je=i.useState(!1),qe=T.default(je,2),Ie=qe[0],ve=qe[1],ge=i.useState(!0),fe=T.default(ge,2),he=fe[0],Se=fe[1],Ce=i.useState(""),be=T.default(Ce,2),ye=be[0],Ae=be[1],xe=i.useState((function(){var e,s,i=n.cloneDeep(null!==(e=W.settings)&&void 0!==e?e:{}),o="string"==typeof i.package?i.package:void 0,r="string"==typeof(null===(s=W.package)||void 0===s?void 0:s.version)?W.package.version:void 0;return w(w({},i),{},{package:o||r})})),Oe=T.default(xe,2),Ee=Oe[0],Pe=Oe[1],ke=i.useRef(ce),De=i.useRef(null),Ne=i.useRef(null),Me=E([P.PERMISSIONS.getCanReadAppPackages(W.app.id)]),Te=T.default(Me,1)[0],Re=Te.active,we=Te.loading,Fe=Array.isArray(W.segment)?W.segment.filter((function(e){return"string"==typeof e})):[],Be=Fe.length>1,Ve=de===g.SEGMENTS.COMPLETION,_e=G[de],Ge="asset"===(null==se?void 0:se.type),Le=W.id===v.DEV_CENTER_CLI_APP_ID,He=c.getIsSustainabilityApp(null==W||null===(s=W.app)||void 0===s?void 0:s.id),Ue=!(Q||A.isInsideNewMobileApp||X||Ge&&Ve),ze=!A.isInsideNewMobileApp&&!ee&&!!ie,We=we||Re||Boolean(null===(d=De.current)||void 0===d?void 0:d.clientHeight),Ke=Boolean(null===(C=Ne.current)||void 0===C?void 0:C.clientHeight),Ye=We&&Ke,Ze=Ge?V:h,Je="string"==typeof W.app.app_key?W.app.app_key:null,Qe="string"==typeof Ee.package?Ee.package:void 0,Xe=l.useStyles({isCompletionApp:Ve,isSustainabilityApp:He,isAccordionRequired:Ye,isRemoveButtonVisible:ze}),$e=function(e,s){return Pe((function(i){return w(w({},i),{},M.default({},e,s))}))},es=function(e){return Pe((function(s){return w(w({},s),e)}))};i.useEffect((function(){he||Se(!0)}),[he]),i.useEffect((function(){n.debounce(ve,200)(!0)}),[]);var ss=p.jsxs("div",{className:Xe.modalTitleContainer,children:[p.jsx(O.AppIcon,{className:Xe.appIcon,segment:[de],iconUrl:null==W||null===(N=W.app)||void 0===N||null===(R=N.icon)||void 0===R?void 0:R.url,height:48,width:48}),p.jsxs("div",{children:[p.jsx("div",{children:"".concat(Y," Settings")}),p.jsx(k.HideInNativeApp,{children:p.jsxs("div",{"data-testid":"".concat(F,"_appstoreLink"),className:Xe.appStoreButton,onClick:function(){var e,s;return window.open((s=null==W||null===(e=W.app)||void 0===e?void 0:e.id,"/app-store/app/".concat(s)),"_top")},children:["Open in Appstore ",p.jsx(r.ArrowForward,{className:Xe.arrowIcon})]})})]})]}),is=p.jsxs("div",{className:Xe.modalActions,children:[ze&&p.jsx(u.default,{appName:Y,onAppRemove:ie}),p.jsxs("div",{children:[p.jsx(q,{"data-testid":"".concat(F,"_cancel"),variation:"secondary",onClick:ue,children:"Cancel"}),ee&&p.jsx(q,{variation:"primary",onClick:function(){return oe()},children:"Copy Dashboard"}),!ee&&p.jsx(q,{"data-testid":"".concat(F,"_save"),className:Xe.saveButton,variation:"primary",onClick:function(){if(Ee.package||Le){if(Ue&&!Ge){var e,s,i,n,o=null==_e||null===(e=_e.primaryAsset)||void 0===e||null===(s=e.assetType)||void 0===s?void 0:s.id,r=null==_e||null===(i=_e.primaryAsset)||void 0===i||null===(n=i.assetType)||void 0===n?void 0:n.label;if(o&&!Ee[o])return void Ae("Please select ".concat(r))}re(Ee),x.showSuccessNotification("Successfully saved"),ue()}else Ae("Please select app version")},children:"Save"})]})]});return p.jsx(I,{actions:is,closeIconClassName:Xe.closeIcon,contentContainerClassName:Xe.modalContainer,modalTitleClassName:Xe.modalTitle,onClose:ue,open:!0,title:ss,children:p.jsxs(m,{ErrorView:j,openIntercom:te,children:[p.jsx(b,{open:!!ye,isShowCancel:!1,title:"Validation failed",text:ye,handleOk:function(){return Ae("")},classes:{confirmation:Xe.confirmationText}}),ee&&p.jsx(_,{}),!ee&&Ie&&!Ke&&!We&&p.jsx(t,{image:t.IMAGES.UnderConstruction,title:"No app settings"}),!ee&&p.jsxs(p.Fragment,{children:[p.jsxs(a.SettingsAccordion,{defaultExpanded:!0,className:Xe.assetAccordion,accordionDetailsRef:De,isAccordionRequired:Ye,summary:"Asset",children:[Be&&p.jsxs(o.FormControl,{className:Xe.segmentSelector,children:[p.jsx(o.InputLabel,{children:"Segment"}),p.jsx(o.Select,{value:de,onChange:function(e){var s=String(e.target.value);ke.current=null,Se(!1),me(s),Pe(w(w({package:Ee.package,segment:s},n.mapValues(n.keyBy(f.ASSET_TYPES,"id"),(function(){return null}))),{},{assets:null}))},children:Fe.map((function(e){return p.jsx(o.MenuItem,{className:Xe.segmentMenuItem,value:e,children:e},e)}))})]}),Ue&&he&&_e&&p.jsx(Ze,{appKey:Le?null:Je,appType:_e,defaultValue:ke.current,secondaryDefaultValue:+(null==K||null===(H=K.well)||void 0===H?void 0:H.id),isHiddenTitle:!0,isNullable:Ge,label:"Asset",onSettingsChange:es,settings:Ee}),p.jsx(S.default,{className:Xe.appVersionSelect,appId:W.app.id,value:Qe,onChange:function(e,s,i){return i&&D.isReact18Host()?es({package:e,react18AutoSwitchDisabled:!0}):$e("package",e)}})]}),p.jsx(m,{ErrorView:B,openIntercom:te,children:p.jsx(a.SettingsAccordion,{accordionDetailsRef:Ne,className:Xe.accordion,defaultExpanded:!0,isAccordionRequired:Ye,summary:"App Settings",children:z&&p.jsx(z,{app:W,appData:K,settings:Ee,onSettingChange:$e,onSettingsChange:es,layoutEnvironment:se,currentUser:Z})})})]})]})})};
|
|
2
2
|
//# sourceMappingURL=AppSettingsDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppSettingsDialog.js","sources":["../../../../../../../src/components/DevCenter/DevCenterAppContainer/components/AppSettingsDialog/AppSettingsDialog.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport type { ComponentType, FC, ReactNode } from 'react';\nimport { cloneDeep, debounce, keyBy, mapValues, noop } from 'lodash';\nimport { FormControl, InputLabel, MenuItem, Select } from '@material-ui/core';\nimport type { SelectProps } from '@material-ui/core/Select';\nimport { ArrowForward as ArrowIcon } from '@material-ui/icons';\n\nimport EmptyState from '../../../../EmptyState';\nimport type {\n AppDataEntry,\n DevCenterAppResource,\n DevCenterCurrentUser,\n LayoutEnvironment,\n} from '../../types';\nimport { getIsSustainabilityApp } from '../../utils';\n\nimport { RemoveAppButton, SettingsAccordion } from './components';\nimport { useStyles } from './styles';\n\nimport { withAssetEditorLockHOC } from '~/hocs';\nimport ErrorBoundary, { DevCenterAppErrorView } from '~/components/ErrorBoundary';\nimport Button from '~/components/Button';\nimport Modal from '~/components/Modal';\nimport { ASSET_TYPES, DEV_CENTER_CLI_APP_ID } from '~/constants';\nimport AssetEditor from '~/components/AssetEditorV2';\nimport AppVersionsSelect from '~/components/AppVersionsSelect';\nimport { DisabledSettingsMessage } from '~/components/DisabledSettingsMessage';\nimport ConfirmationDialog from '~/components/ConfirmationDialog';\nimport { SEGMENT_TO_ASSET_TYPE, SEGMENTS } from '~/constants/segment';\nimport { showSuccessNotification } from '~/utils';\nimport AppIcon from '~/components/AppIcon';\nimport { getAppSegment } from '~/utils/devcenter';\nimport { PERMISSIONS, usePermissions } from '~/permissions';\nimport { isInsideNewMobileApp } from '~/utils/mobileDetect';\nimport { HideInNativeApp } from '~/componentsV2/HideInNativeApp';\n// [REACT-18-MIGRATION-TAG] PLT-3099\nimport { isReact18Host } from '~/componentsV2/AppHeader/V3/VersionSelect/VersionSelect.constants';\n\nexport const PAGE_NAME = 'DC_appSettings';\n\nconst getAppPageUrl = (appId: number | string | undefined): string => `/app-store/app/${appId}`;\n\nconst AppSettingsErrorView = () => null;\n\nexport type AppSettings = {\n package?: string | null;\n padId?: number | string | null;\n segment?: string;\n} & Record<string, unknown>;\n\nexport type AppSettingsComponentProps = {\n app: DevCenterAppResource;\n appData: AppDataEntry;\n currentUser: DevCenterCurrentUser;\n layoutEnvironment?: LayoutEnvironment | null;\n onSettingChange: (name: string, value: unknown) => void;\n onSettingsChange: (settings: AppSettings) => void;\n settings: AppSettings;\n};\n\nexport type AppSettingsDialogProps = {\n AppSettingsComponent?: ComponentType<AppSettingsComponentProps> | null;\n app: DevCenterAppResource;\n appData: AppDataEntry;\n appName: string;\n currentUser: DevCenterCurrentUser;\n disableAppAssetSelection?: boolean;\n isMultiRig: boolean;\n isSettingsDialogHidden?: boolean;\n layoutEnvironment?: LayoutEnvironment | null;\n onAppRemove?: () => void;\n onCloneDashboard?: () => void;\n onSettingsChange: (settings: AppSettings) => void;\n openIntercom?: () => void;\n rigId?: number | string | null;\n toggleAppSettingsDialog: () => void;\n};\n\ntype AssetEditorAppType = {\n primaryAsset?: {\n assetType?: {\n id?: string;\n label?: string;\n };\n };\n};\n\ntype AssetEditorProps = {\n appKey: string | null;\n appType: AssetEditorAppType | undefined;\n defaultValue: number | string | null | undefined;\n secondaryDefaultValue: number;\n isHiddenTitle: boolean;\n isNullable: boolean;\n label: string;\n onSettingsChange: (settings: AppSettings) => void;\n settings: AppSettings;\n};\n\n/*\n * AS-KEEP — JavaScript boundary.\n *\n * `AssetEditorV2` and `DisabledSettingsMessage` are still `.js`. TypeScript infers their props\n * from `propTypes` alone and never reads `defaultProps`, so every defaulted prop comes back\n * required and the inferred type has no overlap with the subset this dialog supplies. Nothing\n * lower on the ladder reaches it: there is no value to narrow, no predicate to write, and\n * widening the contract would mean hand-writing a `.d.ts` for a module that is itself queued for\n * migration. The assertions stay here, at the boundary, and describe exactly what this dialog\n * passes — `AssetEditorProps` below is the real contract, checked at every call site.\n *\n * Delete both once `AssetEditorV2/index.js` and `DisabledSettingsMessage.js` are TypeScript.\n */\nconst AssetEditorWithLock = withAssetEditorLockHOC(AssetEditor) as ComponentType<AssetEditorProps>;\n// TS cannot convert this one directly: with `defaultProps` ignored, the inferred type keeps\n// props this dialog never passes, so neither side overlaps. `unknown` is the only route.\nconst TypedAssetEditor = AssetEditor as unknown as ComponentType<AssetEditorProps>;\nconst OptionalDisabledSettingsMessage = DisabledSettingsMessage as ComponentType<{\n onCloneDashboard?: () => void;\n}>;\n\nconst ASSET_EDITOR_TYPES_BY_SEGMENT: Record<string, AssetEditorAppType> = SEGMENT_TO_ASSET_TYPE;\n\nconst DEFAULT_APP_SETTINGS_COMPONENT: ComponentType<AppSettingsComponentProps> = () => null;\n\nconst AppSettingsDialog: FC<AppSettingsDialogProps> = ({\n AppSettingsComponent = DEFAULT_APP_SETTINGS_COMPONENT,\n app,\n appData,\n appName,\n currentUser,\n disableAppAssetSelection = false,\n isMultiRig,\n isSettingsDialogHidden = false,\n layoutEnvironment,\n onAppRemove,\n onCloneDashboard = noop,\n onSettingsChange,\n openIntercom,\n rigId,\n toggleAppSettingsDialog,\n}) => {\n const initialSegment = getAppSegment(app);\n\n const [appSegmentSetting, setAppSegmentSetting] = useState<string>(\n typeof initialSegment === 'string' ? initialSegment : SEGMENTS.DRILLING\n );\n const [isMounted, setIsMounted] = useState(false);\n const [isAssetSelectorRendered, setIsAssetSelectorRendered] = useState(true);\n const [validationError, setValidationError] = useState('');\n const [appSettings, setAppSettings] = useState<AppSettings>(() => {\n const settings: AppSettings = cloneDeep(app.settings ?? {});\n const settingsPackage = typeof settings.package === 'string' ? settings.package : undefined;\n const packageVersion =\n typeof app.package?.version === 'string' ? app.package.version : undefined;\n\n return {\n ...settings,\n package: settingsPackage || packageVersion,\n };\n });\n\n // NOTE: Keep in ref to have a way to reset default value\n // of asset selector when changing app segment\n const defaultRigId = useRef<number | string | null | undefined>(rigId);\n const platformAppSettingsRef = useRef<HTMLDivElement | null>(null);\n const customAppSettingsRef = useRef<HTMLDivElement | null>(null);\n\n const [{ active: canReadAppPackages, loading: isPermissionsLoading }] = usePermissions([\n PERMISSIONS.getCanReadAppPackages(app.app.id),\n ]);\n\n const appSegments = Array.isArray(app.segment)\n ? app.segment.filter((segment): segment is string => typeof segment === 'string')\n : [];\n const hasSegmentSelector = appSegments.length > 1;\n const isCompletionSegment = appSegmentSetting === SEGMENTS.COMPLETION;\n const assetEditorAppType = ASSET_EDITOR_TYPES_BY_SEGMENT[appSegmentSetting];\n const isAssetPage = layoutEnvironment?.type === 'asset';\n const isCLIApp = app.id === DEV_CENTER_CLI_APP_ID;\n const isSustainabilityApp = getIsSustainabilityApp(app?.app?.id);\n\n const isAssetSelectorVisible =\n !disableAppAssetSelection &&\n !isInsideNewMobileApp &&\n !isMultiRig &&\n !(isAssetPage && isCompletionSegment);\n const isRemoveButtonVisible = !isInsideNewMobileApp && !isSettingsDialogHidden && !!onAppRemove;\n\n const hasPlatformAppSettings =\n isPermissionsLoading ||\n canReadAppPackages ||\n Boolean(platformAppSettingsRef.current?.clientHeight);\n const hasCustomAppSettings = Boolean(customAppSettingsRef.current?.clientHeight);\n const isAccordionRequired = hasPlatformAppSettings && hasCustomAppSettings;\n\n const AssetEditorComponent = isAssetPage ? AssetEditorWithLock : TypedAssetEditor;\n const appKey = typeof app.app.app_key === 'string' ? app.app.app_key : null;\n const selectedPackage = typeof appSettings.package === 'string' ? appSettings.package : undefined;\n\n const styles = useStyles({\n isCompletionApp: isCompletionSegment,\n isSustainabilityApp,\n isAccordionRequired,\n isRemoveButtonVisible,\n });\n\n const handleChangeAppSegment: SelectProps['onChange'] = event => {\n const nextSegment = String(event.target.value);\n\n defaultRigId.current = null;\n setIsAssetSelectorRendered(false);\n\n setAppSegmentSetting(nextSegment);\n setAppSettings({\n package: appSettings.package,\n segment: nextSegment,\n // NOTE: we need to reset asset ids when segment is changed\n ...mapValues(keyBy(ASSET_TYPES, 'id'), () => null),\n assets: null,\n });\n };\n\n const handleAppSettingChange = (name: string, value: unknown) =>\n setAppSettings(prevSettings => ({\n ...prevSettings,\n [name]: value,\n }));\n\n const handleAppSettingsChange = (newSettings: AppSettings) =>\n setAppSettings(prevSettings => ({ ...prevSettings, ...newSettings }));\n\n const handleSave = () => {\n if (!appSettings.package && !isCLIApp) {\n setValidationError('Please select app version');\n return;\n }\n\n if (isAssetSelectorVisible && !isAssetPage) {\n const appTypeKey = assetEditorAppType?.primaryAsset?.assetType?.id;\n const appTypeLabel = assetEditorAppType?.primaryAsset?.assetType?.label;\n\n if (appTypeKey && !appSettings[appTypeKey]) {\n setValidationError(`Please select ${appTypeLabel}`);\n return;\n }\n }\n\n onSettingsChange(appSettings);\n showSuccessNotification('Successfully saved');\n toggleAppSettingsDialog();\n };\n\n const handleAppVersionChange = (value: string, _appPackage: unknown, isUserChange: boolean) =>\n // [REACT-18-MIGRATION-TAG] PLT-3099: a genuine user pick on a React-18 host opts the app out\n // of the auto-switch; the auto-preselect must not (isUserChange).\n isUserChange && isReact18Host()\n ? handleAppSettingsChange({ package: value, react18AutoSwitchDisabled: true })\n : handleAppSettingChange('package', value);\n\n useEffect(() => {\n if (!isAssetSelectorRendered) setIsAssetSelectorRendered(true);\n }, [isAssetSelectorRendered]);\n\n useEffect(() => {\n const debouncedSetIsMounted = debounce(setIsMounted, 200);\n debouncedSetIsMounted(true);\n }, []);\n\n const modalTitle: ReactNode = (\n <div className={styles.modalTitleContainer}>\n <AppIcon\n className={styles.appIcon}\n segment={[appSegmentSetting]}\n iconUrl={app?.app?.icon?.url}\n height={48}\n width={48}\n />\n <div>\n <div>{`${appName} Settings`}</div>\n <HideInNativeApp>\n <div\n data-testid={`${PAGE_NAME}_appstoreLink`}\n className={styles.appStoreButton}\n onClick={() => window.open(getAppPageUrl(app?.app?.id), '_top')}\n >\n Open in Appstore <ArrowIcon className={styles.arrowIcon} />\n </div>\n </HideInNativeApp>\n </div>\n </div>\n );\n\n const modalActions = (\n <div className={styles.modalActions}>\n {isRemoveButtonVisible && <RemoveAppButton appName={appName} onAppRemove={onAppRemove} />}\n <div>\n <Button\n data-testid={`${PAGE_NAME}_cancel`}\n variation=\"secondary\"\n onClick={toggleAppSettingsDialog}\n >\n Cancel\n </Button>\n {isSettingsDialogHidden && (\n <Button variation=\"primary\" onClick={() => onCloneDashboard()}>\n Copy Dashboard\n </Button>\n )}\n {!isSettingsDialogHidden && (\n <Button\n data-testid={`${PAGE_NAME}_save`}\n className={styles.saveButton}\n variation=\"primary\"\n onClick={handleSave}\n >\n Save\n </Button>\n )}\n </div>\n </div>\n );\n\n return (\n <Modal\n actions={modalActions}\n closeIconClassName={styles.closeIcon}\n contentContainerClassName={styles.modalContainer}\n modalTitleClassName={styles.modalTitle}\n onClose={toggleAppSettingsDialog}\n open\n title={modalTitle}\n >\n <ErrorBoundary ErrorView={DevCenterAppErrorView} openIntercom={openIntercom}>\n <ConfirmationDialog\n open={!!validationError}\n isShowCancel={false}\n title=\"Validation failed\"\n text={validationError}\n handleOk={() => setValidationError('')}\n classes={{ confirmation: styles.confirmationText }}\n />\n {isSettingsDialogHidden && <OptionalDisabledSettingsMessage />}\n {!isSettingsDialogHidden &&\n isMounted &&\n !hasCustomAppSettings &&\n !hasPlatformAppSettings && (\n <EmptyState image={EmptyState.IMAGES.UnderConstruction} title=\"No app settings\" />\n )}\n {!isSettingsDialogHidden && (\n <>\n <SettingsAccordion\n defaultExpanded\n className={styles.assetAccordion}\n accordionDetailsRef={platformAppSettingsRef}\n isAccordionRequired={isAccordionRequired}\n summary=\"Asset\"\n >\n {hasSegmentSelector && (\n <FormControl className={styles.segmentSelector}>\n <InputLabel>Segment</InputLabel>\n <Select value={appSegmentSetting} onChange={handleChangeAppSegment}>\n {appSegments.map(segmentItem => (\n <MenuItem\n className={styles.segmentMenuItem}\n key={segmentItem}\n value={segmentItem}\n >\n {segmentItem}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )}\n {isAssetSelectorVisible && isAssetSelectorRendered && (\n <AssetEditorComponent\n appKey={isCLIApp ? null : appKey}\n appType={assetEditorAppType}\n defaultValue={defaultRigId.current}\n secondaryDefaultValue={+appData?.well?.id}\n isHiddenTitle\n isNullable={isAssetPage}\n label=\"Asset\"\n onSettingsChange={handleAppSettingsChange}\n settings={appSettings}\n />\n )}\n <AppVersionsSelect\n className={styles.appVersionSelect}\n appId={app.app.id}\n value={selectedPackage}\n onChange={handleAppVersionChange}\n />\n </SettingsAccordion>\n <ErrorBoundary ErrorView={AppSettingsErrorView} openIntercom={openIntercom}>\n <SettingsAccordion\n accordionDetailsRef={customAppSettingsRef}\n className={styles.accordion}\n defaultExpanded\n isAccordionRequired={isAccordionRequired}\n summary=\"App Settings\"\n >\n {AppSettingsComponent && (\n <AppSettingsComponent\n app={app}\n appData={appData}\n settings={appSettings}\n onSettingChange={handleAppSettingChange}\n onSettingsChange={handleAppSettingsChange}\n layoutEnvironment={layoutEnvironment}\n currentUser={currentUser}\n />\n )}\n </SettingsAccordion>\n </ErrorBoundary>\n </>\n )}\n </ErrorBoundary>\n </Modal>\n );\n};\n\nexport default AppSettingsDialog;\n"],"names":["PAGE_NAME","AppSettingsErrorView","AssetEditorWithLock","withAssetEditorLockHOC","AssetEditor","TypedAssetEditor","OptionalDisabledSettingsMessage","DisabledSettingsMessage","ASSET_EDITOR_TYPES_BY_SEGMENT","SEGMENT_TO_ASSET_TYPE","DEFAULT_APP_SETTINGS_COMPONENT","_ref","_app$app","_platformAppSettingsR","_customAppSettingsRef","_app$app2","_app$app2$icon","_appData$well","_ref$AppSettingsCompo","AppSettingsComponent","app","appData","appName","currentUser","_ref$disableAppAssetS","disableAppAssetSelection","isMultiRig","_ref$isSettingsDialog","isSettingsDialogHidden","layoutEnvironment","onAppRemove","_ref$onCloneDashboard","onCloneDashboard","noop","onSettingsChange","openIntercom","rigId","toggleAppSettingsDialog","initialSegment","getAppSegment","_useState","useState","SEGMENTS","DRILLING","_useState2","_slicedToArray","appSegmentSetting","setAppSegmentSetting","_useState4","_useState3","isMounted","setIsMounted","_useState6","_useState5","isAssetSelectorRendered","setIsAssetSelectorRendered","_useState8","_useState7","validationError","setValidationError","_app$settings","_app$package","settings","cloneDeep","settingsPackage","package","undefined","packageVersion","version","_objectSpread","_useState10","_useState9","appSettings","setAppSettings","defaultRigId","useRef","platformAppSettingsRef","customAppSettingsRef","_usePermissions","usePermissions","PERMISSIONS","getCanReadAppPackages","id","_usePermissions2$","canReadAppPackages","active","isPermissionsLoading","loading","appSegments","Array","isArray","segment","filter","hasSegmentSelector","length","isCompletionSegment","COMPLETION","assetEditorAppType","isAssetPage","type","isCLIApp","DEV_CENTER_CLI_APP_ID","isSustainabilityApp","getIsSustainabilityApp","isAssetSelectorVisible","isInsideNewMobileApp","isRemoveButtonVisible","hasPlatformAppSettings","Boolean","current","clientHeight","hasCustomAppSettings","isAccordionRequired","AssetEditorComponent","appKey","app_key","selectedPackage","styles","useStyles","isCompletionApp","handleAppSettingChange","name","value","prevSettings","_defineProperty","handleAppSettingsChange","newSettings","useEffect","debounce","debouncedSetIsMounted","modalTitle","_jsxs","jsxs","className","modalTitleContainer","children","_jsx","AppIcon","appIcon","iconUrl","icon","url","height","width","jsx","concat","HideInNativeApp","appStoreButton","onClick","_app$app3","appId","window","open","ArrowIcon","arrowIcon","modalActions","RemoveAppButton","Button","variation","saveButton","_assetEditorAppType$p","_assetEditorAppType$p2","_assetEditorAppType$p3","_assetEditorAppType$p4","appTypeKey","primaryAsset","assetType","appTypeLabel","label","showSuccessNotification","Modal","actions","closeIconClassName","closeIcon","contentContainerClassName","modalContainer","modalTitleClassName","onClose","title","ErrorBoundary","ErrorView","DevCenterAppErrorView","ConfirmationDialog","isShowCancel","text","handleOk","classes","confirmation","confirmationText","EmptyState","image","IMAGES","UnderConstruction","_Fragment","SettingsAccordion","defaultExpanded","assetAccordion","accordionDetailsRef","summary","FormControl","segmentSelector","InputLabel","Select","onChange","event","nextSegment","String","target","mapValues","keyBy","ASSET_TYPES","assets","map","segmentItem","MenuItem","segmentMenuItem","appType","defaultValue","secondaryDefaultValue","well","isHiddenTitle","isNullable","AppVersionsSelect","appVersionSelect","_appPackage","isUserChange","isReact18Host","react18AutoSwitchDisabled","accordion","onSettingChange"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AppSettingsDialog.js","sources":["../../../../../../../src/components/DevCenter/DevCenterAppContainer/components/AppSettingsDialog/AppSettingsDialog.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport type { ComponentType, FC, ReactNode } from 'react';\nimport { cloneDeep, debounce, keyBy, mapValues, noop } from 'lodash';\nimport { FormControl, InputLabel, MenuItem, Select } from '@material-ui/core';\nimport type { SelectProps } from '@material-ui/core/Select';\nimport { ArrowForward as ArrowIcon } from '@material-ui/icons';\n\nimport EmptyState from '../../../../EmptyState';\nimport type {\n AppDataEntry,\n DevCenterAppResource,\n DevCenterCurrentUser,\n LayoutEnvironment,\n} from '../../types';\nimport { getIsSustainabilityApp } from '../../utils';\n\nimport { RemoveAppButton, SettingsAccordion } from './components';\nimport { useStyles } from './styles';\n\nimport { withAssetEditorLockHOC } from '~/hocs';\nimport ErrorBoundary, { DevCenterAppErrorView } from '~/components/ErrorBoundary';\nimport Button from '~/components/Button';\nimport Modal from '~/components/Modal';\nimport { ASSET_TYPES, DEV_CENTER_CLI_APP_ID } from '~/constants';\nimport AssetEditor, { AssetEditorAppType } from '~/components/AssetEditorV2';\nimport AppVersionsSelect from '~/components/AppVersionsSelect';\nimport { DisabledSettingsMessage } from '~/components/DisabledSettingsMessage';\nimport ConfirmationDialog from '~/components/ConfirmationDialog';\nimport { SEGMENT_TO_ASSET_TYPE, SEGMENTS } from '~/constants/segment';\nimport { showSuccessNotification } from '~/utils';\nimport AppIcon from '~/components/AppIcon';\nimport { getAppSegment } from '~/utils/devcenter';\nimport { PERMISSIONS, usePermissions } from '~/permissions';\nimport { isInsideNewMobileApp } from '~/utils/mobileDetect';\nimport { HideInNativeApp } from '~/componentsV2/HideInNativeApp';\n// [REACT-18-MIGRATION-TAG] PLT-3099\nimport { isReact18Host } from '~/componentsV2/AppHeader/V3/VersionSelect/VersionSelect.constants';\n\nexport const PAGE_NAME = 'DC_appSettings';\n\nconst getAppPageUrl = (appId: number | string | undefined): string => `/app-store/app/${appId}`;\n\nconst AppSettingsErrorView = () => null;\n\nexport type AppSettings = {\n package?: string | null;\n padId?: number | string | null;\n segment?: string;\n} & Record<string, unknown>;\n\nexport type AppSettingsComponentProps = {\n app: DevCenterAppResource;\n appData: AppDataEntry;\n currentUser: DevCenterCurrentUser;\n layoutEnvironment?: LayoutEnvironment | null;\n onSettingChange: (name: string, value: unknown) => void;\n onSettingsChange: (settings: AppSettings) => void;\n settings: AppSettings;\n};\n\nexport type AppSettingsDialogProps = {\n AppSettingsComponent?: ComponentType<AppSettingsComponentProps> | null;\n app: DevCenterAppResource;\n appData: AppDataEntry;\n appName: string;\n currentUser: DevCenterCurrentUser;\n disableAppAssetSelection?: boolean;\n isMultiRig: boolean;\n isSettingsDialogHidden?: boolean;\n layoutEnvironment?: LayoutEnvironment | null;\n onAppRemove?: () => void;\n onCloneDashboard?: () => void;\n onSettingsChange: (settings: AppSettings) => void;\n openIntercom?: () => void;\n rigId?: number | string | null;\n toggleAppSettingsDialog: () => void;\n};\n\nconst AssetEditorWithLock = withAssetEditorLockHOC(AssetEditor);\n\n/*\n * AS-KEEP — DisabledSettingsMessage is still JavaScript and declares a required\n * onCloneDashboard callback, although its rendering supports an omitted callback.\n * Remove this assertion when that component is migrated to TypeScript.\n */\nconst OptionalDisabledSettingsMessage = DisabledSettingsMessage as ComponentType<{\n onCloneDashboard?: () => void;\n}>;\n\nconst ASSET_EDITOR_TYPES_BY_SEGMENT: Partial<Record<string, AssetEditorAppType>> =\n SEGMENT_TO_ASSET_TYPE;\n\nconst DEFAULT_APP_SETTINGS_COMPONENT: ComponentType<AppSettingsComponentProps> = () => null;\n\nconst AppSettingsDialog: FC<AppSettingsDialogProps> = ({\n AppSettingsComponent = DEFAULT_APP_SETTINGS_COMPONENT,\n app,\n appData,\n appName,\n currentUser,\n disableAppAssetSelection = false,\n isMultiRig,\n isSettingsDialogHidden = false,\n layoutEnvironment,\n onAppRemove,\n onCloneDashboard = noop,\n onSettingsChange,\n openIntercom,\n rigId,\n toggleAppSettingsDialog,\n}) => {\n const initialSegment = getAppSegment(app);\n\n const [appSegmentSetting, setAppSegmentSetting] = useState<string>(\n typeof initialSegment === 'string' ? initialSegment : SEGMENTS.DRILLING\n );\n const [isMounted, setIsMounted] = useState(false);\n const [isAssetSelectorRendered, setIsAssetSelectorRendered] = useState(true);\n const [validationError, setValidationError] = useState('');\n const [appSettings, setAppSettings] = useState<AppSettings>(() => {\n const settings: AppSettings = cloneDeep(app.settings ?? {});\n const settingsPackage = typeof settings.package === 'string' ? settings.package : undefined;\n const packageVersion =\n typeof app.package?.version === 'string' ? app.package.version : undefined;\n\n return {\n ...settings,\n package: settingsPackage || packageVersion,\n };\n });\n\n // NOTE: Keep in ref to have a way to reset default value\n // of asset selector when changing app segment\n const defaultRigId = useRef<number | string | null | undefined>(rigId);\n const platformAppSettingsRef = useRef<HTMLDivElement | null>(null);\n const customAppSettingsRef = useRef<HTMLDivElement | null>(null);\n\n const [{ active: canReadAppPackages, loading: isPermissionsLoading }] = usePermissions([\n PERMISSIONS.getCanReadAppPackages(app.app.id),\n ]);\n\n const appSegments = Array.isArray(app.segment)\n ? app.segment.filter((segment): segment is string => typeof segment === 'string')\n : [];\n const hasSegmentSelector = appSegments.length > 1;\n const isCompletionSegment = appSegmentSetting === SEGMENTS.COMPLETION;\n const assetEditorAppType = ASSET_EDITOR_TYPES_BY_SEGMENT[appSegmentSetting];\n const isAssetPage = layoutEnvironment?.type === 'asset';\n const isCLIApp = app.id === DEV_CENTER_CLI_APP_ID;\n const isSustainabilityApp = getIsSustainabilityApp(app?.app?.id);\n\n const isAssetSelectorVisible =\n !disableAppAssetSelection &&\n !isInsideNewMobileApp &&\n !isMultiRig &&\n !(isAssetPage && isCompletionSegment);\n const isRemoveButtonVisible = !isInsideNewMobileApp && !isSettingsDialogHidden && !!onAppRemove;\n\n const hasPlatformAppSettings =\n isPermissionsLoading ||\n canReadAppPackages ||\n Boolean(platformAppSettingsRef.current?.clientHeight);\n const hasCustomAppSettings = Boolean(customAppSettingsRef.current?.clientHeight);\n const isAccordionRequired = hasPlatformAppSettings && hasCustomAppSettings;\n\n const AssetEditorComponent = isAssetPage ? AssetEditorWithLock : AssetEditor;\n const appKey = typeof app.app.app_key === 'string' ? app.app.app_key : null;\n const selectedPackage = typeof appSettings.package === 'string' ? appSettings.package : undefined;\n\n const styles = useStyles({\n isCompletionApp: isCompletionSegment,\n isSustainabilityApp,\n isAccordionRequired,\n isRemoveButtonVisible,\n });\n\n const handleChangeAppSegment: SelectProps['onChange'] = event => {\n const nextSegment = String(event.target.value);\n\n defaultRigId.current = null;\n setIsAssetSelectorRendered(false);\n\n setAppSegmentSetting(nextSegment);\n setAppSettings({\n package: appSettings.package,\n segment: nextSegment,\n // NOTE: we need to reset asset ids when segment is changed\n ...mapValues(keyBy(ASSET_TYPES, 'id'), () => null),\n assets: null,\n });\n };\n\n const handleAppSettingChange = (name: string, value: unknown) =>\n setAppSettings(prevSettings => ({\n ...prevSettings,\n [name]: value,\n }));\n\n const handleAppSettingsChange = (newSettings: AppSettings) =>\n setAppSettings(prevSettings => ({ ...prevSettings, ...newSettings }));\n\n const handleSave = () => {\n if (!appSettings.package && !isCLIApp) {\n setValidationError('Please select app version');\n return;\n }\n\n if (isAssetSelectorVisible && !isAssetPage) {\n const appTypeKey = assetEditorAppType?.primaryAsset?.assetType?.id;\n const appTypeLabel = assetEditorAppType?.primaryAsset?.assetType?.label;\n\n if (appTypeKey && !appSettings[appTypeKey]) {\n setValidationError(`Please select ${appTypeLabel}`);\n return;\n }\n }\n\n onSettingsChange(appSettings);\n showSuccessNotification('Successfully saved');\n toggleAppSettingsDialog();\n };\n\n const handleAppVersionChange = (value: string, _appPackage: unknown, isUserChange: boolean) =>\n // [REACT-18-MIGRATION-TAG] PLT-3099: a genuine user pick on a React-18 host opts the app out\n // of the auto-switch; the auto-preselect must not (isUserChange).\n isUserChange && isReact18Host()\n ? handleAppSettingsChange({ package: value, react18AutoSwitchDisabled: true })\n : handleAppSettingChange('package', value);\n\n useEffect(() => {\n if (!isAssetSelectorRendered) setIsAssetSelectorRendered(true);\n }, [isAssetSelectorRendered]);\n\n useEffect(() => {\n const debouncedSetIsMounted = debounce(setIsMounted, 200);\n debouncedSetIsMounted(true);\n }, []);\n\n const modalTitle: ReactNode = (\n <div className={styles.modalTitleContainer}>\n <AppIcon\n className={styles.appIcon}\n segment={[appSegmentSetting]}\n iconUrl={app?.app?.icon?.url}\n height={48}\n width={48}\n />\n <div>\n <div>{`${appName} Settings`}</div>\n <HideInNativeApp>\n <div\n data-testid={`${PAGE_NAME}_appstoreLink`}\n className={styles.appStoreButton}\n onClick={() => window.open(getAppPageUrl(app?.app?.id), '_top')}\n >\n Open in Appstore <ArrowIcon className={styles.arrowIcon} />\n </div>\n </HideInNativeApp>\n </div>\n </div>\n );\n\n const modalActions = (\n <div className={styles.modalActions}>\n {isRemoveButtonVisible && <RemoveAppButton appName={appName} onAppRemove={onAppRemove} />}\n <div>\n <Button\n data-testid={`${PAGE_NAME}_cancel`}\n variation=\"secondary\"\n onClick={toggleAppSettingsDialog}\n >\n Cancel\n </Button>\n {isSettingsDialogHidden && (\n <Button variation=\"primary\" onClick={() => onCloneDashboard()}>\n Copy Dashboard\n </Button>\n )}\n {!isSettingsDialogHidden && (\n <Button\n data-testid={`${PAGE_NAME}_save`}\n className={styles.saveButton}\n variation=\"primary\"\n onClick={handleSave}\n >\n Save\n </Button>\n )}\n </div>\n </div>\n );\n\n return (\n <Modal\n actions={modalActions}\n closeIconClassName={styles.closeIcon}\n contentContainerClassName={styles.modalContainer}\n modalTitleClassName={styles.modalTitle}\n onClose={toggleAppSettingsDialog}\n open\n title={modalTitle}\n >\n <ErrorBoundary ErrorView={DevCenterAppErrorView} openIntercom={openIntercom}>\n <ConfirmationDialog\n open={!!validationError}\n isShowCancel={false}\n title=\"Validation failed\"\n text={validationError}\n handleOk={() => setValidationError('')}\n classes={{ confirmation: styles.confirmationText }}\n />\n {isSettingsDialogHidden && <OptionalDisabledSettingsMessage />}\n {!isSettingsDialogHidden &&\n isMounted &&\n !hasCustomAppSettings &&\n !hasPlatformAppSettings && (\n <EmptyState image={EmptyState.IMAGES.UnderConstruction} title=\"No app settings\" />\n )}\n {!isSettingsDialogHidden && (\n <>\n <SettingsAccordion\n defaultExpanded\n className={styles.assetAccordion}\n accordionDetailsRef={platformAppSettingsRef}\n isAccordionRequired={isAccordionRequired}\n summary=\"Asset\"\n >\n {hasSegmentSelector && (\n <FormControl className={styles.segmentSelector}>\n <InputLabel>Segment</InputLabel>\n <Select value={appSegmentSetting} onChange={handleChangeAppSegment}>\n {appSegments.map(segmentItem => (\n <MenuItem\n className={styles.segmentMenuItem}\n key={segmentItem}\n value={segmentItem}\n >\n {segmentItem}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )}\n {isAssetSelectorVisible && isAssetSelectorRendered && assetEditorAppType && (\n <AssetEditorComponent\n appKey={isCLIApp ? null : appKey}\n appType={assetEditorAppType}\n defaultValue={defaultRigId.current}\n secondaryDefaultValue={+appData?.well?.id}\n isHiddenTitle\n isNullable={isAssetPage}\n label=\"Asset\"\n onSettingsChange={handleAppSettingsChange}\n settings={appSettings}\n />\n )}\n <AppVersionsSelect\n className={styles.appVersionSelect}\n appId={app.app.id}\n value={selectedPackage}\n onChange={handleAppVersionChange}\n />\n </SettingsAccordion>\n <ErrorBoundary ErrorView={AppSettingsErrorView} openIntercom={openIntercom}>\n <SettingsAccordion\n accordionDetailsRef={customAppSettingsRef}\n className={styles.accordion}\n defaultExpanded\n isAccordionRequired={isAccordionRequired}\n summary=\"App Settings\"\n >\n {AppSettingsComponent && (\n <AppSettingsComponent\n app={app}\n appData={appData}\n settings={appSettings}\n onSettingChange={handleAppSettingChange}\n onSettingsChange={handleAppSettingsChange}\n layoutEnvironment={layoutEnvironment}\n currentUser={currentUser}\n />\n )}\n </SettingsAccordion>\n </ErrorBoundary>\n </>\n )}\n </ErrorBoundary>\n </Modal>\n );\n};\n\nexport default AppSettingsDialog;\n"],"names":["PAGE_NAME","AppSettingsErrorView","AssetEditorWithLock","withAssetEditorLockHOC","AssetEditor","OptionalDisabledSettingsMessage","DisabledSettingsMessage","ASSET_EDITOR_TYPES_BY_SEGMENT","SEGMENT_TO_ASSET_TYPE","DEFAULT_APP_SETTINGS_COMPONENT","_ref","_app$app","_platformAppSettingsR","_customAppSettingsRef","_app$app2","_app$app2$icon","_appData$well","_ref$AppSettingsCompo","AppSettingsComponent","app","appData","appName","currentUser","_ref$disableAppAssetS","disableAppAssetSelection","isMultiRig","_ref$isSettingsDialog","isSettingsDialogHidden","layoutEnvironment","onAppRemove","_ref$onCloneDashboard","onCloneDashboard","noop","onSettingsChange","openIntercom","rigId","toggleAppSettingsDialog","initialSegment","getAppSegment","_useState","useState","SEGMENTS","DRILLING","_useState2","_slicedToArray","appSegmentSetting","setAppSegmentSetting","_useState4","_useState3","isMounted","setIsMounted","_useState6","_useState5","isAssetSelectorRendered","setIsAssetSelectorRendered","_useState8","_useState7","validationError","setValidationError","_app$settings","_app$package","settings","cloneDeep","settingsPackage","package","undefined","packageVersion","version","_objectSpread","_useState10","_useState9","appSettings","setAppSettings","defaultRigId","useRef","platformAppSettingsRef","customAppSettingsRef","_usePermissions","usePermissions","PERMISSIONS","getCanReadAppPackages","id","_usePermissions2$","canReadAppPackages","active","isPermissionsLoading","loading","appSegments","Array","isArray","segment","filter","hasSegmentSelector","length","isCompletionSegment","COMPLETION","assetEditorAppType","isAssetPage","type","isCLIApp","DEV_CENTER_CLI_APP_ID","isSustainabilityApp","getIsSustainabilityApp","isAssetSelectorVisible","isInsideNewMobileApp","isRemoveButtonVisible","hasPlatformAppSettings","Boolean","current","clientHeight","hasCustomAppSettings","isAccordionRequired","AssetEditorComponent","appKey","app_key","selectedPackage","styles","useStyles","isCompletionApp","handleAppSettingChange","name","value","prevSettings","_defineProperty","handleAppSettingsChange","newSettings","useEffect","debounce","debouncedSetIsMounted","modalTitle","_jsxs","jsxs","className","modalTitleContainer","children","_jsx","AppIcon","appIcon","iconUrl","icon","url","height","width","jsx","concat","HideInNativeApp","appStoreButton","onClick","_app$app3","appId","window","open","ArrowIcon","arrowIcon","modalActions","RemoveAppButton","Button","variation","saveButton","_assetEditorAppType$p","_assetEditorAppType$p2","_assetEditorAppType$p3","_assetEditorAppType$p4","appTypeKey","primaryAsset","assetType","appTypeLabel","label","showSuccessNotification","Modal","actions","closeIconClassName","closeIcon","contentContainerClassName","modalContainer","modalTitleClassName","onClose","title","ErrorBoundary","ErrorView","DevCenterAppErrorView","ConfirmationDialog","isShowCancel","text","handleOk","classes","confirmation","confirmationText","EmptyState","image","IMAGES","UnderConstruction","_Fragment","SettingsAccordion","defaultExpanded","assetAccordion","accordionDetailsRef","summary","FormControl","segmentSelector","InputLabel","Select","onChange","event","nextSegment","String","target","mapValues","keyBy","ASSET_TYPES","assets","map","segmentItem","MenuItem","segmentMenuItem","appType","defaultValue","secondaryDefaultValue","well","isHiddenTitle","isNullable","AppVersionsSelect","appVersionSelect","_appPackage","isUserChange","isReact18Host","react18AutoSwitchDisabled","accordion","onSettingChange"],"mappings":"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"}
|
package/cjs-bundle/components/DevCenter/DevCenterRouterContext/UniversalLink/UniversalLink.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("classnames"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("classnames"),t=require("react-router-dom"),r=require("prop-types"),a=require("lodash"),n=require("../effects/useDevCenterRouter.js"),i=require("./UniversalLink.css.js"),s=require("react/jsx-runtime");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=l(e),d=l(r);function o(e){var r=e.href,a=void 0===r?null:r,l=e.children,d=e.className,o=void 0===d?null:d,f=e["data-testid"],p=void 0===f?"UniversalLink":f,v=e.onClick,h=void 0===v?c:v,k=n.useDevCenterRouter();return k?s.jsx("a",{href:a||null,children:s.jsx("button",{"data-testid":p,tabIndex:"0",role:"link",className:u.default(i.buttonLink,o),onClick:function(e){a&&(e.stopPropagation(),h(e),e.metaKey||e.ctrlKey?window.open(a,"_blank"):k.push(a))},children:l})}):a?s.jsx(t.Link,{"data-testid":p,to:a,className:o,children:l}):s.jsx("span",{"data-testid":p,className:o,children:l})}o.propTypes={href:d.default.any,children:d.default.node.isRequired,className:d.default.string,onClick:d.default.func,"data-testid":d.default.string};var c=a.noop;exports.UniversalLink=o;
|
|
2
2
|
//# sourceMappingURL=UniversalLink.js.map
|
package/cjs-bundle/components/DevCenter/DevCenterRouterContext/UniversalLink/UniversalLink.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UniversalLink.js","sources":["../../../../../../src/components/DevCenter/DevCenterRouterContext/UniversalLink/UniversalLink.js"],"sourcesContent":["import classNames from 'classnames';\nimport { Link as ReactRouterLink } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { noop } from 'lodash';\n\nimport { useDevCenterRouter } from '../effects/useDevCenterRouter';\n\nimport styles from './UniversalLink.css';\n\nexport function UniversalLink(props) {\n const {\n href = null,\n children,\n className = null,\n 'data-testid': dataTestId = 'UniversalLink',\n onClick = DEFAULT_UNIVERSAL_LINK_ON_CLICK,\n } = props;\n const devCenterRouter = useDevCenterRouter();\n\n if (devCenterRouter) {\n return (\n // NOTE: \"a\" element is needed to drag chip to tab bar while clicks are handled by button onClick handler\n <a href={href || null}>\n <button\n data-testid={dataTestId}\n tabIndex=\"0\"\n role=\"link\"\n className={classNames(styles.buttonLink, className)}\n onClick={e => {\n if (href) {\n e.stopPropagation();\n onClick(e);\n if (e.metaKey || e.ctrlKey) {\n window.open(href, '_blank');\n } else {\n devCenterRouter.push(href);\n }\n }\n }}\n >\n {children}\n </button>\n </a>\n );\n }\n\n return (\n <ReactRouterLink data-testid={dataTestId} to={href} className={className}>\n {children}\n </ReactRouterLink>\n );\n}\n\nUniversalLink.propTypes = {\n href: PropTypes.any,\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n onClick: PropTypes.func,\n 'data-testid': PropTypes.string,\n};\n\nconst DEFAULT_UNIVERSAL_LINK_ON_CLICK = noop;\n"],"names":["UniversalLink","props","href","_props$href","children","_props$className","className","_props$dataTestid","dataTestId","_props$onClick","onClick","DEFAULT_UNIVERSAL_LINK_ON_CLICK","devCenterRouter","useDevCenterRouter","_jsx","jsx","tabIndex","role","classNames","styles","buttonLink","e","stopPropagation","metaKey","ctrlKey","window","open","push","ReactRouterLink","to","propTypes","PropTypes","any","node","isRequired","string","func","noop"],"mappings":"qXASO,SAASA,EAAcC,GAC5B,IAMIA,EAAAA,EALFC,KAAAA,aAAO,KAAIC,EACXC,EAIEH,EAJFG,SAAQC,EAINJ,EAHFK,UAAAA,aAAY,KAAID,EAAAE,EAGdN,EAFF,eAAeO,aAAa,gBAAeD,EAAAE,EAEzCR,EADFS,QAAAA,aAAUC,EAA+BF,EAErCG,EAAkBC,EAAAA,qBAExB,OAAID,EAGAE,EAAAA,IAAA,IAAA,CAAGZ,KAAMA,GAAQ,KAAKE,SACpBU,EAAAC,IAAA,SAAA,CACE,cAAaP,EACbQ,SAAS,IACTC,KAAK,OACLX,UAAWY,EAAU,QAACC,EAAOC,WAAYd,GACzCI,QAAS,SAAAW,GACHnB,IACFmB,EAAEC,kBACFZ,EAAQW,GACJA,EAAEE,SAAWF,EAAEG,QACjBC,OAAOC,KAAKxB,EAAM,UAElBU,EAAgBe,KAAKzB,GAGzB,EAAAE,SAEDA,
|
|
1
|
+
{"version":3,"file":"UniversalLink.js","sources":["../../../../../../src/components/DevCenter/DevCenterRouterContext/UniversalLink/UniversalLink.js"],"sourcesContent":["import classNames from 'classnames';\nimport { Link as ReactRouterLink } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { noop } from 'lodash';\n\nimport { useDevCenterRouter } from '../effects/useDevCenterRouter';\n\nimport styles from './UniversalLink.css';\n\nexport function UniversalLink(props) {\n const {\n href = null,\n children,\n className = null,\n 'data-testid': dataTestId = 'UniversalLink',\n onClick = DEFAULT_UNIVERSAL_LINK_ON_CLICK,\n } = props;\n const devCenterRouter = useDevCenterRouter();\n\n if (devCenterRouter) {\n return (\n // NOTE: \"a\" element is needed to drag chip to tab bar while clicks are handled by button onClick handler\n <a href={href || null}>\n <button\n data-testid={dataTestId}\n tabIndex=\"0\"\n role=\"link\"\n className={classNames(styles.buttonLink, className)}\n onClick={e => {\n if (href) {\n e.stopPropagation();\n onClick(e);\n if (e.metaKey || e.ctrlKey) {\n window.open(href, '_blank');\n } else {\n devCenterRouter.push(href);\n }\n }\n }}\n >\n {children}\n </button>\n </a>\n );\n }\n\n // react-router's Link pushes `to` verbatim on click, so a null one throws there\n if (!href) {\n return (\n <span data-testid={dataTestId} className={className}>\n {children}\n </span>\n );\n }\n\n return (\n <ReactRouterLink data-testid={dataTestId} to={href} className={className}>\n {children}\n </ReactRouterLink>\n );\n}\n\nUniversalLink.propTypes = {\n href: PropTypes.any,\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n onClick: PropTypes.func,\n 'data-testid': PropTypes.string,\n};\n\nconst DEFAULT_UNIVERSAL_LINK_ON_CLICK = noop;\n"],"names":["UniversalLink","props","href","_props$href","children","_props$className","className","_props$dataTestid","dataTestId","_props$onClick","onClick","DEFAULT_UNIVERSAL_LINK_ON_CLICK","devCenterRouter","useDevCenterRouter","_jsx","jsx","tabIndex","role","classNames","styles","buttonLink","e","stopPropagation","metaKey","ctrlKey","window","open","push","ReactRouterLink","to","propTypes","PropTypes","any","node","isRequired","string","func","noop"],"mappings":"qXASO,SAASA,EAAcC,GAC5B,IAMIA,EAAAA,EALFC,KAAAA,aAAO,KAAIC,EACXC,EAIEH,EAJFG,SAAQC,EAINJ,EAHFK,UAAAA,aAAY,KAAID,EAAAE,EAGdN,EAFF,eAAeO,aAAa,gBAAeD,EAAAE,EAEzCR,EADFS,QAAAA,aAAUC,EAA+BF,EAErCG,EAAkBC,EAAAA,qBAExB,OAAID,EAGAE,EAAAA,IAAA,IAAA,CAAGZ,KAAMA,GAAQ,KAAKE,SACpBU,EAAAC,IAAA,SAAA,CACE,cAAaP,EACbQ,SAAS,IACTC,KAAK,OACLX,UAAWY,EAAU,QAACC,EAAOC,WAAYd,GACzCI,QAAS,SAAAW,GACHnB,IACFmB,EAAEC,kBACFZ,EAAQW,GACJA,EAAEE,SAAWF,EAAEG,QACjBC,OAAOC,KAAKxB,EAAM,UAElBU,EAAgBe,KAAKzB,GAGzB,EAAAE,SAEDA,MAOJF,EASHY,EAAAA,IAACc,EAAAA,KAAe,CAAC,cAAapB,EAAYqB,GAAI3B,EAAMI,UAAWA,EAAUF,SACtEA,IARDU,EAAAA,IAAA,OAAA,CAAM,cAAaN,EAAYF,UAAWA,EAAUF,SACjDA,GAUT,CAEAJ,EAAc8B,UAAY,CACxB5B,KAAM6B,EAAS,QAACC,IAChB5B,SAAU2B,EAAAA,QAAUE,KAAKC,WACzB5B,UAAWyB,EAAS,QAACI,OACrBzB,QAASqB,EAAS,QAACK,KACnB,cAAeL,EAAS,QAACI,QAG3B,IAAMxB,EAAkC0B,EAAIA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeriodFilterSelect.js","sources":["../../../../../../../../src/components/OffsetWellPickerV5/components/Filter/components/PeriodFilterSelect/PeriodFilterSelect.tsx"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { OBJECTIVE_PERIOD_LIST } from '../../../../constants';\nimport { useIsAllWellsLoading } from '../../../../hooks/useIsAllWellsLoading';\nimport type { PeriodType } from '../../../../stores/filter-store/types';\n\nimport { AutocompleteNext, TextInputNext } from '~/componentsV2';\n\ntype PeriodOption = {\n id:
|
|
1
|
+
{"version":3,"file":"PeriodFilterSelect.js","sources":["../../../../../../../../src/components/OffsetWellPickerV5/components/Filter/components/PeriodFilterSelect/PeriodFilterSelect.tsx"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { OBJECTIVE_PERIOD_LIST } from '../../../../constants';\nimport { useIsAllWellsLoading } from '../../../../hooks/useIsAllWellsLoading';\nimport type { PeriodType } from '../../../../stores/filter-store/types';\n\nimport { AutocompleteNext, TextInputNext } from '~/componentsV2';\n\ntype PeriodOption = {\n id: PeriodType;\n title: string;\n};\n\ntype PeriodFilterSelectProps = {\n value: PeriodType | null;\n onChange: (value: PeriodType | null) => void;\n testId?: string;\n dropdownClassName?: string;\n};\n\nexport const PeriodFilterSelect = ({\n value,\n onChange,\n testId,\n dropdownClassName,\n}: PeriodFilterSelectProps) => {\n const disabled = useIsAllWellsLoading();\n const options: PeriodOption[] = OBJECTIVE_PERIOD_LIST.map(item => ({\n id: item.value,\n title: item.label,\n }));\n\n const handleChange = useCallback(\n (selectedOption: PeriodOption | undefined) => {\n if (!selectedOption) {\n return;\n }\n\n if (selectedOption.id === 'all') {\n onChange(null);\n } else {\n onChange(selectedOption.id);\n }\n },\n [onChange]\n );\n\n return (\n <AutocompleteNext\n label={\n <TextInputNext.Label infoTooltip=\"Based on the latest data received from the drilling stream\">\n Date\n </TextInputNext.Label>\n }\n options={options}\n value={disabled ? undefined : value ?? 'all'}\n onChange={handleChange}\n clearable={false}\n testId={testId}\n dropdownClassName={dropdownClassName}\n disabled={disabled}\n placeholder={disabled ? 'All' : undefined}\n />\n );\n};\n\nPeriodFilterSelect.displayName = 'PeriodFilterSelect';\n"],"names":["PeriodFilterSelect","_ref","value","onChange","testId","dropdownClassName","disabled","useIsAllWellsLoading","options","OBJECTIVE_PERIOD_LIST","map","item","id","title","label","handleChange","useCallback","selectedOption","_jsx","AutocompleteNext","TextInputNext","Label","infoTooltip","children","undefined","clearable","placeholder","displayName"],"mappings":"6+jBAoBaA,IAAAA,EAAqB,SAKHC,GAAA,IAJ7BC,IAAAA,MACAC,IAAAA,SACAC,IAAAA,OACAC,IAAAA,kBAEMC,EAAWC,EAAAA,uBACXC,EAA0BC,EAAAA,sBAAsBC,KAAI,SAAAC,GAAI,MAAK,CACjEC,GAAID,EAAKT,MACTW,MAAOF,EAAKG,MACb,IAEKC,EAAeC,eACnB,SAACC,GACMA,IAIqB,QAAtBA,EAAeL,GACjBT,EAAS,MAETA,EAASc,EAAeL,IAE5B,GACA,CAACT,IAGH,OACEe,EAAAA,IAACC,EAAAA,iBAAgB,CACfL,MACEI,EAAAA,IAACE,EAAaA,cAACC,MAAK,CAACC,YAAY,6DAA4DC,SAAA,SAI/Ff,QAASA,EACTN,MAAOI,OAAWkB,EAAYtB,QAAAA,EAAS,MACvCC,SAAUY,EACVU,WAAW,EACXrB,OAAQA,EACRC,kBAAmBA,EACnBC,SAAUA,EACVoB,YAAapB,EAAW,WAAQkB,GAGtC,EAEAxB,EAAmB2B,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),l=require("lodash"),t=require("classnames"),r=require("@material-ui/core"),i=require("../../components/MetricCell/MetricCell.js"),s=require("../types.js"),a=require("../../components/OffsetWellsTableRow/OffsetWellsTableRow.module.css.js"),n=require("react/jsx-runtime");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=o(e),d=o(t);exports.MetricsCells=function(e){var t=e.data,o=e.metricsKeys,c=e.metricsMap,m=e.borderStyle,f=e.columnsMap,p=e.lastCellColumn,v=e.loadingWellIds;return n.jsx(n.Fragment,{children:o.map((function(e,b){var j,y,C=c.get(e),M=C?l.get(t,C.key):void 0;return n.jsx(r.TableCell,{"data-testid":"".concat(s.PAGE_NAME,"_").concat(e),className:d.default(a.bodyCell,m,u.default({},a.lastCell,"lastMetric"===p&&b===o.length-1)),style:{minWidth:(null===(j=f.get(e))||void 0===j?void 0:j.minWidth)||0,flex:(null===(y=f.get(e))||void 0===y?void 0:y.flex)||0},children:n.jsx(i.MetricCell,{value:M,wellId:t.id,loadingWellIds:v,metric:C})},e)}))})};
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),l=require("lodash"),t=require("classnames"),r=require("@material-ui/core"),i=require("../../components/MetricCell/MetricCell.js"),s=require("../types.js"),a=require("../../components/OffsetWellsTableRow/OffsetWellsTableRow.module.css.js"),n=require("react/jsx-runtime");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=o(e),d=o(t);exports.MetricsCells=function(e){var t=e.data,o=e.metricsKeys,c=e.metricsMap,m=e.borderStyle,f=e.columnsMap,p=e.lastCellColumn,v=e.loadingWellIds,x=e.maxLines;return n.jsx(n.Fragment,{children:o.map((function(e,b){var j,y,C=c.get(e),M=C?l.get(t,C.key):void 0;return n.jsx(r.TableCell,{"data-testid":"".concat(s.PAGE_NAME,"_").concat(e),className:d.default(a.bodyCell,m,u.default({},a.lastCell,"lastMetric"===p&&b===o.length-1)),style:{minWidth:(null===(j=f.get(e))||void 0===j?void 0:j.minWidth)||0,flex:(null===(y=f.get(e))||void 0===y?void 0:y.flex)||0},children:n.jsx(i.MetricCell,{value:M,wellId:t.id,loadingWellIds:v,metric:C,maxLines:x})},e)}))})};
|
|
2
2
|
//# sourceMappingURL=MetricsCells.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsCells.js","sources":["../../../../../../../../src/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/MetricsCells/MetricsCells.tsx"],"sourcesContent":["import { get } from 'lodash';\nimport classNames from 'classnames';\nimport { TableCell } from '@material-ui/core';\n\nimport { MetricCell } from '../../components/MetricCell';\nimport type { WellData, MetricConfig, BorderStyle, ColumnsMap } from '../types';\nimport { PAGE_NAME } from '../types';\n\nimport styles from '../../components/OffsetWellsTableRow/OffsetWellsTableRow.module.css';\n\ntype MetricsCellsProps = {\n data: WellData;\n metricsKeys: string[];\n metricsMap: Map<string, MetricConfig>;\n borderStyle: BorderStyle;\n columnsMap: ColumnsMap;\n lastCellColumn: string;\n loadingWellIds: Set<number>;\n};\n\nexport const MetricsCells = ({\n data,\n metricsKeys,\n metricsMap,\n borderStyle,\n columnsMap,\n lastCellColumn,\n loadingWellIds,\n}: MetricsCellsProps) => (\n <>\n {metricsKeys.map((metricsKey, index) => {\n const metric = metricsMap.get(metricsKey);\n const value = metric\n ? (get(data, metric.key) as number | string | null | undefined)\n : undefined;\n\n return (\n <TableCell\n data-testid={`${PAGE_NAME}_${metricsKey}`}\n key={metricsKey}\n className={classNames(styles.bodyCell, borderStyle, {\n [styles.lastCell]: lastCellColumn === 'lastMetric' && index === metricsKeys.length - 1,\n })}\n style={{\n minWidth: columnsMap.get(metricsKey)?.minWidth || 0,\n flex: columnsMap.get(metricsKey)?.flex || 0,\n }}\n >\n <MetricCell\n value={value}\n wellId={data.id}\n loadingWellIds={loadingWellIds}\n metric={metric}\n />\n </TableCell>\n );\n })}\n </>\n);\n"],"names":["_ref","data","metricsKeys","metricsMap","borderStyle","columnsMap","lastCellColumn","loadingWellIds","_jsx","_Fragment","children","map","metricsKey","index","_columnsMap$get","_columnsMap$get2","metric","get","value","key","undefined","TableCell","PAGE_NAME","className","classNames","styles","bodyCell","lastCell","length","style","minWidth","flex","MetricCell","wellId","id"],"mappings":"
|
|
1
|
+
{"version":3,"file":"MetricsCells.js","sources":["../../../../../../../../src/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/MetricsCells/MetricsCells.tsx"],"sourcesContent":["import { get } from 'lodash';\nimport classNames from 'classnames';\nimport { TableCell } from '@material-ui/core';\n\nimport { MetricCell } from '../../components/MetricCell';\nimport type { WellData, MetricConfig, BorderStyle, ColumnsMap } from '../types';\nimport { PAGE_NAME } from '../types';\n\nimport styles from '../../components/OffsetWellsTableRow/OffsetWellsTableRow.module.css';\n\ntype MetricsCellsProps = {\n data: WellData;\n metricsKeys: string[];\n metricsMap: Map<string, MetricConfig>;\n borderStyle: BorderStyle;\n columnsMap: ColumnsMap;\n lastCellColumn: string;\n loadingWellIds: Set<number>;\n maxLines: number;\n};\n\nexport const MetricsCells = ({\n data,\n metricsKeys,\n metricsMap,\n borderStyle,\n columnsMap,\n lastCellColumn,\n loadingWellIds,\n maxLines,\n}: MetricsCellsProps) => (\n <>\n {metricsKeys.map((metricsKey, index) => {\n const metric = metricsMap.get(metricsKey);\n const value = metric\n ? (get(data, metric.key) as number | string | null | undefined)\n : undefined;\n\n return (\n <TableCell\n data-testid={`${PAGE_NAME}_${metricsKey}`}\n key={metricsKey}\n className={classNames(styles.bodyCell, borderStyle, {\n [styles.lastCell]: lastCellColumn === 'lastMetric' && index === metricsKeys.length - 1,\n })}\n style={{\n minWidth: columnsMap.get(metricsKey)?.minWidth || 0,\n flex: columnsMap.get(metricsKey)?.flex || 0,\n }}\n >\n <MetricCell\n value={value}\n wellId={data.id}\n loadingWellIds={loadingWellIds}\n metric={metric}\n maxLines={maxLines}\n />\n </TableCell>\n );\n })}\n </>\n);\n"],"names":["_ref","data","metricsKeys","metricsMap","borderStyle","columnsMap","lastCellColumn","loadingWellIds","maxLines","_jsx","_Fragment","children","map","metricsKey","index","_columnsMap$get","_columnsMap$get2","metric","get","value","key","undefined","TableCell","PAGE_NAME","className","classNames","styles","bodyCell","lastCell","length","style","minWidth","flex","MetricCell","wellId","id"],"mappings":"wfAqB4B,SAAHA,GAAA,IACvBC,IAAAA,KACAC,IAAAA,YACAC,IAAAA,WACAC,IAAAA,YACAC,IAAAA,WACAC,IAAAA,eACAC,IAAAA,eACAC,IAAAA,SAAQ,OAERC,EAAAA,IAAAC,EAAAA,SAAA,CAAAC,SACGT,EAAYU,KAAI,SAACC,EAAYC,GAAU,IAAAC,EAAAC,EAChCC,EAASd,EAAWe,IAAIL,GACxBM,EAAQF,EACTC,EAAGA,IAACjB,EAAMgB,EAAOG,UAClBC,EAEJ,OACEZ,EAAAA,IAACa,EAAAA,UAAS,CACR,cAAgBC,GAAAA,OAAAA,EAAAA,UAAaV,KAAAA,OAAAA,GAE7BW,UAAWC,EAAU,QAACC,EAAOC,SAAUvB,EACpCsB,EAAAA,QAAAA,GAAAA,EAAOE,SAA8B,eAAnBtB,GAAmCQ,IAAUZ,EAAY2B,OAAS,IAEvFC,MAAO,CACLC,UAAU,QAAAhB,EAAAV,EAAWa,IAAIL,UAAf,IAAAE,OAAA,EAAAA,EAA4BgB,WAAY,EAClDC,MAAgC,QAA1B3B,EAAAA,EAAWa,IAAIL,UAAW,IAAAG,OAAA,EAA1BA,EAA4BgB,OAAQ,GAC1CrB,SAEFF,MAACwB,aAAU,CACTd,MAAOA,EACPe,OAAQjC,EAAKkC,GACb5B,eAAgBA,EAChBU,OAAQA,EACRT,SAAUA,KAdPK,OAmBV"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@material-ui/core"),t=require("./MetricCell.module.css.js"),i=require("../../../../../../componentsV2/Skeleton/Skeleton.js"),l=require("../../../../../../utils/index.js"),a=require("react/jsx-runtime"),n=e.memo((function(e){var n=e.value,o=e.wellId,s=e.loadingWellIds,u=e.metric;if(!u)return a.jsx(r.Typography,{variant:"body2",className:t.cellData,children:"—"});if(s.has(o)&&void 0===n)return a.jsx(i.Skeleton,{type:"text",width:50,height:16});if(Number.isFinite(n)||n&&"Null"!==n){var c=function(e,r){return"number"!=typeof e?e:r.customConvert?r.customConvert(e,{precision:r.precision}):r.unitType&&r.from?l.convertValue(e,r.unitType,r.from,r.to):e}(n,u);return a.jsx(r.Typography,{variant:"body2",className:t.cellData,children:c})}return a.jsx(r.Typography,{variant:"body2",className:t.cellData,children:"—"})}));n.displayName="MetricCell",exports.MetricCell=n;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),s=require("@material-ui/core"),o=require("./MetricCell.module.css.js");require("../../../../../../componentsV2/Text/Text.js"),require("../../../../../../componentsV2/Grid/Grid.js"),require("../../../../../../componentsV2/Grid/Cell.js"),require("@babel/runtime/helpers/defineProperty"),require("classnames"),require("../../../../../../componentsV2/Header/Header.scss.js");var r=require("react/jsx-runtime");require("../../../../../../componentsV2/Button/Button.js"),require("../../../../../../componentsV2/ButtonIcon/ButtonIcon.js"),require("@babel/runtime/helpers/objectWithoutProperties"),require("../../../../../DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider.js"),require("../../../../../DevCenter/DevCenterAppContainer/components/DcFullscreenElemsCoordinatorProvider/IsInsideDcFullscreenElemProvider.js"),require("../../../../../DevCenter/DevCenterAppContainer/components/DcFullscreenElemsCoordinatorProvider/DcFullscreenElemsCoordinatorProvider.js"),require("@babel/runtime/helpers/slicedToArray"),require("uuid"),require("../../../../../../componentsV2/Tooltip/Tooltip.scss.js"),require("../../../../../../componentsV2/Popover/Popover.js"),require("../../../../../../componentsV2/PopoverPanel/PopoverPanel.js"),require("../../../../../../componentsV2/Radio/Radio.js"),require("../../../../../../componentsV2/RadioAndCheckboxGroup/RadioAndCheckboxGroup.scss.js"),require("../../../../../../componentsV2/Checkbox/Checkbox.js"),require("@babel/runtime/helpers/toConsumableArray"),require("../../../../../../componentsV2/TextInput/TextInput.js"),require("../../../../../../componentsV2/TextInputNext/TextInputNext.js"),require("../../../../../../componentsV2/TextArea/TextArea.js"),require("../../../../../../componentsV2/Label/Label.js");var n=require("../../../../../../componentsV2/TextEndTruncated/TextEndTruncated.js");require("lodash"),require("../../../../../../componentsV2/TextMiddleTruncated/TextMiddleTruncated.constants.js"),require("../../../../../../componentsV2/TextMiddleTruncated/TextMiddleTruncated.scss.js"),require("../../../../../../componentsV2/TextLink/TextLink.js"),require("../../../../../../componentsV2/Chip/Chip.js"),require("../../../../../../componentsV2/ChipAlert/ChipAlert.js"),require("../../../../../../componentsV2/ChipIndicator/ChipIndicator.js"),require("../../../../../../componentsV2/Avatar/Avatar.js"),require("../../../../../../componentsV2/AvatarGroup/AvatarGroup.js"),require("@material-ui/lab"),require("../../../../../../componentsV2/ToggleButtons/ToggleButtons.scss.js"),require("../../../../../../componentsV2/Paper/Paper.js"),require("../../../../../../componentsV2/ModalWindow/ModalWindow.js"),require("../../../../../../componentsV2/Modal/Modal.scss.js"),require("../../../../../../componentsV2/Menu/Menu.js"),require("../../../../../../componentsV2/utils.js"),require("@icon-park/react/es/all"),require("../../../../../../icons/IconParkProvider.js"),require("../../../../../../icons/customIcons/icons/AddMessage.js"),require("../../../../../../icons/customIcons/icons/DragOne.js"),require("../../../../../../icons/customIcons/icons/Attention.js"),require("../../../../../../icons/customIcons/icons/Collapse.js"),require("../../../../../../icons/customIcons/icons/Dashboard.js"),require("../../../../../../icons/customIcons/icons/Expand.js"),require("../../../../../../icons/customIcons/icons/FolderClosed.js"),require("../../../../../../icons/customIcons/icons/FolderClosedFilled.js"),require("../../../../../../icons/customIcons/icons/FolderOpened.js"),require("../../../../../../icons/customIcons/icons/GreaterOrEqual.js"),require("../../../../../../icons/customIcons/icons/LessOrEqual.js"),require("../../../../../../icons/customIcons/icons/Search.js"),require("../../../../../../icons/customIcons/icons/SearchOne.js"),require("../../../../../../icons/customIcons/icons/Wellhub.js"),require("../../../../../../icons/customIcons/icons/MultiRuler.js"),require("../../../../../../icons/customIcons/icons/Checkbox.js"),require("../../../../../../icons/customIcons/icons/CheckboxChecked.js"),require("../../../../../../icons/customIcons/icons/CheckboxIndeterminate.js"),require("../../../../../../icons/customIcons/icons/Radio.js"),require("../../../../../../icons/customIcons/icons/RadioChecked.js"),require("../../../../../../icons/customIcons/icons/SimulFrac.js"),require("../../../../../../icons/customIcons/icons/ZipperFrac.js"),require("../../../../../../icons/customIcons/icons/CautionFilled.js"),require("../../../../../../icons/customIcons/icons/InfoRounded.js"),require("../../../../../../icons/customIcons/icons/FlameFilled.js"),require("../../../../../../icons/customIcons/icons/MoreApp.js"),require("../../../../../../icons/customIcons/icons/Pad.js"),require("../../../../../../icons/customIcons/icons/DrilloutUnit.js"),require("../../../../../../icons/customIcons/icons/FracFleet.js"),require("../../../../../../icons/customIcons/icons/Global.js"),require("../../../../../../icons/customIcons/icons/Program.js"),require("../../../../../../icons/customIcons/icons/Rig.js"),require("../../../../../../icons/customIcons/icons/Well.js"),require("../../../../../../icons/customIcons/icons/Gap.js"),require("../../../../../../icons/customIcons/icons/Pin.js"),require("../../../../../../icons/customIcons/icons/PinOne.js"),require("../../../../../../icons/customIcons/icons/PinOneCrossed.js"),require("../../../../../../icons/customIcons/icons/CloseOneFilled.js"),require("../../../../../../icons/customIcons/icons/AttentionFilled.js"),require("../../../../../../icons/customIcons/icons/CheckOneFilled.js"),require("../../../../../../icons/customIcons/icons/Archive.js"),require("../../../../../../icons/customIcons/icons/ArchiveCancel.js"),require("../../../../../../icons/customIcons/icons/Unarchive.js"),require("../../../../../../icons/customIcons/icons/Archived.js"),require("../../../../../../icons/customIcons/icons/InterventionUnit.js"),require("../../../../../../icons/customIcons/icons/CloudDelete.js"),require("../../../../../../icons/customIcons/icons/Lasso.js"),require("../../../../../../icons/customIcons/icons/Radius.js"),require("../../../../../../icons/customIcons/icons/ErrorOps.js"),require("../../../../../../icons/customIcons/icons/DataTypeOps.js"),require("../../../../../../icons/customIcons/icons/FalsePositiveOps.js"),require("../../../../../../icons/customIcons/icons/CalibrationOps.js"),require("../../../../../../icons/customIcons/icons/CriticalOps.js"),require("../../../../../../icons/customIcons/icons/Company.js"),require("../../../../../../icons/customIcons/icons/ArchiveOne.js"),require("../../../../../../icons/customIcons/icons/ParseBotFusion.js"),require("../../../../../../icons/customIcons/icons/Connect.js"),require("../../../../../../icons/customIcons/icons/PuzzleOne.js"),require("../../../../../../icons/customIcons/icons/Feed.js"),require("../../../../../../icons/customIcons/icons/Prompt.js"),require("../../../../../../icons/customIcons/icons/Companies.js"),require("../../../../../../icons/customIcons/icons/ClipboardAi.js"),require("../../../../../../icons/customIcons/icons/Key.js"),require("../../../../../../icons/customIcons/icons/AtSignCrossed.js"),require("../../../../../../icons/customIcons/icons/MappingManual.js"),require("../../../../../../icons/customIcons/icons/Mapping.js"),require("../../../../../../icons/customIcons/icons/Metrics.js"),require("../../../../../../icons/customIcons/icons/Drops.js"),require("../../../../../../icons/customIcons/icons/ClipboardSearch.js"),require("../../../../../../icons/customIcons/icons/Template.js"),require("../../../../../../icons/customIcons/icons/ClipboardMetrics.js"),require("../../../../../../icons/customIcons/icons/ClipboardBuilder.js"),require("../../../../../../icons/customIcons/icons/UnitConversion.js"),require("../../../../../../icons/customIcons/icons/NPT.js"),require("../../../../../../icons/customIcons/icons/GuidedFrac.js"),require("../../../../../../componentsV2/Hint/Hint.scss.js"),require("../../../../../../componentsV2/Counter/Counter.js"),require("../../../../../../componentsV2/BadgeBase/BadgeBase.scss.js"),require("../../../../../../componentsV2/TemplatesControl/TemplatesControl.js"),require("zustand"),require("../../../../../../componentsV2/TemplatesControl/utils.js"),require("../../../../../../componentsV2/TemplatesControl/icons/folder/index.js"),require("../../../../../../componentsV2/TemplatesControl/Store/utils.js"),require("@babel/runtime/helpers/asyncToGenerator"),require("@babel/runtime/regenerator"),require("../../../../../../componentsV2/TemplatesControl/types.js");var i=require("../../../../../../utils/index.js");require("../../../../../../clients/jsonApi/index.js"),require("../../../../../../permissions/PermissionsContext.js"),require("../../../../../../permissions/constants/index.js"),require("../../../../../../permissions/withPermissionsHOC.js"),require("../../../../../../permissions/ProvidePermissions.js"),require("../../../../../../componentsV2/BadgeDot/BadgeDot.scss.js"),require("../../../../../../componentsV2/LoaderLinear/LoaderLinear.scss.js"),require("../../../../../../componentsV2/LoaderLogo/LoaderLogo.constants.js"),require("../../../../../../componentsV2/LoaderLogo/LoaderLogo.scss.js"),require("../../../../../../componentsV2/Switch/Switch.js"),require("../../../../../../componentsV2/Tabs/Tabs.js"),require("../../../../../../componentsV2/EmptyState/EmptyState.scss.js"),require("../../../../../../componentsV2/FileIcon/FileIcon.js"),require("../../../../../../componentsV2/Tag/Tag.js"),require("react-dropzone"),require("../../../../../../componentsV2/FilesDropzone/FilesDropzone.scss.js"),require("../../../../../../componentsV2/FilesLoader/FilesLoader.scss.js"),require("file-extension"),require("image-extensions"),require("video-extensions"),require("../../../../../../componentsV2/FilesProcessor/FilesProcessor.scss.js");var t=require("../../../../../../componentsV2/Skeleton/Skeleton.js");require("../../../../../../utils/main.js"),require("../../../../../../componentsV2/CopyToClipboard/CopyToClipboard.scss.js"),require("../../../../../../componentsV2/Stepper/Step/Step.scss.js"),require("../../../../../../componentsV2/Stepper/Stepper.scss.js"),require("../../../../../../componentsV2/ButtonLive/ButtonLive.js"),require("../../../../../../componentsV2/ButtonText/ButtonText.js"),require("../../../../../../componentsV2/IndicatorLive/IndicatorLive.js"),require("../../../../../../componentsV2/Accordion/Accordion.scss.js"),require("../../../../../../componentsV2/Breadcrumbs/Breadcrumbs.scss.js"),require("../../../../../../componentsV2/BadgeComment/BadgeComment.js"),require("../../../../../../componentsV2/AppContainer/AppContainer.js"),require("../../../../../../componentsV2/AppContainer/AppContainer.constants.js"),require("../../../../../../componentsV2/AppFooter/AppFooter.js"),require("query-string"),require("../../../../../../constants/goals.js"),require("../../../../../../constants/segment.js"),require("../../../../../../constants/alerts.js"),require("../../../../../../constants/apps.js"),require("../../../../../../constants/drillstring.js"),require("../../../../../../constants/completion.js"),require("../../../../../../constants/appPackages.js"),require("../../../../../../constants/notifications.js"),require("../../../../../../constants/feed.js"),require("../../../../../../constants/bha.js"),require("../../../../../../constants/corvaCompanyId.js"),require("../../../../../GradientManager/configuration/constants.js"),require("../../../../../../componentsV2/AppCommonsProvider/AppCommonsContext.js"),require("../../../../../../componentsV2/AppHeader/AppHeader.constants.js"),require("../../../../../../componentsV2/AppHeader/AppBadge/AppBadge.scss.js"),require("../../../../../DevCenter/DevCenterRouterContext/DevCenterRouterContext.js"),require("../../../../../DevCenter/DevCenterRouterContext/UniversalLink/UniversalLink.js"),require("react-router-dom"),require("../../../../../../componentsV2/AppHeader/AppAssets/utils.js"),require("../../../../../../componentsV2/AppHeader/AppAssets/AppAssets.scss.js"),require("../../../../../PadModeSelect/PadModeSelect.js"),require("../../../../../../componentsV2/AppHeader/PadMode/PadMode.scss.js"),require("../../../../../../constants/streamSourceType.js"),require("../../../../../../componentsV2/PadModeSelect/PadModeSelect.js"),require("../../../../../../componentsV2/PadModeSelect/PadModeSelect.constants.js"),require("../../../../../../componentsV2/AppCommonsProvider/AppCommonsProvider.js"),require("../../../../../../utils/mobileDetect.js"),require("../../../../../../componentsV2/AppHeader/V3/VersionSelect/VersionSelect.js"),require("../../../../../../componentsV2/UniversalLink/UniversalLink.scss.js"),require("../../../../../../componentsV2/AppHeader/V3/AssetChips/AssetChips.scss.js"),require("moment"),require("../../../../../../componentsV2/AppHeader/V3/DqStatusIcon/DqStatusIcon.js"),require("../../../../../../componentsV2/AppHeader/V3/DqStatusIcon/DqStatusIcon.constants.js"),require("../../../../../../componentsV2/AppFooter/DqPopover/DqStatusIcon/DqStatusIcon.js"),require("../../../../../../componentsV2/AppDqPopover/DqAlertTooltip/DqAlertTooltip.scss.js"),require("../../../../../../componentsV2/AppDqPopover/DqAlert/DqAlert.scss.js"),require("../../../../../../componentsV2/AppDqPopover/DqAsset/DqAsset.scss.js"),require("../../../../../../componentsV2/AppDqPopover/AppDqPopover.scss.js"),require("../../../../../AppIcon/AppIcon.js"),require("../../../../../../utils/getSingleAsset.js"),require("../../../../../../componentsV2/AppHeader/V3/AssetSelector/AssetSelectorChip/AssetSelectorChip.js"),require("../../../../../../componentsV2/AppHeader/V3/AssetSelector/constants.js"),require("../../../../../../componentsV2/AppHeader/V3/AssetSelector/AssetSelectorSelect/AssetSelectorSelect.scss.js"),require("../../../../../../componentsV2/AppHeader/V3/AssetSelector/AssetSelectorSelect/loadAssets.js"),require("../../../../../../componentsV2/AppHeader/V3/AssetSelector/AssetSelector.scss.js"),require("../../../../../../clients/subscriptions/constants.js"),require("querystring"),require("uuid/v1"),require("../../../../../../clients/subscriptions.v1.js"),require("../../../../../../clients/subscriptions/subscriptions-client.factory.js"),require("jsona"),require("../../../../../../utils/env.js"),require("../../../../../StatusBadge/constants.js"),require("lodash/set"),require("lodash/get"),require("lodash/unset"),require("../../../../../../clients/api/apiCore.js"),require("../../../../../../clients/constants.js"),require("../../../../../../clients/sso/auth0.js"),require("../../../../../../clients/sso/oauth2.js"),require("../../../../../../clients/api/rateLimiter.js"),require("lodash/isEmpty"),require("lodash/sortBy"),require("../../../../../DevCenter/DevCenterAppContainer/components/CommentsSwitch/CommentsSwitchContext.js"),require("../../../../../../componentsV2/AppPanel/AppPanelsContext.js"),require("../../../../../../componentsV2/AppHeader/V3/AppTitle/AppTitle.constants.js"),require("../../../../../../componentsV2/AppHeader/V3/AppTitle/AppTitle.scss.js"),require("../../../../../../componentsV2/AppHeader/V3/constants.scss.js"),require("@babel/runtime/helpers/typeof"),require("../../../../../../componentsV2/AppHeader/V3/SettingsButton/SettingsButton.constants.js"),require("../../../../../../componentsV2/AppHeader/V3/Actions/Actions.constants.js"),require("../../../../../../componentsV2/AppHeader/V3/Actions/Actions.scss.js"),require("../../../../../../componentsV2/AppHeader/V3/AppHeaderV3.scss.js"),require("../../../../../../componentsV2/AppHeader/AppHeader.scss.js"),require("../../../../../../componentsV2/OffsetWellsButton/OffsetWellsButton.js"),require("../../../../../../componentsV2/ChartAxisExtreme/ChartAxisExtreme.scss.js"),require("highcharts"),require("../../../../../../componentsV2/ChartAxisExtreme/ChartAxisExtremeDragTracker.js"),require("../../../../../../componentsV2/Autocomplete/Autocomplete.js"),require("../../../../../../componentsV2/Select/Select.js"),require("../../../../../../componentsV2/AppPanel/AppPanel.js"),require("../../../../../../componentsV2/AppSettingsDivider/AppSettingsDivider.scss.js"),require("../../../../../../componentsV2/WellArchivedMessage/WellArchivedMessage.js"),require("../../../../../../componentsV2/DatePicker/DatePicker.js"),require("../../../../../../componentsV2/DragHandle/DragHandle.js"),require("../../../../../../componentsV2/CompletionsOffsetWellPicker/CompletionsOffsetWellPicker.js"),require("../../../../../../componentsV2/Slider/constants.js"),require("../../../../../../componentsV2/Slider/components/SliderThumb.js"),require("../../../../../../componentsV2/Slider/Slider.scss.js"),require("../../../../../../componentsV2/SliderAdvanced/SliderAdvanced.js"),require("react-color"),require("../../../../../../componentsV2/ColorPicker/Swatches/Swatches.scss.js"),require("../../../../../../componentsV2/ColorPicker/OpacityDragtracker/OpacityDragTracker.scss.js"),require("../../../../../../componentsV2/ColorPicker/ColorPicker.scss.js"),require("../../../../../../componentsV2/ChartHelper/ChartHelper.scss.js"),require("../../../../../../componentsV2/Hotkey/Hotkey.js"),require("@tanstack/react-query"),require("../../../../../../componentsV2/InterventionEventSelector/useInterventionUnitEvents.js"),require("../../../../../../componentsV2/InterventionEventSelector/InterventionEventSelector.scss.js");var c=e.memo((function(e){var c=e.value,u=e.wellId,p=e.loadingWellIds,a=e.metric,m=e.maxLines;if(!a)return r.jsx(s.Typography,{variant:"body2",className:o.cellData,children:"—"});if(p.has(u)&&void 0===c)return r.jsx(t.Skeleton,{type:"text",width:50,height:16});if(Number.isFinite(c)||c&&"Null"!==c){var q=function(e,s){return"number"!=typeof e?e:s.customConvert?s.customConvert(e,{precision:s.precision}):s.unitType&&s.from?i.convertValue(e,s.unitType,s.from,s.to):e}(c,a);return"string"==typeof q?r.jsx(n.TextEndTruncated,{testId:"MetricCell_text",maxLines:m,className:o.cellText,children:q}):r.jsx(s.Typography,{variant:"body2",className:o.cellData,children:q})}return r.jsx(s.Typography,{variant:"body2",className:o.cellData,children:"—"})}));c.displayName="MetricCell",exports.MetricCell=c,exports.TEXT_VALUE_TEST_ID="MetricCell_text";
|
|
2
2
|
//# sourceMappingURL=MetricCell.js.map
|