@corva/ui 3.74.1 → 3.74.3
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/cjs-bundle/components/OffsetWellPickerV5/components/Filter/Filter.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Filter/Filter.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/DateCell/DateCell.js +2 -0
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/DateCell/DateCell.js.map +1 -0
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableHead/OffsetWellsTableHead.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableHead/OffsetWellsTableHead.js.map +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/components/SkeletonTableRow/SkeletonTableRow.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SkeletonTableRow/SkeletonTableRow.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/hooks/useTableColumns.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/hooks/useTableColumns.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/useWellDataPipeline.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useWellDataPipeline.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/hooks/useSortedWells.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/hooks/useSortedWells.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/utils/doesWellPassFilters.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/utils/doesWellPassFilters.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/utils/sortWellsBy.js +2 -0
- package/cjs-bundle/components/OffsetWellPickerV5/utils/sortWellsBy.js.map +1 -0
- package/cjs-bundle/components/UserMention/index.js +1 -1
- package/cjs-bundle/components/UserMention/index.js.map +1 -1
- package/components/OffsetWellPickerV5/components/Filter/Filter.js +1 -1
- package/components/OffsetWellPickerV5/components/Filter/Filter.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/DateCell/DateCell.d.ts +12 -0
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/DateCell/DateCell.d.ts.map +1 -0
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/DateCell/DateCell.js +2 -0
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/DateCell/DateCell.js.map +1 -0
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/DateCell/index.d.ts +2 -0
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/{LastActiveCell → DateCell}/index.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/index.d.ts +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/index.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableHead/OffsetWellsTableHead.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableHead/OffsetWellsTableHead.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableHead/OffsetWellsTableHead.js.map +1 -1
- 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/components/SkeletonTableRow/SkeletonTableRow.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SkeletonTableRow/SkeletonTableRow.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SkeletonTableRow/SkeletonTableRow.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/hooks/useTableColumns.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/hooks/useTableColumns.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/hooks/useTableColumns.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.d.ts +2 -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 +10 -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/useWellDataPipeline.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useWellDataPipeline.js +1 -1
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useWellDataPipeline.js.map +1 -1
- package/components/OffsetWellPickerV5/hooks/useSortedWells.d.ts +1 -4
- package/components/OffsetWellPickerV5/hooks/useSortedWells.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/hooks/useSortedWells.js +1 -1
- package/components/OffsetWellPickerV5/hooks/useSortedWells.js.map +1 -1
- package/components/OffsetWellPickerV5/utils/__tests__/sortWellsBy.test.d.ts +2 -0
- package/components/OffsetWellPickerV5/utils/__tests__/sortWellsBy.test.d.ts.map +1 -0
- package/components/OffsetWellPickerV5/utils/doesWellPassFilters.d.ts +0 -1
- package/components/OffsetWellPickerV5/utils/doesWellPassFilters.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/utils/doesWellPassFilters.js +1 -1
- package/components/OffsetWellPickerV5/utils/doesWellPassFilters.js.map +1 -1
- package/components/OffsetWellPickerV5/utils/sortWellsBy.d.ts +22 -0
- package/components/OffsetWellPickerV5/utils/sortWellsBy.d.ts.map +1 -0
- package/components/OffsetWellPickerV5/utils/sortWellsBy.js +2 -0
- package/components/OffsetWellPickerV5/utils/sortWellsBy.js.map +1 -0
- package/components/UserMention/index.js +1 -1
- package/components/UserMention/index.js.map +1 -1
- package/mcp-server/server.mjs +1 -1
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/LastActiveCell/LastActiveCell.js +0 -2
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/LastActiveCell/LastActiveCell.js.map +0 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/LastActiveCell/LastActiveCell.d.ts +0 -10
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/LastActiveCell/LastActiveCell.d.ts.map +0 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/LastActiveCell/LastActiveCell.js +0 -2
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/LastActiveCell/LastActiveCell.js.map +0 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/LastActiveCell/index.d.ts +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableColumns.js","sources":["../../../../../../../src/components/OffsetWellPickerV5/components/OffsetWellsTable/hooks/useTableColumns.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { ColumnType, TableColumns } from '../../../constants';\nimport { usePickerPropsStore } from '../../../stores/picker-props-store/usePickerPropsStore';\n\ntype ResolvedColumn = {\n type: string;\n label: string;\n key: string;\n minWidth: number;\n flex: number;\n};\n\nconst DRILLING_ONLY_COLUMNS: Set<string> = new Set([\n ColumnType.rig,\n ColumnType.distance,\n ColumnType.taScore,\n]);\n\nconst INTERVENTION_ONLY_COLUMNS: Set<string> = new Set([\n ColumnType.interventionAsset,\n ColumnType.padName,\n ColumnType.formation,\n]);\n\nexport const useTableColumns = (\n metricsKeys: string[] | undefined,\n canViewCompanies = true,\n isWellSectionColumnVisible = true,\n isDistanceColumnVisible = true\n): ResolvedColumn[] | null => {\n const segment = usePickerPropsStore(state => state.segment);\n\n return useMemo(() => {\n if (!metricsKeys) return null;\n\n const wIndex = Math.min(metricsKeys.length, 3);\n const isIntervention = segment === 'intervention';\n\n let availableColumns = canViewCompanies\n ? TableColumns\n : TableColumns.filter(column => column.type !== ColumnType.company);\n\n if (!isWellSectionColumnVisible) {\n availableColumns = availableColumns.filter(column => column.type !== ColumnType.wellSection);\n }\n\n if (!isDistanceColumnVisible) {\n availableColumns = availableColumns.filter(column => column.type !== ColumnType.distance);\n }\n\n if (isIntervention) {\n availableColumns = availableColumns.filter(column => !DRILLING_ONLY_COLUMNS.has(column.type));\n } else {\n availableColumns = availableColumns.filter(\n column => !INTERVENTION_ONLY_COLUMNS.has(column.type)\n );\n }\n\n return availableColumns.reduce<ResolvedColumn[]>((acc, column) => {\n if (column.type === ColumnType.metrics) {\n return [\n ...acc,\n ...metricsKeys.map(key => ({\n ...column,\n key,\n minWidth: column.minWidth[wIndex],\n flex: column.flex,\n })),\n ];\n }\n return [...acc, { ...column, minWidth: column.minWidth[wIndex], flex: column.flex }];\n }, []);\n }, [metricsKeys, canViewCompanies, isWellSectionColumnVisible, isDistanceColumnVisible, segment]);\n};\n"],"names":["DRILLING_ONLY_COLUMNS","Set","ColumnType","rig","distance","taScore","INTERVENTION_ONLY_COLUMNS","interventionAsset","padName","formation","metricsKeys","canViewCompanies","isWellSectionColumnVisible","isDistanceColumnVisible","segment","usePickerPropsStore","state","useMemo","wIndex","Math","min","length","isIntervention","availableColumns","TableColumns","filter","column","type","company","wellSection","has","reduce","acc","metrics","concat","_toConsumableArray","map","key","_objectSpread","minWidth","flex"],"mappings":"+8BAaA,IAAMA,EAAqC,IAAIC,IAAI,CACjDC,aAAWC,IACXD,EAAUA,WAACE,SACXF,EAAAA,WAAWG,UAGPC,EAAyC,IAAIL,IAAI,CACrDC,
|
|
1
|
+
{"version":3,"file":"useTableColumns.js","sources":["../../../../../../../src/components/OffsetWellPickerV5/components/OffsetWellsTable/hooks/useTableColumns.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { ColumnType, TableColumns } from '../../../constants';\nimport { usePickerPropsStore } from '../../../stores/picker-props-store/usePickerPropsStore';\n\ntype ResolvedColumn = {\n type: string;\n label: string;\n key: string;\n minWidth: number;\n flex: number;\n};\n\nconst DRILLING_ONLY_COLUMNS: Set<string> = new Set([\n ColumnType.rig,\n ColumnType.distance,\n ColumnType.taScore,\n]);\n\nconst INTERVENTION_ONLY_COLUMNS: Set<string> = new Set([\n ColumnType.interventionAsset,\n ColumnType.padName,\n ColumnType.formation,\n ColumnType.lastInterventionAt,\n]);\n\nexport const useTableColumns = (\n metricsKeys: string[] | undefined,\n canViewCompanies = true,\n isWellSectionColumnVisible = true,\n isDistanceColumnVisible = true\n): ResolvedColumn[] | null => {\n const segment = usePickerPropsStore(state => state.segment);\n\n return useMemo(() => {\n if (!metricsKeys) return null;\n\n const wIndex = Math.min(metricsKeys.length, 3);\n const isIntervention = segment === 'intervention';\n\n let availableColumns = canViewCompanies\n ? TableColumns\n : TableColumns.filter(column => column.type !== ColumnType.company);\n\n if (!isWellSectionColumnVisible) {\n availableColumns = availableColumns.filter(column => column.type !== ColumnType.wellSection);\n }\n\n if (!isDistanceColumnVisible) {\n availableColumns = availableColumns.filter(column => column.type !== ColumnType.distance);\n }\n\n if (isIntervention) {\n availableColumns = availableColumns.filter(column => !DRILLING_ONLY_COLUMNS.has(column.type));\n } else {\n availableColumns = availableColumns.filter(\n column => !INTERVENTION_ONLY_COLUMNS.has(column.type)\n );\n }\n\n return availableColumns.reduce<ResolvedColumn[]>((acc, column) => {\n if (column.type === ColumnType.metrics) {\n return [\n ...acc,\n ...metricsKeys.map(key => ({\n ...column,\n key,\n minWidth: column.minWidth[wIndex],\n flex: column.flex,\n })),\n ];\n }\n return [...acc, { ...column, minWidth: column.minWidth[wIndex], flex: column.flex }];\n }, []);\n }, [metricsKeys, canViewCompanies, isWellSectionColumnVisible, isDistanceColumnVisible, segment]);\n};\n"],"names":["DRILLING_ONLY_COLUMNS","Set","ColumnType","rig","distance","taScore","INTERVENTION_ONLY_COLUMNS","interventionAsset","padName","formation","lastInterventionAt","metricsKeys","canViewCompanies","isWellSectionColumnVisible","isDistanceColumnVisible","segment","usePickerPropsStore","state","useMemo","wIndex","Math","min","length","isIntervention","availableColumns","TableColumns","filter","column","type","company","wellSection","has","reduce","acc","metrics","concat","_toConsumableArray","map","key","_objectSpread","minWidth","flex"],"mappings":"+8BAaA,IAAMA,EAAqC,IAAIC,IAAI,CACjDC,aAAWC,IACXD,EAAUA,WAACE,SACXF,EAAAA,WAAWG,UAGPC,EAAyC,IAAIL,IAAI,CACrDC,EAAAA,WAAWK,kBACXL,EAAAA,WAAWM,QACXN,EAAUA,WAACO,UACXP,aAAWQ,6CAGkB,SAC7BC,GAI4B,IAH5BC,6DACAC,6DACAC,6DAEMC,EAAUC,uBAAoB,SAAAC,GAAK,OAAIA,EAAMF,WAEnD,OAAOG,EAAOA,SAAC,WACb,IAAKP,EAAa,OAAO,KAEzB,IAAMQ,EAASC,KAAKC,IAAIV,EAAYW,OAAQ,GACtCC,EAA6B,iBAAZR,EAEnBS,EAAmBZ,EACnBa,EAAAA,aACAA,EAAAA,aAAaC,QAAO,SAAAC,GAAM,OAAIA,EAAOC,OAAS1B,EAAUA,WAAC2B,WAkB7D,OAhBKhB,IACHW,EAAmBA,EAAiBE,QAAO,SAAAC,GAAM,OAAIA,EAAOC,OAAS1B,EAAUA,WAAC4B,gBAG7EhB,IACHU,EAAmBA,EAAiBE,QAAO,SAAAC,GAAM,OAAIA,EAAOC,OAAS1B,EAAUA,WAACE,cAIhFoB,EADED,EACiBC,EAAiBE,QAAO,SAAAC,GAAM,OAAK3B,EAAsB+B,IAAIJ,EAAOC,SAEpEJ,EAAiBE,QAClC,SAAAC,GAAM,OAAKrB,EAA0ByB,IAAIJ,EAAOC,UAI5BI,QAAyB,SAACC,EAAKN,GACrD,OAAIA,EAAOC,OAAS1B,EAAUA,WAACgC,QAC7B,GAAAC,OAAAC,EAAAA,QACKH,GACAtB,EAAAA,QAAAA,EAAY0B,KAAI,SAAAC,GAAG,OAAAC,EAAAA,EAAA,CAAA,EACjBZ,GAAM,CAAA,EAAA,CACTW,IAAAA,EACAE,SAAUb,EAAOa,SAASrB,GAC1BsB,KAAMd,EAAOc,MACb,MAGKR,GAAAA,OAAAA,EAAAA,QAAAA,WAAUN,GAAM,CAAA,EAAA,CAAEa,SAAUb,EAAOa,SAASrB,GAASsB,KAAMd,EAAOc,QAC9E,GAAE,GACL,GAAG,CAAC9B,EAAaC,EAAkBC,EAA4BC,EAAyBC,GAC1F"}
|
package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/slicedToArray"),t=require("react"),n=require("../../stores/picker-props-store/usePickerPropsStore.js"),r=require("../../stores/view-store/useViewStore.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=i(e);exports.useRowInteractions=function(e){var i=e.data,o=e.isLimitedOffsetWells,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/slicedToArray"),t=require("react"),n=require("../../stores/picker-props-store/usePickerPropsStore.js"),r=require("../../stores/view-store/useViewStore.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=i(e);exports.useRowInteractions=function(e){var i=e.data,o=e.isLimitedOffsetWells,l=e.maxOffsetWellNumber,c=e.metricsKeys,u=e.isWellSectionColumnVisible,a=e.hasLastInterventionAtColumn,f=e.handleChangeOffsetWell,d=e.setActiveWellId,h=e.onRowClick,p=e.registerRow,k=n.usePickerPropsStore((function(e){return e.isWDUser})),m=n.usePickerPropsStore((function(e){return e.isViewOnly})),w=r.useViewStore((function(e){return e.isMapHidden})),C=t.useState(i.checked),b=s.default(C,2),v=b[0],S=b[1],W=t.useCallback((function(e){p(i.id,e)}),[p,i.id]);t.useEffect((function(){S(i.checked)}),[i.checked]);var M=t.useMemo((function(){return m?"View only mode. To edit offsets, use ".concat(k?"Offset Well Selection app":"WellHub","."):o&&!i.checked?"App can't process more than (".concat(l-1,") Offset Wells."):""}),[m,o,i.checked,k,l]),O=t.useMemo((function(){return u?"wellSection":c.length>0?"lastMetric":a?"lastInterventionAt":"lastDrillingAt"}),[u,c.length,a]);return{isViewOnly:m,isMapHidden:w,isChecked:v,rowRef:W,handleChangeCheckbox:function(e){f(i,e),S(e)},checkboxTooltipText:M,lastCellColumn:O,handleMouseEnter:function(){d(i.id)},handleMouseLeave:function(){d(null)},handleRowClick:function(){w||null==h||h(i.id)}}};
|
|
2
2
|
//# sourceMappingURL=useRowInteractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRowInteractions.js","sources":["../../../../../../src/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.ts"],"sourcesContent":["import { useCallback, useEffect, useState, useMemo } from 'react';\n\nimport { usePickerPropsStore } from '../../stores/picker-props-store/usePickerPropsStore';\nimport { useViewStore } from '../../stores/view-store/useViewStore';\n\ntype WellData = {\n id: number;\n checked?: boolean;\n name?: string;\n status?: string;\n [key: string]: unknown;\n};\n\ntype UseRowInteractionsParams = {\n data: WellData;\n isLimitedOffsetWells: boolean;\n maxOffsetWellNumber: number;\n metricsKeys: string[];\n isWellSectionColumnVisible: boolean;\n handleChangeOffsetWell: (well: WellData, checked: boolean) => void;\n setActiveWellId: (id: number | null) => void;\n onRowClick: (id: number) => void;\n registerRow: (wellId: number, node: HTMLElement | null) => void;\n};\n\nexport const useRowInteractions = ({\n data,\n isLimitedOffsetWells,\n maxOffsetWellNumber,\n metricsKeys,\n isWellSectionColumnVisible,\n handleChangeOffsetWell,\n setActiveWellId,\n onRowClick,\n registerRow,\n}: UseRowInteractionsParams) => {\n const isWDUser = usePickerPropsStore(state => state.isWDUser);\n const isViewOnly = usePickerPropsStore(state => state.isViewOnly);\n const isMapHidden = useViewStore(state => state.isMapHidden);\n const [isChecked, setIsChecked] = useState(data.checked);\n\n const rowRef = useCallback(\n (node: HTMLElement | null) => {\n registerRow(data.id, node);\n },\n [registerRow, data.id]\n );\n\n const handleChangeCheckbox = (checked: boolean) => {\n handleChangeOffsetWell(data, checked);\n setIsChecked(checked);\n };\n\n useEffect(() => {\n setIsChecked(data.checked);\n }, [data.checked]);\n\n const checkboxTooltipText = useMemo(() => {\n if (isViewOnly) {\n return `View only mode. To edit offsets, use ${\n isWDUser ? 'Offset Well Selection app' : 'WellHub'\n }.`;\n } else if (isLimitedOffsetWells && !data.checked) {\n return `App can't process more than (${maxOffsetWellNumber - 1}) Offset Wells.`;\n } else {\n return '';\n }\n }, [isViewOnly, isLimitedOffsetWells, data.checked, isWDUser, maxOffsetWellNumber]);\n\n const lastCellColumn = useMemo(() => {\n if (isWellSectionColumnVisible) {\n return 'wellSection';\n }\n\n if (metricsKeys.length > 0) {\n return 'lastMetric';\n }\n\n return '
|
|
1
|
+
{"version":3,"file":"useRowInteractions.js","sources":["../../../../../../src/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.ts"],"sourcesContent":["import { useCallback, useEffect, useState, useMemo } from 'react';\n\nimport { usePickerPropsStore } from '../../stores/picker-props-store/usePickerPropsStore';\nimport { useViewStore } from '../../stores/view-store/useViewStore';\n\ntype WellData = {\n id: number;\n checked?: boolean;\n name?: string;\n status?: string;\n [key: string]: unknown;\n};\n\ntype UseRowInteractionsParams = {\n data: WellData;\n isLimitedOffsetWells: boolean;\n maxOffsetWellNumber: number;\n metricsKeys: string[];\n isWellSectionColumnVisible: boolean;\n hasLastInterventionAtColumn: boolean;\n handleChangeOffsetWell: (well: WellData, checked: boolean) => void;\n setActiveWellId: (id: number | null) => void;\n onRowClick: (id: number) => void;\n registerRow: (wellId: number, node: HTMLElement | null) => void;\n};\n\nexport const useRowInteractions = ({\n data,\n isLimitedOffsetWells,\n maxOffsetWellNumber,\n metricsKeys,\n isWellSectionColumnVisible,\n hasLastInterventionAtColumn,\n handleChangeOffsetWell,\n setActiveWellId,\n onRowClick,\n registerRow,\n}: UseRowInteractionsParams) => {\n const isWDUser = usePickerPropsStore(state => state.isWDUser);\n const isViewOnly = usePickerPropsStore(state => state.isViewOnly);\n const isMapHidden = useViewStore(state => state.isMapHidden);\n const [isChecked, setIsChecked] = useState(data.checked);\n\n const rowRef = useCallback(\n (node: HTMLElement | null) => {\n registerRow(data.id, node);\n },\n [registerRow, data.id]\n );\n\n const handleChangeCheckbox = (checked: boolean) => {\n handleChangeOffsetWell(data, checked);\n setIsChecked(checked);\n };\n\n useEffect(() => {\n setIsChecked(data.checked);\n }, [data.checked]);\n\n const checkboxTooltipText = useMemo(() => {\n if (isViewOnly) {\n return `View only mode. To edit offsets, use ${\n isWDUser ? 'Offset Well Selection app' : 'WellHub'\n }.`;\n } else if (isLimitedOffsetWells && !data.checked) {\n return `App can't process more than (${maxOffsetWellNumber - 1}) Offset Wells.`;\n } else {\n return '';\n }\n }, [isViewOnly, isLimitedOffsetWells, data.checked, isWDUser, maxOffsetWellNumber]);\n\n const lastCellColumn = useMemo(() => {\n if (isWellSectionColumnVisible) {\n return 'wellSection';\n }\n\n if (metricsKeys.length > 0) {\n return 'lastMetric';\n }\n\n return hasLastInterventionAtColumn ? 'lastInterventionAt' : 'lastDrillingAt';\n }, [isWellSectionColumnVisible, metricsKeys.length, hasLastInterventionAtColumn]);\n\n const handleMouseEnter = () => {\n setActiveWellId(data.id);\n };\n\n const handleMouseLeave = () => {\n setActiveWellId(null);\n };\n\n const handleRowClick = () => {\n if (!isMapHidden) {\n onRowClick?.(data.id);\n }\n };\n\n return {\n isViewOnly,\n isMapHidden,\n isChecked,\n rowRef,\n handleChangeCheckbox,\n checkboxTooltipText,\n lastCellColumn,\n handleMouseEnter,\n handleMouseLeave,\n handleRowClick,\n };\n};\n"],"names":["_ref","data","isLimitedOffsetWells","maxOffsetWellNumber","metricsKeys","isWellSectionColumnVisible","hasLastInterventionAtColumn","handleChangeOffsetWell","setActiveWellId","onRowClick","registerRow","isWDUser","usePickerPropsStore","state","isViewOnly","isMapHidden","useViewStore","_useState","useState","checked","_useState2","_slicedToArray","isChecked","setIsChecked","rowRef","useCallback","node","id","useEffect","checkboxTooltipText","useMemo","concat","lastCellColumn","length","handleChangeCheckbox","handleMouseEnter","handleMouseLeave","handleRowClick"],"mappings":"oXA0BkC,SAWFA,GAAA,IAV9BC,IAAAA,KACAC,IAAAA,qBACAC,IAAAA,oBACAC,IAAAA,YACAC,IAAAA,2BACAC,IAAAA,4BACAC,IAAAA,uBACAC,IAAAA,gBACAC,IAAAA,WACAC,IAAAA,YAEMC,EAAWC,uBAAoB,SAAAC,GAAK,OAAIA,EAAMF,YAC9CG,EAAaF,uBAAoB,SAAAC,GAAK,OAAIA,EAAMC,cAChDC,EAAcC,gBAAa,SAAAH,GAAK,OAAIA,EAAME,eAChDE,EAAkCC,EAAAA,SAASjB,EAAKkB,SAAQC,EAAAC,EAAAA,QAAAJ,EAAA,GAAjDK,EAASF,EAAA,GAAEG,EAAYH,EAAA,GAExBI,EAASC,eACb,SAACC,GACChB,EAAYT,EAAK0B,GAAID,EACtB,GACD,CAAChB,EAAaT,EAAK0B,KAQrBC,EAAAA,WAAU,WACRL,EAAatB,EAAKkB,QACpB,GAAG,CAAClB,EAAKkB,UAET,IAAMU,EAAsBC,EAAAA,SAAQ,WAClC,OAAIhB,EACF,wCAAAiB,OACEpB,EAAW,4BAA8B,UAAS,KAE3CT,IAAyBD,EAAKkB,QACAhB,gCAAAA,OAAAA,EAAsB,EAAC,mBAEvD,EAEX,GAAG,CAACW,EAAYZ,EAAsBD,EAAKkB,QAASR,EAAUR,IAExD6B,EAAiBF,EAAAA,SAAQ,WAC7B,OAAIzB,EACK,cAGLD,EAAY6B,OAAS,EAChB,aAGF3B,EAA8B,qBAAuB,gBAC7D,GAAE,CAACD,EAA4BD,EAAY6B,OAAQ3B,IAgBpD,MAAO,CACLQ,WAAAA,EACAC,YAAAA,EACAO,UAAAA,EACAE,OAAAA,EACAU,qBApD2B,SAACf,GAC5BZ,EAAuBN,EAAMkB,GAC7BI,EAAaJ,IAmDbU,oBAAAA,EACAG,eAAAA,EACAG,iBAtBuB,WACvB3B,EAAgBP,EAAK0B,KAsBrBS,iBAnBuB,WACvB5B,EAAgB,OAmBhB6B,eAhBqB,WAChBtB,GACHN,SAAAA,EAAaR,EAAK0B,KAgBxB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/toConsumableArray"),t=require("lodash");require("../../utils/index.js");var a=require("../../utils/metrics/metricsConfig.js");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=l(e),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/toConsumableArray"),t=require("lodash");require("../../utils/index.js");var a=require("../../utils/metrics/metricsConfig.js");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=l(e),n=a,o=[n.mud_type.key],r={status:"status",company:"companyId",rig:"rigName",program:"programName",basin:"basin",county:"county",area:"area",formation:"formation",stringDesign:"stringDesign",interventionAsset:"interventionAsset",padName:"padName",radius:"radius",period:"period",sideTracks:"sideTracks",drillingWells:"drillingWells",activeInterventionWells:"activeInterventionWells",timeRangeFrom:"timeRangeFrom",timeRangeTo:"timeRangeTo"},s=[{value:r.company,label:"Company"},{value:r.program,label:"Program/BU"},{value:r.rig,label:"Rig"},{value:r.basin,label:"Basin"},{value:r.county,label:"County"},{value:r.area,label:"Area"},{value:r.formation,label:"Target Formation"},{value:r.stringDesign,label:"String Design"},{value:r.interventionAsset,label:"Intervention Asset"},{value:r.padName,label:"Pad"},{value:r.status,label:"Status"}],p={unknown:"unknown",idle:"idle",active:"active",paused:"paused",complete:"complete"},m=[{value:p.unknown,color:"#FFFFFF"},{value:p.idle,color:"#ADADFF"},{value:p.active,color:"#A8FF3D"},{value:p.paused,color:"#FFF66C"},{value:p.complete,color:"#76C2FF"}],d={name:"name",status:"status",company:"companyName",rig:"rigName",interventionAsset:"interventionAsset",padName:"padName",formation:"formation",distance:"distance",taScore:"TA",lastDrillingAt:"lastDrillingAt",lastInterventionAt:"lastInterventionAt",metrics:"metrics",wellSection:"wellSection"},u=[{type:d.name,label:"Well Name",key:d.name,minWidth:[280,197,197,186],flex:3},{type:d.status,label:"",key:d.status,minWidth:[40,40,40,30],flex:0},{type:d.company,label:"Company",key:d.company,minWidth:[180,140,140,93],flex:2},{type:d.interventionAsset,label:"Intervention Asset",key:d.interventionAsset,minWidth:[200,150,150,100],flex:2},{type:d.padName,label:"Pad",key:d.padName,minWidth:[160,130,130,90],flex:1.5},{type:d.formation,label:"Formation",key:d.formation,minWidth:[160,130,130,90],flex:1.5},{type:d.rig,label:"Rig",key:d.rig,minWidth:[220,140,140,93],flex:2},{type:d.distance,label:"Distance",key:d.distance,minWidth:[160,160,122,93],flex:1},{type:d.taScore,label:"TA",key:d.taScore,minWidth:[90,90,75,70],flex:1},{type:d.lastDrillingAt,label:"Date",key:d.lastDrillingAt,minWidth:[140,140,108,98],flex:1.5},{type:d.lastInterventionAt,label:"Last Intervention At",key:d.lastInterventionAt,minWidth:[180,160,128,108],flex:1.5},{type:d.metrics,label:"",key:"",minWidth:[0,212,141,141],flex:2},{type:d.wellSection,label:"Well Section",key:d.wellSection,minWidth:[180,131,131,97],flex:1.5}],_=t.sortBy([n.hole_depth,n.hole_depth_change,n.hole_depth_change_lateral,n.drilled_feet_rotary,n.drilled_feet_slide,n.rop_gross,n.rop,n.rop_rotary,n.rop_slide,n.drilled_feet_rotary_percentage,n.drilled_feet_slide_percentage,n.on_bottom_percentage,n.cost_per_ft,n.cost_per_lat_ft,n.feet_per_day,n.target_formation,n.mud_type,n.total_time].concat(i.default("production"!==process.env.REACT_APP_ENVIRONMENT?[n.npt,n.circulating_time,n.spud_to_rig_release_time,n.spud_to_total_depth_time]:[])),"label");exports.ALL_SECTION_KEY="all",exports.ALL_SECTION_LABEL="All",exports.COMPANY_PROVIDERS_FOR_IDAS=["xto"],exports.ColumnType=d,exports.DEFAULT_RADIUS_KM=40,exports.DEFAULT_RADIUS_MILES=25,exports.EXPANDED_WELL_NAME_WIDTH=450,exports.FilterOptions=s,exports.FilterType=r,exports.H_SCROLL_THRESHOLD=5,exports.LEAVE_TOUCH_DELAY=1e4,exports.MAX_MANUAL_METRICS_COUNT=2,exports.METRICS_LIST=_,exports.MapLayout={width:{default:600,min:314,max:900},minContentWidth:400,columnsGap:16,hintsStashBreakpoint:480},exports.NonConvertableMetrics=o,exports.OBJECTIVE_PERIOD_LIST=[{value:"all",label:"All"},{value:"last12h",label:"Last 12 hrs"},{value:"last24h",label:"Last 24 hrs"},{value:"last7d",label:"Last 7 days"},{value:"lastMonth",label:"Last Month"},{value:"custom",label:"Custom"}],exports.ROWS_PER_PAGE=50,exports.SortDirection={ASC:"ASC",DESC:"DESC"},exports.StatusOptions=m,exports.TableColumns=u,exports.WellSectionColors=["#6EACFF","#69B919","#E95DAF","#A77DFF","#77FFC1","#018EFE","#FF5D7E","#B9E310","#FFD111","#24BB8E","#C426F3"],exports.WellStatus=p;
|
|
2
2
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../../../src/components/OffsetWellPickerV5/constants.ts"],"sourcesContent":["import { sortBy } from 'lodash';\n\nimport { metricsUtils } from '~/utils';\n\nexport const DEFAULT_RADIUS_MILES = 25;\nexport const DEFAULT_RADIUS_KM = 40;\n\nexport const ALL_SECTION_KEY = 'all';\nexport const ALL_SECTION_LABEL = 'All';\nexport const EXPANDED_WELL_NAME_WIDTH = 450;\nexport const ROWS_PER_PAGE = 50;\n// Horizontal scroll (px) past which the sticky well-name column casts its shadow.\nexport const H_SCROLL_THRESHOLD = 5;\nexport const LEAVE_TOUCH_DELAY = 10000;\nexport const COMPANY_PROVIDERS_FOR_IDAS = ['xto'] as const;\nconst metrics = metricsUtils.default;\n\nexport const NonConvertableMetrics = [metrics.mud_type.key] as const;\n\nexport const FilterType = {\n status: 'status',\n company: 'companyId',\n rig: 'rigName',\n program: 'programName',\n basin: 'basin',\n county: 'county',\n area: 'area',\n formation: 'formation',\n stringDesign: 'stringDesign',\n interventionAsset: 'interventionAsset',\n padName: 'padName',\n radius: 'radius',\n period: 'period',\n sideTracks: 'sideTracks',\n drillingWells: 'drillingWells',\n activeInterventionWells: 'activeInterventionWells',\n timeRangeFrom: 'timeRangeFrom',\n timeRangeTo: 'timeRangeTo',\n} as const;\n\nexport const FilterOptions = [\n {\n value: FilterType.company,\n label: 'Company',\n },\n {\n value: FilterType.program,\n label: 'Program/BU',\n },\n {\n value: FilterType.rig,\n label: 'Rig',\n },\n {\n value: FilterType.basin,\n label: 'Basin',\n },\n {\n value: FilterType.county,\n label: 'County',\n },\n {\n value: FilterType.area,\n label: 'Area',\n },\n {\n value: FilterType.formation,\n label: 'Target Formation',\n },\n {\n value: FilterType.stringDesign,\n label: 'String Design',\n },\n {\n value: FilterType.interventionAsset,\n label: 'Intervention Asset',\n },\n {\n value: FilterType.padName,\n label: 'Pad',\n },\n {\n value: FilterType.status,\n label: 'Status',\n },\n] as const;\n\nexport const WellStatus = {\n unknown: 'unknown',\n idle: 'idle',\n active: 'active',\n paused: 'paused',\n complete: 'complete',\n} as const;\n\nexport const StatusOptions = [\n { value: WellStatus.unknown, color: '#FFFFFF' },\n { value: WellStatus.idle, color: '#ADADFF' },\n { value: WellStatus.active, color: '#A8FF3D' },\n { value: WellStatus.paused, color: '#FFF66C' },\n { value: WellStatus.complete, color: '#76C2FF' },\n] as const;\n\nexport const ColumnType = {\n name: 'name',\n status: 'status',\n company: 'companyName',\n rig: 'rigName',\n interventionAsset: 'interventionAsset',\n padName: 'padName',\n formation: 'formation',\n distance: 'distance',\n taScore: 'TA',\n lastActive: 'lastActive',\n metrics: 'metrics',\n wellSection: 'wellSection',\n} as const;\n\nexport const TableColumns = [\n {\n type: ColumnType.name,\n label: 'Well Name',\n key: ColumnType.name,\n minWidth: [280, 197, 197, 186] as const,\n flex: 3,\n },\n {\n type: ColumnType.status,\n label: '',\n key: ColumnType.status,\n minWidth: [40, 40, 40, 30] as const,\n flex: 0,\n },\n {\n type: ColumnType.company,\n label: 'Company',\n key: ColumnType.company,\n minWidth: [180, 140, 140, 93] as const,\n flex: 2,\n },\n {\n type: ColumnType.interventionAsset,\n label: 'Intervention Asset',\n key: ColumnType.interventionAsset,\n minWidth: [200, 150, 150, 100] as const,\n flex: 2,\n },\n {\n type: ColumnType.padName,\n label: 'Pad',\n key: ColumnType.padName,\n minWidth: [160, 130, 130, 90] as const,\n flex: 1.5,\n },\n {\n type: ColumnType.formation,\n label: 'Formation',\n key: ColumnType.formation,\n minWidth: [160, 130, 130, 90] as const,\n flex: 1.5,\n },\n {\n type: ColumnType.rig,\n label: 'Rig',\n key: ColumnType.rig,\n minWidth: [220, 140, 140, 93] as const,\n flex: 2,\n },\n {\n type: ColumnType.distance,\n label: 'Distance',\n key: ColumnType.distance,\n minWidth: [160, 160, 122, 93] as const,\n flex: 1,\n },\n {\n type: ColumnType.taScore,\n label: 'TA',\n key: ColumnType.taScore,\n minWidth: [90, 90, 75, 70] as const,\n flex: 1,\n },\n {\n type: ColumnType.lastActive,\n label: 'Last Active',\n key: ColumnType.lastActive,\n minWidth: [140, 140, 108, 98] as const,\n flex: 1.5,\n },\n {\n type: ColumnType.metrics,\n label: '',\n key: '',\n minWidth: [0, 212, 141, 141] as const,\n flex: 2,\n },\n {\n type: ColumnType.wellSection,\n label: 'Well Section',\n key: ColumnType.wellSection,\n minWidth: [180, 131, 131, 97] as const,\n flex: 1.5,\n },\n];\n\nexport const OBJECTIVE_PERIOD_LIST = [\n { value: 'all', label: 'All' },\n { value: 'last12h', label: 'Last 12 hrs' },\n { value: 'last24h', label: 'Last 24 hrs' },\n { value: 'last7d', label: 'Last 7 days' },\n { value: 'lastMonth', label: 'Last Month' },\n { value: 'custom', label: 'Custom' },\n] as const;\n\n/**\n * Max metrics a user can manually pick in the Settings checklist.\n * Excludes the segment's always-present default metric, so the total number of\n * metric columns is `MAX_MANUAL_METRICS_COUNT + 1` when a default exists.\n */\nexport const MAX_MANUAL_METRICS_COUNT = 2;\n\nexport const METRICS_LIST = sortBy(\n [\n metrics.hole_depth,\n metrics.hole_depth_change,\n metrics.hole_depth_change_lateral,\n metrics.drilled_feet_rotary,\n metrics.drilled_feet_slide,\n metrics.rop_gross,\n metrics.rop,\n metrics.rop_rotary,\n metrics.rop_slide,\n metrics.drilled_feet_rotary_percentage,\n metrics.drilled_feet_slide_percentage,\n metrics.on_bottom_percentage,\n metrics.cost_per_ft,\n metrics.cost_per_lat_ft,\n metrics.feet_per_day,\n metrics.target_formation,\n metrics.mud_type,\n metrics.total_time,\n ...(process.env.REACT_APP_ENVIRONMENT !== 'production'\n ? [\n metrics.npt,\n metrics.circulating_time,\n metrics.spud_to_rig_release_time,\n metrics.spud_to_total_depth_time,\n ]\n : []),\n ],\n 'label'\n);\n\nexport const WellSectionColors = [\n '#6EACFF',\n '#69B919',\n '#E95DAF',\n '#A77DFF',\n '#77FFC1',\n '#018EFE',\n '#FF5D7E',\n '#B9E310',\n '#FFD111',\n '#24BB8E',\n '#C426F3',\n] as const;\n\n// --- Resizable map ---\n// Layout for the draggable map/content split (px). Width bounds are configurable; tune\n// min/max on large monitors. `mapWidth` is persisted per user (see view-store /\n// user-settings-store).\n//\n// `minContentWidth` and `columnsGap` mirror values authored in\n// `OffsetWellPickerV5.module.css` (`.rightColumn { min-width: 400px }` and\n// `.columnsContainer { gap: 16px }`); they exist here only for the effective-max clamp\n// math and must stay in sync with the CSS. `hintsStashBreakpoint` is the map width at/below\n// which the top-right hints collapse into an icon + dropdown stash — but only while the top-left\n// radius input is also visible (they compete for the same horizontal band). With the radius input\n// hidden the hints stay expanded down to the map's min width.\nexport const MapLayout = {\n width: {\n default: 600,\n min: 314,\n max: 900, // ~1.5× default — largest the map should grow on a big modal\n },\n minContentWidth: 400,\n columnsGap: 16,\n hintsStashBreakpoint: 480,\n} as const;\n\nexport const DEFAULT_METRICS_KEY = 'hole_depth_change';\n\nexport type SortDirectionType = 'ASC' | 'DESC';\n\nexport type SortDirectionStatic = {\n ASC: 'ASC';\n DESC: 'DESC';\n};\n\nexport const SortDirection: SortDirectionStatic = { ASC: 'ASC', DESC: 'DESC' };\n"],"names":["metrics","metricsUtils","NonConvertableMetrics","mud_type","key","FilterType","status","company","rig","program","basin","county","area","formation","stringDesign","interventionAsset","padName","radius","period","sideTracks","drillingWells","activeInterventionWells","timeRangeFrom","timeRangeTo","FilterOptions","value","label","WellStatus","unknown","idle","active","paused","complete","StatusOptions","color","ColumnType","name","distance","taScore","lastActive","wellSection","TableColumns","type","minWidth","flex","METRICS_LIST","sortBy","hole_depth","hole_depth_change","hole_depth_change_lateral","drilled_feet_rotary","drilled_feet_slide","rop_gross","rop","rop_rotary","rop_slide","drilled_feet_rotary_percentage","drilled_feet_slide_percentage","on_bottom_percentage","cost_per_ft","cost_per_lat_ft","feet_per_day","target_formation","total_time","process","env","REACT_APP_ENVIRONMENT","npt","circulating_time","spud_to_rig_release_time","spud_to_total_depth_time","width","default","min","max","minContentWidth","columnsGap","hintsStashBreakpoint","ASC","DESC"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../../src/components/OffsetWellPickerV5/constants.ts"],"sourcesContent":["import { sortBy } from 'lodash';\n\nimport { metricsUtils } from '~/utils';\n\nexport const DEFAULT_RADIUS_MILES = 25;\nexport const DEFAULT_RADIUS_KM = 40;\n\nexport const ALL_SECTION_KEY = 'all';\nexport const ALL_SECTION_LABEL = 'All';\nexport const EXPANDED_WELL_NAME_WIDTH = 450;\nexport const ROWS_PER_PAGE = 50;\n// Horizontal scroll (px) past which the sticky well-name column casts its shadow.\nexport const H_SCROLL_THRESHOLD = 5;\nexport const LEAVE_TOUCH_DELAY = 10000;\nexport const COMPANY_PROVIDERS_FOR_IDAS = ['xto'] as const;\nconst metrics = metricsUtils.default;\n\nexport const NonConvertableMetrics = [metrics.mud_type.key] as const;\n\nexport const FilterType = {\n status: 'status',\n company: 'companyId',\n rig: 'rigName',\n program: 'programName',\n basin: 'basin',\n county: 'county',\n area: 'area',\n formation: 'formation',\n stringDesign: 'stringDesign',\n interventionAsset: 'interventionAsset',\n padName: 'padName',\n radius: 'radius',\n period: 'period',\n sideTracks: 'sideTracks',\n drillingWells: 'drillingWells',\n activeInterventionWells: 'activeInterventionWells',\n timeRangeFrom: 'timeRangeFrom',\n timeRangeTo: 'timeRangeTo',\n} as const;\n\nexport const FilterOptions = [\n {\n value: FilterType.company,\n label: 'Company',\n },\n {\n value: FilterType.program,\n label: 'Program/BU',\n },\n {\n value: FilterType.rig,\n label: 'Rig',\n },\n {\n value: FilterType.basin,\n label: 'Basin',\n },\n {\n value: FilterType.county,\n label: 'County',\n },\n {\n value: FilterType.area,\n label: 'Area',\n },\n {\n value: FilterType.formation,\n label: 'Target Formation',\n },\n {\n value: FilterType.stringDesign,\n label: 'String Design',\n },\n {\n value: FilterType.interventionAsset,\n label: 'Intervention Asset',\n },\n {\n value: FilterType.padName,\n label: 'Pad',\n },\n {\n value: FilterType.status,\n label: 'Status',\n },\n] as const;\n\nexport const WellStatus = {\n unknown: 'unknown',\n idle: 'idle',\n active: 'active',\n paused: 'paused',\n complete: 'complete',\n} as const;\n\nexport const StatusOptions = [\n { value: WellStatus.unknown, color: '#FFFFFF' },\n { value: WellStatus.idle, color: '#ADADFF' },\n { value: WellStatus.active, color: '#A8FF3D' },\n { value: WellStatus.paused, color: '#FFF66C' },\n { value: WellStatus.complete, color: '#76C2FF' },\n] as const;\n\nexport const ColumnType = {\n name: 'name',\n status: 'status',\n company: 'companyName',\n rig: 'rigName',\n interventionAsset: 'interventionAsset',\n padName: 'padName',\n formation: 'formation',\n distance: 'distance',\n taScore: 'TA',\n lastDrillingAt: 'lastDrillingAt',\n lastInterventionAt: 'lastInterventionAt',\n metrics: 'metrics',\n wellSection: 'wellSection',\n} as const;\n\nexport const TableColumns = [\n {\n type: ColumnType.name,\n label: 'Well Name',\n key: ColumnType.name,\n minWidth: [280, 197, 197, 186] as const,\n flex: 3,\n },\n {\n type: ColumnType.status,\n label: '',\n key: ColumnType.status,\n minWidth: [40, 40, 40, 30] as const,\n flex: 0,\n },\n {\n type: ColumnType.company,\n label: 'Company',\n key: ColumnType.company,\n minWidth: [180, 140, 140, 93] as const,\n flex: 2,\n },\n {\n type: ColumnType.interventionAsset,\n label: 'Intervention Asset',\n key: ColumnType.interventionAsset,\n minWidth: [200, 150, 150, 100] as const,\n flex: 2,\n },\n {\n type: ColumnType.padName,\n label: 'Pad',\n key: ColumnType.padName,\n minWidth: [160, 130, 130, 90] as const,\n flex: 1.5,\n },\n {\n type: ColumnType.formation,\n label: 'Formation',\n key: ColumnType.formation,\n minWidth: [160, 130, 130, 90] as const,\n flex: 1.5,\n },\n {\n type: ColumnType.rig,\n label: 'Rig',\n key: ColumnType.rig,\n minWidth: [220, 140, 140, 93] as const,\n flex: 2,\n },\n {\n type: ColumnType.distance,\n label: 'Distance',\n key: ColumnType.distance,\n minWidth: [160, 160, 122, 93] as const,\n flex: 1,\n },\n {\n type: ColumnType.taScore,\n label: 'TA',\n key: ColumnType.taScore,\n minWidth: [90, 90, 75, 70] as const,\n flex: 1,\n },\n {\n type: ColumnType.lastDrillingAt,\n label: 'Date',\n key: ColumnType.lastDrillingAt,\n minWidth: [140, 140, 108, 98] as const,\n flex: 1.5,\n },\n {\n type: ColumnType.lastInterventionAt,\n label: 'Last Intervention At',\n key: ColumnType.lastInterventionAt,\n minWidth: [180, 160, 128, 108] as const,\n flex: 1.5,\n },\n {\n type: ColumnType.metrics,\n label: '',\n key: '',\n minWidth: [0, 212, 141, 141] as const,\n flex: 2,\n },\n {\n type: ColumnType.wellSection,\n label: 'Well Section',\n key: ColumnType.wellSection,\n minWidth: [180, 131, 131, 97] as const,\n flex: 1.5,\n },\n];\n\nexport const OBJECTIVE_PERIOD_LIST = [\n { value: 'all', label: 'All' },\n { value: 'last12h', label: 'Last 12 hrs' },\n { value: 'last24h', label: 'Last 24 hrs' },\n { value: 'last7d', label: 'Last 7 days' },\n { value: 'lastMonth', label: 'Last Month' },\n { value: 'custom', label: 'Custom' },\n] as const;\n\n/**\n * Max metrics a user can manually pick in the Settings checklist.\n * Excludes the segment's always-present default metric, so the total number of\n * metric columns is `MAX_MANUAL_METRICS_COUNT + 1` when a default exists.\n */\nexport const MAX_MANUAL_METRICS_COUNT = 2;\n\nexport const METRICS_LIST = sortBy(\n [\n metrics.hole_depth,\n metrics.hole_depth_change,\n metrics.hole_depth_change_lateral,\n metrics.drilled_feet_rotary,\n metrics.drilled_feet_slide,\n metrics.rop_gross,\n metrics.rop,\n metrics.rop_rotary,\n metrics.rop_slide,\n metrics.drilled_feet_rotary_percentage,\n metrics.drilled_feet_slide_percentage,\n metrics.on_bottom_percentage,\n metrics.cost_per_ft,\n metrics.cost_per_lat_ft,\n metrics.feet_per_day,\n metrics.target_formation,\n metrics.mud_type,\n metrics.total_time,\n ...(process.env.REACT_APP_ENVIRONMENT !== 'production'\n ? [\n metrics.npt,\n metrics.circulating_time,\n metrics.spud_to_rig_release_time,\n metrics.spud_to_total_depth_time,\n ]\n : []),\n ],\n 'label'\n);\n\nexport const WellSectionColors = [\n '#6EACFF',\n '#69B919',\n '#E95DAF',\n '#A77DFF',\n '#77FFC1',\n '#018EFE',\n '#FF5D7E',\n '#B9E310',\n '#FFD111',\n '#24BB8E',\n '#C426F3',\n] as const;\n\n// --- Resizable map ---\n// Layout for the draggable map/content split (px). Width bounds are configurable; tune\n// min/max on large monitors. `mapWidth` is persisted per user (see view-store /\n// user-settings-store).\n//\n// `minContentWidth` and `columnsGap` mirror values authored in\n// `OffsetWellPickerV5.module.css` (`.rightColumn { min-width: 400px }` and\n// `.columnsContainer { gap: 16px }`); they exist here only for the effective-max clamp\n// math and must stay in sync with the CSS. `hintsStashBreakpoint` is the map width at/below\n// which the top-right hints collapse into an icon + dropdown stash — but only while the top-left\n// radius input is also visible (they compete for the same horizontal band). With the radius input\n// hidden the hints stay expanded down to the map's min width.\nexport const MapLayout = {\n width: {\n default: 600,\n min: 314,\n max: 900, // ~1.5× default — largest the map should grow on a big modal\n },\n minContentWidth: 400,\n columnsGap: 16,\n hintsStashBreakpoint: 480,\n} as const;\n\nexport const DEFAULT_METRICS_KEY = 'hole_depth_change';\n\nexport type SortDirectionType = 'ASC' | 'DESC';\n\nexport type SortDirectionStatic = {\n ASC: 'ASC';\n DESC: 'DESC';\n};\n\nexport const SortDirection: SortDirectionStatic = { ASC: 'ASC', DESC: 'DESC' };\n"],"names":["metrics","metricsUtils","NonConvertableMetrics","mud_type","key","FilterType","status","company","rig","program","basin","county","area","formation","stringDesign","interventionAsset","padName","radius","period","sideTracks","drillingWells","activeInterventionWells","timeRangeFrom","timeRangeTo","FilterOptions","value","label","WellStatus","unknown","idle","active","paused","complete","StatusOptions","color","ColumnType","name","distance","taScore","lastDrillingAt","lastInterventionAt","wellSection","TableColumns","type","minWidth","flex","METRICS_LIST","sortBy","hole_depth","hole_depth_change","hole_depth_change_lateral","drilled_feet_rotary","drilled_feet_slide","rop_gross","rop","rop_rotary","rop_slide","drilled_feet_rotary_percentage","drilled_feet_slide_percentage","on_bottom_percentage","cost_per_ft","cost_per_lat_ft","feet_per_day","target_formation","total_time","process","env","REACT_APP_ENVIRONMENT","npt","circulating_time","spud_to_rig_release_time","spud_to_total_depth_time","width","default","min","max","minContentWidth","columnsGap","hintsStashBreakpoint","ASC","DESC"],"mappings":"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"}
|
package/cjs-bundle/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useWellDataPipeline.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),r=require("@babel/runtime/helpers/slicedToArray"),s=require("react");require("../../stores/viewport-store/ViewportStoreContext.js"),require("../../stores/viewport-store/ViewportStoreProvider.js"),require("zustand"),require("lodash/isEqual");var t=require("../../stores/viewport-store/useViewportStore.js"),n=require("../../stores/viewport-store/utils/areWellMapsEqual.js");require("../../stores/company-safeguard/CompanySafeguardContext.js");var i=require("../../stores/company-safeguard/useCompanySafeguard.js"),o=require("../../stores/filter-store/useFilterStore.js");require("lodash"),require("../../stores/picker-props-store/PickerPropsStoreContext.js"),require("@babel/runtime/helpers/objectWithoutProperties"),require("../../viewport/ViewportProvider.js"),require("../../viewport/ViewportContext.js"),require("react/jsx-runtime");var l=require("../../stores/picker-props-store/usePickerPropsStore.js"),u=require("../../constants.js"),a=require("../../utils/isDrillingOnlyWell.js"),c=require("../../utils/isInterventionOnlyWell.js"),d=require("../useViewportWells/useViewportWells.js"),f=require("../useTileLoading.js"),p=require("../usePinnedWells.js"),q=require("../useExternalOffsets.js");require("../../stores/idas-resync-store/IdasResyncStoreContext.js"),require("../../stores/idas-resync-store/IdasResyncStoreProvider.js");var m=require("../../stores/idas-resync-store/useIdasResyncSync.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),r=require("@babel/runtime/helpers/slicedToArray"),s=require("react");require("../../stores/viewport-store/ViewportStoreContext.js"),require("../../stores/viewport-store/ViewportStoreProvider.js"),require("zustand"),require("lodash/isEqual");var t=require("../../stores/viewport-store/useViewportStore.js"),n=require("../../stores/viewport-store/utils/areWellMapsEqual.js");require("../../stores/company-safeguard/CompanySafeguardContext.js");var i=require("../../stores/company-safeguard/useCompanySafeguard.js"),o=require("../../stores/filter-store/useFilterStore.js");require("lodash"),require("../../stores/picker-props-store/PickerPropsStoreContext.js"),require("@babel/runtime/helpers/objectWithoutProperties"),require("../../viewport/ViewportProvider.js"),require("../../viewport/ViewportContext.js"),require("react/jsx-runtime");var l=require("../../stores/picker-props-store/usePickerPropsStore.js"),u=require("../../constants.js"),a=require("../../utils/isDrillingOnlyWell.js"),c=require("../../utils/isInterventionOnlyWell.js"),d=require("../useViewportWells/useViewportWells.js"),f=require("../useTileLoading.js"),p=require("../usePinnedWells.js"),q=require("../useExternalOffsets.js");require("../../stores/idas-resync-store/IdasResyncStoreContext.js"),require("../../stores/idas-resync-store/IdasResyncStoreProvider.js");var m=require("../../stores/idas-resync-store/useIdasResyncSync.js"),j=require("../../segment-config/index.js"),v=require("./useSearchedWells.js"),y=require("./useCompanyProvider.js"),W=require("./useFetchSubjectWell.js"),g=require("./useCompanyMetricKey.js"),S=require("./useAdvancedWells.js"),h=require("./utils/computeIsAllWellsLoaded.js"),b=require("./useInterventionEnrichment.js"),w=require("./usePadEnrichment.js");require("../../../../clients/subscriptions/constants.js"),require("@babel/runtime/helpers/asyncToGenerator"),require("@babel/runtime/regenerator"),require("querystring"),require("uuid/v1"),require("../../../../clients/subscriptions.v1.js"),require("../../../../clients/jsonApi/index.js"),require("../../../../clients/subscriptions/subscriptions-client.factory.js"),require("immutable"),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("../../../../utils/index.js"),require("uuid"),require("jsona"),require("../../../../utils/env.js"),require("../../../StatusBadge/constants.js"),require("@babel/runtime/helpers/toConsumableArray"),require("lodash/set"),require("lodash/get"),require("lodash/unset"),require("moment"),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("../../../../constants/streamSourceType.js"),require("../../../DevCenter/DevCenterAppContainer/components/CommentsSwitch/CommentsSwitchContext.js"),require("../../../../componentsV2/AppCommonsProvider/AppCommonsProvider.js"),require("../../../../componentsV2/AppCommonsProvider/AppCommonsContext.js"),require("../../../../componentsV2/AppSettings/AppSettingsPinningContext.js");var P=require("../../../../effects/useGlobalOffsetWellsSync.js");function C(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var I=C(e),O=C(r);function A(e,r){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),s.push.apply(s,t)}return s}function E(e){for(var r=1;r<arguments.length;r++){var s=null!=arguments[r]?arguments[r]:{};r%2?A(Object(s),!0).forEach((function(r){I.default(e,r,s[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):A(Object(s)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(s,r))}))}return e}exports.useWellDataPipeline=function(e){var r,C,I=e.subjectWellId,A=e.assetCompanyId,x=e.offsetSettings,L=e.maxOffsetWellNumber,V=e.isLoadAllWells,M=e.open,D=e.onSave,k=l.usePickerPropsStore((function(e){return e.segment})),T="intervention"===k,K=t.useViewportStore((function(e){return e.wells}),n.areWellMapsEqual),N=t.useViewportStore((function(e){return e.bounds})),R=o.useFilterStore((function(e){var r;return null===(r=e.filters.drillingWells)||void 0===r||r})),F=o.useFilterStore((function(e){var r;return null===(r=e.filters.interventionWells)||void 0===r||r})),B=W.useFetchSubjectWell(I),G=O.default(B,1)[0],_=s.useMemo((function(){var e,r=null==G||null===(e=G.topHole)||void 0===e?void 0:e.coordinates;if(!r)return null;var s=O.default(r,2);return{latitude:s[0],longitude:s[1]}}),[G]);P.useGlobalOffsetWellsSync(x,D,L);var z=i.useCompanySafeguard(),H=z.companies,Y=z.canViewCompanies,J=z.resetSafeguard;d.useViewportWells(!V);var Q=f.useTileLoading(),U=s.useMemo((function(){return Array.from(K.values())}),[K]),X=Q||0===U.length&&null===N,Z=p.usePinnedWells(null==x?void 0:x.selectedWellIds),$=O.default(Z,2),ee=$[0],re=$[1],se=v.useSearchedWells(),te=O.default(se,3),ne=te[0],ie=te[1],oe=te[2],le=s.useMemo((function(){if(!U)return null;var e=function(e,r){if(null==r||!r.length)return e;var s=new Set(e.map((function(e){return e.id}))),t=r.filter((function(e){return!s.has(e.id)}));return t.length>0?e.concat(t):e},r=U;return r=e(r,ee),r=e(r,ne),"drilling"===k&&R&&(r=r.filter((function(e){return a.isDrillingOnlyWell(e)}))),"intervention"===k&&F&&(r=r.filter((function(e){return c.isInterventionOnlyWell(e)}))),G&&!r.some((function(e){return e.id===G.id}))&&(r=[G].concat(r)),r}),[U,G,ee,ne,R,F,k]),ue=y.useCompanyProvider(A),ae=O.default(ue,1)[0],ce=q.useExternalOffsets(I,le),de=ce.offsets,fe=ce.setOffsets,pe=ce.loadExternalOffsets;m.useIdasResyncSync({assetId:I,loadExternalOffsets:pe});var qe=de.wellSections,me=de.offsetWellsBySection,je=de.taScores,ve=de.idasWellIds,ye=de.owsWellIds,We=de.wellhubWellIds,ge=de.loadedAssetId,Se=s.useMemo((function(){return!!qe&&qe.some((function(e){return e.value!==u.ALL_SECTION_KEY}))}),[qe]);s.useEffect((function(){fe((function(e){return E(E({},e),{},{wellSections:null,offsetWellsBySection:null})}))}),[fe,I]),s.useEffect((function(){var e;if(me){var r=new Set(null!==(e=null==le?void 0:le.map((function(e){return e.id})))&&void 0!==e?e:[]),s=new Set;Object.values(me).forEach((function(e){(null!=e?e:[]).forEach((function(e){null==e||e===I||r.has(e)||s.add(e)}))})),s.size>0&&oe(Array.from(s))}}),[me,le,I,oe]);var he=j.getSegmentConfig(k).defaultMetricKey,be=g.useCompanyMetricKey(A,null==x?void 0:x.metricsKeys,he),we=O.default(be,2),Pe=we[0],Ce=we[1],Ie=S.useAdvancedWells(le,qe,me,I,Pe,M),Oe=O.default(Ie,4),Ae=Oe[0],Ee=Oe[1],xe=Oe[2],Le=Oe[3],Ve=b.useInterventionEnrichment(T),Me=Ve.wellIdToInterventionNames,De=Ve.activeInterventionWellIds,ke=Ve.isLoading,Te=w.usePadEnrichment(T),Ke=Te.assetIdToPadName,Ne=Te.isLoading,Re=Ae||xe,Fe=s.useMemo((function(){if(!Re||null==H||!H.length)return Re;var e={};H.forEach((function(r){e[r.id]=r.name}));var r=Re.map((function(r){return E(E({},r),{},{companyName:e[Number(r.companyId)]||"Null"})}));return T&&(r=b.enrichWellsWithInterventionData(r,Me),r=w.enrichWellsWithPadData(r,Ke)),r}),[Re,H,T,Me,Ke]),Be=s.useMemo((function(){return G?Fe&&Fe.find((function(e){return e.id===G.id}))||G:null}),[G,Fe]),Ge=l.usePickerPropsStore((function(e){return e.allWellsLoadProgress})),_e=h.computeIsAllWellsLoaded({isLoadAllWells:V,allWellsLoadProgress:Ge,wellsLength:null!==(r=null==Fe?void 0:Fe.length)&&void 0!==r?r:0,rawWellsCount:null!==(C=null==le?void 0:le.length)&&void 0!==C?C:0,areRawWellsLoading:X,areAdvancedWellsLoading:Ee||ke||Ne,arePinnedWellsLoading:re,areSearchedWellsLoading:ie});return{wells:Fe,subjectWell:Be,subjectWellCoords:_,rawWellsWithSubject:le,wellSections:qe,externalOffsets:me,taScores:je,idasWellIds:ve,owsWellIds:ye,wellhubWellIds:We,loadedAssetId:ge,isWellSectionColumnVisible:Se,metricsKeys:Pe,setMetricsKeys:Ce,loadingWellIds:Le,isAllWellsLoaded:_e,areRawWellsLoading:X,companies:H,canViewCompanies:Y,companyProvider:ae,pinnedWells:ee,fetchSearchedWells:oe,resetSafeguard:J,activeInterventionWellIds:De}};
|
|
2
2
|
//# sourceMappingURL=useWellDataPipeline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWellDataPipeline.js","sources":["../../../../../../src/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useWellDataPipeline.ts"],"sourcesContent":["import { useEffect, useMemo, type Dispatch, type SetStateAction } from 'react';\n\nimport { useViewportStore } from '../../stores/viewport-store';\nimport { areWellMapsEqual } from '../../stores/viewport-store/utils/areWellMapsEqual';\nimport { useCompanySafeguard } from '../../stores/company-safeguard';\nimport type { Company } from '../../stores/company-safeguard/CompanySafeguardContext';\nimport { useFilterStore } from '../../stores/filter-store/useFilterStore';\nimport { usePickerPropsStore } from '../../stores/picker-props-store';\nimport { ALL_SECTION_KEY } from '../../constants';\nimport { isDrillingOnlyWell } from '../../utils/isDrillingOnlyWell';\nimport { isInterventionOnlyWell } from '../../utils/isInterventionOnlyWell';\nimport type { FilterableWell } from '../../utils/doesWellPassFilters';\nimport type {\n OffsetWell,\n OffsetSettingsInput,\n OffsetSettingsOutput,\n} from '../../OffsetWellPickerV5.types';\nimport type { FetchedOffsetWell } from '../../api/shared/types';\nimport { useViewportWells } from '../useViewportWells';\nimport { useTileLoading } from '../useTileLoading';\nimport { usePinnedWells } from '../usePinnedWells';\nimport {\n useExternalOffsets,\n type WellSection,\n type OffsetWellsBySection,\n type TaScore,\n} from '../useExternalOffsets';\nimport { useIdasResyncSync } from '../../stores/idas-resync-store';\nimport { getSegmentConfig } from '../../segment-config';\n\nimport { useSearchedWells } from './useSearchedWells';\nimport { useCompanyProvider } from './useCompanyProvider';\nimport { useFetchSubjectWell } from './useFetchSubjectWell';\nimport { useCompanyMetricKey } from './useCompanyMetricKey';\nimport { useAdvancedWells, type TransformedWell } from './useAdvancedWells';\nimport { computeIsAllWellsLoaded } from './utils/computeIsAllWellsLoaded';\nimport {\n useInterventionEnrichment,\n enrichWellsWithInterventionData,\n} from './useInterventionEnrichment';\nimport { usePadEnrichment, enrichWellsWithPadData } from './usePadEnrichment';\n\nimport { useGlobalOffsetWellsSync } from '~/effects';\n\ntype UseWellDataPipelineParams = {\n subjectWellId: number | null;\n assetCompanyId: number | undefined;\n offsetSettings: OffsetSettingsInput | undefined;\n maxOffsetWellNumber: number;\n isLoadAllWells: boolean;\n open: boolean | undefined;\n onSave:\n | ((offsetSettings: OffsetSettingsOutput, selectedWells?: OffsetWell[]) => void)\n | undefined;\n};\n\ntype UseWellDataPipelineReturn = {\n wells: TransformedWell[] | null;\n subjectWell: TransformedWell | FetchedOffsetWell | null;\n subjectWellCoords: { latitude: number; longitude: number } | null;\n rawWellsWithSubject: FetchedOffsetWell[] | null;\n wellSections: WellSection[] | null;\n externalOffsets: OffsetWellsBySection | null;\n taScores: TaScore[];\n idasWellIds: number[];\n owsWellIds: number[];\n wellhubWellIds: number[];\n loadedAssetId: number | null;\n isWellSectionColumnVisible: boolean;\n metricsKeys: string[];\n setMetricsKeys: Dispatch<SetStateAction<string[]>>;\n loadingWellIds: Set<number>;\n isAllWellsLoaded: boolean;\n areRawWellsLoading: boolean;\n companies: Company[];\n canViewCompanies: boolean;\n companyProvider: string | null;\n pinnedWells: OffsetWell[] | null;\n fetchSearchedWells: (wellIds: number[]) => Promise<OffsetWell[]>;\n resetSafeguard: () => void;\n activeInterventionWellIds: Set<number>;\n};\n\nexport const useWellDataPipeline = ({\n subjectWellId,\n assetCompanyId,\n offsetSettings,\n maxOffsetWellNumber,\n isLoadAllWells,\n open,\n onSave,\n}: UseWellDataPipelineParams): UseWellDataPipelineReturn => {\n const segment = usePickerPropsStore(state => state.segment);\n const isIntervention = segment === 'intervention';\n const viewportWells = useViewportStore(state => state.wells, areWellMapsEqual);\n const viewportBounds = useViewportStore(state => state.bounds);\n const drillingWells = useFilterStore(state => state.filters.drillingWells ?? true);\n const interventionWells = useFilterStore(state => state.filters.interventionWells ?? true);\n\n const [fetchedSubjectWell] = useFetchSubjectWell(subjectWellId);\n\n const subjectWellCoords = useMemo(() => {\n const coords = fetchedSubjectWell?.topHole?.coordinates;\n if (!coords) return null;\n const [latitude, longitude] = coords;\n return { latitude, longitude };\n }, [fetchedSubjectWell]);\n\n useGlobalOffsetWellsSync(offsetSettings, onSave, maxOffsetWellNumber);\n\n const { companies, canViewCompanies, resetSafeguard } = useCompanySafeguard();\n\n useViewportWells(!isLoadAllWells);\n const isTileLoading = useTileLoading();\n\n const rawWells = useMemo(\n () => Array.from(viewportWells.values()) as FetchedOffsetWell[],\n [viewportWells]\n );\n const areRawWellsLoading = isTileLoading || (rawWells.length === 0 && viewportBounds === null);\n\n const [pinnedWells, arePinnedWellsLoading] = usePinnedWells(offsetSettings?.selectedWellIds);\n const [searchedWells, areSearchedWellsLoading, fetchSearchedWells] = useSearchedWells();\n\n const rawWellsWithSubject = useMemo((): FetchedOffsetWell[] | null => {\n if (!rawWells) return null;\n\n const mergeUniqueById = (\n target: FetchedOffsetWell[],\n extras: OffsetWell[] | null\n ): FetchedOffsetWell[] => {\n if (!extras?.length) {\n return target;\n }\n\n const existingIds = new Set(target.map(w => w.id));\n const missing = (extras as unknown as FetchedOffsetWell[]).filter(\n w => !existingIds.has(w.id)\n );\n\n return missing.length > 0 ? target.concat(missing) : target;\n };\n\n let result: FetchedOffsetWell[] = rawWells;\n result = mergeUniqueById(result, pinnedWells);\n result = mergeUniqueById(result, searchedWells);\n\n if (segment === 'drilling' && drillingWells) {\n result = result.filter(w => isDrillingOnlyWell(w as unknown as FilterableWell));\n }\n\n if (segment === 'intervention' && interventionWells) {\n result = result.filter(w => isInterventionOnlyWell(w as unknown as FilterableWell));\n }\n\n // Subject well is prepended AFTER filtering so its full data (BIC, advanced\n // metrics, distance) always loads even when it is not a drilling well.\n if (fetchedSubjectWell && !result.some(w => w.id === fetchedSubjectWell.id)) {\n result = [fetchedSubjectWell].concat(result);\n }\n\n return result;\n }, [\n rawWells,\n fetchedSubjectWell,\n pinnedWells,\n searchedWells,\n drillingWells,\n interventionWells,\n segment,\n ]);\n\n const [companyProvider] = useCompanyProvider(assetCompanyId);\n\n const { offsets, setOffsets, loadExternalOffsets } = useExternalOffsets(\n subjectWellId,\n rawWellsWithSubject\n );\n useIdasResyncSync({ assetId: subjectWellId, loadExternalOffsets });\n const {\n wellSections,\n offsetWellsBySection: externalOffsets,\n taScores,\n idasWellIds,\n owsWellIds,\n wellhubWellIds,\n loadedAssetId,\n } = offsets;\n\n const isWellSectionColumnVisible = useMemo(() => {\n if (!wellSections) return false;\n return wellSections.some(section => section.value !== ALL_SECTION_KEY);\n }, [wellSections]);\n\n useEffect(() => {\n setOffsets(prev => ({ ...prev, wellSections: null, offsetWellsBySection: null }));\n }, [setOffsets, subjectWellId]);\n\n // Pre-fetch synced offset wells that aren't in the local pool yet, so the Reset\n // button visibility (`useSaveResetDerivedState`) can synchronously distinguish\n // \"real well outside map radius\" from \"stale/unresolvable IDAS ID\". Results land\n // in `searchedWells` via `useSearchedWells.wellsCacheRef` and flow into\n // `rawWellsWithSubject` through `mergeUniqueById` above.\n useEffect(() => {\n if (!externalOffsets) return;\n const loaded = new Set(rawWellsWithSubject?.map(w => w.id) ?? []);\n const missing = new Set<number>();\n Object.values(externalOffsets).forEach(sectionIds => {\n (sectionIds ?? []).forEach(id => {\n if (id != null && id !== subjectWellId && !loaded.has(id)) missing.add(id);\n });\n });\n if (missing.size > 0) {\n fetchSearchedWells(Array.from(missing));\n }\n }, [externalOffsets, rawWellsWithSubject, subjectWellId, fetchSearchedWells]);\n\n const { defaultMetricKey } = getSegmentConfig(segment);\n\n const [metricsKeys, setMetricsKeys] = useCompanyMetricKey(\n assetCompanyId as number,\n offsetSettings?.metricsKeys,\n defaultMetricKey\n ) as [string[], Dispatch<SetStateAction<string[]>>];\n\n const [wellsWithMetrics, areAdvancedWellsLoading, transformedWells, loadingWellIds] =\n useAdvancedWells(\n rawWellsWithSubject,\n wellSections,\n externalOffsets,\n subjectWellId,\n metricsKeys,\n open\n );\n\n const {\n wellIdToInterventionNames,\n activeInterventionWellIds,\n isLoading: isInterventionLoading,\n } = useInterventionEnrichment(isIntervention);\n\n const { assetIdToPadName, isLoading: isPadLoading } = usePadEnrichment(isIntervention);\n\n const wellsWithoutCompanyName = wellsWithMetrics || transformedWells;\n\n const wells = useMemo(() => {\n if (!wellsWithoutCompanyName || !companies?.length) return wellsWithoutCompanyName;\n\n const companyMap: Record<number, string> = {};\n companies.forEach(company => {\n companyMap[company.id] = company.name;\n });\n\n let result = wellsWithoutCompanyName.map(well => ({\n ...well,\n companyName: companyMap[Number(well.companyId)] || 'Null',\n }));\n\n if (isIntervention) {\n result = enrichWellsWithInterventionData(result, wellIdToInterventionNames);\n result = enrichWellsWithPadData(result, assetIdToPadName);\n result = result.map(well => ({\n ...well,\n lastActive: well.lastInterventionAt ?? well.lastActive,\n }));\n }\n\n return result;\n }, [\n wellsWithoutCompanyName,\n companies,\n isIntervention,\n wellIdToInterventionNames,\n assetIdToPadName,\n ]);\n\n const subjectWell = useMemo(() => {\n if (!fetchedSubjectWell) return null;\n if (!wells) return fetchedSubjectWell;\n return wells.find(w => w.id === fetchedSubjectWell.id) || fetchedSubjectWell;\n }, [fetchedSubjectWell, wells]);\n\n const allWellsLoadProgress = usePickerPropsStore(state => state.allWellsLoadProgress);\n\n const isAllWellsLoaded = computeIsAllWellsLoaded({\n isLoadAllWells,\n allWellsLoadProgress,\n wellsLength: wells?.length ?? 0,\n rawWellsCount: rawWellsWithSubject?.length ?? 0,\n areRawWellsLoading,\n areAdvancedWellsLoading: areAdvancedWellsLoading || isInterventionLoading || isPadLoading,\n arePinnedWellsLoading,\n areSearchedWellsLoading,\n });\n\n return {\n wells,\n subjectWell,\n subjectWellCoords,\n rawWellsWithSubject,\n wellSections,\n externalOffsets,\n taScores,\n idasWellIds,\n owsWellIds,\n wellhubWellIds,\n loadedAssetId,\n isWellSectionColumnVisible,\n metricsKeys,\n setMetricsKeys,\n loadingWellIds,\n isAllWellsLoaded,\n areRawWellsLoading,\n companies,\n canViewCompanies,\n companyProvider,\n pinnedWells,\n fetchSearchedWells,\n resetSafeguard,\n activeInterventionWellIds,\n };\n};\n"],"names":["_ref","_wells$length","_rawWellsWithSubject$2","subjectWellId","assetCompanyId","offsetSettings","maxOffsetWellNumber","isLoadAllWells","open","onSave","segment","usePickerPropsStore","state","isIntervention","viewportWells","useViewportStore","wells","areWellMapsEqual","viewportBounds","bounds","drillingWells","useFilterStore","_state$filters$drilli","filters","interventionWells","_state$filters$interv","useFetchSubjectWell","fetchedSubjectWell","_slicedToArray","_useFetchSubjectWell","subjectWellCoords","useMemo","_fetchedSubjectWell$t","coords","topHole","coordinates","_coords","latitude","longitude","useGlobalOffsetWellsSync","_useCompanySafeguard","useCompanySafeguard","companies","canViewCompanies","resetSafeguard","useViewportWells","isTileLoading","useTileLoading","rawWells","Array","from","values","areRawWellsLoading","length","usePinnedWells","selectedWellIds","_usePinnedWells2","_usePinnedWells","pinnedWells","arePinnedWellsLoading","_useSearchedWells","useSearchedWells","_useSearchedWells2","searchedWells","areSearchedWellsLoading","fetchSearchedWells","rawWellsWithSubject","mergeUniqueById","target","extras","existingIds","Set","map","w","id","missing","filter","has","concat","result","isDrillingOnlyWell","isInterventionOnlyWell","some","useCompanyProvider","companyProvider","_useCompanyProvider","_useExternalOffsets","useExternalOffsets","offsets","setOffsets","loadExternalOffsets","useIdasResyncSync","assetId","wellSections","externalOffsets","offsetWellsBySection","taScores","idasWellIds","owsWellIds","wellhubWellIds","loadedAssetId","isWellSectionColumnVisible","section","value","ALL_SECTION_KEY","useEffect","prev","_objectSpread","_rawWellsWithSubject$","loaded","Object","forEach","sectionIds","add","size","defaultMetricKey","getSegmentConfig","_ref2","useCompanyMetricKey","metricsKeys","_ref3","setMetricsKeys","_useAdvancedWells","useAdvancedWells","_useAdvancedWells2","wellsWithMetrics","areAdvancedWellsLoading","transformedWells","loadingWellIds","useInterventionEnrichment","wellIdToInterventionNames","activeInterventionWellIds","isInterventionLoading","isLoading","usePadEnrichment","assetIdToPadName","isPadLoading","wellsWithoutCompanyName","companyMap","company","name","well","companyName","Number","companyId","enrichWellsWithInterventionData","enrichWellsWithPadData","_well$lastInterventio","lastActive","lastInterventionAt","subjectWell","find","allWellsLoadProgress","isAllWellsLoaded","computeIsAllWellsLoaded","wellsLength","rawWellsCount"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useWellDataPipeline.js","sources":["../../../../../../src/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useWellDataPipeline.ts"],"sourcesContent":["import { useEffect, useMemo, type Dispatch, type SetStateAction } from 'react';\n\nimport { useViewportStore } from '../../stores/viewport-store';\nimport { areWellMapsEqual } from '../../stores/viewport-store/utils/areWellMapsEqual';\nimport { useCompanySafeguard } from '../../stores/company-safeguard';\nimport type { Company } from '../../stores/company-safeguard/CompanySafeguardContext';\nimport { useFilterStore } from '../../stores/filter-store/useFilterStore';\nimport { usePickerPropsStore } from '../../stores/picker-props-store';\nimport { ALL_SECTION_KEY } from '../../constants';\nimport { isDrillingOnlyWell } from '../../utils/isDrillingOnlyWell';\nimport { isInterventionOnlyWell } from '../../utils/isInterventionOnlyWell';\nimport type { FilterableWell } from '../../utils/doesWellPassFilters';\nimport type {\n OffsetWell,\n OffsetSettingsInput,\n OffsetSettingsOutput,\n} from '../../OffsetWellPickerV5.types';\nimport type { FetchedOffsetWell } from '../../api/shared/types';\nimport { useViewportWells } from '../useViewportWells';\nimport { useTileLoading } from '../useTileLoading';\nimport { usePinnedWells } from '../usePinnedWells';\nimport {\n useExternalOffsets,\n type WellSection,\n type OffsetWellsBySection,\n type TaScore,\n} from '../useExternalOffsets';\nimport { useIdasResyncSync } from '../../stores/idas-resync-store';\nimport { getSegmentConfig } from '../../segment-config';\n\nimport { useSearchedWells } from './useSearchedWells';\nimport { useCompanyProvider } from './useCompanyProvider';\nimport { useFetchSubjectWell } from './useFetchSubjectWell';\nimport { useCompanyMetricKey } from './useCompanyMetricKey';\nimport { useAdvancedWells, type TransformedWell } from './useAdvancedWells';\nimport { computeIsAllWellsLoaded } from './utils/computeIsAllWellsLoaded';\nimport {\n useInterventionEnrichment,\n enrichWellsWithInterventionData,\n} from './useInterventionEnrichment';\nimport { usePadEnrichment, enrichWellsWithPadData } from './usePadEnrichment';\n\nimport { useGlobalOffsetWellsSync } from '~/effects';\n\ntype UseWellDataPipelineParams = {\n subjectWellId: number | null;\n assetCompanyId: number | undefined;\n offsetSettings: OffsetSettingsInput | undefined;\n maxOffsetWellNumber: number;\n isLoadAllWells: boolean;\n open: boolean | undefined;\n onSave:\n | ((offsetSettings: OffsetSettingsOutput, selectedWells?: OffsetWell[]) => void)\n | undefined;\n};\n\ntype UseWellDataPipelineReturn = {\n wells: TransformedWell[] | null;\n subjectWell: TransformedWell | FetchedOffsetWell | null;\n subjectWellCoords: { latitude: number; longitude: number } | null;\n rawWellsWithSubject: FetchedOffsetWell[] | null;\n wellSections: WellSection[] | null;\n externalOffsets: OffsetWellsBySection | null;\n taScores: TaScore[];\n idasWellIds: number[];\n owsWellIds: number[];\n wellhubWellIds: number[];\n loadedAssetId: number | null;\n isWellSectionColumnVisible: boolean;\n metricsKeys: string[];\n setMetricsKeys: Dispatch<SetStateAction<string[]>>;\n loadingWellIds: Set<number>;\n isAllWellsLoaded: boolean;\n areRawWellsLoading: boolean;\n companies: Company[];\n canViewCompanies: boolean;\n companyProvider: string | null;\n pinnedWells: OffsetWell[] | null;\n fetchSearchedWells: (wellIds: number[]) => Promise<OffsetWell[]>;\n resetSafeguard: () => void;\n activeInterventionWellIds: Set<number>;\n};\n\nexport const useWellDataPipeline = ({\n subjectWellId,\n assetCompanyId,\n offsetSettings,\n maxOffsetWellNumber,\n isLoadAllWells,\n open,\n onSave,\n}: UseWellDataPipelineParams): UseWellDataPipelineReturn => {\n const segment = usePickerPropsStore(state => state.segment);\n const isIntervention = segment === 'intervention';\n const viewportWells = useViewportStore(state => state.wells, areWellMapsEqual);\n const viewportBounds = useViewportStore(state => state.bounds);\n const drillingWells = useFilterStore(state => state.filters.drillingWells ?? true);\n const interventionWells = useFilterStore(state => state.filters.interventionWells ?? true);\n\n const [fetchedSubjectWell] = useFetchSubjectWell(subjectWellId);\n\n const subjectWellCoords = useMemo(() => {\n const coords = fetchedSubjectWell?.topHole?.coordinates;\n if (!coords) return null;\n const [latitude, longitude] = coords;\n return { latitude, longitude };\n }, [fetchedSubjectWell]);\n\n useGlobalOffsetWellsSync(offsetSettings, onSave, maxOffsetWellNumber);\n\n const { companies, canViewCompanies, resetSafeguard } = useCompanySafeguard();\n\n useViewportWells(!isLoadAllWells);\n const isTileLoading = useTileLoading();\n\n const rawWells = useMemo(\n () => Array.from(viewportWells.values()) as FetchedOffsetWell[],\n [viewportWells]\n );\n const areRawWellsLoading = isTileLoading || (rawWells.length === 0 && viewportBounds === null);\n\n const [pinnedWells, arePinnedWellsLoading] = usePinnedWells(offsetSettings?.selectedWellIds);\n const [searchedWells, areSearchedWellsLoading, fetchSearchedWells] = useSearchedWells();\n\n const rawWellsWithSubject = useMemo((): FetchedOffsetWell[] | null => {\n if (!rawWells) return null;\n\n const mergeUniqueById = (\n target: FetchedOffsetWell[],\n extras: OffsetWell[] | null\n ): FetchedOffsetWell[] => {\n if (!extras?.length) {\n return target;\n }\n\n const existingIds = new Set(target.map(w => w.id));\n const missing = (extras as unknown as FetchedOffsetWell[]).filter(\n w => !existingIds.has(w.id)\n );\n\n return missing.length > 0 ? target.concat(missing) : target;\n };\n\n let result: FetchedOffsetWell[] = rawWells;\n result = mergeUniqueById(result, pinnedWells);\n result = mergeUniqueById(result, searchedWells);\n\n if (segment === 'drilling' && drillingWells) {\n result = result.filter(w => isDrillingOnlyWell(w as unknown as FilterableWell));\n }\n\n if (segment === 'intervention' && interventionWells) {\n result = result.filter(w => isInterventionOnlyWell(w as unknown as FilterableWell));\n }\n\n // Subject well is prepended AFTER filtering so its full data (BIC, advanced\n // metrics, distance) always loads even when it is not a drilling well.\n if (fetchedSubjectWell && !result.some(w => w.id === fetchedSubjectWell.id)) {\n result = [fetchedSubjectWell].concat(result);\n }\n\n return result;\n }, [\n rawWells,\n fetchedSubjectWell,\n pinnedWells,\n searchedWells,\n drillingWells,\n interventionWells,\n segment,\n ]);\n\n const [companyProvider] = useCompanyProvider(assetCompanyId);\n\n const { offsets, setOffsets, loadExternalOffsets } = useExternalOffsets(\n subjectWellId,\n rawWellsWithSubject\n );\n useIdasResyncSync({ assetId: subjectWellId, loadExternalOffsets });\n const {\n wellSections,\n offsetWellsBySection: externalOffsets,\n taScores,\n idasWellIds,\n owsWellIds,\n wellhubWellIds,\n loadedAssetId,\n } = offsets;\n\n const isWellSectionColumnVisible = useMemo(() => {\n if (!wellSections) return false;\n return wellSections.some(section => section.value !== ALL_SECTION_KEY);\n }, [wellSections]);\n\n useEffect(() => {\n setOffsets(prev => ({ ...prev, wellSections: null, offsetWellsBySection: null }));\n }, [setOffsets, subjectWellId]);\n\n // Pre-fetch synced offset wells that aren't in the local pool yet, so the Reset\n // button visibility (`useSaveResetDerivedState`) can synchronously distinguish\n // \"real well outside map radius\" from \"stale/unresolvable IDAS ID\". Results land\n // in `searchedWells` via `useSearchedWells.wellsCacheRef` and flow into\n // `rawWellsWithSubject` through `mergeUniqueById` above.\n useEffect(() => {\n if (!externalOffsets) return;\n const loaded = new Set(rawWellsWithSubject?.map(w => w.id) ?? []);\n const missing = new Set<number>();\n Object.values(externalOffsets).forEach(sectionIds => {\n (sectionIds ?? []).forEach(id => {\n if (id != null && id !== subjectWellId && !loaded.has(id)) missing.add(id);\n });\n });\n if (missing.size > 0) {\n fetchSearchedWells(Array.from(missing));\n }\n }, [externalOffsets, rawWellsWithSubject, subjectWellId, fetchSearchedWells]);\n\n const { defaultMetricKey } = getSegmentConfig(segment);\n\n const [metricsKeys, setMetricsKeys] = useCompanyMetricKey(\n assetCompanyId as number,\n offsetSettings?.metricsKeys,\n defaultMetricKey\n ) as [string[], Dispatch<SetStateAction<string[]>>];\n\n const [wellsWithMetrics, areAdvancedWellsLoading, transformedWells, loadingWellIds] =\n useAdvancedWells(\n rawWellsWithSubject,\n wellSections,\n externalOffsets,\n subjectWellId,\n metricsKeys,\n open\n );\n\n const {\n wellIdToInterventionNames,\n activeInterventionWellIds,\n isLoading: isInterventionLoading,\n } = useInterventionEnrichment(isIntervention);\n\n const { assetIdToPadName, isLoading: isPadLoading } = usePadEnrichment(isIntervention);\n\n const wellsWithoutCompanyName = wellsWithMetrics || transformedWells;\n\n const wells = useMemo(() => {\n if (!wellsWithoutCompanyName || !companies?.length) return wellsWithoutCompanyName;\n\n const companyMap: Record<number, string> = {};\n companies.forEach(company => {\n companyMap[company.id] = company.name;\n });\n\n let result = wellsWithoutCompanyName.map(well => ({\n ...well,\n companyName: companyMap[Number(well.companyId)] || 'Null',\n }));\n\n if (isIntervention) {\n result = enrichWellsWithInterventionData(result, wellIdToInterventionNames);\n result = enrichWellsWithPadData(result, assetIdToPadName);\n }\n\n return result;\n }, [\n wellsWithoutCompanyName,\n companies,\n isIntervention,\n wellIdToInterventionNames,\n assetIdToPadName,\n ]);\n\n const subjectWell = useMemo(() => {\n if (!fetchedSubjectWell) return null;\n if (!wells) return fetchedSubjectWell;\n return wells.find(w => w.id === fetchedSubjectWell.id) || fetchedSubjectWell;\n }, [fetchedSubjectWell, wells]);\n\n const allWellsLoadProgress = usePickerPropsStore(state => state.allWellsLoadProgress);\n\n const isAllWellsLoaded = computeIsAllWellsLoaded({\n isLoadAllWells,\n allWellsLoadProgress,\n wellsLength: wells?.length ?? 0,\n rawWellsCount: rawWellsWithSubject?.length ?? 0,\n areRawWellsLoading,\n areAdvancedWellsLoading: areAdvancedWellsLoading || isInterventionLoading || isPadLoading,\n arePinnedWellsLoading,\n areSearchedWellsLoading,\n });\n\n return {\n wells,\n subjectWell,\n subjectWellCoords,\n rawWellsWithSubject,\n wellSections,\n externalOffsets,\n taScores,\n idasWellIds,\n owsWellIds,\n wellhubWellIds,\n loadedAssetId,\n isWellSectionColumnVisible,\n metricsKeys,\n setMetricsKeys,\n loadingWellIds,\n isAllWellsLoaded,\n areRawWellsLoading,\n companies,\n canViewCompanies,\n companyProvider,\n pinnedWells,\n fetchSearchedWells,\n resetSafeguard,\n activeInterventionWellIds,\n };\n};\n"],"names":["_ref","_wells$length","_rawWellsWithSubject$2","subjectWellId","assetCompanyId","offsetSettings","maxOffsetWellNumber","isLoadAllWells","open","onSave","segment","usePickerPropsStore","state","isIntervention","viewportWells","useViewportStore","wells","areWellMapsEqual","viewportBounds","bounds","drillingWells","useFilterStore","_state$filters$drilli","filters","interventionWells","_state$filters$interv","useFetchSubjectWell","fetchedSubjectWell","_slicedToArray","_useFetchSubjectWell","subjectWellCoords","useMemo","_fetchedSubjectWell$t","coords","topHole","coordinates","_coords","latitude","longitude","useGlobalOffsetWellsSync","_useCompanySafeguard","useCompanySafeguard","companies","canViewCompanies","resetSafeguard","useViewportWells","isTileLoading","useTileLoading","rawWells","Array","from","values","areRawWellsLoading","length","usePinnedWells","selectedWellIds","_usePinnedWells2","_usePinnedWells","pinnedWells","arePinnedWellsLoading","_useSearchedWells","useSearchedWells","_useSearchedWells2","searchedWells","areSearchedWellsLoading","fetchSearchedWells","rawWellsWithSubject","mergeUniqueById","target","extras","existingIds","Set","map","w","id","missing","filter","has","concat","result","isDrillingOnlyWell","isInterventionOnlyWell","some","useCompanyProvider","companyProvider","_useCompanyProvider","_useExternalOffsets","useExternalOffsets","offsets","setOffsets","loadExternalOffsets","useIdasResyncSync","assetId","wellSections","externalOffsets","offsetWellsBySection","taScores","idasWellIds","owsWellIds","wellhubWellIds","loadedAssetId","isWellSectionColumnVisible","section","value","ALL_SECTION_KEY","useEffect","prev","_objectSpread","_rawWellsWithSubject$","loaded","Object","forEach","sectionIds","add","size","defaultMetricKey","getSegmentConfig","_ref2","useCompanyMetricKey","metricsKeys","_ref3","setMetricsKeys","_useAdvancedWells","useAdvancedWells","_useAdvancedWells2","wellsWithMetrics","areAdvancedWellsLoading","transformedWells","loadingWellIds","useInterventionEnrichment","wellIdToInterventionNames","activeInterventionWellIds","isInterventionLoading","isLoading","usePadEnrichment","assetIdToPadName","isPadLoading","wellsWithoutCompanyName","companyMap","company","name","well","companyName","Number","companyId","enrichWellsWithInterventionData","enrichWellsWithPadData","subjectWell","find","allWellsLoadProgress","isAllWellsLoaded","computeIsAllWellsLoaded","wellsLength","rawWellsCount"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),t=require("@babel/runtime/helpers/slicedToArray"),r=require("react"),n=require("lodash"),u=require("../constants.js"),i=require("../utils/sortWellsBy.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=o(e),s=o(t);function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?l(Object(r),!0).forEach((function(t){c.default(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):l(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}exports.useSortedWells=function(e,t,o,c,l){var f=r.useState(u.ColumnType.distance),p=s.default(f,2),d=p[0],b=p[1],y=r.useState(u.SortDirection.ASC),O=s.default(y,2),j=O[0],h=O[1],m=r.useMemo((function(){if(!t)return null;var r=new Set(o.map((function(e){return e.id}))),u=r.size>0?r:new Set(l||[]),c=t.filter((function(t){return t.id!==(null==e?void 0:e.id)&&u.has(t.id)})),s=i.sortWellsBy(c,d,j),f=t.filter((function(e){return!u.has(e.id)})),p=i.sortWellsBy(f,d,j);return(e&&!n.isEmpty(e)?[e]:[]).concat(s).concat(p).map((function(e){return a(a({},e),{},{checked:u.has(e.id)})}))}),[t,d,j,e,o,l]);return r.useEffect((function(){null!==m&&c(!1)}),[m,c]),[d,b,j,h,m]};
|
|
2
2
|
//# sourceMappingURL=useSortedWells.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSortedWells.js","sources":["../../../../../src/components/OffsetWellPickerV5/hooks/useSortedWells.ts"],"sourcesContent":["import { type Dispatch, type SetStateAction, useEffect, useMemo, useState } from 'react';\nimport { isEmpty } from 'lodash';\n\nimport { ColumnType, SortDirection, SortDirectionType } from '../constants';\
|
|
1
|
+
{"version":3,"file":"useSortedWells.js","sources":["../../../../../src/components/OffsetWellPickerV5/hooks/useSortedWells.ts"],"sourcesContent":["import { type Dispatch, type SetStateAction, useEffect, useMemo, useState } from 'react';\nimport { isEmpty } from 'lodash';\n\nimport { ColumnType, SortDirection, SortDirectionType } from '../constants';\nimport { sortWellsBy, type SortableWell } from '../utils/sortWellsBy';\n\nexport type SortedWell = SortableWell & { checked: boolean };\n\nexport const useSortedWells = (\n subjectWell: SortableWell | null,\n expandedWells: SortableWell[] | null,\n selectedWells: Array<{ id: number }>,\n setIsTableLoading: (value: boolean) => void,\n selectedWellIds: number[] | undefined\n): [\n string,\n Dispatch<SetStateAction<string>>,\n SortDirectionType,\n Dispatch<SetStateAction<SortDirectionType>>,\n SortedWell[] | null\n] => {\n const [sortBy, setSortBy] = useState<string>(ColumnType.distance);\n const [sortDirection, setSortDirection] = useState<SortDirectionType>(SortDirection.ASC);\n\n const sortedWells = useMemo((): SortedWell[] | null => {\n if (!expandedWells) {\n return null;\n }\n\n const selectedWellIdsSet = new Set(selectedWells.map(({ id }) => id));\n\n // Use selectedWellIds from settings as fallback during initial loading\n // when selectedWells state hasn't been populated yet\n const checkedIdsSet =\n selectedWellIdsSet.size > 0 ? selectedWellIdsSet : new Set(selectedWellIds || []);\n\n // Get enriched versions of selected wells from expandedWells\n // Uses checkedIdsSet (with fallback to settings) to ensure selected wells are sorted to top during initial loading\n const enrichedSelectedWells = expandedWells.filter(\n well => well.id !== subjectWell?.id && checkedIdsSet.has(well.id)\n );\n\n const sortedSelectedWells = sortWellsBy(enrichedSelectedWells, sortBy, sortDirection);\n\n const restWells = expandedWells.filter(well => !checkedIdsSet.has(well.id));\n const sortedRestWells = sortWellsBy(restWells, sortBy, sortDirection);\n\n const combinedWells: SortableWell[] = (\n subjectWell && !isEmpty(subjectWell) ? [subjectWell] : []\n )\n .concat(sortedSelectedWells)\n .concat(sortedRestWells);\n\n return combinedWells.map(well => ({\n ...well,\n checked: checkedIdsSet.has(well.id),\n }));\n }, [expandedWells, sortBy, sortDirection, subjectWell, selectedWells, selectedWellIds]);\n\n useEffect(() => {\n if (sortedWells !== null) {\n setIsTableLoading(false);\n }\n }, [sortedWells, setIsTableLoading]);\n\n return [sortBy, setSortBy, sortDirection, setSortDirection, sortedWells];\n};\n"],"names":["subjectWell","expandedWells","selectedWells","setIsTableLoading","selectedWellIds","_useState","useState","ColumnType","distance","_useState2","_slicedToArray","sortBy","setSortBy","_useState3","SortDirection","ASC","_useState4","sortDirection","setSortDirection","sortedWells","useMemo","selectedWellIdsSet","Set","map","_ref","id","checkedIdsSet","size","enrichedSelectedWells","filter","well","has","sortedSelectedWells","sortWellsBy","restWells","sortedRestWells","isEmpty","concat","_objectSpread","checked","useEffect"],"mappings":"88BAQ8B,SAC5BA,EACAC,EACAC,EACAC,EACAC,GAQA,IAAAC,EAA4BC,EAAAA,SAAiBC,EAAUA,WAACC,UAASC,EAAAC,EAAAA,QAAAL,EAAA,GAA1DM,EAAMF,EAAA,GAAEG,EAASH,EAAA,GACxBI,EAA0CP,EAAAA,SAA4BQ,EAAaA,cAACC,KAAIC,EAAAN,EAAAA,QAAAG,EAAA,GAAjFI,EAAaD,EAAA,GAAEE,EAAgBF,EAAA,GAEhCG,EAAcC,EAAAA,SAAQ,WAC1B,IAAKnB,EACH,OAAO,KAGT,IAAMoB,EAAqB,IAAIC,IAAIpB,EAAcqB,KAAI,SAAAC,GAAK,SAAFC,EAAW,KAI7DC,EACJL,EAAmBM,KAAO,EAAIN,EAAqB,IAAIC,IAAIlB,GAAmB,IAI1EwB,EAAwB3B,EAAc4B,QAC1C,SAAAC,GAAI,OAAIA,EAAKL,MAAOzB,aAAAA,EAAAA,EAAayB,KAAMC,EAAcK,IAAID,EAAKL,OAG1DO,EAAsBC,EAAWA,YAACL,EAAuBjB,EAAQM,GAEjEiB,EAAYjC,EAAc4B,QAAO,SAAAC,GAAI,OAAKJ,EAAcK,IAAID,EAAKL,OACjEU,EAAkBF,EAAWA,YAACC,EAAWvB,EAAQM,GAQvD,OALEjB,IAAgBoC,EAAOA,QAACpC,GAAe,CAACA,GAAe,IAEtDqC,OAAOL,GACPK,OAAOF,GAEWZ,KAAI,SAAAO,GAAI,OAAAQ,EAAAA,EAAA,CAAA,EACxBR,GAAI,CAAA,EAAA,CACPS,QAASb,EAAcK,IAAID,EAAKL,KAAG,GAEvC,GAAG,CAACxB,EAAeU,EAAQM,EAAejB,EAAaE,EAAeE,IAQtE,OANAoC,EAAAA,WAAU,WACY,OAAhBrB,GACFhB,GAAkB,EAEtB,GAAG,CAACgB,EAAahB,IAEV,CAACQ,EAAQC,EAAWK,EAAeC,EAAkBC,EAC9D"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/slicedToArray"),r=require("./getTimestampByPeriod.js"),i=require("./isAssetVisibleToUser.js"),t=require("./isDrillingOnlyWell.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(e),l=/\sST0/,u=["status","companyId","rigName","programName","basin","county","area","formation","stringDesign","interventionAsset","padName"],a=function(e,i,n){var a,o;if(!i)return!0;var d=null==n?void 0:n.excludeKeys;if(!u.every((function(r){if(null!=d&&d.includes(r))return!0;var t=i[r];if(Array.isArray(t)&&t.length>0){var n=e[r],s=t.map(String);return null==n||"Null"===n?s.includes("Null"):Array.isArray(n)?n.some((function(e){return s.includes(String(e))})):s.includes(String(n))}return!0})))return!1;if("intervention"===(null==n?void 0:n.segment)){var v=i.status;if(Array.isArray(v)&&v.map(String).includes("active")&&"active"===e.status&&"intervention"!==e.wellState)return!1}if(i.sideTracks&&l.test(null!==(a=e.name)&&void 0!==a?a:""))return!1;if("intervention"!==(null==n?void 0:n.segment)&&i.drillingWells&&!t.isDrillingOnlyWell(e))return!1;if(i.activeInterventionWells&&(null===(o=e.interventionAsset)||void 0===o||!o.length))return!1;var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/slicedToArray"),r=require("./getTimestampByPeriod.js"),i=require("./isAssetVisibleToUser.js"),t=require("./isDrillingOnlyWell.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(e),l=/\sST0/,u=["status","companyId","rigName","programName","basin","county","area","formation","stringDesign","interventionAsset","padName"],a=function(e,i,n){var a,o;if(!i)return!0;var d=null==n?void 0:n.excludeKeys;if(!u.every((function(r){if(null!=d&&d.includes(r))return!0;var t=i[r];if(Array.isArray(t)&&t.length>0){var n=e[r],s=t.map(String);return null==n||"Null"===n?s.includes("Null"):Array.isArray(n)?n.some((function(e){return s.includes(String(e))})):s.includes(String(n))}return!0})))return!1;if("intervention"===(null==n?void 0:n.segment)){var v=i.status;if(Array.isArray(v)&&v.map(String).includes("active")&&"active"===e.status&&"intervention"!==e.wellState)return!1}if(i.sideTracks&&l.test(null!==(a=e.name)&&void 0!==a?a:""))return!1;if("intervention"!==(null==n?void 0:n.segment)&&i.drillingWells&&!t.isDrillingOnlyWell(e))return!1;if(i.activeInterventionWells&&(null===(o=e.interventionAsset)||void 0===o||!o.length))return!1;var m=i.period,c=i.timeRangeFrom,f=i.timeRangeTo,g=r.getTimestampByPeriod(m,c,f),y=s.default(g,2),p=y[0],A=y[1];if(null!==p&&null!==A&&Number.isFinite(p)&&Number.isFinite(A)){var T=e.lastDrillingAt;if(void 0===T||!(T>=p&&T<=A))return!1}return!0};exports.EXCLUDE_RIG_NAME_FILTER={excludeKeys:["rigName"]},exports.WELL_PROPERTY_FILTER_KEYS=u,exports.doesWellPassFilters=a,exports.doesWellPassVisibilityAndFilters=function(e,r,t,n){return i.isAssetVisibleToUser(e,t)&&a(e,r,n)};
|
|
2
2
|
//# sourceMappingURL=doesWellPassFilters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doesWellPassFilters.js","sources":["../../../../../src/components/OffsetWellPickerV5/utils/doesWellPassFilters.ts"],"sourcesContent":["import type { FilterState, PickerSegmentId } from '../stores/filter-store/types';\n\nimport { getTimestampByPeriod } from './getTimestampByPeriod';\nimport { isAssetVisibleToUser } from './isAssetVisibleToUser';\nimport { isDrillingOnlyWell } from './isDrillingOnlyWell';\n\nconst SIDE_TRACK_REGEX = /\\sST0/;\n\nexport const WELL_PROPERTY_FILTER_KEYS: (keyof FilterState)[] = [\n 'status',\n 'companyId',\n 'rigName',\n 'programName',\n 'basin',\n 'county',\n 'area',\n 'formation',\n 'stringDesign',\n 'interventionAsset',\n 'padName',\n];\n\nexport type FilterableWell = {\n name?: string;\n
|
|
1
|
+
{"version":3,"file":"doesWellPassFilters.js","sources":["../../../../../src/components/OffsetWellPickerV5/utils/doesWellPassFilters.ts"],"sourcesContent":["import type { FilterState, PickerSegmentId } from '../stores/filter-store/types';\n\nimport { getTimestampByPeriod } from './getTimestampByPeriod';\nimport { isAssetVisibleToUser } from './isAssetVisibleToUser';\nimport { isDrillingOnlyWell } from './isDrillingOnlyWell';\n\nconst SIDE_TRACK_REGEX = /\\sST0/;\n\nexport const WELL_PROPERTY_FILTER_KEYS: (keyof FilterState)[] = [\n 'status',\n 'companyId',\n 'rigName',\n 'programName',\n 'basin',\n 'county',\n 'area',\n 'formation',\n 'stringDesign',\n 'interventionAsset',\n 'padName',\n];\n\nexport type FilterableWell = {\n name?: string;\n lastDrillingAt?: number;\n status?: string;\n companyId?: number | string;\n rigName?: string;\n programName?: string;\n basin?: string;\n county?: string;\n area?: string;\n formation?: string;\n stringDesign?: unknown;\n interventionAsset?: string[];\n padName?: string;\n wellState?: string;\n lastInterventionAt?: number;\n};\n\nexport type FilterableVisibleWell = FilterableWell & { visibility?: string };\n\nexport type DoesWellPassFiltersOptions = {\n excludeKeys?: (keyof FilterState)[];\n segment?: PickerSegmentId;\n};\n\nexport const EXCLUDE_RIG_NAME_FILTER: DoesWellPassFiltersOptions = {\n excludeKeys: ['rigName'],\n};\n\nexport const doesWellPassFilters = (\n well: FilterableWell,\n filters: FilterState | null,\n options?: DoesWellPassFiltersOptions\n): boolean => {\n if (!filters) return true;\n\n const excludeKeys = options?.excludeKeys;\n\n // Check array property filters\n const passesPropertyFilters = WELL_PROPERTY_FILTER_KEYS.every(filterKey => {\n if (excludeKeys?.includes(filterKey)) return true;\n\n const filterValue = filters[filterKey];\n if (Array.isArray(filterValue) && filterValue.length > 0) {\n const wellValue = well[filterKey as keyof FilterableWell];\n const normalized = (filterValue as (string | number)[]).map(String);\n\n if (wellValue == null || wellValue === 'Null') {\n return normalized.includes('Null');\n }\n\n if (Array.isArray(wellValue)) {\n return (wellValue as string[]).some(v => normalized.includes(String(v)));\n }\n\n return normalized.includes(String(wellValue));\n }\n return true;\n });\n\n if (!passesPropertyFilters) {\n return false;\n }\n\n // Intervention segment: \"active\" status additionally requires wellState === 'intervention'\n if (options?.segment === 'intervention') {\n const statusFilter = filters.status;\n if (\n Array.isArray(statusFilter) &&\n statusFilter.map(String).includes('active') &&\n well.status === 'active' &&\n well.wellState !== 'intervention'\n ) {\n return false;\n }\n }\n\n // Check sideTracks filter\n if (filters.sideTracks && SIDE_TRACK_REGEX.test(well.name ?? '')) {\n return false;\n }\n\n if (options?.segment !== 'intervention' && filters.drillingWells && !isDrillingOnlyWell(well)) {\n return false;\n }\n\n // Check activeInterventionWells toggle: only show wells active on an intervention unit\n if (filters.activeInterventionWells && !well.interventionAsset?.length) {\n return false;\n }\n\n // Check time range filter\n const { period, timeRangeFrom, timeRangeTo } = filters;\n const [startTimestamp, endTimestamp] = getTimestampByPeriod(period, timeRangeFrom, timeRangeTo);\n\n if (\n startTimestamp !== null &&\n endTimestamp !== null &&\n Number.isFinite(startTimestamp) &&\n Number.isFinite(endTimestamp)\n ) {\n const { lastDrillingAt } = well;\n if (\n lastDrillingAt === undefined ||\n !(lastDrillingAt >= startTimestamp && lastDrillingAt <= endTimestamp)\n ) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const doesWellPassVisibilityAndFilters = (\n well: FilterableVisibleWell,\n filters: FilterState | null,\n includeHidden: boolean,\n options?: DoesWellPassFiltersOptions\n): boolean =>\n isAssetVisibleToUser(well, includeHidden) && doesWellPassFilters(well, filters, options);\n"],"names":["SIDE_TRACK_REGEX","WELL_PROPERTY_FILTER_KEYS","doesWellPassFilters","well","filters","options","_well$name","_well$interventionAss","excludeKeys","every","filterKey","includes","filterValue","Array","isArray","length","wellValue","normalized","map","String","some","v","segment","statusFilter","status","wellState","sideTracks","test","name","drillingWells","isDrillingOnlyWell","activeInterventionWells","interventionAsset","period","timeRangeFrom","timeRangeTo","_getTimestampByPeriod","getTimestampByPeriod","_getTimestampByPeriod2","_slicedToArray","startTimestamp","endTimestamp","Number","isFinite","lastDrillingAt","undefined","includeHidden","isAssetVisibleToUser"],"mappings":"gUAMMA,EAAmB,QAEZC,EAAmD,CAC9D,SACA,YACA,UACA,cACA,QACA,SACA,OACA,YACA,eACA,oBACA,WAgCWC,EAAsB,SACjCC,EACAC,EACAC,GACY,IAAAC,EAAAC,EACZ,IAAKH,EAAS,OAAO,EAErB,IAAMI,EAAcH,aAAAA,EAAAA,EAASG,YAwB7B,IArB8BP,EAA0BQ,OAAM,SAAAC,GAC5D,GAAIF,SAAAA,EAAaG,SAASD,GAAY,OAAO,EAE7C,IAAME,EAAcR,EAAQM,GAC5B,GAAIG,MAAMC,QAAQF,IAAgBA,EAAYG,OAAS,EAAG,CACxD,IAAMC,EAAYb,EAAKO,GACjBO,EAAcL,EAAoCM,IAAIC,QAE5D,OAAiB,MAAbH,GAAmC,SAAdA,EAChBC,EAAWN,SAAS,QAGzBE,MAAMC,QAAQE,GACRA,EAAuBI,MAAK,SAAAC,GAAC,OAAIJ,EAAWN,SAASQ,OAAOE,OAG/DJ,EAAWN,SAASQ,OAAOH,GACpC,CACA,OAAO,CACT,IAGE,OAAO,EAIT,GAAyB,kBAArBX,aAAO,EAAPA,EAASiB,SAA4B,CACvC,IAAMC,EAAenB,EAAQoB,OAC7B,GACEX,MAAMC,QAAQS,IACdA,EAAaL,IAAIC,QAAQR,SAAS,WAClB,WAAhBR,EAAKqB,QACc,iBAAnBrB,EAAKsB,UAEL,OAAO,CAEX,CAGA,GAAIrB,EAAQsB,YAAc1B,EAAiB2B,KAAkB,QAAbxB,EAAAA,EAAKyB,YAAQ,IAAAtB,EAAAA,EAAA,IAC3D,OAAO,EAGT,GAAyB,kBAArBD,eAAAA,EAASiB,UAA8BlB,EAAQyB,gBAAkBC,EAAAA,mBAAmB3B,GACtF,OAAO,EAIT,GAAIC,EAAQ2B,0BAAkD,QAAvBxB,EAACJ,EAAK6B,yBAAiB,IAAAzB,IAAtBA,EAAwBQ,QAC9D,OAAO,EAIT,IAAQkB,EAAuC7B,EAAvC6B,OAAQC,EAA+B9B,EAA/B8B,cAAeC,EAAgB/B,EAAhB+B,YAC/BC,EAAuCC,EAAoBA,qBAACJ,EAAQC,EAAeC,GAAYG,EAAAC,EAAAA,QAAAH,EAAA,GAAxFI,EAAcF,EAAA,GAAEG,EAAYH,EAAA,GAEnC,GACqB,OAAnBE,GACiB,OAAjBC,GACAC,OAAOC,SAASH,IAChBE,OAAOC,SAASF,GAChB,CACA,IAAQG,EAAmBzC,EAAnByC,eACR,QACqBC,IAAnBD,KACEA,GAAkBJ,GAAkBI,GAAkBH,GAExD,OAAO,CAEX,CAEA,OAAO,CACT,kCAtFmE,CACjEjC,YAAa,CAAC,uHAuFgC,SAC9CL,EACAC,EACA0C,EACAzC,GAAoC,OAEpC0C,EAAoBA,qBAAC5C,EAAM2C,IAAkB5C,EAAoBC,EAAMC,EAASC,EAAQ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var r=require("@babel/runtime/helpers/toConsumableArray"),e=require("../constants.js");function t(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}var n=t(r),o=new Set([e.ColumnType.lastDrillingAt,e.ColumnType.lastInterventionAt]),u=function(r){return Array.isArray(r)?r.join(", "):String(r)},i=function(r,e){return"string"==typeof r?!r||"null"===r.toLowerCase():0===r?e:!r};exports.sortWellsBy=function(r,t,a){var l=o.has(t),f=a===e.SortDirection.ASC;return n.default(r).sort((function(r,e){var n=r[t],o=e[t],a=i(n,l),s=i(o,l);if(a&&s)return 0;if(a)return 1;if(s)return-1;if("string"==typeof n&&"string"==typeof o)return f?n.localeCompare(o):o.localeCompare(n);var p=function(r,e){if("number"==typeof r&&"number"==typeof e)return r===e?0:r>e?1:-1;var t=u(r),n=u(e);return t===n?0:t>n?1:-1}(n,o);return f?p:-p}))};
|
|
2
|
+
//# sourceMappingURL=sortWellsBy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortWellsBy.js","sources":["../../../../../src/components/OffsetWellPickerV5/utils/sortWellsBy.ts"],"sourcesContent":["import { ColumnType, SortDirection, SortDirectionType } from '../constants';\n\nexport type SortableWell = Record<string, unknown> & { id: number };\n\n/**\n * Columns holding a unix timestamp, where `0` means \"no date\" rather than a real\n * value — the cell renders it as an em dash, so sorting treats it as missing too.\n */\nconst DATE_COLUMNS: Set<string> = new Set([\n ColumnType.lastDrillingAt,\n ColumnType.lastInterventionAt,\n]);\n\n/** Renders a value the way the table does, so ordering follows what the user reads. */\nconst toText = (value: unknown): string =>\n Array.isArray(value) ? value.join(', ') : String(value);\n\n/** Three-way comparison: 0 means \"tie\", which the caller turns into a stable order. */\nconst compareValues = (a: unknown, b: unknown): number => {\n if (typeof a === 'number' && typeof b === 'number') {\n if (a === b) return 0;\n return a > b ? 1 : -1;\n }\n\n const aText = toText(a);\n const bText = toText(b);\n\n if (aText === bText) return 0;\n return aText > bText ? 1 : -1;\n};\n\nconst isMissing = (value: unknown, treatZeroAsMissing: boolean): boolean => {\n if (typeof value === 'string') {\n return !value || value.toLowerCase() === 'null';\n }\n\n if (value === 0) {\n return treatZeroAsMissing;\n }\n\n return !value;\n};\n\n/**\n * Sorts wells by a column, leaving the input array untouched.\n *\n * Two rules, both of which the table relies on:\n * - wells with no value sink to the bottom in *both* directions, so sorting never\n * surfaces gaps ahead of data;\n * - anything that is not strictly greater or smaller — equal values, arrays with the\n * same contents, coercively equal values of mismatched types (`5` and `\"5\"`) — is a\n * tie and returns 0, so the stable sort keeps the incoming order instead of\n * shuffling those rows on every re-sort.\n *\n * Values within a column are assumed to share one type (numbers, strings, or string\n * arrays). Mixing numbers with strings in the same column is not supported: the\n * numeric and textual branches of `compareValues` use different orderings, so a mixed\n * column has no consistent order to sort by.\n */\nexport const sortWellsBy = (\n wells: SortableWell[],\n sortByKey: string,\n sortDir: SortDirectionType\n): SortableWell[] => {\n const treatZeroAsMissing = DATE_COLUMNS.has(sortByKey);\n const isAscending = sortDir === SortDirection.ASC;\n\n return [...wells].sort((a, b) => {\n const aVal = a[sortByKey];\n const bVal = b[sortByKey];\n\n const aMissing = isMissing(aVal, treatZeroAsMissing);\n const bMissing = isMissing(bVal, treatZeroAsMissing);\n\n if (aMissing && bMissing) return 0;\n if (aMissing) return 1;\n if (bMissing) return -1;\n\n if (typeof aVal === 'string' && typeof bVal === 'string') {\n return isAscending ? aVal.localeCompare(bVal) : bVal.localeCompare(aVal);\n }\n\n const order = compareValues(aVal, bVal);\n\n return isAscending ? order : -order;\n });\n};\n"],"names":["DATE_COLUMNS","Set","ColumnType","lastDrillingAt","lastInterventionAt","toText","value","Array","isArray","join","String","isMissing","treatZeroAsMissing","toLowerCase","wells","sortByKey","sortDir","has","isAscending","SortDirection","ASC","_toConsumableArray","sort","a","b","aVal","bVal","aMissing","bMissing","localeCompare","order","aText","bText","compareValues"],"mappings":"8OAQMA,EAA4B,IAAIC,IAAI,CACxCC,EAAAA,WAAWC,eACXD,EAAUA,WAACE,qBAIPC,EAAS,SAACC,GAAc,OAC5BC,MAAMC,QAAQF,GAASA,EAAMG,KAAK,MAAQC,OAAOJ,EAAM,EAgBnDK,EAAY,SAACL,EAAgBM,GACjC,MAAqB,iBAAVN,GACDA,GAAiC,SAAxBA,EAAMO,cAGX,IAAVP,EACKM,GAGDN,CACV,sBAkB2B,SACzBQ,EACAC,EACAC,GAEA,IAAMJ,EAAqBZ,EAAaiB,IAAIF,GACtCG,EAAcF,IAAYG,EAAaA,cAACC,IAE9C,OAAOC,EAAAA,QAAIP,GAAOQ,MAAK,SAACC,EAAGC,GACzB,IAAMC,EAAOF,EAAER,GACTW,EAAOF,EAAET,GAETY,EAAWhB,EAAUc,EAAMb,GAC3BgB,EAAWjB,EAAUe,EAAMd,GAEjC,GAAIe,GAAYC,EAAU,OAAO,EACjC,GAAID,EAAU,OAAO,EACrB,GAAIC,EAAU,OAAQ,EAEtB,GAAoB,iBAATH,GAAqC,iBAATC,EACrC,OAAOR,EAAcO,EAAKI,cAAcH,GAAQA,EAAKG,cAAcJ,GAGrE,IAAMK,EAhEY,SAACP,EAAYC,GACjC,GAAiB,iBAAND,GAA+B,iBAANC,EAClC,OAAID,IAAMC,EAAU,EACbD,EAAIC,EAAI,GAAK,EAGtB,IAAMO,EAAQ1B,EAAOkB,GACfS,EAAQ3B,EAAOmB,GAErB,OAAIO,IAAUC,EAAc,EACrBD,EAAQC,EAAQ,GAAK,CAC9B,CAqDkBC,CAAcR,EAAMC,GAElC,OAAOR,EAAcY,GAASA,CAChC,GACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("@babel/runtime/helpers/defineProperty"),r=require("react"),o=require("lodash"),t=require("prop-types"),i=require("@material-ui/core/styles"),n=require("react-mentions"),s=require("@material-ui/core/colors/blue"),a=require("./utils/index.js"),l=require("../../utils/links.js"),u=require("./constants.js"),c=require("./style.css.js"),d=require("../Avatar/index.js");require("../../permissions/PermissionsContext.js");var p=require("../../permissions/constants/index.js");require("@babel/runtime/helpers/slicedToArray");var f=require("../../permissions/withPermissionsHOC.js");require("@babel/runtime/helpers/asyncToGenerator"),require("@babel/runtime/regenerator"),require("../../clients/jsonApi/index.js"),require("../../permissions/ProvidePermissions.js");var g=require("react/jsx-runtime");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var b=m(e),h=m(t);function v(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,t)}return o}function y(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?v(Object(o),!0).forEach((function(r){b.default(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):v(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}var j={backgroundColor:m(s).default[100]},_={color:"#00bcd4"},q={color:"var(--palette-info-light)",backgroundColor:"rgb(from var(--palette-primary-text-1) r g b / 0.04)",outline:"1px solid rgb(from var(--palette-primary-text-1) r g b / 0.16)",borderRadius:"4px"},P
|
|
1
|
+
"use strict";var e=require("@babel/runtime/helpers/defineProperty"),r=require("react"),o=require("lodash"),t=require("prop-types"),i=require("@material-ui/core/styles"),n=require("react-mentions"),s=require("@material-ui/core/colors/blue"),a=require("./utils/index.js"),l=require("../../utils/links.js"),u=require("./constants.js"),c=require("./style.css.js"),d=require("../Avatar/index.js");require("../../permissions/PermissionsContext.js");var p=require("../../permissions/constants/index.js");require("@babel/runtime/helpers/slicedToArray");var f=require("../../permissions/withPermissionsHOC.js");require("@babel/runtime/helpers/asyncToGenerator"),require("@babel/runtime/regenerator"),require("../../clients/jsonApi/index.js"),require("../../permissions/ProvidePermissions.js");var g=require("react/jsx-runtime");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var b=m(e),h=m(t);function v(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,t)}return o}function y(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?v(Object(o),!0).forEach((function(r){b.default(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):v(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}var j={backgroundColor:m(s).default[100]},_={color:"#00bcd4"},q={color:"var(--palette-info-light)",backgroundColor:"rgb(from var(--palette-primary-text-1) r g b / 0.04)",outline:"1px solid rgb(from var(--palette-primary-text-1) r g b / 0.16)",borderRadius:"4px"},P=/(?!)/,w=[],x={suggestions:{item:{"&focused":{backgroundColor:"rgba(0, 0, 0, 0.08)"}}}},O=y(y({},x),{},{input:{color:"#fff",caretColor:"#fff",zIndex:1},highlighter:{color:"#fff"}}),C=y(y({},x),{},{input:{color:"#000"}}),S=function(e){var t=e.onChange,i=void 0===t?R:t,s=e.singleLine,p=void 0!==s&&s,f=e.suggestionsPortalHost,m=void 0===f?null:f,b=e.value,h=void 0===b?"":b,v=e.inputRef,x=void 0===v?null:v,S=e.classes,K=e.style,L=void 0===K?k:K,I=e.withLightTheme,D=void 0!==I&&I,F=e.placeholder,H=void 0===F?"Mention people using '@'":F,V=e.onMount,B=void 0===V?U:V,Q=e.onKeyDown,z=void 0===Q?E:Q,G=e.onKeyUp,J=void 0===G?M:G,W=e.onFocus,X=void 0===W?N:W,Y=e.onBlur,Z=void 0===Y?T:Y,$=e.autoFocus,ee=void 0===$||$,re=e.disabled,oe=void 0!==re&&re,te=e.companyId,ie=void 0===te?null:te,ne=e.currentUser,se=void 0===ne?null:ne,ae=e.isCompanySelectVisible,le=e.mentionProps,ue=void 0===le?A:le,ce=e.allowSuggestionsAboveCursor,de=void 0!==ce&&ce,pe=e.allowEmptyQuery,fe=void 0!==pe&&pe,ge=e.highlightLinks,me=void 0!==ge&≥r.useEffect(B,[]);var be=r.useCallback(o.debounce((function(e,r){var o=ae&&se&&se.company_id!==ie?[se.company_id,ie]:null;a.handleFetchUsers(e,r,o,fe)}),400),[ie,fe]),he=y(y({},D?C:O),L);if(me){var ve,ye=null===(ve=he.input)||void 0===ve?void 0:ve.color;he.input=y(y({caretColor:ye},he.input),{},{color:"transparent"}),he.highlighter=y(y({color:ye},he.highlighter),{},{substring:{visibility:"visible"}})}return g.jsxs(n.MentionsInput,{value:h,onChange:function(e,r){i(r)},singleLine:p,allowSpaceInQuery:!0,classNames:c,placeholder:H,suggestionsPortalHost:m,inputRef:x,style:he,onKeyDown:z,onKeyUp:J,autoFocus:ee,onFocus:X,onBlur:Z,disabled:oe,allowSuggestionsAboveCursor:de,children:[g.jsx(n.Mention,y({markup:u.USER_MARKUP,renderSuggestion:function(e){return function(e,r){return g.jsxs("div",{className:c.mention__suggestion,children:[g.jsx(d.AvatarComponent,{alt:e.display,displayName:e.display,className:r.avatar,imgSrc:e.photo}),g.jsxs("div",{className:c.mention__suggestion__info,children:[g.jsx("span",{"data-testid":"".concat("userMention","_name_").concat(e.display),className:c.mention__suggestion__info__name,children:e.display}),e.title&&g.jsx("span",{className:c.mention__suggestion__info__group,children:e.title})]})]})}(e,S)},trigger:"@",data:be,displayTransform:function(e,r){return"@".concat(r)},style:D?j:_,appendSpaceOnAdd:!0},ue)),me&&g.jsx(n.Mention,{markup:u.LINK_MARKUP,regex:l.URL_CAPTURE_PATTERN,trigger:P,data:w,displayTransform:function(e){return e},style:q})]})};S.propTypes={onChange:h.default.func,singleLine:h.default.bool,suggestionsPortalHost:h.default.shape({current:h.default.instanceOf(Element)}),value:h.default.string,inputRef:h.default.shape({}),classes:h.default.shape({avatar:h.default.string.isRequired}).isRequired,withLightTheme:h.default.bool,placeholder:h.default.string,style:h.default.shape({}),mentionProps:h.default.shape({}),onMount:h.default.func,onKeyDown:h.default.func,onKeyUp:h.default.func,onFocus:h.default.func,onBlur:h.default.func,autoFocus:h.default.bool,disabled:h.default.bool,currentUser:h.default.shape({company_id:h.default.number.isRequired}),companyId:h.default.number,isCompanySelectVisible:h.default.bool.isRequired,allowSuggestionsAboveCursor:h.default.bool,highlightLinks:h.default.bool,allowEmptyQuery:h.default.bool};var R=function(){},k={suggestions:{list:{background:"#414141"},item:{color:"white",height:30,"&focused":{backgroundColor:"rgba(255, 255, 255, 0.08)"}}}},A={},U=function(){},E=function(){},M=function(){},N=function(){},T=function(){},K=f.withPermissionsHOC({isCompanySelectVisible:p.PERMISSIONS.companySelectorView})(i.withStyles({avatar:{height:45,width:45,border:"1.5px solid #fff"}})(S));module.exports=K;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/UserMention/index.js"],"sourcesContent":["import { useCallback, useEffect } from 'react';\nimport { debounce } from 'lodash';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { MentionsInput, Mention } from 'react-mentions';\nimport blue from '@material-ui/core/colors/blue';\n\nimport { handleFetchUsers } from './utils';\n\nimport { URL_CAPTURE_PATTERN } from '~/utils/links';\nimport { USER_MARKUP, LINK_MARKUP } from './constants';\n\nimport styles from './style.css';\n\nimport Avatar from '~components/Avatar';\nimport { withPermissionsHOC, PERMISSIONS } from '~/permissions';\n\nconst PAGE_NAME = 'userMention';\n\nconst muiStyles = {\n avatar: {\n height: 45,\n width: 45,\n border: '1.5px solid #fff',\n },\n};\n\nconst mentionLightStyle = {\n backgroundColor: blue[100],\n};\nconst mentionDarkStyle = {\n color: '#00bcd4',\n};\n\n// Matches the mirror token in `LinkedText`, which react-mentions cannot share as a class.\n// Off the palette, not literal white, or the tint vanishes against a light theme.\nconst linkStyle = {\n color: 'var(--palette-info-light)',\n backgroundColor: 'rgb(from var(--palette-primary-text-1) r g b / 0.04)',\n // Outline, not border: a border takes space and would shift the text.\n outline: '1px solid rgb(from var(--palette-primary-text-1) r g b / 0.16)',\n borderRadius: '4px',\n};\n\n// This mention exists to paint existing text, never to offer a suggestion.\nconst NEVER_TRIGGERS = /$^/;\nconst NO_SUGGESTIONS = [];\n\n// NOTE: IMPORTANT! 'input', 'mention' and 'highliter' should always have same font/latter/height/line etc values\nconst inputStyles = {\n suggestions: {\n item: {\n '&focused': {\n backgroundColor: 'rgba(0, 0, 0, 0.08)',\n },\n },\n },\n};\n\nconst darkThemeInputStyles = {\n ...inputStyles,\n input: {\n color: '#fff',\n caretColor: '#fff',\n zIndex: 1,\n },\n highlighter: {\n color: '#fff',\n },\n};\n\nconst lightThemeInputStyles = {\n ...inputStyles,\n input: { color: '#000' },\n};\n\nconst renderSuggestion = (entry, classes) => (\n <div className={styles.mention__suggestion}>\n <Avatar\n alt={entry.display}\n displayName={entry.display}\n className={classes.avatar}\n imgSrc={entry.photo}\n />\n <div className={styles.mention__suggestion__info}>\n <span\n data-testid={`${PAGE_NAME}_name_${entry.display}`}\n className={styles.mention__suggestion__info__name}\n >\n {entry.display}\n </span>\n {entry.title && (\n <span className={styles.mention__suggestion__info__group}>{entry.title}</span>\n )}\n </div>\n </div>\n);\n\nconst UserMention = ({\n onChange = DEFAULT_USER_MENTION_ON_CHANGE,\n singleLine = false,\n suggestionsPortalHost = null,\n value = '',\n inputRef = null,\n classes,\n style = DEFAULT_USER_MENTION_STYLE,\n withLightTheme = false,\n placeholder = \"Mention people using '@'\",\n onMount = DEFAULT_USER_MENTION_ON_MOUNT,\n onKeyDown = DEFAULT_USER_MENTION_ON_KEY_DOWN,\n onKeyUp = DEFAULT_USER_MENTION_ON_KEY_UP,\n onFocus = DEFAULT_USER_MENTION_ON_FOCUS,\n onBlur = DEFAULT_USER_MENTION_ON_BLUR,\n autoFocus = true,\n disabled = false,\n companyId = null,\n currentUser = null,\n isCompanySelectVisible,\n mentionProps = DEFAULT_USER_MENTION_MENTION_PROPS,\n allowSuggestionsAboveCursor = false,\n allowEmptyQuery = false,\n highlightLinks = false,\n}) => {\n useEffect(onMount, []);\n\n const fetchUsers = (search, callback) => {\n const companyIds =\n isCompanySelectVisible && currentUser && currentUser.company_id !== companyId\n ? [currentUser.company_id, companyId]\n : null;\n\n handleFetchUsers(search, callback, companyIds, allowEmptyQuery);\n };\n\n const debouncedUsersFetch = useCallback(debounce(fetchUsers, 400), [companyId, allowEmptyQuery]);\n\n const onInputChange = (event, newValue) => {\n onChange(newValue);\n };\n\n const themedStyle = {\n ...(withLightTheme ? lightThemeInputStyles : darkThemeInputStyles),\n ...style,\n };\n\n // react-mentions paints the text in the textarea and keeps the highlighter behind it, so a\n // mention's colour never shows through. Handing the text to the highlighter instead is what\n // lets a link carry the same token as the plain textareas do.\n if (highlightLinks) {\n const textColor = themedStyle.input?.color;\n\n themedStyle.input = { caretColor: textColor, ...themedStyle.input, color: 'transparent' };\n themedStyle.highlighter = {\n color: textColor,\n ...themedStyle.highlighter,\n substring: { visibility: 'visible' },\n };\n }\n\n return (\n <MentionsInput\n value={value}\n onChange={onInputChange}\n singleLine={singleLine}\n allowSpaceInQuery\n classNames={styles}\n placeholder={placeholder}\n suggestionsPortalHost={suggestionsPortalHost}\n inputRef={inputRef}\n style={themedStyle}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n autoFocus={autoFocus}\n onFocus={onFocus}\n onBlur={onBlur}\n disabled={disabled}\n allowSuggestionsAboveCursor={allowSuggestionsAboveCursor}\n >\n <Mention\n markup={USER_MARKUP}\n renderSuggestion={entry => renderSuggestion(entry, classes)}\n trigger=\"@\"\n data={debouncedUsersFetch}\n displayTransform={(id, display) => `@${display}`}\n style={withLightTheme ? mentionLightStyle : mentionDarkStyle}\n appendSpaceOnAdd\n {...mentionProps}\n />\n\n {/* Highlight only: a `regex` makes react-mentions style matching text without any markup\n of its own, so the url stays exactly as typed in the value it hands back. */}\n {highlightLinks && (\n <Mention\n markup={LINK_MARKUP}\n regex={URL_CAPTURE_PATTERN}\n trigger={NEVER_TRIGGERS}\n data={NO_SUGGESTIONS}\n displayTransform={display => display}\n style={linkStyle}\n />\n )}\n </MentionsInput>\n );\n};\n\nUserMention.propTypes = {\n onChange: PropTypes.func,\n singleLine: PropTypes.bool,\n suggestionsPortalHost: PropTypes.shape({\n current: PropTypes.instanceOf(Element),\n }),\n value: PropTypes.string,\n inputRef: PropTypes.shape({}),\n classes: PropTypes.shape({\n avatar: PropTypes.string.isRequired,\n }).isRequired,\n withLightTheme: PropTypes.bool,\n placeholder: PropTypes.string,\n style: PropTypes.shape({}),\n mentionProps: PropTypes.shape({}),\n onMount: PropTypes.func,\n onKeyDown: PropTypes.func,\n onKeyUp: PropTypes.func,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n autoFocus: PropTypes.bool,\n disabled: PropTypes.bool,\n\n currentUser: PropTypes.shape({\n company_id: PropTypes.number.isRequired,\n }),\n companyId: PropTypes.number,\n isCompanySelectVisible: PropTypes.bool.isRequired,\n allowSuggestionsAboveCursor: PropTypes.bool,\n highlightLinks: PropTypes.bool,\n /** Show default users when only \"@\" is typed, instead of waiting for a search term. */\n allowEmptyQuery: PropTypes.bool,\n};\n\nconst DEFAULT_USER_MENTION_ON_CHANGE = () => undefined;\n\nconst DEFAULT_USER_MENTION_STYLE = {\n suggestions: {\n list: {\n background: '#414141',\n },\n item: {\n color: 'white',\n height: 30,\n '&focused': {\n backgroundColor: 'rgba(255, 255, 255, 0.08)',\n },\n },\n },\n};\n\nconst DEFAULT_USER_MENTION_MENTION_PROPS = {};\nconst DEFAULT_USER_MENTION_ON_MOUNT = () => undefined;\nconst DEFAULT_USER_MENTION_ON_KEY_DOWN = () => undefined;\nconst DEFAULT_USER_MENTION_ON_KEY_UP = () => undefined;\nconst DEFAULT_USER_MENTION_ON_FOCUS = () => undefined;\nconst DEFAULT_USER_MENTION_ON_BLUR = () => undefined;\n\nexport default withPermissionsHOC({ isCompanySelectVisible: PERMISSIONS.companySelectorView })(\n withStyles(muiStyles)(UserMention)\n);\n"],"names":["mentionLightStyle","backgroundColor","mentionDarkStyle","color","linkStyle","outline","borderRadius","NEVER_TRIGGERS","NO_SUGGESTIONS","inputStyles","suggestions","item","darkThemeInputStyles","input","caretColor","zIndex","highlighter","lightThemeInputStyles","UserMention","_ref","_ref$onChange","onChange","DEFAULT_USER_MENTION_ON_CHANGE","_ref$singleLine","singleLine","_ref$suggestionsPorta","suggestionsPortalHost","_ref$value","value","_ref$inputRef","inputRef","classes","_ref$style","style","DEFAULT_USER_MENTION_STYLE","_ref$withLightTheme","withLightTheme","_ref$placeholder","placeholder","_ref$onMount","onMount","DEFAULT_USER_MENTION_ON_MOUNT","_ref$onKeyDown","onKeyDown","DEFAULT_USER_MENTION_ON_KEY_DOWN","_ref$onKeyUp","onKeyUp","DEFAULT_USER_MENTION_ON_KEY_UP","_ref$onFocus","onFocus","DEFAULT_USER_MENTION_ON_FOCUS","_ref$onBlur","onBlur","DEFAULT_USER_MENTION_ON_BLUR","_ref$autoFocus","autoFocus","_ref$disabled","disabled","_ref$companyId","companyId","_ref$currentUser","currentUser","isCompanySelectVisible","_ref$mentionProps","mentionProps","DEFAULT_USER_MENTION_MENTION_PROPS","_ref$allowSuggestions","allowSuggestionsAboveCursor","_ref$allowEmptyQuery","allowEmptyQuery","_ref$highlightLinks","highlightLinks","useEffect","debouncedUsersFetch","useCallback","debounce","search","callback","companyIds","company_id","handleFetchUsers","themedStyle","_themedStyle$input","textColor","_objectSpread","substring","visibility","_jsxs","MentionsInput","event","newValue","allowSpaceInQuery","classNames","styles","children","_jsx","Mention","markup","USER_MARKUP","renderSuggestion","entry","className","mention__suggestion","Avatar","alt","display","displayName","avatar","imgSrc","photo","jsxs","mention__suggestion__info","jsx","concat","mention__suggestion__info__name","title","mention__suggestion__info__group","trigger","data","displayTransform","id","appendSpaceOnAdd","LINK_MARKUP","regex","URL_CAPTURE_PATTERN","propTypes","PropTypes","func","bool","shape","current","instanceOf","Element","string","isRequired","number","list","background","height","UserMention$1","withPermissionsHOC","PERMISSIONS","companySelectorView","withStyles","width","border"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/UserMention/index.js"],"sourcesContent":["import { useCallback, useEffect } from 'react';\nimport { debounce } from 'lodash';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { MentionsInput, Mention } from 'react-mentions';\nimport blue from '@material-ui/core/colors/blue';\n\nimport { handleFetchUsers } from './utils';\n\nimport { URL_CAPTURE_PATTERN } from '~/utils/links';\nimport { USER_MARKUP, LINK_MARKUP } from './constants';\n\nimport styles from './style.css';\n\nimport Avatar from '~components/Avatar';\nimport { withPermissionsHOC, PERMISSIONS } from '~/permissions';\n\nconst PAGE_NAME = 'userMention';\n\nconst muiStyles = {\n avatar: {\n height: 45,\n width: 45,\n border: '1.5px solid #fff',\n },\n};\n\nconst mentionLightStyle = {\n backgroundColor: blue[100],\n};\nconst mentionDarkStyle = {\n color: '#00bcd4',\n};\n\n// Matches the mirror token in `LinkedText`, which react-mentions cannot share as a class.\n// Off the palette, not literal white, or the tint vanishes against a light theme.\nconst linkStyle = {\n color: 'var(--palette-info-light)',\n backgroundColor: 'rgb(from var(--palette-primary-text-1) r g b / 0.04)',\n // Outline, not border: a border takes space and would shift the text.\n outline: '1px solid rgb(from var(--palette-primary-text-1) r g b / 0.16)',\n borderRadius: '4px',\n};\n\n// This mention exists to paint existing text, never to offer a suggestion.\n// `/$^/` looks like it never matches but matches the empty string, and react-mentions then reads\n// capture groups this regex does not have — every caret at the start of an empty composer threw.\nconst NEVER_TRIGGERS = /(?!)/;\nconst NO_SUGGESTIONS = [];\n\n// NOTE: IMPORTANT! 'input', 'mention' and 'highliter' should always have same font/latter/height/line etc values\nconst inputStyles = {\n suggestions: {\n item: {\n '&focused': {\n backgroundColor: 'rgba(0, 0, 0, 0.08)',\n },\n },\n },\n};\n\nconst darkThemeInputStyles = {\n ...inputStyles,\n input: {\n color: '#fff',\n caretColor: '#fff',\n zIndex: 1,\n },\n highlighter: {\n color: '#fff',\n },\n};\n\nconst lightThemeInputStyles = {\n ...inputStyles,\n input: { color: '#000' },\n};\n\nconst renderSuggestion = (entry, classes) => (\n <div className={styles.mention__suggestion}>\n <Avatar\n alt={entry.display}\n displayName={entry.display}\n className={classes.avatar}\n imgSrc={entry.photo}\n />\n <div className={styles.mention__suggestion__info}>\n <span\n data-testid={`${PAGE_NAME}_name_${entry.display}`}\n className={styles.mention__suggestion__info__name}\n >\n {entry.display}\n </span>\n {entry.title && (\n <span className={styles.mention__suggestion__info__group}>{entry.title}</span>\n )}\n </div>\n </div>\n);\n\nconst UserMention = ({\n onChange = DEFAULT_USER_MENTION_ON_CHANGE,\n singleLine = false,\n suggestionsPortalHost = null,\n value = '',\n inputRef = null,\n classes,\n style = DEFAULT_USER_MENTION_STYLE,\n withLightTheme = false,\n placeholder = \"Mention people using '@'\",\n onMount = DEFAULT_USER_MENTION_ON_MOUNT,\n onKeyDown = DEFAULT_USER_MENTION_ON_KEY_DOWN,\n onKeyUp = DEFAULT_USER_MENTION_ON_KEY_UP,\n onFocus = DEFAULT_USER_MENTION_ON_FOCUS,\n onBlur = DEFAULT_USER_MENTION_ON_BLUR,\n autoFocus = true,\n disabled = false,\n companyId = null,\n currentUser = null,\n isCompanySelectVisible,\n mentionProps = DEFAULT_USER_MENTION_MENTION_PROPS,\n allowSuggestionsAboveCursor = false,\n allowEmptyQuery = false,\n highlightLinks = false,\n}) => {\n useEffect(onMount, []);\n\n const fetchUsers = (search, callback) => {\n const companyIds =\n isCompanySelectVisible && currentUser && currentUser.company_id !== companyId\n ? [currentUser.company_id, companyId]\n : null;\n\n handleFetchUsers(search, callback, companyIds, allowEmptyQuery);\n };\n\n const debouncedUsersFetch = useCallback(debounce(fetchUsers, 400), [companyId, allowEmptyQuery]);\n\n const onInputChange = (event, newValue) => {\n onChange(newValue);\n };\n\n const themedStyle = {\n ...(withLightTheme ? lightThemeInputStyles : darkThemeInputStyles),\n ...style,\n };\n\n // react-mentions paints the text in the textarea and keeps the highlighter behind it, so a\n // mention's colour never shows through. Handing the text to the highlighter instead is what\n // lets a link carry the same token as the plain textareas do.\n if (highlightLinks) {\n const textColor = themedStyle.input?.color;\n\n themedStyle.input = { caretColor: textColor, ...themedStyle.input, color: 'transparent' };\n themedStyle.highlighter = {\n color: textColor,\n ...themedStyle.highlighter,\n substring: { visibility: 'visible' },\n };\n }\n\n return (\n <MentionsInput\n value={value}\n onChange={onInputChange}\n singleLine={singleLine}\n allowSpaceInQuery\n classNames={styles}\n placeholder={placeholder}\n suggestionsPortalHost={suggestionsPortalHost}\n inputRef={inputRef}\n style={themedStyle}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n autoFocus={autoFocus}\n onFocus={onFocus}\n onBlur={onBlur}\n disabled={disabled}\n allowSuggestionsAboveCursor={allowSuggestionsAboveCursor}\n >\n <Mention\n markup={USER_MARKUP}\n renderSuggestion={entry => renderSuggestion(entry, classes)}\n trigger=\"@\"\n data={debouncedUsersFetch}\n displayTransform={(id, display) => `@${display}`}\n style={withLightTheme ? mentionLightStyle : mentionDarkStyle}\n appendSpaceOnAdd\n {...mentionProps}\n />\n\n {/* Highlight only: a `regex` makes react-mentions style matching text without any markup\n of its own, so the url stays exactly as typed in the value it hands back. */}\n {highlightLinks && (\n <Mention\n markup={LINK_MARKUP}\n regex={URL_CAPTURE_PATTERN}\n trigger={NEVER_TRIGGERS}\n data={NO_SUGGESTIONS}\n displayTransform={display => display}\n style={linkStyle}\n />\n )}\n </MentionsInput>\n );\n};\n\nUserMention.propTypes = {\n onChange: PropTypes.func,\n singleLine: PropTypes.bool,\n suggestionsPortalHost: PropTypes.shape({\n current: PropTypes.instanceOf(Element),\n }),\n value: PropTypes.string,\n inputRef: PropTypes.shape({}),\n classes: PropTypes.shape({\n avatar: PropTypes.string.isRequired,\n }).isRequired,\n withLightTheme: PropTypes.bool,\n placeholder: PropTypes.string,\n style: PropTypes.shape({}),\n mentionProps: PropTypes.shape({}),\n onMount: PropTypes.func,\n onKeyDown: PropTypes.func,\n onKeyUp: PropTypes.func,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n autoFocus: PropTypes.bool,\n disabled: PropTypes.bool,\n\n currentUser: PropTypes.shape({\n company_id: PropTypes.number.isRequired,\n }),\n companyId: PropTypes.number,\n isCompanySelectVisible: PropTypes.bool.isRequired,\n allowSuggestionsAboveCursor: PropTypes.bool,\n highlightLinks: PropTypes.bool,\n /** Show default users when only \"@\" is typed, instead of waiting for a search term. */\n allowEmptyQuery: PropTypes.bool,\n};\n\nconst DEFAULT_USER_MENTION_ON_CHANGE = () => undefined;\n\nconst DEFAULT_USER_MENTION_STYLE = {\n suggestions: {\n list: {\n background: '#414141',\n },\n item: {\n color: 'white',\n height: 30,\n '&focused': {\n backgroundColor: 'rgba(255, 255, 255, 0.08)',\n },\n },\n },\n};\n\nconst DEFAULT_USER_MENTION_MENTION_PROPS = {};\nconst DEFAULT_USER_MENTION_ON_MOUNT = () => undefined;\nconst DEFAULT_USER_MENTION_ON_KEY_DOWN = () => undefined;\nconst DEFAULT_USER_MENTION_ON_KEY_UP = () => undefined;\nconst DEFAULT_USER_MENTION_ON_FOCUS = () => undefined;\nconst DEFAULT_USER_MENTION_ON_BLUR = () => undefined;\n\nexport default withPermissionsHOC({ isCompanySelectVisible: PERMISSIONS.companySelectorView })(\n withStyles(muiStyles)(UserMention)\n);\n"],"names":["mentionLightStyle","backgroundColor","mentionDarkStyle","color","linkStyle","outline","borderRadius","NEVER_TRIGGERS","NO_SUGGESTIONS","inputStyles","suggestions","item","darkThemeInputStyles","input","caretColor","zIndex","highlighter","lightThemeInputStyles","UserMention","_ref","_ref$onChange","onChange","DEFAULT_USER_MENTION_ON_CHANGE","_ref$singleLine","singleLine","_ref$suggestionsPorta","suggestionsPortalHost","_ref$value","value","_ref$inputRef","inputRef","classes","_ref$style","style","DEFAULT_USER_MENTION_STYLE","_ref$withLightTheme","withLightTheme","_ref$placeholder","placeholder","_ref$onMount","onMount","DEFAULT_USER_MENTION_ON_MOUNT","_ref$onKeyDown","onKeyDown","DEFAULT_USER_MENTION_ON_KEY_DOWN","_ref$onKeyUp","onKeyUp","DEFAULT_USER_MENTION_ON_KEY_UP","_ref$onFocus","onFocus","DEFAULT_USER_MENTION_ON_FOCUS","_ref$onBlur","onBlur","DEFAULT_USER_MENTION_ON_BLUR","_ref$autoFocus","autoFocus","_ref$disabled","disabled","_ref$companyId","companyId","_ref$currentUser","currentUser","isCompanySelectVisible","_ref$mentionProps","mentionProps","DEFAULT_USER_MENTION_MENTION_PROPS","_ref$allowSuggestions","allowSuggestionsAboveCursor","_ref$allowEmptyQuery","allowEmptyQuery","_ref$highlightLinks","highlightLinks","useEffect","debouncedUsersFetch","useCallback","debounce","search","callback","companyIds","company_id","handleFetchUsers","themedStyle","_themedStyle$input","textColor","_objectSpread","substring","visibility","_jsxs","MentionsInput","event","newValue","allowSpaceInQuery","classNames","styles","children","_jsx","Mention","markup","USER_MARKUP","renderSuggestion","entry","className","mention__suggestion","Avatar","alt","display","displayName","avatar","imgSrc","photo","jsxs","mention__suggestion__info","jsx","concat","mention__suggestion__info__name","title","mention__suggestion__info__group","trigger","data","displayTransform","id","appendSpaceOnAdd","LINK_MARKUP","regex","URL_CAPTURE_PATTERN","propTypes","PropTypes","func","bool","shape","current","instanceOf","Element","string","isRequired","number","list","background","height","UserMention$1","withPermissionsHOC","PERMISSIONS","companySelectorView","withStyles","width","border"],"mappings":"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"}
|