@corva/ui 3.77.0-17 → 3.77.0-18
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/OffsetWellsTable/cells/MetricsCells/MetricsCells.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/MetricsCells/MetricsCells.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.module.css.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableRow/OffsetWellsTableRow.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableRow/OffsetWellsTableRow.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/constants.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/constants.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useAdvancedWells.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useAdvancedWells.js.map +1 -1
- package/components/OffsetWellPickerV4/effects/__tests__/useCompanyMetricKey.test.d.ts +2 -0
- package/components/OffsetWellPickerV4/effects/__tests__/useCompanyMetricKey.test.d.ts.map +1 -0
- package/components/OffsetWellPickerV4/effects/useCompanyMetricKey.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/__tests__/constants.test.d.ts +2 -0
- package/components/OffsetWellPickerV5/__tests__/constants.test.d.ts.map +1 -0
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/MetricsCells/MetricsCells.d.ts +2 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/MetricsCells/MetricsCells.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/MetricsCells/MetricsCells.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/MetricsCells/MetricsCells.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.d.ts +3 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/MetricCell.module.css.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/__tests__/MetricCell.test.d.ts +2 -0
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/MetricCell/__tests__/MetricCell.test.d.ts.map +1 -0
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableRow/OffsetWellsTableRow.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableRow/OffsetWellsTableRow.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/OffsetWellsTableRow/OffsetWellsTableRow.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.d.ts +0 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/useRowInteractions.js.map +1 -1
- package/components/OffsetWellPickerV5/constants.d.ts +17 -3
- package/components/OffsetWellPickerV5/constants.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/constants.js +1 -1
- package/components/OffsetWellPickerV5/constants.js.map +1 -1
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/__tests__/useAdvancedWells.test.d.ts +2 -0
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/__tests__/useAdvancedWells.test.d.ts.map +1 -0
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/__tests__/useCompanyMetricKey.test.d.ts +2 -0
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/__tests__/useCompanyMetricKey.test.d.ts.map +1 -0
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useAdvancedWells.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useAdvancedWells.js +1 -1
- package/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useAdvancedWells.js.map +1 -1
- package/mcp-server/server.mjs +1 -1
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAdvancedWells.js","sources":["../../../../../src/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useAdvancedWells.ts"],"sourcesContent":["import { useState, useEffect, useRef, useMemo } from 'react';\nimport { get, groupBy, isEqual } from 'lodash';\n\nimport { fetchMetricsData } from '../../api';\nimport type { FetchedOffsetWell } from '../../api/shared/types';\nimport { NonConvertableMetrics } from '../../constants';\nimport { usePickerPropsStore } from '../../stores/picker-props-store/usePickerPropsStore';\nimport { getSegmentConfig } from '../../segment-config';\nimport type { WellSection, OffsetWellsBySection } from '../useExternalOffsets';\n\nimport { transformWells } from './wellTransformations';\n\nexport type TransformedWell = FetchedOffsetWell & {\n distance?: number;\n wellSection?: string[];\n};\n\ntype MetricsCache = Record<number, Record<string, unknown>>;\n\nconst parseMetricValue = (value: number): number | null =>\n Number.isFinite(value) ? parseFloat(value.toFixed(2)) : null;\n\nexport const useAdvancedWells = (\n rawWells: FetchedOffsetWell[] | null,\n wellSections: WellSection[] | null,\n offsetWellsBySection: OffsetWellsBySection | null,\n subjectWellId: number | null,\n metricsKeys: string[],\n open: boolean | undefined\n): [TransformedWell[] | null, boolean, TransformedWell[] | null, Set<number>] => {\n const segment = usePickerPropsStore(state => state.segment);\n const { metricsCollection } = getSegmentConfig(segment);\n\n const [wells, setWells] = useState<TransformedWell[] | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [loadingWellIds, setLoadingWellIds] = useState<Set<number>>(new Set());\n const fetchedDataCache = useRef<MetricsCache>({});\n const previousMetricsKeys = useRef(metricsKeys);\n const previousCollection = useRef(metricsCollection);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const transformedWells = useMemo((): TransformedWell[] | null => {\n if (!open || !rawWells) return null;\n\n return transformWells(rawWells, subjectWellId, wellSections, offsetWellsBySection);\n }, [rawWells, subjectWellId, wellSections, offsetWellsBySection, open]);\n\n useEffect(() => {\n if (!transformedWells || !open) {\n setIsLoading(false);\n setLoadingWellIds(new Set());\n return undefined;\n }\n\n // Immediately set wells with transformed data AND cached metrics\n // This preserves existing metric values while new wells load\n const wellsWithCachedMetrics = transformedWells.map(well => ({\n ...well,\n ...(fetchedDataCache.current[well.id] || {}),\n }));\n setWells(wellsWithCachedMetrics);\n setIsLoading(true);\n\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n\n const abortController = new AbortController();\n\n abortControllerRef.current = abortController;\n\n const fetchAndUpdateMetrics = async () => {\n try {\n let wellIdsToFetch: number[] = [];\n const metricsKeysChanged = !isEqual(previousMetricsKeys.current, metricsKeys);\n const collectionChanged = previousCollection.current !== metricsCollection;\n\n if (metricsKeysChanged || collectionChanged) {\n wellIdsToFetch = transformedWells.map(well => well.id);\n fetchedDataCache.current = {};\n previousMetricsKeys.current = metricsKeys;\n previousCollection.current = metricsCollection;\n } else {\n // Only fetch metrics for wells not in cache\n wellIdsToFetch = transformedWells\n .filter(well => !fetchedDataCache.current[well.id])\n .map(well => well.id);\n }\n\n // Track which wells are loading\n if (wellIdsToFetch.length > 0) {\n setLoadingWellIds(new Set(wellIdsToFetch));\n }\n\n if (wellIdsToFetch.length > 0 && metricsKeys.length > 0) {\n // Group wells to fetch by their company ID\n const wellsToFetchById = new Map(\n transformedWells\n .filter(well => wellIdsToFetch.includes(well.id))\n .map(well => [well.id, well] as const)\n );\n const wellsByCompany = groupBy(\n Array.from(wellsToFetchById.values()).filter(well => well.companyId),\n 'companyId'\n );\n\n // Fetch metrics for each company in parallel\n const metricsPromises = Object.entries(wellsByCompany).map(\n async ([compId, companyWells]) => {\n const companyWellIds = companyWells.map(w => w.id);\n\n return fetchMetricsData(\n Number(compId),\n companyWellIds,\n metricsKeys,\n abortController.signal,\n metricsCollection\n );\n }\n );\n\n const allRecords = await Promise.all(metricsPromises);\n\n if (abortController.signal.aborted) {\n return;\n }\n\n const records = allRecords.flat();\n const wellsMetrics: MetricsCache = {};\n const recordsPerAsset = groupBy(records, 'asset_id');\n\n wellIdsToFetch.forEach(wellId => {\n const wellMetrics = recordsPerAsset[wellId]?.reduce<Record<string, unknown>>(\n (acc, record) => {\n const value = get(record, 'data.value') as number;\n const key = get(record, 'data.key') as string;\n\n return {\n ...acc,\n [key]: NonConvertableMetrics.includes(key) ? value : parseMetricValue(value),\n };\n },\n {}\n );\n\n wellsMetrics[wellId] = wellMetrics || {};\n });\n\n fetchedDataCache.current = {\n ...fetchedDataCache.current,\n ...wellsMetrics,\n };\n }\n\n const result = transformedWells.map(well => ({\n ...well,\n ...(fetchedDataCache.current[well.id] || {}),\n }));\n\n setWells(prevWells => (isEqual(result, prevWells) ? prevWells : result));\n setIsLoading(false);\n setLoadingWellIds(new Set());\n } catch (error) {\n if (!abortController.signal.aborted) {\n console.error('Error fetching metrics data:', error);\n setWells(transformedWells);\n setIsLoading(false);\n setLoadingWellIds(new Set());\n }\n }\n };\n\n fetchAndUpdateMetrics();\n\n return () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n };\n }, [transformedWells, metricsKeys, open, metricsCollection]);\n\n return [wells, isLoading, transformedWells, loadingWellIds];\n};\n"],"names":["parseMetricValue","value","Number","isFinite","parseFloat","toFixed","useAdvancedWells","rawWells","wellSections","offsetWellsBySection","subjectWellId","metricsKeys","open","segment","usePickerPropsStore","state","metricsCollection","getSegmentConfig","useState","_useState2","_slicedToArray","_useState","wells","setWells","_useState4","_useState3","isLoading","setIsLoading","_useState5","Set","_useState6","loadingWellIds","setLoadingWellIds","fetchedDataCache","useRef","previousMetricsKeys","previousCollection","abortControllerRef","transformedWells","useMemo","transformWells","useEffect","wellsWithCachedMetrics","map","well","_objectSpread","current","id","abort","abortController","AbortController","fetchAndUpdateMetrics","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","wellIdsToFetch","metricsKeysChanged","collectionChanged","wellsToFetchById","wellsByCompany","metricsPromises","allRecords","records","wellsMetrics","recordsPerAsset","result","wrap","_context2","prev","next","isEqual","filter","length","Map","includes","groupBy","Array","from","values","companyId","Object","entries","_ref3","_callee","_ref2","_ref4","compId","companyWells","companyWellIds","_context","w","abrupt","fetchMetricsData","signal","stop","_x","apply","this","arguments","Promise","all","sent","aborted","flat","forEach","wellId","_recordsPerAsset$well","wellMetrics","reduce","acc","record","get","key","NonConvertableMetrics","prevWells","t0","console","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useAdvancedWells.js","sources":["../../../../../src/components/OffsetWellPickerV5/hooks/use-well-data-pipeline/useAdvancedWells.ts"],"sourcesContent":["import { useState, useEffect, useRef, useMemo } from 'react';\nimport { get, groupBy, isEqual } from 'lodash';\n\nimport { fetchMetricsData } from '../../api';\nimport type { FetchedOffsetWell } from '../../api/shared/types';\nimport { NonConvertableMetrics, WELL_ATTRIBUTE_METRICS } from '../../constants';\nimport { usePickerPropsStore } from '../../stores/picker-props-store/usePickerPropsStore';\nimport { getSegmentConfig } from '../../segment-config';\nimport type { WellSection, OffsetWellsBySection } from '../useExternalOffsets';\n\nimport { transformWells } from './wellTransformations';\n\nexport type TransformedWell = FetchedOffsetWell & {\n distance?: number;\n wellSection?: string[];\n};\n\ntype MetricsCache = Record<number, Record<string, unknown>>;\n\nconst parseMetricValue = (value: number): number | null =>\n Number.isFinite(value) ? parseFloat(value.toFixed(2)) : null;\n\nexport const useAdvancedWells = (\n rawWells: FetchedOffsetWell[] | null,\n wellSections: WellSection[] | null,\n offsetWellsBySection: OffsetWellsBySection | null,\n subjectWellId: number | null,\n metricsKeys: string[],\n open: boolean | undefined\n): [TransformedWell[] | null, boolean, TransformedWell[] | null, Set<number>] => {\n const segment = usePickerPropsStore(state => state.segment);\n const { metricsCollection } = getSegmentConfig(segment);\n\n const [wells, setWells] = useState<TransformedWell[] | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [loadingWellIds, setLoadingWellIds] = useState<Set<number>>(new Set());\n const fetchedDataCache = useRef<MetricsCache>({});\n\n // Only these keys exist in the metrics collection. Keyed by content, so toggling a\n // well-attribute metric neither refetches nor drops the cached metrics.\n const apiMetricsKeysSignature = metricsKeys\n .filter(key => !WELL_ATTRIBUTE_METRICS.includes(key))\n .join();\n const apiMetricsKeys = useMemo(\n () => (apiMetricsKeysSignature ? apiMetricsKeysSignature.split(',') : []),\n [apiMetricsKeysSignature]\n );\n\n const previousMetricsKeys = useRef(apiMetricsKeys);\n const previousCollection = useRef(metricsCollection);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const transformedWells = useMemo((): TransformedWell[] | null => {\n if (!open || !rawWells) return null;\n\n return transformWells(rawWells, subjectWellId, wellSections, offsetWellsBySection);\n }, [rawWells, subjectWellId, wellSections, offsetWellsBySection, open]);\n\n useEffect(() => {\n if (!transformedWells || !open) {\n setIsLoading(false);\n setLoadingWellIds(new Set());\n return undefined;\n }\n\n // Immediately set wells with transformed data AND cached metrics\n // This preserves existing metric values while new wells load\n const wellsWithCachedMetrics = transformedWells.map(well => ({\n ...well,\n ...(fetchedDataCache.current[well.id] || {}),\n }));\n setWells(wellsWithCachedMetrics);\n setIsLoading(true);\n\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n\n const abortController = new AbortController();\n\n abortControllerRef.current = abortController;\n\n const fetchAndUpdateMetrics = async () => {\n try {\n let wellIdsToFetch: number[] = [];\n const metricsKeysChanged = !isEqual(previousMetricsKeys.current, apiMetricsKeys);\n const collectionChanged = previousCollection.current !== metricsCollection;\n\n if (metricsKeysChanged || collectionChanged) {\n wellIdsToFetch = transformedWells.map(well => well.id);\n fetchedDataCache.current = {};\n previousMetricsKeys.current = apiMetricsKeys;\n previousCollection.current = metricsCollection;\n } else {\n // Only fetch metrics for wells not in cache\n wellIdsToFetch = transformedWells\n .filter(well => !fetchedDataCache.current[well.id])\n .map(well => well.id);\n }\n\n // Track which wells are loading\n if (wellIdsToFetch.length > 0) {\n setLoadingWellIds(new Set(wellIdsToFetch));\n }\n\n if (wellIdsToFetch.length > 0 && apiMetricsKeys.length > 0) {\n // Group wells to fetch by their company ID\n const wellsToFetchById = new Map(\n transformedWells\n .filter(well => wellIdsToFetch.includes(well.id))\n .map(well => [well.id, well] as const)\n );\n const wellsByCompany = groupBy(\n Array.from(wellsToFetchById.values()).filter(well => well.companyId),\n 'companyId'\n );\n\n // Fetch metrics for each company in parallel\n const metricsPromises = Object.entries(wellsByCompany).map(\n async ([compId, companyWells]) => {\n const companyWellIds = companyWells.map(w => w.id);\n\n return fetchMetricsData(\n Number(compId),\n companyWellIds,\n apiMetricsKeys,\n abortController.signal,\n metricsCollection\n );\n }\n );\n\n const allRecords = await Promise.all(metricsPromises);\n\n if (abortController.signal.aborted) {\n return;\n }\n\n const records = allRecords.flat();\n const wellsMetrics: MetricsCache = {};\n const recordsPerAsset = groupBy(records, 'asset_id');\n\n wellIdsToFetch.forEach(wellId => {\n const wellMetrics = recordsPerAsset[wellId]?.reduce<Record<string, unknown>>(\n (acc, record) => {\n const value = get(record, 'data.value') as number;\n const key = get(record, 'data.key') as string;\n\n return {\n ...acc,\n [key]: NonConvertableMetrics.includes(key) ? value : parseMetricValue(value),\n };\n },\n {}\n );\n\n wellsMetrics[wellId] = wellMetrics || {};\n });\n\n fetchedDataCache.current = {\n ...fetchedDataCache.current,\n ...wellsMetrics,\n };\n }\n\n const result = transformedWells.map(well => ({\n ...well,\n ...(fetchedDataCache.current[well.id] || {}),\n }));\n\n setWells(prevWells => (isEqual(result, prevWells) ? prevWells : result));\n setIsLoading(false);\n setLoadingWellIds(new Set());\n } catch (error) {\n if (!abortController.signal.aborted) {\n console.error('Error fetching metrics data:', error);\n setWells(transformedWells);\n setIsLoading(false);\n setLoadingWellIds(new Set());\n }\n }\n };\n\n fetchAndUpdateMetrics();\n\n return () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n };\n }, [transformedWells, apiMetricsKeys, open, metricsCollection]);\n\n return [wells, isLoading, transformedWells, loadingWellIds];\n};\n"],"names":["parseMetricValue","value","Number","isFinite","parseFloat","toFixed","useAdvancedWells","rawWells","wellSections","offsetWellsBySection","subjectWellId","metricsKeys","open","segment","usePickerPropsStore","state","metricsCollection","getSegmentConfig","useState","_useState2","_slicedToArray","_useState","wells","setWells","_useState4","_useState3","isLoading","setIsLoading","_useState5","Set","_useState6","loadingWellIds","setLoadingWellIds","fetchedDataCache","useRef","apiMetricsKeysSignature","filter","key","WELL_ATTRIBUTE_METRICS","includes","join","apiMetricsKeys","useMemo","split","previousMetricsKeys","previousCollection","abortControllerRef","transformedWells","transformWells","useEffect","wellsWithCachedMetrics","map","well","_objectSpread","current","id","abort","abortController","AbortController","fetchAndUpdateMetrics","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","wellIdsToFetch","metricsKeysChanged","collectionChanged","wellsToFetchById","wellsByCompany","metricsPromises","allRecords","records","wellsMetrics","recordsPerAsset","result","wrap","_context2","prev","next","isEqual","length","Map","groupBy","Array","from","values","companyId","Object","entries","_ref3","_callee","_ref2","_ref4","compId","companyWells","companyWellIds","_context","w","abrupt","fetchMetricsData","signal","stop","_x","apply","this","arguments","Promise","all","sent","aborted","flat","forEach","wellId","_recordsPerAsset$well","wellMetrics","reduce","acc","record","get","NonConvertableMetrics","prevWells","t0","console","error"],"mappings":"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"}
|
package/mcp-server/server.mjs
CHANGED