@corva/ui 3.45.1 → 3.45.2
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/OffsetWellPickerV5.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/OffsetWellPickerV5.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/effects/useLoadAllWellsCompanySafeguard.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/stores/filter-store/utils/normalizeFilters.js +1 -1
- package/components/OffsetWellPickerV5/OffsetWellPickerV5.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/OffsetWellPickerV5.js +1 -1
- package/components/OffsetWellPickerV5/OffsetWellPickerV5.js.map +1 -1
- package/components/OffsetWellPickerV5/effects/useLoadAllWellsCompanySafeguard.d.ts +1 -0
- package/components/OffsetWellPickerV5/effects/useLoadAllWellsCompanySafeguard.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/effects/useLoadAllWellsCompanySafeguard.js +1 -1
- package/components/OffsetWellPickerV5/stores/filter-store/utils/normalizeFilters.d.ts.map +1 -1
- package/components/OffsetWellPickerV5/stores/filter-store/utils/normalizeFilters.js +1 -1
- package/components/OffsetWellPickerV5/stores/filter-store/utils/normalizeFilters.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OffsetWellPickerV5.js","sources":["../../../../src/components/OffsetWellPickerV5/OffsetWellPickerV5.js"],"sourcesContent":["import { useState, useEffect, useLayoutEffect, useRef, useCallback, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { isEmpty, uniq, uniqBy, sortBy as sortArray } from 'lodash';\nimport { Replay as ReplayIcon } from '@material-ui/icons';\nimport { Table, TableHead } from '@material-ui/core';\n\nimport {\n useAdvancedWells,\n useBicWells,\n useFilterOptions,\n useCompanyMetricKey,\n useFilteredWells,\n useSortedWells,\n useTableColumns,\n useCompanyProvider,\n useCompanies,\n usePinnedWells,\n useSearchedWells,\n useTileLoading,\n useInitialBounds,\n useLoadAllWellsCompanySafeguard,\n} from './effects';\nimport { useViewportWells } from './effects/useViewportWells';\nimport { useAllWells } from './effects/useAllWells';\nimport { useViewportStore } from './stores/viewport-store';\nimport { useFetchSubjectWell } from './effects/useFetchSubjectWell';\nimport { AppHeader } from './components/AppHeader';\nimport { Filter } from './components/Filter';\nimport { WellsMap } from './components/Map';\nimport { OffsetWellsTable } from './components/OffsetWellsTable';\nimport { OffsetWellsTableHead } from './components/OffsetWellsTable/OffsetWellsTableHead';\nimport { AdvancedSearch } from './components/OffsetWellsTable/AdvancedSearch';\nimport {\n ALL_SECTION_KEY,\n COMPANY_PROVIDERS_FOR_IDAS,\n FilterType,\n MAX_OFFSET_SIZE,\n ROWS_PER_PAGE,\n RESYNC_STATUS,\n DEFAULT_RADIUS_MILES,\n} from './constants';\nimport { SEARCH_CATEGORIES } from './components/OffsetWellsTable/AdvancedSearch/constants';\nimport { getCoordinatedWells } from './utils';\nimport { getIsImperial } from './utils/getIsImperial';\nimport { usePickerPropsStore } from './stores/picker-props-store/usePickerPropsStore';\nimport { useFilterStore } from './stores/filter-store/useFilterStore';\nimport { useViewStore } from './stores/view-store/useViewStore';\nimport { useSelectionToolStore } from './stores/selection-tool-store';\nimport { normalizeFilters } from './stores/filter-store/utils/normalizeFilters';\nimport { fetchWellsByRigIds } from './api';\n\nimport styles from './OffsetWellPickerV5.module.css';\nimport offsetTableStyles from './components/OffsetWellsTable/OffsetWellsTable.module.css';\n\nimport { showInfoNotification } from '~/utils';\nimport { NotificationsContainer } from '~/components/Notifications';\nimport { typography } from '~/styles';\nimport { LoadingIndicator } from '~/components';\nimport { Button, LoaderCircular, Modal, Tooltip } from '~/componentsV2';\nimport { useGlobalOffsetWellsSync } from '~/effects';\n\nconst PAGE_NAME = 'OffsetWellPickerV5';\n\nexport const OffsetWellPickerV5 = () => {\n const open = usePickerPropsStore(state => state.open);\n const isWDUser = usePickerPropsStore(state => state.isWDUser);\n const defaultSubjectWell = usePickerPropsStore(state => state.defaultSubjectWell);\n const currentUser = usePickerPropsStore(state => state.currentUser);\n const offsetSettings = usePickerPropsStore(state => state.offsetSettings);\n const isViewOnly = usePickerPropsStore(state => state.isViewOnly);\n const onClose = usePickerPropsStore(state => state.onClose);\n const onSave = usePickerPropsStore(state => state.onSave);\n const offsetSize = usePickerPropsStore(state => state.maxOffsetSize);\n const localMaxOffsetSize = usePickerPropsStore(state => state.localMaxOffsetSize);\n const syncAutoEnabled = usePickerPropsStore(state => state.syncAutoEnabled);\n\n const [activeWellId, setActiveWellId] = useState(null);\n const wellsMapRef = useRef(null);\n const maxOffsetSize = Math.min(offsetSize + 1, localMaxOffsetSize + 1, MAX_OFFSET_SIZE + 1);\n const maxOffsetWellNumber = Math.min(\n Math.max(maxOffsetSize, localMaxOffsetSize + 1),\n MAX_OFFSET_SIZE + 1\n );\n\n const subjectWellId = defaultSubjectWell?.asset_id;\n\n // Fetch complete subject well data with coordinates\n const [fetchedSubjectWell] = useFetchSubjectWell(subjectWellId);\n\n // Derive coordinates for initial bounds calculation (used when map is hidden)\n const subjectWellCoords = useMemo(() => {\n const coords = fetchedSubjectWell?.topHole?.coordinates;\n\n if (!coords) {\n return null;\n }\n\n const [latitude, longitude] = coords;\n\n return { latitude, longitude };\n }, [fetchedSubjectWell]);\n\n useGlobalOffsetWellsSync(offsetSettings, onSave, maxOffsetWellNumber);\n\n const isFilterExpanded = useViewStore(state => state.isFilterExpanded);\n const isMapHidden = useViewStore(state => state.isMapHidden);\n const isHScrollMoved = useViewStore(state => state.isHScrollMoved);\n const setIsHScrollMoved = useViewStore(state => state.setIsHScrollMoved);\n const isVScrollMoved = useViewStore(state => state.isVScrollMoved);\n const setIsVScrollMoved = useViewStore(state => state.setIsVScrollMoved);\n const isAdvancedSearchHidden = useViewStore(state => state.isAdvancedSearchHidden);\n const setIsAdvancedSearchHidden = useViewStore(state => state.setIsAdvancedSearchHidden);\n const isLoadAllWells = usePickerPropsStore(state => state.isLoadAllWells);\n const resetIsLoadAllWells = usePickerPropsStore(state => state.resetIsLoadAllWells);\n const shouldRecenter = usePickerPropsStore(state => state.shouldRecenter);\n const setShouldRecenter = usePickerPropsStore(state => state.setShouldRecenter);\n\n const assetCompanyId = +defaultSubjectWell?.companyId || +currentUser?.company_id;\n const hasValidAssetId = subjectWellId > 0;\n const filters = useFilterStore(state => state.filters);\n const setFilters = useFilterStore(state => state.setFilters);\n const resetFilters = useFilterStore(state => state.resetFilters);\n const resetSelectionTool = useSelectionToolStore(state => state.reset);\n\n // ViewportStore hooks for tile-based fetching\n const viewportWells = useViewportStore(state => state.wells);\n const viewportBounds = useViewportStore(state => state.bounds);\n\n const { canViewCompanies, canViewCompaniesLoading, companies } = useCompanies({ open });\n const [selectedWells, setSelectedWells] = useState([]);\n const [currentSelectionZone, setCurrentSelectionZone] = useState(\n () => offsetSettings?.lastSelectionZone ?? null\n );\n\n // Track wells being selected via search that need to wait for enrichment\n const pendingSearchSelectionRef = useRef(new Set());\n\n // Track asset IDs currently being fetched (for loading spinner in search dropdown)\n const [loadingAssetIds, setLoadingAssetIds] = useState([]);\n\n // Track if save is waiting for pending wells to be enriched\n const [isSavePending, setIsSavePending] = useState(false);\n\n // Start viewport-based tile fetching (fetches all companies, filtered client-side)\n // Disabled when all-wells mode is active\n useViewportWells(!isLoadAllWells);\n // Apply company safeguard when Load All Wells is enabled (must run before useAllWells)\n const { isSafeguardReady } = useLoadAllWellsCompanySafeguard({\n companies,\n canViewCompanies,\n canViewCompaniesLoading,\n });\n // Start all-wells loading when enabled and safeguard is ready\n useAllWells(isLoadAllWells, isSafeguardReady);\n // Set initial bounds for data loading when map is hidden\n useInitialBounds({\n subjectWellCoords,\n hasSubjectWell: subjectWellId != null,\n open,\n ghostZone: currentSelectionZone,\n });\n const isTileLoading = useTileLoading();\n\n const [selectedWellSection, setSelectedWellSection] = useState(\n offsetSettings?.wellSection || ALL_SECTION_KEY\n );\n const initLoading = useRef(true);\n const [isTableLoading, setIsTableLoading] = useState(true);\n\n const isLimitedOffsetWells = maxOffsetWellNumber <= selectedWells?.length;\n\n /** @type {ReturnType<typeof useRef<number[]>>} */\n const prevSelectedWellIds = useRef();\n const [appLoading, setAppLoading] = useState(true);\n\n useEffect(() => {\n if (open && isLimitedOffsetWells) {\n showInfoNotification(\n `App can’t process more than (${maxOffsetWellNumber - 1}) Offset Wells.`\n );\n }\n // NOTE: Refresh when the offset well changes externally\n if (!open) {\n const prevIdsSet = new Set(prevSelectedWellIds.current || []);\n const isNotChanged =\n offsetSettings?.selectedWellIds?.length === prevSelectedWellIds.current?.length &&\n (offsetSettings?.selectedWellIds || []).every(id => prevIdsSet.has(id));\n if (!isNotChanged) {\n initLoading.current = true;\n }\n prevSelectedWellIds.current = offsetSettings?.selectedWellIds;\n }\n // TODO: Check reference stability. Initially had only isLimitedOffsetWells, open, offsetSettings.\n }, [isLimitedOffsetWells, open, offsetSettings, maxOffsetWellNumber]);\n\n // NOTE: Wells are now fetched via viewport-based tile fetching (useViewportWells)\n // Convert viewport wells Map to array\n const rawWells = useMemo(() => {\n return Array.from(viewportWells.values());\n }, [viewportWells]);\n\n // Loading state: show loader when tiles are being fetched OR when still initializing (no bounds yet)\n const areRawWellsLoading = isTileLoading || (rawWells.length === 0 && viewportBounds === null);\n\n // NOTE: Fetch pinned wells independently of radius\n const [pinnedWells, arePinnedWellsLoading] = usePinnedWells(offsetSettings?.selectedWellIds);\n\n // NOTE: Fetch wells selected via search that are outside current bounds\n const [searchedWells, areSearchedWellsLoading, fetchSearchedWells] = useSearchedWells();\n\n // NOTE: Ensure subject well, pinned wells and searched wells are always in rawWells for enrichment pipeline\n const rawWellsWithSubject = useMemo(() => {\n if (!rawWells) {\n return null;\n }\n\n let result = rawWells;\n\n if (pinnedWells?.length) {\n const existingIds = new Set(result.map(w => w.id));\n const missingPinned = pinnedWells.filter(w => !existingIds.has(w.id));\n\n if (missingPinned.length > 0) {\n result = result.concat(missingPinned);\n }\n }\n\n // Merge searched wells (wells added via search that are outside bounds)\n if (searchedWells?.length) {\n const existingIds = new Set(result.map(w => w.id));\n const missingSearched = searchedWells.filter(w => !existingIds.has(w.id));\n\n if (missingSearched.length > 0) {\n result = result.concat(missingSearched);\n }\n }\n\n if (fetchedSubjectWell && !result.some(w => w.id === fetchedSubjectWell.id)) {\n result = [fetchedSubjectWell].concat(result);\n }\n\n return result;\n }, [rawWells, fetchedSubjectWell, pinnedWells, searchedWells]);\n\n const [companyProvider] = useCompanyProvider(assetCompanyId);\n\n const [\n wellSections,\n setWellSections,\n bicWells,\n setBicWells,\n resyncStatus,\n setResyncStatus,\n taScores,\n rawBicWells,\n ] = useBicWells(subjectWellId, rawWellsWithSubject);\n\n const isWellSectionColumnVisible = useMemo(() => {\n if (!wellSections) {\n return false;\n }\n\n return wellSections.some(section => section.value !== ALL_SECTION_KEY);\n }, [wellSections]);\n\n useEffect(() => {\n setAppLoading(true);\n setWellSections(null);\n setBicWells(null);\n // TODO: Check reference stability. Initially had only subjectWellId.\n }, [setBicWells, setWellSections, subjectWellId]);\n\n const [metricsKeys, setMetricsKeys] = useCompanyMetricKey(\n assetCompanyId,\n offsetSettings?.metricsKeys\n );\n\n // NOTE: Calculate wells with coordinates, metrics and well section name\n const [wellsWithMetrics, areAdvancedWellsLoading, transformedWells, loadingWellIds] =\n useAdvancedWells(rawWellsWithSubject, wellSections, bicWells, subjectWellId, metricsKeys, open);\n\n // Use wells with metrics when available, fall back to transformed wells for immediate display\n const wellsWithoutCompanyName = wellsWithMetrics || transformedWells;\n\n // NOTE: Add company names to wells for display\n const wells = useMemo(() => {\n if (!wellsWithoutCompanyName || !companies?.length) return wellsWithoutCompanyName;\n\n const companyMap = {};\n companies.forEach(company => {\n companyMap[company.id] = company.name;\n });\n\n return wellsWithoutCompanyName.map(well => ({\n ...well,\n companyName: companyMap[well.companyId] || 'Null',\n }));\n }, [wellsWithoutCompanyName, companies]);\n\n // NOTE: Derive enriched subject well from the enrichment pipeline (includes company name)\n const subjectWell = useMemo(() => {\n if (!fetchedSubjectWell) {\n return null;\n }\n\n if (!wells) {\n return fetchedSubjectWell;\n }\n\n const enrichedSubjectWell = wells.find(w => w.id === fetchedSubjectWell.id);\n\n return enrichedSubjectWell || fetchedSubjectWell;\n }, [fetchedSubjectWell, wells]);\n\n const isAllWellsLoaded =\n !areRawWellsLoading &&\n !areAdvancedWellsLoading &&\n !arePinnedWellsLoading &&\n !areSearchedWellsLoading;\n\n useEffect(() => {\n if (!isAllWellsLoaded) {\n return;\n }\n\n const syncOffsetWells = async () => {\n const isSynced = typeof offsetSettings?.isSynced === 'undefined' || offsetSettings?.isSynced;\n\n let offsetWellsChanged = true;\n\n if (isSynced) {\n const bicWellIds = bicWells[ALL_SECTION_KEY] || [];\n const bicWellIdsSet = new Set(bicWellIds);\n const isMatched = (offsetSettings?.selectedWellIds || []).every(wellId =>\n bicWellIdsSet.has(wellId)\n );\n\n // if well hub or offset selection app be changed\n if (bicWellIds.length !== offsetSettings?.selectedWellIds?.length || !isMatched) {\n const wellsByDistance = await getCoordinatedWells(bicWellIds, subjectWellId);\n const selectedWellIds = wellsByDistance\n .slice(0, localMaxOffsetSize + 1)\n .map(well => well.id);\n const newOffsetSetting = {\n ...offsetSettings,\n subjectWellId,\n selectedWellIds,\n offsetWellsLimited: maxOffsetWellNumber <= selectedWellIds.length,\n };\n const selectedWellIdsSet = new Set(selectedWellIds);\n const offsetWells = wellsByDistance.filter(well => selectedWellIdsSet.has(well.id));\n\n onSave(newOffsetSetting, offsetWells);\n } else {\n offsetWellsChanged = false;\n }\n } else {\n offsetWellsChanged = false;\n }\n\n if (!offsetWellsChanged) {\n const offsetWells = await getCoordinatedWells(\n offsetSettings?.selectedWellIds || [],\n subjectWellId\n );\n onSave(offsetSettings, offsetWells);\n }\n };\n\n if (syncAutoEnabled && appLoading && offsetSettings && bicWells) {\n syncOffsetWells();\n setAppLoading(false);\n }\n // TODO: Check reference stability. Initially had only offsetSettings, bicWells, subjectWellId, maxOffsetWellNumber, syncAutoEnabled\n }, [\n offsetSettings,\n bicWells,\n subjectWellId,\n maxOffsetWellNumber,\n syncAutoEnabled,\n isAllWellsLoaded,\n appLoading,\n maxOffsetSize,\n localMaxOffsetSize,\n onSave,\n ]);\n\n const filterOptions = useFilterOptions(wells, companies, canViewCompanies);\n\n // NOTE: Table columns with metrics\n const columnsWithDict = useTableColumns(\n metricsKeys,\n canViewCompanies,\n isWellSectionColumnVisible\n );\n // NOTE: Filter wells\n const filteredWells = useFilteredWells(wells, filters);\n\n // Deduplicated total count (wells array may contain duplicates from merged sources)\n const uniqueWellsCount = useMemo(() => {\n if (!wells) return 0;\n return uniqBy(wells, 'id').length;\n }, [wells]);\n\n // NOTE: Include selected wells from other companies so they can be deselected\n const wellsToDisplay = useMemo(() => {\n if (!filteredWells) {\n return filteredWells;\n }\n\n // Create map of fresh well data from wells (includes ALL enriched wells:\n // - Wells in viewport from useViewportWells\n // - Pinned wells outside viewport from usePinnedWells\n // - Searched wells outside viewport from useSearchedWells)\n const wellsMap = new Map(wells?.map(w => [w.id, w]) || []);\n\n // For selected wells, use fresh data from wells when available\n // This ensures metrics are up-to-date for ALL selected wells\n const selectedWithFreshData = selectedWells.map(w => wellsMap.get(w.id) || w);\n\n // Include BIC wells so they remain visible after reset even when unselected\n const bicWellIds = rawBicWells?.[selectedWellSection] || [];\n const bicWellsToShow = bicWellIds.map(id => wellsMap.get(id)).filter(w => w !== undefined);\n\n // Ensure ALL selected wells and BIC wells are displayed\n // regardless of current company filter or radius\n return uniqBy(selectedWithFreshData.concat(bicWellsToShow).concat(filteredWells), 'id');\n }, [wells, filteredWells, selectedWells, rawBicWells, selectedWellSection]);\n\n useEffect(() => {\n if (!filteredWells || !isAllWellsLoaded) {\n return;\n }\n\n if (initLoading.current) {\n const selectedIdsSet = new Set(offsetSettings?.selectedWellIds || []);\n\n let data = wells.filter(well => selectedIdsSet.has(well.id));\n\n // Preserve existing selectedWells not in wells array (may have been fetched by usePinnedWells)\n const dataIds = new Set(data.map(w => w.id));\n const preserved = selectedWells.filter(w => selectedIdsSet.has(w.id) && !dataIds.has(w.id));\n\n data = data.concat(preserved);\n\n if (subjectWell) {\n data = data.concat(subjectWell);\n }\n\n setSelectedWells(uniqBy(data, 'id'));\n initLoading.current = false;\n }\n }, [\n wells,\n filteredWells,\n offsetSettings?.selectedWellIds,\n isAllWellsLoaded,\n subjectWell,\n selectedWells,\n ]);\n\n // NOTE: Add pending search selections once wells are enriched\n useEffect(() => {\n if (!wells?.length || pendingSearchSelectionRef.current.size === 0) {\n return;\n }\n\n const pendingIds = pendingSearchSelectionRef.current;\n const enrichedWells = wells.filter(w => pendingIds.has(w.id));\n\n if (enrichedWells.length > 0) {\n // Clear loading state for wells being added (spinner → checked checkbox)\n const enrichedIds = enrichedWells.map(w => w.id);\n setLoadingAssetIds(prev => prev.filter(id => !enrichedIds.includes(id)));\n\n setCurrentSelectionZone(null);\n\n setSelectedWells(prev => {\n const limited = enrichedWells.slice(0, Math.max(0, maxOffsetWellNumber - prev.length));\n\n return uniqBy(prev.concat(limited), 'id');\n });\n enrichedWells.forEach(w => pendingIds.delete(w.id));\n }\n }, [wells, maxOffsetWellNumber]);\n\n // NOTE: Sort wells\n const [sortBy, setSortBy, sortDirection, setSortDirection, sortedWells] = useSortedWells(\n subjectWell,\n wellsToDisplay,\n selectedWells,\n setIsTableLoading,\n offsetSettings?.selectedWellIds\n );\n\n // NOTE: Add advanced wells\n const handleAddRemoveAssets = useCallback(\n async (isAdding, newAssets, assetType, rigIds) => {\n setCurrentSelectionZone(null);\n\n let addingWellIds;\n\n if (assetType === SEARCH_CATEGORIES.well.name) {\n addingWellIds = newAssets;\n } else {\n // For rigs: fetch all wells belonging to the selected rigs\n if (!rigIds || rigIds.length === 0) {\n return;\n }\n\n // Show loading state\n setIsTableLoading(true);\n\n try {\n const rigWells = await fetchWellsByRigIds(rigIds, null);\n addingWellIds = rigWells.map(well => well.id);\n } catch (error) {\n console.error('Failed to fetch wells for rigs:', error);\n return;\n } finally {\n setIsTableLoading(false);\n }\n }\n\n const addingWellIdsSet = new Set(addingWellIds);\n const addingWells = wells.filter(({ id }) => addingWellIdsSet.has(id));\n\n // Fetch missing wells (outside bounds) when adding via search\n // These will be added to selectedWells via effect once enriched\n if (isAdding && addingWells.length < addingWellIds.length) {\n const foundIds = new Set(addingWells.map(w => w.id));\n const missingIds = addingWellIds.filter(id => !foundIds.has(id));\n\n if (missingIds.length > 0) {\n // Show loading spinner in search dropdown\n setLoadingAssetIds(prev => prev.concat(missingIds));\n\n // Trigger fetch to add wells to enrichment pipeline\n await fetchSearchedWells(missingIds);\n\n // Store as pending - effect will add enriched wells to selectedWells\n // NOTE: loadingAssetIds is cleared in the effect when wells are actually selected\n missingIds.forEach(id => pendingSearchSelectionRef.current.add(id));\n }\n }\n\n if (isAdding) {\n // Only add wells that are already enriched (in wells array)\n const limitedWells = addingWells.slice(\n 0,\n Math.min(addingWells.length, maxOffsetWellNumber - selectedWells.length)\n );\n if (limitedWells.length > 0) {\n setSelectedWells(selectedWells => uniqBy(selectedWells.concat(limitedWells), 'id'));\n }\n } else {\n setSelectedWells(selectedWells =>\n uniq(selectedWells.filter(({ id }) => !addingWells.find(well => well.id === id)))\n );\n }\n },\n // TODO: Check reference stability. Initially had wells, selectedWells\n [wells, maxOffsetWellNumber, selectedWells.length, fetchSearchedWells, setIsTableLoading]\n );\n\n const handleHideAdvancedSearch = useCallback(() => {\n setIsAdvancedSearchHidden(true);\n }, [setIsAdvancedSearchHidden]);\n\n // NOTE: Change metrics keys\n const handleChangeMetricsKeys = useCallback(\n newMetricsKeys => {\n setMetricsKeys(newMetricsKeys);\n },\n [setMetricsKeys]\n );\n\n const handleUpdateMetricsKey = useCallback(\n (key, newValue) => {\n setMetricsKeys(prevKeys => prevKeys.map(item => (item === key ? newValue : item)));\n },\n [setMetricsKeys]\n );\n\n const handleChangeSortBy = useCallback(\n (sortKey, sortDirection) => {\n setSortBy(sortKey);\n setSortDirection(sortDirection);\n },\n [setSortBy, setSortDirection]\n );\n\n // NOTE: Check and Uncheck one offset well\n const handleChangeOffsetWell = useCallback(\n (well, checked) => {\n setCurrentSelectionZone(null);\n\n if (checked) {\n setSelectedWells(prevWells => {\n if (prevWells.length >= maxOffsetWellNumber) {\n return prevWells;\n }\n\n const enrichedWell = wells?.find(w => w.id === well.id) || well;\n\n return prevWells.concat(enrichedWell);\n });\n } else {\n setSelectedWells(prevWells => prevWells.filter(item => item.id !== well.id));\n }\n },\n [wells, maxOffsetWellNumber]\n );\n\n // NOTE: Select and Unselect All wells\n const handleChangeAllOffsetWells = useCallback(\n checked => {\n setCurrentSelectionZone(null);\n\n if (checked) {\n const data = subjectWell ? filteredWells.concat(subjectWell) : filteredWells;\n const sortedData = sortArray(uniqBy(data, 'id'), 'distance');\n setSelectedWells(sortedData.slice(0, maxOffsetWellNumber));\n } else {\n setSelectedWells(subjectWell ? [subjectWell] : []);\n }\n },\n [filteredWells, subjectWell, maxOffsetWellNumber]\n );\n\n // NOTE: Batch select wells (from map box selection)\n const handleBatchSelectWells = useCallback(\n (wellsToSelect, onComplete) => {\n setSelectedWells(prevWells => {\n const currentIds = new Set(prevWells.map(w => w.id));\n const newWells = wellsToSelect.filter(w => !currentIds.has(w.id));\n const attempted = newWells.length;\n\n if (attempted === 0) {\n setTimeout(() => onComplete?.({ attempted: 0, added: 0 }), 0);\n return prevWells;\n }\n\n const availableSlots = maxOffsetWellNumber - prevWells.length;\n const limitedWells = newWells.slice(0, availableSlots);\n const added = limitedWells.length;\n\n const enrichedWells = limitedWells.map(w => wells?.find(fw => fw.id === w.id) || w);\n\n setTimeout(() => onComplete?.({ attempted, added }), 0);\n\n return uniqBy(prevWells.concat(enrichedWells), 'id');\n });\n },\n [wells, maxOffsetWellNumber]\n );\n\n // NOTE: Handle selection zone confirmation (from radius or lasso tool)\n const handleSelectionZoneConfirm = useCallback(zone => {\n setCurrentSelectionZone(zone);\n }, []);\n\n // NOTE: Well Section change filter\n const updateSelectedWellsBySection = useCallback(\n async section => {\n if (rawBicWells) {\n const rawWellIds = rawBicWells[section] || [];\n\n // Build wells map from current data (radius-fetched + pinned + searched)\n const wellsMap = new Map(rawWellsWithSubject?.map(w => [w.id, w]) || []);\n\n // Find wells not in current data (outside current radius)\n const missingWellIds = rawWellIds.filter(id => !wellsMap.has(id));\n\n // Fetch missing wells - returns fetched wells directly\n let fetchedWells = [];\n\n if (missingWellIds.length > 0) {\n fetchedWells = await fetchSearchedWells(missingWellIds);\n }\n\n // Merge fetched wells into map\n fetchedWells.forEach(w => wellsMap.set(w.id, w));\n\n // Build section wells from merged map\n const sectionWells = rawWellIds.map(id => wellsMap.get(id)).filter(w => w !== undefined);\n\n const limitedWells = sortArray(sectionWells, 'distance');\n setSelectedWells(limitedWells.slice(0, maxOffsetSize));\n } else {\n setSelectedWells(subjectWell ? [subjectWell] : []);\n }\n },\n [rawBicWells, rawWellsWithSubject, fetchSearchedWells, maxOffsetSize, subjectWell]\n );\n\n const handleChangeWellSection = useCallback(\n async section => {\n setSelectedWellSection(section);\n await updateSelectedWellsBySection(section);\n },\n [updateSelectedWellsBySection]\n );\n\n // NOTE: Get Selected wells count\n const selectedWellsCount = useMemo(() => {\n if (selectedWells.find(well => well.id === subjectWellId)) {\n return selectedWells.length - 1;\n }\n return selectedWells.length;\n }, [selectedWells, subjectWellId]);\n\n // NOTE: Save offset setting\n const isSynced = useMemo(() => {\n if (!bicWells) return false;\n const selectedWellIds = selectedWells.map(({ id }) => id);\n const owsWellIds = bicWells[selectedWellSection] || [];\n const owsWellIdsLength = Math.min(owsWellIds.length, maxOffsetSize);\n\n if (owsWellIdsLength !== selectedWellIds.length) {\n return false;\n }\n const owsWellIdsSet = new Set(owsWellIds);\n return selectedWellIds.every(id => owsWellIdsSet.has(id));\n }, [bicWells, selectedWells, selectedWellSection, maxOffsetSize]);\n\n const isXtoProvider = useMemo(() => {\n return companyProvider ? COMPANY_PROVIDERS_FOR_IDAS.includes(companyProvider) : false;\n }, [companyProvider]);\n\n const offsetLabel = useMemo(() => {\n if (isXtoProvider) {\n return 'IDAS generated offsets.';\n }\n\n return isWDUser ? 'Offset Selection App.' : 'WellHub.';\n }, [isXtoProvider, isWDUser]);\n\n const performSave = useCallback(() => {\n onClose();\n\n const selectedIds = selectedWells.map(({ id }) => id);\n\n const newOffsetSetting = {\n ...offsetSettings,\n companyId: assetCompanyId,\n subjectWellId,\n selectedWellIds: selectedIds,\n filters: normalizeFilters(filters),\n metricsKeys,\n wellSection: selectedWellSection,\n isSynced,\n mapHidden: isMapHidden,\n filterExpanded: isFilterExpanded,\n offsetWellsLimited: isLimitedOffsetWells,\n lastSelectionZone: currentSelectionZone,\n isLoadAllWells,\n };\n onSave(newOffsetSetting, selectedWells);\n }, [\n onClose,\n selectedWells,\n offsetSettings,\n assetCompanyId,\n subjectWellId,\n filters,\n metricsKeys,\n selectedWellSection,\n isSynced,\n isMapHidden,\n isFilterExpanded,\n isLimitedOffsetWells,\n currentSelectionZone,\n isLoadAllWells,\n onSave,\n ]);\n\n // NOTE: Complete pending save once all wells are enriched\n useEffect(() => {\n if (!isSavePending) {\n return;\n }\n\n // Check if all pending wells have been enriched (moved to selectedWells)\n if (pendingSearchSelectionRef.current.size === 0) {\n setIsSavePending(false);\n performSave();\n }\n }, [isSavePending, selectedWells, performSave]);\n\n const handleSave = () => {\n if (pendingSearchSelectionRef.current.size > 0) {\n // Wells still pending enrichment - wait for them\n setIsSavePending(true);\n return;\n }\n\n performSave();\n };\n\n const handleCancel = () => {\n const selectedIdsSet = new Set(offsetSettings?.selectedWellIds || []);\n let data = (wells || []).filter(well => selectedIdsSet.has(well.id));\n\n if (pinnedWells?.length) {\n const dataIds = new Set(data.map(w => w.id));\n const preserved = pinnedWells.filter(w => selectedIdsSet.has(w.id) && !dataIds.has(w.id));\n\n data = data.concat(preserved);\n }\n\n if (subjectWell) {\n data = data.concat(subjectWell);\n }\n\n setSelectedWells(uniqBy(data, 'id'));\n\n // Reset selection zone to prop value (discard session changes)\n setCurrentSelectionZone(offsetSettings?.lastSelectionZone ?? null);\n\n const newOffsetSetting = {\n ...offsetSettings,\n mapHidden: isMapHidden,\n filterExpanded: isFilterExpanded,\n };\n onSave(newOffsetSetting);\n\n // Reset filters to current prop values (discards unsaved changes like polygon drawings)\n // Use normalizeFilters to handle lasso mode without valid polygon\n const normalizedFilters = normalizeFilters(offsetSettings?.filters);\n\n setFilters({\n ...normalizedFilters,\n radius: normalizedFilters?.radius ?? DEFAULT_RADIUS_MILES,\n });\n setSelectedWellSection(offsetSettings?.wellSection || ALL_SECTION_KEY);\n resetIsLoadAllWells();\n onClose();\n };\n\n const isTableFullLoading = isTableLoading || areRawWellsLoading;\n\n // NOTE: Reset processing\n const isResetVisible = useMemo(() => {\n if (!hasValidAssetId) return false;\n if (isTableFullLoading) return false;\n if (!isSynced) return true;\n if (!isEmpty(filters) && filters[FilterType.sideTracks]) return true;\n if (selectedWellSection !== ALL_SECTION_KEY) return true;\n return false;\n }, [hasValidAssetId, isSynced, filters, selectedWellSection, isTableFullLoading]);\n\n const handleReset = useCallback(async () => {\n resetFilters();\n resetSelectionTool();\n setCurrentSelectionZone(null);\n setSelectedWellSection(ALL_SECTION_KEY);\n await updateSelectedWellsBySection(ALL_SECTION_KEY);\n }, [resetFilters, resetSelectionTool, updateSelectedWellsBySection]);\n\n const isLoading = !wells || !wellSections || !sortedWells;\n\n // NOTE: Well Name shadow\n const [tableRowsCount, setTableRowsCount] = useState(ROWS_PER_PAGE);\n const [tableWells, setTableWells] = useState([]);\n const headTableRef = useRef();\n const rightColumnRef = useRef();\n const scrollPositionRef = useRef(0);\n const isAnimatingRef = useRef(false);\n\n useEffect(() => {\n if (!sortedWells) return;\n\n const wells = sortedWells.slice(0, tableRowsCount);\n setTableWells(wells);\n }, [sortedWells, tableRowsCount, subjectWell]);\n\n // Restore scroll position after tableWells update (skip during animation)\n useLayoutEffect(() => {\n if (isAnimatingRef.current) {\n return;\n }\n\n if (rightColumnRef.current && scrollPositionRef.current > 0) {\n rightColumnRef.current.scrollTop = scrollPositionRef.current;\n }\n }, [tableWells]);\n\n // NOTE: Remove shadow from header column\n useEffect(() => {\n if (!headTableRef.current) return;\n const headColumn = headTableRef.current.querySelector(`.${offsetTableStyles.wellNameFixed}`);\n if (!headColumn) return;\n if (!isHScrollMoved) {\n headColumn.classList.add(offsetTableStyles.noShadow);\n } else {\n headColumn.classList.remove(offsetTableStyles.noShadow);\n }\n }, [isHScrollMoved, tableWells]);\n\n // Calculations for table header and search - moved from OffsetWellsTable\n const uniqTableWells = useMemo(() => uniqBy(tableWells, 'id'), [tableWells]);\n\n const [selectedTableWells, indeterminate, isAllWellsSelected] = useMemo(() => {\n const selectedTableWells = uniqTableWells.filter(well => well.checked);\n const indeterminate =\n uniqTableWells.length !== selectedTableWells.length &&\n Boolean(selectedTableWells.length) &&\n !isLimitedOffsetWells;\n const isAllWellsSelected =\n selectedTableWells.length === uniqTableWells.length || isLimitedOffsetWells;\n\n return [selectedTableWells, indeterminate, isAllWellsSelected];\n }, [uniqTableWells, isLimitedOffsetWells]);\n\n const isImperial = useMemo(() => getIsImperial(), []);\n\n useEffect(() => {\n if (resyncStatus === RESYNC_STATUS.SUCCEEDED) {\n handleReset();\n }\n // TODO: Check reference stability. Initially had only bicWells\n }, [bicWells, handleReset, resyncStatus]);\n\n const handleScroll = e => {\n if (!e.target) return;\n\n // Track scroll position for preservation during re-renders\n scrollPositionRef.current = e.target.scrollTop;\n\n if (isAdvancedSearchHidden) {\n e.target.scrollLeft = 0;\n setIsAdvancedSearchHidden(false);\n }\n\n // Check if H-Scroll is visible\n if (e.target.scrollLeft <= 5 && isHScrollMoved) {\n setIsHScrollMoved(false);\n }\n if (e.target.scrollLeft > 5 && !isHScrollMoved) {\n setIsHScrollMoved(true);\n }\n\n // Check if V-Scroll is visible\n if (e.target.scrollTop <= 0 && isVScrollMoved) {\n setIsVScrollMoved(false);\n }\n if (e.target.scrollTop > 0 && !isVScrollMoved) {\n setIsVScrollMoved(true);\n }\n\n // Check if scroll has reached top or bottom\n if (e.target.scrollHeight === e.target.offsetHeight) return;\n\n const currentScrollBottom = Math.round(e.target.scrollTop + e.target.offsetHeight + 2);\n\n if (currentScrollBottom >= e.target.scrollHeight && tableRowsCount < sortedWells.length) {\n setTableRowsCount(count => count + ROWS_PER_PAGE);\n }\n };\n\n return (\n <Modal\n open={open}\n onClose={handleCancel}\n size=\"fullscreen\"\n className={styles.modalDialog}\n title={\n <AppHeader\n totalCount={uniqueWellsCount}\n filteredCount={filteredWells?.length ?? 0}\n selectedCount={selectedWellsCount}\n maxOffsetWellNumber={maxOffsetWellNumber}\n isXtoProvider={isXtoProvider}\n resyncStatus={resyncStatus}\n setResyncStatus={setResyncStatus}\n metricsKeys={metricsKeys}\n onChangeMetricsKeys={handleChangeMetricsKeys}\n />\n }\n actions={\n !isViewOnly && (\n <div className={styles.actionsWrapper}>\n {!isLoading && isResetVisible ? (\n <Tooltip\n placement=\"bottom-start\"\n title={`Reset to Synced Offsets in ${isWDUser ? 'Offset App' : 'Wellhub'}`}\n >\n <div>\n <Button\n data-testid={`${PAGE_NAME}_reset`}\n onClick={handleReset}\n color=\"primary\"\n startIcon={<ReplayIcon />}\n >\n Reset to Defaults\n </Button>\n </div>\n </Tooltip>\n ) : (\n hasValidAssetId && (\n <div>\n <span className={classNames(typography.regular12, typography.colors.t6)}>\n The offset list is being automatically populated by \n </span>\n <span className={classNames(typography.medium12, typography.colors.t6)}>\n {offsetLabel}\n </span>\n </div>\n )\n )}\n <div className={styles.buttonGap}>\n <Button data-testid={`${PAGE_NAME}_cancel`} onClick={handleCancel} color=\"primary\">\n Cancel\n </Button>\n <Button\n data-testid={`${PAGE_NAME}_selectedWells`}\n variant=\"contained\"\n color=\"primary\"\n onClick={handleSave}\n disabled={isSavePending}\n prefix={isSavePending ? <LoaderCircular size={16} /> : undefined}\n >\n Select ({selectedWellsCount})\n </Button>\n </div>\n </div>\n )\n }\n >\n <div className={classNames(styles.offsetWellDialog)}>\n <NotificationsContainer />\n {!isLoading ? (\n <div\n className={classNames(styles.contentWrapper, {\n [styles.contentBlocked]: isTableFullLoading,\n })}\n >\n <div className={styles.columnsContainer}>\n {!isMapHidden && open && (\n <div className={styles.leftColumn}>\n <WellsMap\n ref={wellsMapRef}\n mapHidden={isMapHidden}\n subjectWell={subjectWell}\n offsetWellIds={selectedWells.map(({ id }) => id)}\n wells={wellsToDisplay}\n handleChangeOffsetWell={handleChangeOffsetWell}\n onBatchSelectWells={handleBatchSelectWells}\n activeWellId={activeWellId}\n selectionZone={currentSelectionZone}\n onSelectionZoneConfirm={handleSelectionZoneConfirm}\n shouldRecenter={shouldRecenter}\n onRecenterComplete={() => setShouldRecenter(false)}\n />\n </div>\n )}\n <div className={styles.rightColumn} ref={rightColumnRef} onScroll={handleScroll}>\n <Filter\n isHidden={!isFilterExpanded}\n filterOptions={filterOptions}\n wellSections={wellSections}\n selectedWellSection={selectedWellSection}\n onChangeBicWells={handleChangeWellSection}\n isSafeguardReady={isSafeguardReady}\n />\n <div className={offsetTableStyles.stickyTableWrapper}>\n <Table\n aria-label=\"ows table head\"\n innerRef={headTableRef}\n className={offsetTableStyles.stickyTable}\n >\n <TableHead>\n <OffsetWellsTableHead\n columnsWithDict={columnsWithDict}\n metricsKeys={metricsKeys}\n sortBy={sortBy}\n sortDirection={sortDirection}\n indeterminate={indeterminate}\n isAllWellsSelected={isAllWellsSelected}\n onChangeSort={handleChangeSortBy}\n onUpdateMetricsKey={handleUpdateMetricsKey}\n handleChangeAllOffsetWells={handleChangeAllOffsetWells}\n wellNameStyle={offsetTableStyles.wellNameFixed}\n isImperial={isImperial}\n isTaColumnVisible={!!taScores.length}\n isWellSectionColumnVisible={isWellSectionColumnVisible}\n />\n </TableHead>\n {isViewOnly && (\n <div\n className={classNames(styles.topGradient, {\n [styles.topGradientScrolled]: isVScrollMoved,\n })}\n />\n )}\n </Table>\n </div>\n\n {!isViewOnly && (\n <div className={classNames(offsetTableStyles.searchCellWrapper)}>\n <div className={offsetTableStyles.searchCell}>\n <AdvancedSearch\n companyIds={null}\n subjectWellId={subjectWellId}\n onChange={handleAddRemoveAssets}\n selectedWellIds={selectedTableWells.map(({ id }) => id)}\n onHideAdvancedSearch={handleHideAdvancedSearch}\n loadingAssetIds={loadingAssetIds}\n />\n </div>\n <div\n className={classNames(styles.topGradient, {\n [styles.topGradientScrolled]: isVScrollMoved,\n })}\n />\n </div>\n )}\n\n <OffsetWellsTable\n isTableLoading={isTableFullLoading}\n subjectWellId={subjectWellId}\n columnsWithDict={columnsWithDict}\n wells={tableWells}\n metricsKeys={metricsKeys}\n handleChangeOffsetWell={handleChangeOffsetWell}\n isLastWell={sortedWells.length <= tableRowsCount}\n isLimitedOffsetWells={isLimitedOffsetWells}\n maxOffsetWellNumber={maxOffsetWellNumber}\n wellSections={wellSections}\n setActiveWellId={setActiveWellId}\n onRowClick={wellId => wellsMapRef.current?.flyToWell(wellId)}\n taScores={taScores}\n isWellSectionColumnVisible={isWellSectionColumnVisible}\n loadingWellIds={loadingWellIds}\n scrollContainerRef={rightColumnRef}\n isAnimatingRef={isAnimatingRef}\n />\n </div>\n </div>\n {isViewOnly && hasValidAssetId && (\n <div className={styles.viewOnlyInfoContainer}>\n <span className={classNames(typography.regular12, typography.colors.t6)}>\n The offset list is being automatically populated by \n </span>\n <span className={classNames(typography.medium12, typography.colors.t6)}>\n {offsetLabel}\n </span>\n </div>\n )}\n </div>\n ) : (\n <LoadingIndicator />\n )}\n </div>\n </Modal>\n );\n};\n"],"names":["PAGE_NAME","_filteredWells$length","open","usePickerPropsStore","state","isWDUser","defaultSubjectWell","currentUser","offsetSettings","isViewOnly","onClose","onSave","offsetSize","maxOffsetSize","localMaxOffsetSize","syncAutoEnabled","useState","_useState2","_slicedToArray","_useState","activeWellId","setActiveWellId","wellsMapRef","useRef","Math","min","MAX_OFFSET_SIZE","maxOffsetWellNumber","max","subjectWellId","asset_id","useFetchSubjectWell","fetchedSubjectWell","_useFetchSubjectWell","subjectWellCoords","useMemo","_fetchedSubjectWell$t","coords","topHole","coordinates","_coords","latitude","longitude","useGlobalOffsetWellsSync","isFilterExpanded","useViewStore","isMapHidden","isHScrollMoved","setIsHScrollMoved","isVScrollMoved","setIsVScrollMoved","isAdvancedSearchHidden","setIsAdvancedSearchHidden","isLoadAllWells","resetIsLoadAllWells","shouldRecenter","setShouldRecenter","assetCompanyId","companyId","company_id","hasValidAssetId","filters","useFilterStore","setFilters","resetFilters","resetSelectionTool","useSelectionToolStore","reset","viewportWells","useViewportStore","wells","viewportBounds","bounds","_useCompanies","useCompanies","canViewCompanies","canViewCompaniesLoading","companies","_useState4","_useState3","selectedWells","setSelectedWells","_useState5","_offsetSettings$lastS","lastSelectionZone","_useState6","currentSelectionZone","setCurrentSelectionZone","pendingSearchSelectionRef","Set","_useState8","_useState7","loadingAssetIds","setLoadingAssetIds","_useState10","_useState9","isSavePending","setIsSavePending","useViewportWells","isSafeguardReady","useLoadAllWellsCompanySafeguard","useAllWells","useInitialBounds","hasSubjectWell","ghostZone","isTileLoading","useTileLoading","_useState11","wellSection","ALL_SECTION_KEY","_useState12","selectedWellSection","setSelectedWellSection","initLoading","_useState14","_useState13","isTableLoading","setIsTableLoading","isLimitedOffsetWells","length","prevSelectedWellIds","_useState16","_useState15","appLoading","setAppLoading","useEffect","showInfoNotification","_offsetSettings$selec","_prevSelectedWellIds$","prevIdsSet","current","selectedWellIds","every","id","has","rawWells","Array","from","values","areRawWellsLoading","usePinnedWells","_usePinnedWells2","_usePinnedWells","pinnedWells","arePinnedWellsLoading","_useSearchedWells","useSearchedWells","_useSearchedWells2","searchedWells","areSearchedWellsLoading","fetchSearchedWells","rawWellsWithSubject","result","existingIds","map","w","missingPinned","filter","concat","missingSearched","some","useCompanyProvider","companyProvider","_useCompanyProvider","_useBicWells","useBicWells","_useBicWells2","wellSections","setWellSections","bicWells","setBicWells","resyncStatus","setResyncStatus","taScores","rawBicWells","isWellSectionColumnVisible","section","value","useCompanyMetricKey","metricsKeys","_useCompanyMetricKey2","_useCompanyMetricKey","setMetricsKeys","_useAdvancedWells","useAdvancedWells","_useAdvancedWells2","wellsWithMetrics","areAdvancedWellsLoading","transformedWells","loadingWellIds","wellsWithoutCompanyName","companyMap","forEach","company","name","well","_objectSpread","companyName","subjectWell","find","isAllWellsLoaded","_ref","syncOffsetWells","_asyncToGenerator","_regeneratorRuntime","mark","_callee","isSynced","offsetWellsChanged","_offsetSettings$selec2","bicWellIds","bicWellIdsSet","isMatched","wellsByDistance","newOffsetSetting","selectedWellIdsSet","offsetWells","_offsetWells","wrap","_context","prev","next","wellId","getCoordinatedWells","sent","slice","offsetWellsLimited","stop","apply","this","arguments","filterOptions","useFilterOptions","columnsWithDict","useTableColumns","filteredWells","useFilteredWells","uniqueWellsCount","uniqBy","wellsToDisplay","wellsMap","Map","selectedWithFreshData","get","bicWellsToShow","undefined","selectedIdsSet","data","dataIds","preserved","size","pendingIds","enrichedWells","enrichedIds","includes","limited","delete","_ref2","_ref5","_ref6","_useSortedWells","useSortedWells","_useSortedWells2","sortBy","setSortBy","sortDirection","setSortDirection","sortedWells","handleAddRemoveAssets","useCallback","isAdding","newAssets","assetType","rigIds","addingWellIds","rigWells","addingWellIdsSet","addingWells","foundIds","missingIds","limitedWells","_context2","SEARCH_CATEGORIES","abrupt","fetchWellsByRigIds","t0","console","error","finish","_ref3","add","uniq","_ref4","_callee2","_x","_x2","_x3","_x4","handleHideAdvancedSearch","handleChangeMetricsKeys","newMetricsKeys","handleUpdateMetricsKey","key","newValue","prevKeys","item","handleChangeSortBy","sortKey","handleChangeOffsetWell","checked","prevWells","enrichedWell","handleChangeAllOffsetWells","sortedData","sortArray","handleBatchSelectWells","wellsToSelect","onComplete","currentIds","newWells","attempted","setTimeout","added","availableSlots","fw","handleSelectionZoneConfirm","zone","updateSelectedWellsBySection","rawWellIds","missingWellIds","fetchedWells","sectionWells","_context3","set","_callee3","_x5","handleChangeWellSection","_context4","_callee4","_x6","selectedWellsCount","_ref7","owsWellIds","owsWellIdsSet","isXtoProvider","COMPANY_PROVIDERS_FOR_IDAS","offsetLabel","performSave","selectedIds","_ref8","normalizeFilters","mapHidden","filterExpanded","handleCancel","_offsetSettings$lastS2","_normalizedFilters$ra","normalizedFilters","radius","DEFAULT_RADIUS_MILES","isTableFullLoading","isResetVisible","isEmpty","FilterType","sideTracks","handleReset","_callee5","_context5","isLoading","ROWS_PER_PAGE","_useState18","_useState17","tableRowsCount","setTableRowsCount","_useState20","_useState19","tableWells","setTableWells","headTableRef","rightColumnRef","scrollPositionRef","isAnimatingRef","useLayoutEffect","scrollTop","headColumn","querySelector","offsetTableStyles","wellNameFixed","classList","remove","noShadow","uniqTableWells","selectedTableWells","Boolean","_useMemo2","_useMemo","indeterminate","isAllWellsSelected","isImperial","getIsImperial","RESYNC_STATUS","SUCCEEDED","_jsx","Modal","className","styles","modalDialog","title","AppHeader","totalCount","filteredCount","selectedCount","onChangeMetricsKeys","actions","_jsxs","jsxs","actionsWrapper","children","Tooltip","placement","jsx","Button","onClick","color","startIcon","ReplayIcon","Replay","classNames","typography","regular12","colors","t6","medium12","buttonGap","variant","disabled","prefix","LoaderCircular","offsetWellDialog","NotificationsContainer","LoadingIndicator","contentWrapper","contentBlocked","columnsContainer","leftColumn","WellsMap","ref","offsetWellIds","_ref10","onBatchSelectWells","selectionZone","onSelectionZoneConfirm","onRecenterComplete","rightColumn","onScroll","e","target","scrollLeft","scrollHeight","offsetHeight","round","count","Filter","isHidden","onChangeBicWells","stickyTableWrapper","Table","innerRef","stickyTable","TableHead","OffsetWellsTableHead","onChangeSort","onUpdateMetricsKey","wellNameStyle","isTaColumnVisible","topGradient","_defineProperty","topGradientScrolled","searchCellWrapper","searchCell","AdvancedSearch","companyIds","onChange","_ref11","onHideAdvancedSearch","OffsetWellsTable","isLastWell","onRowClick","_wellsMapRef$current","flyToWell","scrollContainerRef","viewOnlyInfoContainer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OffsetWellPickerV5.js","sources":["../../../../src/components/OffsetWellPickerV5/OffsetWellPickerV5.js"],"sourcesContent":["import { useState, useEffect, useLayoutEffect, useRef, useCallback, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { isEmpty, uniq, uniqBy, sortBy as sortArray } from 'lodash';\nimport { Replay as ReplayIcon } from '@material-ui/icons';\nimport { Table, TableHead } from '@material-ui/core';\n\nimport {\n useAdvancedWells,\n useBicWells,\n useFilterOptions,\n useCompanyMetricKey,\n useFilteredWells,\n useSortedWells,\n useTableColumns,\n useCompanyProvider,\n useCompanies,\n usePinnedWells,\n useSearchedWells,\n useTileLoading,\n useInitialBounds,\n useLoadAllWellsCompanySafeguard,\n} from './effects';\nimport { useViewportWells } from './effects/useViewportWells';\nimport { useAllWells } from './effects/useAllWells';\nimport { useViewportStore } from './stores/viewport-store';\nimport { useFetchSubjectWell } from './effects/useFetchSubjectWell';\nimport { AppHeader } from './components/AppHeader';\nimport { Filter } from './components/Filter';\nimport { WellsMap } from './components/Map';\nimport { OffsetWellsTable } from './components/OffsetWellsTable';\nimport { OffsetWellsTableHead } from './components/OffsetWellsTable/OffsetWellsTableHead';\nimport { AdvancedSearch } from './components/OffsetWellsTable/AdvancedSearch';\nimport {\n ALL_SECTION_KEY,\n COMPANY_PROVIDERS_FOR_IDAS,\n FilterType,\n MAX_OFFSET_SIZE,\n ROWS_PER_PAGE,\n RESYNC_STATUS,\n DEFAULT_RADIUS_MILES,\n} from './constants';\nimport { SEARCH_CATEGORIES } from './components/OffsetWellsTable/AdvancedSearch/constants';\nimport { getCoordinatedWells } from './utils';\nimport { getIsImperial } from './utils/getIsImperial';\nimport { usePickerPropsStore } from './stores/picker-props-store/usePickerPropsStore';\nimport { useFilterStore } from './stores/filter-store/useFilterStore';\nimport { useViewStore } from './stores/view-store/useViewStore';\nimport { useSelectionToolStore } from './stores/selection-tool-store';\nimport { normalizeFilters } from './stores/filter-store/utils/normalizeFilters';\nimport { fetchWellsByRigIds } from './api';\n\nimport styles from './OffsetWellPickerV5.module.css';\nimport offsetTableStyles from './components/OffsetWellsTable/OffsetWellsTable.module.css';\n\nimport { showInfoNotification } from '~/utils';\nimport { NotificationsContainer } from '~/components/Notifications';\nimport { typography } from '~/styles';\nimport { LoadingIndicator } from '~/components';\nimport { Button, LoaderCircular, Modal, Tooltip } from '~/componentsV2';\nimport { useGlobalOffsetWellsSync } from '~/effects';\n\nconst PAGE_NAME = 'OffsetWellPickerV5';\n\nexport const OffsetWellPickerV5 = () => {\n const open = usePickerPropsStore(state => state.open);\n const isWDUser = usePickerPropsStore(state => state.isWDUser);\n const defaultSubjectWell = usePickerPropsStore(state => state.defaultSubjectWell);\n const currentUser = usePickerPropsStore(state => state.currentUser);\n const offsetSettings = usePickerPropsStore(state => state.offsetSettings);\n const isViewOnly = usePickerPropsStore(state => state.isViewOnly);\n const onClose = usePickerPropsStore(state => state.onClose);\n const onSave = usePickerPropsStore(state => state.onSave);\n const offsetSize = usePickerPropsStore(state => state.maxOffsetSize);\n const localMaxOffsetSize = usePickerPropsStore(state => state.localMaxOffsetSize);\n const syncAutoEnabled = usePickerPropsStore(state => state.syncAutoEnabled);\n\n const [activeWellId, setActiveWellId] = useState(null);\n const wellsMapRef = useRef(null);\n const maxOffsetSize = Math.min(offsetSize + 1, localMaxOffsetSize + 1, MAX_OFFSET_SIZE + 1);\n const maxOffsetWellNumber = Math.min(\n Math.max(maxOffsetSize, localMaxOffsetSize + 1),\n MAX_OFFSET_SIZE + 1\n );\n\n const subjectWellId = defaultSubjectWell?.asset_id;\n\n // Fetch complete subject well data with coordinates\n const [fetchedSubjectWell] = useFetchSubjectWell(subjectWellId);\n\n // Derive coordinates for initial bounds calculation (used when map is hidden)\n const subjectWellCoords = useMemo(() => {\n const coords = fetchedSubjectWell?.topHole?.coordinates;\n\n if (!coords) {\n return null;\n }\n\n const [latitude, longitude] = coords;\n\n return { latitude, longitude };\n }, [fetchedSubjectWell]);\n\n useGlobalOffsetWellsSync(offsetSettings, onSave, maxOffsetWellNumber);\n\n const isFilterExpanded = useViewStore(state => state.isFilterExpanded);\n const isMapHidden = useViewStore(state => state.isMapHidden);\n const isHScrollMoved = useViewStore(state => state.isHScrollMoved);\n const setIsHScrollMoved = useViewStore(state => state.setIsHScrollMoved);\n const isVScrollMoved = useViewStore(state => state.isVScrollMoved);\n const setIsVScrollMoved = useViewStore(state => state.setIsVScrollMoved);\n const isAdvancedSearchHidden = useViewStore(state => state.isAdvancedSearchHidden);\n const setIsAdvancedSearchHidden = useViewStore(state => state.setIsAdvancedSearchHidden);\n const isLoadAllWells = usePickerPropsStore(state => state.isLoadAllWells);\n const resetIsLoadAllWells = usePickerPropsStore(state => state.resetIsLoadAllWells);\n const shouldRecenter = usePickerPropsStore(state => state.shouldRecenter);\n const setShouldRecenter = usePickerPropsStore(state => state.setShouldRecenter);\n\n const assetCompanyId = +defaultSubjectWell?.companyId || +currentUser?.company_id;\n const hasValidAssetId = subjectWellId > 0;\n const filters = useFilterStore(state => state.filters);\n const setFilters = useFilterStore(state => state.setFilters);\n const resetFilters = useFilterStore(state => state.resetFilters);\n const resetSelectionTool = useSelectionToolStore(state => state.reset);\n\n // ViewportStore hooks for tile-based fetching\n const viewportWells = useViewportStore(state => state.wells);\n const viewportBounds = useViewportStore(state => state.bounds);\n\n const { canViewCompanies, canViewCompaniesLoading, companies } = useCompanies({ open });\n const [selectedWells, setSelectedWells] = useState([]);\n const [currentSelectionZone, setCurrentSelectionZone] = useState(\n () => offsetSettings?.lastSelectionZone ?? null\n );\n\n // Track wells being selected via search that need to wait for enrichment\n const pendingSearchSelectionRef = useRef(new Set());\n\n // Track asset IDs currently being fetched (for loading spinner in search dropdown)\n const [loadingAssetIds, setLoadingAssetIds] = useState([]);\n\n // Track if save is waiting for pending wells to be enriched\n const [isSavePending, setIsSavePending] = useState(false);\n\n // Start viewport-based tile fetching (fetches all companies, filtered client-side)\n // Disabled when all-wells mode is active\n useViewportWells(!isLoadAllWells);\n // Apply company safeguard when Load All Wells is enabled (must run before useAllWells)\n const { isSafeguardReady, resetSafeguard } = useLoadAllWellsCompanySafeguard({\n companies,\n canViewCompanies,\n canViewCompaniesLoading,\n });\n // Start all-wells loading when enabled and safeguard is ready\n useAllWells(isLoadAllWells, isSafeguardReady);\n // Set initial bounds for data loading when map is hidden\n useInitialBounds({\n subjectWellCoords,\n hasSubjectWell: subjectWellId != null,\n open,\n ghostZone: currentSelectionZone,\n });\n const isTileLoading = useTileLoading();\n\n const [selectedWellSection, setSelectedWellSection] = useState(\n offsetSettings?.wellSection || ALL_SECTION_KEY\n );\n const initLoading = useRef(true);\n const [isTableLoading, setIsTableLoading] = useState(true);\n\n const isLimitedOffsetWells = maxOffsetWellNumber <= selectedWells?.length;\n\n /** @type {ReturnType<typeof useRef<number[]>>} */\n const prevSelectedWellIds = useRef();\n const [appLoading, setAppLoading] = useState(true);\n\n useEffect(() => {\n if (open && isLimitedOffsetWells) {\n showInfoNotification(\n `App can’t process more than (${maxOffsetWellNumber - 1}) Offset Wells.`\n );\n }\n // NOTE: Refresh when the offset well changes externally\n if (!open) {\n const prevIdsSet = new Set(prevSelectedWellIds.current || []);\n const isNotChanged =\n offsetSettings?.selectedWellIds?.length === prevSelectedWellIds.current?.length &&\n (offsetSettings?.selectedWellIds || []).every(id => prevIdsSet.has(id));\n if (!isNotChanged) {\n initLoading.current = true;\n }\n prevSelectedWellIds.current = offsetSettings?.selectedWellIds;\n }\n // TODO: Check reference stability. Initially had only isLimitedOffsetWells, open, offsetSettings.\n }, [isLimitedOffsetWells, open, offsetSettings, maxOffsetWellNumber]);\n\n // NOTE: Wells are now fetched via viewport-based tile fetching (useViewportWells)\n // Convert viewport wells Map to array\n const rawWells = useMemo(() => {\n return Array.from(viewportWells.values());\n }, [viewportWells]);\n\n // Loading state: show loader when tiles are being fetched OR when still initializing (no bounds yet)\n const areRawWellsLoading = isTileLoading || (rawWells.length === 0 && viewportBounds === null);\n\n // NOTE: Fetch pinned wells independently of radius\n const [pinnedWells, arePinnedWellsLoading] = usePinnedWells(offsetSettings?.selectedWellIds);\n\n // NOTE: Fetch wells selected via search that are outside current bounds\n const [searchedWells, areSearchedWellsLoading, fetchSearchedWells] = useSearchedWells();\n\n // NOTE: Ensure subject well, pinned wells and searched wells are always in rawWells for enrichment pipeline\n const rawWellsWithSubject = useMemo(() => {\n if (!rawWells) {\n return null;\n }\n\n let result = rawWells;\n\n if (pinnedWells?.length) {\n const existingIds = new Set(result.map(w => w.id));\n const missingPinned = pinnedWells.filter(w => !existingIds.has(w.id));\n\n if (missingPinned.length > 0) {\n result = result.concat(missingPinned);\n }\n }\n\n // Merge searched wells (wells added via search that are outside bounds)\n if (searchedWells?.length) {\n const existingIds = new Set(result.map(w => w.id));\n const missingSearched = searchedWells.filter(w => !existingIds.has(w.id));\n\n if (missingSearched.length > 0) {\n result = result.concat(missingSearched);\n }\n }\n\n if (fetchedSubjectWell && !result.some(w => w.id === fetchedSubjectWell.id)) {\n result = [fetchedSubjectWell].concat(result);\n }\n\n return result;\n }, [rawWells, fetchedSubjectWell, pinnedWells, searchedWells]);\n\n const [companyProvider] = useCompanyProvider(assetCompanyId);\n\n const [\n wellSections,\n setWellSections,\n bicWells,\n setBicWells,\n resyncStatus,\n setResyncStatus,\n taScores,\n rawBicWells,\n ] = useBicWells(subjectWellId, rawWellsWithSubject);\n\n const isWellSectionColumnVisible = useMemo(() => {\n if (!wellSections) {\n return false;\n }\n\n return wellSections.some(section => section.value !== ALL_SECTION_KEY);\n }, [wellSections]);\n\n useEffect(() => {\n setAppLoading(true);\n setWellSections(null);\n setBicWells(null);\n // TODO: Check reference stability. Initially had only subjectWellId.\n }, [setBicWells, setWellSections, subjectWellId]);\n\n const [metricsKeys, setMetricsKeys] = useCompanyMetricKey(\n assetCompanyId,\n offsetSettings?.metricsKeys\n );\n\n // NOTE: Calculate wells with coordinates, metrics and well section name\n const [wellsWithMetrics, areAdvancedWellsLoading, transformedWells, loadingWellIds] =\n useAdvancedWells(rawWellsWithSubject, wellSections, bicWells, subjectWellId, metricsKeys, open);\n\n // Use wells with metrics when available, fall back to transformed wells for immediate display\n const wellsWithoutCompanyName = wellsWithMetrics || transformedWells;\n\n // NOTE: Add company names to wells for display\n const wells = useMemo(() => {\n if (!wellsWithoutCompanyName || !companies?.length) return wellsWithoutCompanyName;\n\n const companyMap = {};\n companies.forEach(company => {\n companyMap[company.id] = company.name;\n });\n\n return wellsWithoutCompanyName.map(well => ({\n ...well,\n companyName: companyMap[well.companyId] || 'Null',\n }));\n }, [wellsWithoutCompanyName, companies]);\n\n // NOTE: Derive enriched subject well from the enrichment pipeline (includes company name)\n const subjectWell = useMemo(() => {\n if (!fetchedSubjectWell) {\n return null;\n }\n\n if (!wells) {\n return fetchedSubjectWell;\n }\n\n const enrichedSubjectWell = wells.find(w => w.id === fetchedSubjectWell.id);\n\n return enrichedSubjectWell || fetchedSubjectWell;\n }, [fetchedSubjectWell, wells]);\n\n const isAllWellsLoaded =\n !areRawWellsLoading &&\n !areAdvancedWellsLoading &&\n !arePinnedWellsLoading &&\n !areSearchedWellsLoading;\n\n useEffect(() => {\n if (!isAllWellsLoaded) {\n return;\n }\n\n const syncOffsetWells = async () => {\n const isSynced = typeof offsetSettings?.isSynced === 'undefined' || offsetSettings?.isSynced;\n\n let offsetWellsChanged = true;\n\n if (isSynced) {\n const bicWellIds = bicWells[ALL_SECTION_KEY] || [];\n const bicWellIdsSet = new Set(bicWellIds);\n const isMatched = (offsetSettings?.selectedWellIds || []).every(wellId =>\n bicWellIdsSet.has(wellId)\n );\n\n // if well hub or offset selection app be changed\n if (bicWellIds.length !== offsetSettings?.selectedWellIds?.length || !isMatched) {\n const wellsByDistance = await getCoordinatedWells(bicWellIds, subjectWellId);\n const selectedWellIds = wellsByDistance\n .slice(0, localMaxOffsetSize + 1)\n .map(well => well.id);\n const newOffsetSetting = {\n ...offsetSettings,\n subjectWellId,\n selectedWellIds,\n offsetWellsLimited: maxOffsetWellNumber <= selectedWellIds.length,\n };\n const selectedWellIdsSet = new Set(selectedWellIds);\n const offsetWells = wellsByDistance.filter(well => selectedWellIdsSet.has(well.id));\n\n onSave(newOffsetSetting, offsetWells);\n } else {\n offsetWellsChanged = false;\n }\n } else {\n offsetWellsChanged = false;\n }\n\n if (!offsetWellsChanged) {\n const offsetWells = await getCoordinatedWells(\n offsetSettings?.selectedWellIds || [],\n subjectWellId\n );\n onSave(offsetSettings, offsetWells);\n }\n };\n\n if (syncAutoEnabled && appLoading && offsetSettings && bicWells) {\n syncOffsetWells();\n setAppLoading(false);\n }\n // TODO: Check reference stability. Initially had only offsetSettings, bicWells, subjectWellId, maxOffsetWellNumber, syncAutoEnabled\n }, [\n offsetSettings,\n bicWells,\n subjectWellId,\n maxOffsetWellNumber,\n syncAutoEnabled,\n isAllWellsLoaded,\n appLoading,\n maxOffsetSize,\n localMaxOffsetSize,\n onSave,\n ]);\n\n const filterOptions = useFilterOptions(wells, companies, canViewCompanies);\n\n // NOTE: Table columns with metrics\n const columnsWithDict = useTableColumns(\n metricsKeys,\n canViewCompanies,\n isWellSectionColumnVisible\n );\n // NOTE: Filter wells\n const filteredWells = useFilteredWells(wells, filters);\n\n // Deduplicated total count (wells array may contain duplicates from merged sources)\n const uniqueWellsCount = useMemo(() => {\n if (!wells) return 0;\n return uniqBy(wells, 'id').length;\n }, [wells]);\n\n // NOTE: Include selected wells from other companies so they can be deselected\n const wellsToDisplay = useMemo(() => {\n if (!filteredWells) {\n return filteredWells;\n }\n\n // Create map of fresh well data from wells (includes ALL enriched wells:\n // - Wells in viewport from useViewportWells\n // - Pinned wells outside viewport from usePinnedWells\n // - Searched wells outside viewport from useSearchedWells)\n const wellsMap = new Map(wells?.map(w => [w.id, w]) || []);\n\n // For selected wells, use fresh data from wells when available\n // This ensures metrics are up-to-date for ALL selected wells\n const selectedWithFreshData = selectedWells.map(w => wellsMap.get(w.id) || w);\n\n // Include BIC wells so they remain visible after reset even when unselected\n const bicWellIds = rawBicWells?.[selectedWellSection] || [];\n const bicWellsToShow = bicWellIds.map(id => wellsMap.get(id)).filter(w => w !== undefined);\n\n // Ensure ALL selected wells and BIC wells are displayed\n // regardless of current company filter or radius\n return uniqBy(selectedWithFreshData.concat(bicWellsToShow).concat(filteredWells), 'id');\n }, [wells, filteredWells, selectedWells, rawBicWells, selectedWellSection]);\n\n useEffect(() => {\n if (!filteredWells || !isAllWellsLoaded) {\n return;\n }\n\n if (initLoading.current) {\n const selectedIdsSet = new Set(offsetSettings?.selectedWellIds || []);\n\n let data = wells.filter(well => selectedIdsSet.has(well.id));\n\n // Preserve existing selectedWells not in wells array (may have been fetched by usePinnedWells)\n const dataIds = new Set(data.map(w => w.id));\n const preserved = selectedWells.filter(w => selectedIdsSet.has(w.id) && !dataIds.has(w.id));\n\n data = data.concat(preserved);\n\n if (subjectWell) {\n data = data.concat(subjectWell);\n }\n\n setSelectedWells(uniqBy(data, 'id'));\n initLoading.current = false;\n }\n }, [\n wells,\n filteredWells,\n offsetSettings?.selectedWellIds,\n isAllWellsLoaded,\n subjectWell,\n selectedWells,\n ]);\n\n // NOTE: Add pending search selections once wells are enriched\n useEffect(() => {\n if (!wells?.length || pendingSearchSelectionRef.current.size === 0) {\n return;\n }\n\n const pendingIds = pendingSearchSelectionRef.current;\n const enrichedWells = wells.filter(w => pendingIds.has(w.id));\n\n if (enrichedWells.length > 0) {\n // Clear loading state for wells being added (spinner → checked checkbox)\n const enrichedIds = enrichedWells.map(w => w.id);\n setLoadingAssetIds(prev => prev.filter(id => !enrichedIds.includes(id)));\n\n setCurrentSelectionZone(null);\n\n setSelectedWells(prev => {\n const limited = enrichedWells.slice(0, Math.max(0, maxOffsetWellNumber - prev.length));\n\n return uniqBy(prev.concat(limited), 'id');\n });\n enrichedWells.forEach(w => pendingIds.delete(w.id));\n }\n }, [wells, maxOffsetWellNumber]);\n\n // NOTE: Sort wells\n const [sortBy, setSortBy, sortDirection, setSortDirection, sortedWells] = useSortedWells(\n subjectWell,\n wellsToDisplay,\n selectedWells,\n setIsTableLoading,\n offsetSettings?.selectedWellIds\n );\n\n // NOTE: Add advanced wells\n const handleAddRemoveAssets = useCallback(\n async (isAdding, newAssets, assetType, rigIds) => {\n setCurrentSelectionZone(null);\n\n let addingWellIds;\n\n if (assetType === SEARCH_CATEGORIES.well.name) {\n addingWellIds = newAssets;\n } else {\n // For rigs: fetch all wells belonging to the selected rigs\n if (!rigIds || rigIds.length === 0) {\n return;\n }\n\n // Show loading state\n setIsTableLoading(true);\n\n try {\n const rigWells = await fetchWellsByRigIds(rigIds, null);\n addingWellIds = rigWells.map(well => well.id);\n } catch (error) {\n console.error('Failed to fetch wells for rigs:', error);\n return;\n } finally {\n setIsTableLoading(false);\n }\n }\n\n const addingWellIdsSet = new Set(addingWellIds);\n const addingWells = wells.filter(({ id }) => addingWellIdsSet.has(id));\n\n // Fetch missing wells (outside bounds) when adding via search\n // These will be added to selectedWells via effect once enriched\n if (isAdding && addingWells.length < addingWellIds.length) {\n const foundIds = new Set(addingWells.map(w => w.id));\n const missingIds = addingWellIds.filter(id => !foundIds.has(id));\n\n if (missingIds.length > 0) {\n // Show loading spinner in search dropdown\n setLoadingAssetIds(prev => prev.concat(missingIds));\n\n // Trigger fetch to add wells to enrichment pipeline\n await fetchSearchedWells(missingIds);\n\n // Store as pending - effect will add enriched wells to selectedWells\n // NOTE: loadingAssetIds is cleared in the effect when wells are actually selected\n missingIds.forEach(id => pendingSearchSelectionRef.current.add(id));\n }\n }\n\n if (isAdding) {\n // Only add wells that are already enriched (in wells array)\n const limitedWells = addingWells.slice(\n 0,\n Math.min(addingWells.length, maxOffsetWellNumber - selectedWells.length)\n );\n if (limitedWells.length > 0) {\n setSelectedWells(selectedWells => uniqBy(selectedWells.concat(limitedWells), 'id'));\n }\n } else {\n setSelectedWells(selectedWells =>\n uniq(selectedWells.filter(({ id }) => !addingWells.find(well => well.id === id)))\n );\n }\n },\n // TODO: Check reference stability. Initially had wells, selectedWells\n [wells, maxOffsetWellNumber, selectedWells.length, fetchSearchedWells, setIsTableLoading]\n );\n\n const handleHideAdvancedSearch = useCallback(() => {\n setIsAdvancedSearchHidden(true);\n }, [setIsAdvancedSearchHidden]);\n\n // NOTE: Change metrics keys\n const handleChangeMetricsKeys = useCallback(\n newMetricsKeys => {\n setMetricsKeys(newMetricsKeys);\n },\n [setMetricsKeys]\n );\n\n const handleUpdateMetricsKey = useCallback(\n (key, newValue) => {\n setMetricsKeys(prevKeys => prevKeys.map(item => (item === key ? newValue : item)));\n },\n [setMetricsKeys]\n );\n\n const handleChangeSortBy = useCallback(\n (sortKey, sortDirection) => {\n setSortBy(sortKey);\n setSortDirection(sortDirection);\n },\n [setSortBy, setSortDirection]\n );\n\n // NOTE: Check and Uncheck one offset well\n const handleChangeOffsetWell = useCallback(\n (well, checked) => {\n setCurrentSelectionZone(null);\n\n if (checked) {\n setSelectedWells(prevWells => {\n if (prevWells.length >= maxOffsetWellNumber) {\n return prevWells;\n }\n\n const enrichedWell = wells?.find(w => w.id === well.id) || well;\n\n return prevWells.concat(enrichedWell);\n });\n } else {\n setSelectedWells(prevWells => prevWells.filter(item => item.id !== well.id));\n }\n },\n [wells, maxOffsetWellNumber]\n );\n\n // NOTE: Select and Unselect All wells\n const handleChangeAllOffsetWells = useCallback(\n checked => {\n setCurrentSelectionZone(null);\n\n if (checked) {\n const data = subjectWell ? filteredWells.concat(subjectWell) : filteredWells;\n const sortedData = sortArray(uniqBy(data, 'id'), 'distance');\n setSelectedWells(sortedData.slice(0, maxOffsetWellNumber));\n } else {\n setSelectedWells(subjectWell ? [subjectWell] : []);\n }\n },\n [filteredWells, subjectWell, maxOffsetWellNumber]\n );\n\n // NOTE: Batch select wells (from map box selection)\n const handleBatchSelectWells = useCallback(\n (wellsToSelect, onComplete) => {\n setSelectedWells(prevWells => {\n const currentIds = new Set(prevWells.map(w => w.id));\n const newWells = wellsToSelect.filter(w => !currentIds.has(w.id));\n const attempted = newWells.length;\n\n if (attempted === 0) {\n setTimeout(() => onComplete?.({ attempted: 0, added: 0 }), 0);\n return prevWells;\n }\n\n const availableSlots = maxOffsetWellNumber - prevWells.length;\n const limitedWells = newWells.slice(0, availableSlots);\n const added = limitedWells.length;\n\n const enrichedWells = limitedWells.map(w => wells?.find(fw => fw.id === w.id) || w);\n\n setTimeout(() => onComplete?.({ attempted, added }), 0);\n\n return uniqBy(prevWells.concat(enrichedWells), 'id');\n });\n },\n [wells, maxOffsetWellNumber]\n );\n\n // NOTE: Handle selection zone confirmation (from radius or lasso tool)\n const handleSelectionZoneConfirm = useCallback(zone => {\n setCurrentSelectionZone(zone);\n }, []);\n\n // NOTE: Well Section change filter\n const updateSelectedWellsBySection = useCallback(\n async section => {\n if (rawBicWells) {\n const rawWellIds = rawBicWells[section] || [];\n\n // Build wells map from current data (radius-fetched + pinned + searched)\n const wellsMap = new Map(rawWellsWithSubject?.map(w => [w.id, w]) || []);\n\n // Find wells not in current data (outside current radius)\n const missingWellIds = rawWellIds.filter(id => !wellsMap.has(id));\n\n // Fetch missing wells - returns fetched wells directly\n let fetchedWells = [];\n\n if (missingWellIds.length > 0) {\n fetchedWells = await fetchSearchedWells(missingWellIds);\n }\n\n // Merge fetched wells into map\n fetchedWells.forEach(w => wellsMap.set(w.id, w));\n\n // Build section wells from merged map\n const sectionWells = rawWellIds.map(id => wellsMap.get(id)).filter(w => w !== undefined);\n\n const limitedWells = sortArray(sectionWells, 'distance');\n setSelectedWells(limitedWells.slice(0, maxOffsetSize));\n } else {\n setSelectedWells(subjectWell ? [subjectWell] : []);\n }\n },\n [rawBicWells, rawWellsWithSubject, fetchSearchedWells, maxOffsetSize, subjectWell]\n );\n\n const handleChangeWellSection = useCallback(\n async section => {\n setSelectedWellSection(section);\n await updateSelectedWellsBySection(section);\n },\n [updateSelectedWellsBySection]\n );\n\n // NOTE: Get Selected wells count\n const selectedWellsCount = useMemo(() => {\n if (selectedWells.find(well => well.id === subjectWellId)) {\n return selectedWells.length - 1;\n }\n return selectedWells.length;\n }, [selectedWells, subjectWellId]);\n\n // NOTE: Save offset setting\n const isSynced = useMemo(() => {\n if (!bicWells) return false;\n const selectedWellIds = selectedWells.map(({ id }) => id);\n const owsWellIds = bicWells[selectedWellSection] || [];\n const owsWellIdsLength = Math.min(owsWellIds.length, maxOffsetSize);\n\n if (owsWellIdsLength !== selectedWellIds.length) {\n return false;\n }\n const owsWellIdsSet = new Set(owsWellIds);\n return selectedWellIds.every(id => owsWellIdsSet.has(id));\n }, [bicWells, selectedWells, selectedWellSection, maxOffsetSize]);\n\n const isXtoProvider = useMemo(() => {\n return companyProvider ? COMPANY_PROVIDERS_FOR_IDAS.includes(companyProvider) : false;\n }, [companyProvider]);\n\n const offsetLabel = useMemo(() => {\n if (isXtoProvider) {\n return 'IDAS generated offsets.';\n }\n\n return isWDUser ? 'Offset Selection App.' : 'WellHub.';\n }, [isXtoProvider, isWDUser]);\n\n const performSave = useCallback(() => {\n resetSafeguard();\n onClose();\n\n const selectedIds = selectedWells.map(({ id }) => id);\n\n const newOffsetSetting = {\n ...offsetSettings,\n companyId: assetCompanyId,\n subjectWellId,\n selectedWellIds: selectedIds,\n filters: normalizeFilters(filters),\n metricsKeys,\n wellSection: selectedWellSection,\n isSynced,\n mapHidden: isMapHidden,\n filterExpanded: isFilterExpanded,\n offsetWellsLimited: isLimitedOffsetWells,\n lastSelectionZone: currentSelectionZone,\n isLoadAllWells,\n };\n onSave(newOffsetSetting, selectedWells);\n }, [\n resetSafeguard,\n onClose,\n selectedWells,\n offsetSettings,\n assetCompanyId,\n subjectWellId,\n filters,\n metricsKeys,\n selectedWellSection,\n isSynced,\n isMapHidden,\n isFilterExpanded,\n isLimitedOffsetWells,\n currentSelectionZone,\n isLoadAllWells,\n onSave,\n ]);\n\n // NOTE: Complete pending save once all wells are enriched\n useEffect(() => {\n if (!isSavePending) {\n return;\n }\n\n // Check if all pending wells have been enriched (moved to selectedWells)\n if (pendingSearchSelectionRef.current.size === 0) {\n setIsSavePending(false);\n performSave();\n }\n }, [isSavePending, selectedWells, performSave]);\n\n const handleSave = () => {\n if (pendingSearchSelectionRef.current.size > 0) {\n // Wells still pending enrichment - wait for them\n setIsSavePending(true);\n return;\n }\n\n performSave();\n };\n\n const handleCancel = () => {\n const selectedIdsSet = new Set(offsetSettings?.selectedWellIds || []);\n let data = (wells || []).filter(well => selectedIdsSet.has(well.id));\n\n if (pinnedWells?.length) {\n const dataIds = new Set(data.map(w => w.id));\n const preserved = pinnedWells.filter(w => selectedIdsSet.has(w.id) && !dataIds.has(w.id));\n\n data = data.concat(preserved);\n }\n\n if (subjectWell) {\n data = data.concat(subjectWell);\n }\n\n setSelectedWells(uniqBy(data, 'id'));\n\n // Reset selection zone to prop value (discard session changes)\n setCurrentSelectionZone(offsetSettings?.lastSelectionZone ?? null);\n\n const newOffsetSetting = {\n ...offsetSettings,\n mapHidden: isMapHidden,\n filterExpanded: isFilterExpanded,\n };\n onSave(newOffsetSetting);\n\n // Reset filters to current prop values (discards unsaved changes like polygon drawings)\n // Use normalizeFilters to handle lasso mode without valid polygon\n const normalizedFilters = normalizeFilters(offsetSettings?.filters);\n\n setFilters({\n ...normalizedFilters,\n radius: normalizedFilters?.radius ?? DEFAULT_RADIUS_MILES,\n });\n setSelectedWellSection(offsetSettings?.wellSection || ALL_SECTION_KEY);\n resetIsLoadAllWells();\n resetSafeguard();\n onClose();\n };\n\n const isTableFullLoading = isTableLoading || areRawWellsLoading;\n\n // NOTE: Reset processing\n const isResetVisible = useMemo(() => {\n if (!hasValidAssetId) return false;\n if (isTableFullLoading) return false;\n if (!isSynced) return true;\n if (!isEmpty(filters) && filters[FilterType.sideTracks]) return true;\n if (selectedWellSection !== ALL_SECTION_KEY) return true;\n return false;\n }, [hasValidAssetId, isSynced, filters, selectedWellSection, isTableFullLoading]);\n\n const handleReset = useCallback(async () => {\n resetFilters();\n resetSelectionTool();\n setCurrentSelectionZone(null);\n setSelectedWellSection(ALL_SECTION_KEY);\n await updateSelectedWellsBySection(ALL_SECTION_KEY);\n }, [resetFilters, resetSelectionTool, updateSelectedWellsBySection]);\n\n const isLoading = !wells || !wellSections || !sortedWells;\n\n // NOTE: Well Name shadow\n const [tableRowsCount, setTableRowsCount] = useState(ROWS_PER_PAGE);\n const [tableWells, setTableWells] = useState([]);\n const headTableRef = useRef();\n const rightColumnRef = useRef();\n const scrollPositionRef = useRef(0);\n const isAnimatingRef = useRef(false);\n\n useEffect(() => {\n if (!sortedWells) return;\n\n const wells = sortedWells.slice(0, tableRowsCount);\n setTableWells(wells);\n }, [sortedWells, tableRowsCount, subjectWell]);\n\n // Restore scroll position after tableWells update (skip during animation)\n useLayoutEffect(() => {\n if (isAnimatingRef.current) {\n return;\n }\n\n if (rightColumnRef.current && scrollPositionRef.current > 0) {\n rightColumnRef.current.scrollTop = scrollPositionRef.current;\n }\n }, [tableWells]);\n\n // NOTE: Remove shadow from header column\n useEffect(() => {\n if (!headTableRef.current) return;\n const headColumn = headTableRef.current.querySelector(`.${offsetTableStyles.wellNameFixed}`);\n if (!headColumn) return;\n if (!isHScrollMoved) {\n headColumn.classList.add(offsetTableStyles.noShadow);\n } else {\n headColumn.classList.remove(offsetTableStyles.noShadow);\n }\n }, [isHScrollMoved, tableWells]);\n\n // Calculations for table header and search - moved from OffsetWellsTable\n const uniqTableWells = useMemo(() => uniqBy(tableWells, 'id'), [tableWells]);\n\n const [selectedTableWells, indeterminate, isAllWellsSelected] = useMemo(() => {\n const selectedTableWells = uniqTableWells.filter(well => well.checked);\n const indeterminate =\n uniqTableWells.length !== selectedTableWells.length &&\n Boolean(selectedTableWells.length) &&\n !isLimitedOffsetWells;\n const isAllWellsSelected =\n selectedTableWells.length === uniqTableWells.length || isLimitedOffsetWells;\n\n return [selectedTableWells, indeterminate, isAllWellsSelected];\n }, [uniqTableWells, isLimitedOffsetWells]);\n\n const isImperial = useMemo(() => getIsImperial(), []);\n\n useEffect(() => {\n if (resyncStatus === RESYNC_STATUS.SUCCEEDED) {\n handleReset();\n }\n // TODO: Check reference stability. Initially had only bicWells\n }, [bicWells, handleReset, resyncStatus]);\n\n const handleScroll = e => {\n if (!e.target) return;\n\n // Track scroll position for preservation during re-renders\n scrollPositionRef.current = e.target.scrollTop;\n\n if (isAdvancedSearchHidden) {\n e.target.scrollLeft = 0;\n setIsAdvancedSearchHidden(false);\n }\n\n // Check if H-Scroll is visible\n if (e.target.scrollLeft <= 5 && isHScrollMoved) {\n setIsHScrollMoved(false);\n }\n if (e.target.scrollLeft > 5 && !isHScrollMoved) {\n setIsHScrollMoved(true);\n }\n\n // Check if V-Scroll is visible\n if (e.target.scrollTop <= 0 && isVScrollMoved) {\n setIsVScrollMoved(false);\n }\n if (e.target.scrollTop > 0 && !isVScrollMoved) {\n setIsVScrollMoved(true);\n }\n\n // Check if scroll has reached top or bottom\n if (e.target.scrollHeight === e.target.offsetHeight) return;\n\n const currentScrollBottom = Math.round(e.target.scrollTop + e.target.offsetHeight + 2);\n\n if (currentScrollBottom >= e.target.scrollHeight && tableRowsCount < sortedWells.length) {\n setTableRowsCount(count => count + ROWS_PER_PAGE);\n }\n };\n\n return (\n <Modal\n open={open}\n onClose={handleCancel}\n size=\"fullscreen\"\n className={styles.modalDialog}\n title={\n <AppHeader\n totalCount={uniqueWellsCount}\n filteredCount={filteredWells?.length ?? 0}\n selectedCount={selectedWellsCount}\n maxOffsetWellNumber={maxOffsetWellNumber}\n isXtoProvider={isXtoProvider}\n resyncStatus={resyncStatus}\n setResyncStatus={setResyncStatus}\n metricsKeys={metricsKeys}\n onChangeMetricsKeys={handleChangeMetricsKeys}\n />\n }\n actions={\n !isViewOnly && (\n <div className={styles.actionsWrapper}>\n {!isLoading && isResetVisible ? (\n <Tooltip\n placement=\"bottom-start\"\n title={`Reset to Synced Offsets in ${isWDUser ? 'Offset App' : 'Wellhub'}`}\n >\n <div>\n <Button\n data-testid={`${PAGE_NAME}_reset`}\n onClick={handleReset}\n color=\"primary\"\n startIcon={<ReplayIcon />}\n >\n Reset to Defaults\n </Button>\n </div>\n </Tooltip>\n ) : (\n hasValidAssetId && (\n <div>\n <span className={classNames(typography.regular12, typography.colors.t6)}>\n The offset list is being automatically populated by \n </span>\n <span className={classNames(typography.medium12, typography.colors.t6)}>\n {offsetLabel}\n </span>\n </div>\n )\n )}\n <div className={styles.buttonGap}>\n <Button data-testid={`${PAGE_NAME}_cancel`} onClick={handleCancel} color=\"primary\">\n Cancel\n </Button>\n <Button\n data-testid={`${PAGE_NAME}_selectedWells`}\n variant=\"contained\"\n color=\"primary\"\n onClick={handleSave}\n disabled={isSavePending}\n prefix={isSavePending ? <LoaderCircular size={16} /> : undefined}\n >\n Select ({selectedWellsCount})\n </Button>\n </div>\n </div>\n )\n }\n >\n <div className={classNames(styles.offsetWellDialog)}>\n <NotificationsContainer />\n {!isLoading ? (\n <div\n className={classNames(styles.contentWrapper, {\n [styles.contentBlocked]: isTableFullLoading,\n })}\n >\n <div className={styles.columnsContainer}>\n {!isMapHidden && open && (\n <div className={styles.leftColumn}>\n <WellsMap\n ref={wellsMapRef}\n mapHidden={isMapHidden}\n subjectWell={subjectWell}\n offsetWellIds={selectedWells.map(({ id }) => id)}\n wells={wellsToDisplay}\n handleChangeOffsetWell={handleChangeOffsetWell}\n onBatchSelectWells={handleBatchSelectWells}\n activeWellId={activeWellId}\n selectionZone={currentSelectionZone}\n onSelectionZoneConfirm={handleSelectionZoneConfirm}\n shouldRecenter={shouldRecenter}\n onRecenterComplete={() => setShouldRecenter(false)}\n />\n </div>\n )}\n <div className={styles.rightColumn} ref={rightColumnRef} onScroll={handleScroll}>\n <Filter\n isHidden={!isFilterExpanded}\n filterOptions={filterOptions}\n wellSections={wellSections}\n selectedWellSection={selectedWellSection}\n onChangeBicWells={handleChangeWellSection}\n isSafeguardReady={isSafeguardReady}\n />\n <div className={offsetTableStyles.stickyTableWrapper}>\n <Table\n aria-label=\"ows table head\"\n innerRef={headTableRef}\n className={offsetTableStyles.stickyTable}\n >\n <TableHead>\n <OffsetWellsTableHead\n columnsWithDict={columnsWithDict}\n metricsKeys={metricsKeys}\n sortBy={sortBy}\n sortDirection={sortDirection}\n indeterminate={indeterminate}\n isAllWellsSelected={isAllWellsSelected}\n onChangeSort={handleChangeSortBy}\n onUpdateMetricsKey={handleUpdateMetricsKey}\n handleChangeAllOffsetWells={handleChangeAllOffsetWells}\n wellNameStyle={offsetTableStyles.wellNameFixed}\n isImperial={isImperial}\n isTaColumnVisible={!!taScores.length}\n isWellSectionColumnVisible={isWellSectionColumnVisible}\n />\n </TableHead>\n {isViewOnly && (\n <div\n className={classNames(styles.topGradient, {\n [styles.topGradientScrolled]: isVScrollMoved,\n })}\n />\n )}\n </Table>\n </div>\n\n {!isViewOnly && (\n <div className={classNames(offsetTableStyles.searchCellWrapper)}>\n <div className={offsetTableStyles.searchCell}>\n <AdvancedSearch\n companyIds={null}\n subjectWellId={subjectWellId}\n onChange={handleAddRemoveAssets}\n selectedWellIds={selectedTableWells.map(({ id }) => id)}\n onHideAdvancedSearch={handleHideAdvancedSearch}\n loadingAssetIds={loadingAssetIds}\n />\n </div>\n <div\n className={classNames(styles.topGradient, {\n [styles.topGradientScrolled]: isVScrollMoved,\n })}\n />\n </div>\n )}\n\n <OffsetWellsTable\n isTableLoading={isTableFullLoading}\n subjectWellId={subjectWellId}\n columnsWithDict={columnsWithDict}\n wells={tableWells}\n metricsKeys={metricsKeys}\n handleChangeOffsetWell={handleChangeOffsetWell}\n isLastWell={sortedWells.length <= tableRowsCount}\n isLimitedOffsetWells={isLimitedOffsetWells}\n maxOffsetWellNumber={maxOffsetWellNumber}\n wellSections={wellSections}\n setActiveWellId={setActiveWellId}\n onRowClick={wellId => wellsMapRef.current?.flyToWell(wellId)}\n taScores={taScores}\n isWellSectionColumnVisible={isWellSectionColumnVisible}\n loadingWellIds={loadingWellIds}\n scrollContainerRef={rightColumnRef}\n isAnimatingRef={isAnimatingRef}\n />\n </div>\n </div>\n {isViewOnly && hasValidAssetId && (\n <div className={styles.viewOnlyInfoContainer}>\n <span className={classNames(typography.regular12, typography.colors.t6)}>\n The offset list is being automatically populated by \n </span>\n <span className={classNames(typography.medium12, typography.colors.t6)}>\n {offsetLabel}\n </span>\n </div>\n )}\n </div>\n ) : (\n <LoadingIndicator />\n )}\n </div>\n </Modal>\n );\n};\n"],"names":["PAGE_NAME","_filteredWells$length","open","usePickerPropsStore","state","isWDUser","defaultSubjectWell","currentUser","offsetSettings","isViewOnly","onClose","onSave","offsetSize","maxOffsetSize","localMaxOffsetSize","syncAutoEnabled","useState","_useState2","_slicedToArray","_useState","activeWellId","setActiveWellId","wellsMapRef","useRef","Math","min","MAX_OFFSET_SIZE","maxOffsetWellNumber","max","subjectWellId","asset_id","useFetchSubjectWell","fetchedSubjectWell","_useFetchSubjectWell","subjectWellCoords","useMemo","_fetchedSubjectWell$t","coords","topHole","coordinates","_coords","latitude","longitude","useGlobalOffsetWellsSync","isFilterExpanded","useViewStore","isMapHidden","isHScrollMoved","setIsHScrollMoved","isVScrollMoved","setIsVScrollMoved","isAdvancedSearchHidden","setIsAdvancedSearchHidden","isLoadAllWells","resetIsLoadAllWells","shouldRecenter","setShouldRecenter","assetCompanyId","companyId","company_id","hasValidAssetId","filters","useFilterStore","setFilters","resetFilters","resetSelectionTool","useSelectionToolStore","reset","viewportWells","useViewportStore","wells","viewportBounds","bounds","_useCompanies","useCompanies","canViewCompanies","canViewCompaniesLoading","companies","_useState4","_useState3","selectedWells","setSelectedWells","_useState5","_offsetSettings$lastS","lastSelectionZone","_useState6","currentSelectionZone","setCurrentSelectionZone","pendingSearchSelectionRef","Set","_useState8","_useState7","loadingAssetIds","setLoadingAssetIds","_useState10","_useState9","isSavePending","setIsSavePending","useViewportWells","_useLoadAllWellsCompa","useLoadAllWellsCompanySafeguard","isSafeguardReady","resetSafeguard","useAllWells","useInitialBounds","hasSubjectWell","ghostZone","isTileLoading","useTileLoading","_useState11","wellSection","ALL_SECTION_KEY","_useState12","selectedWellSection","setSelectedWellSection","initLoading","_useState14","_useState13","isTableLoading","setIsTableLoading","isLimitedOffsetWells","length","prevSelectedWellIds","_useState16","_useState15","appLoading","setAppLoading","useEffect","showInfoNotification","_offsetSettings$selec","_prevSelectedWellIds$","prevIdsSet","current","selectedWellIds","every","id","has","rawWells","Array","from","values","areRawWellsLoading","usePinnedWells","_usePinnedWells2","_usePinnedWells","pinnedWells","arePinnedWellsLoading","_useSearchedWells","useSearchedWells","_useSearchedWells2","searchedWells","areSearchedWellsLoading","fetchSearchedWells","rawWellsWithSubject","result","existingIds","map","w","missingPinned","filter","concat","missingSearched","some","useCompanyProvider","companyProvider","_useCompanyProvider","_useBicWells","useBicWells","_useBicWells2","wellSections","setWellSections","bicWells","setBicWells","resyncStatus","setResyncStatus","taScores","rawBicWells","isWellSectionColumnVisible","section","value","useCompanyMetricKey","metricsKeys","_useCompanyMetricKey2","_useCompanyMetricKey","setMetricsKeys","_useAdvancedWells","useAdvancedWells","_useAdvancedWells2","wellsWithMetrics","areAdvancedWellsLoading","transformedWells","loadingWellIds","wellsWithoutCompanyName","companyMap","forEach","company","name","well","_objectSpread","companyName","subjectWell","find","isAllWellsLoaded","_ref","syncOffsetWells","_asyncToGenerator","_regeneratorRuntime","mark","_callee","isSynced","offsetWellsChanged","_offsetSettings$selec2","bicWellIds","bicWellIdsSet","isMatched","wellsByDistance","newOffsetSetting","selectedWellIdsSet","offsetWells","_offsetWells","wrap","_context","prev","next","wellId","getCoordinatedWells","sent","slice","offsetWellsLimited","stop","apply","this","arguments","filterOptions","useFilterOptions","columnsWithDict","useTableColumns","filteredWells","useFilteredWells","uniqueWellsCount","uniqBy","wellsToDisplay","wellsMap","Map","selectedWithFreshData","get","bicWellsToShow","undefined","selectedIdsSet","data","dataIds","preserved","size","pendingIds","enrichedWells","enrichedIds","includes","limited","delete","_ref2","_ref5","_ref6","_useSortedWells","useSortedWells","_useSortedWells2","sortBy","setSortBy","sortDirection","setSortDirection","sortedWells","handleAddRemoveAssets","useCallback","isAdding","newAssets","assetType","rigIds","addingWellIds","rigWells","addingWellIdsSet","addingWells","foundIds","missingIds","limitedWells","_context2","SEARCH_CATEGORIES","abrupt","fetchWellsByRigIds","t0","console","error","finish","_ref3","add","uniq","_ref4","_callee2","_x","_x2","_x3","_x4","handleHideAdvancedSearch","handleChangeMetricsKeys","newMetricsKeys","handleUpdateMetricsKey","key","newValue","prevKeys","item","handleChangeSortBy","sortKey","handleChangeOffsetWell","checked","prevWells","enrichedWell","handleChangeAllOffsetWells","sortedData","sortArray","handleBatchSelectWells","wellsToSelect","onComplete","currentIds","newWells","attempted","setTimeout","added","availableSlots","fw","handleSelectionZoneConfirm","zone","updateSelectedWellsBySection","rawWellIds","missingWellIds","fetchedWells","sectionWells","_context3","set","_callee3","_x5","handleChangeWellSection","_context4","_callee4","_x6","selectedWellsCount","_ref7","owsWellIds","owsWellIdsSet","isXtoProvider","COMPANY_PROVIDERS_FOR_IDAS","offsetLabel","performSave","selectedIds","_ref8","normalizeFilters","mapHidden","filterExpanded","handleCancel","_offsetSettings$lastS2","_normalizedFilters$ra","normalizedFilters","radius","DEFAULT_RADIUS_MILES","isTableFullLoading","isResetVisible","isEmpty","FilterType","sideTracks","handleReset","_callee5","_context5","isLoading","ROWS_PER_PAGE","_useState18","_useState17","tableRowsCount","setTableRowsCount","_useState20","_useState19","tableWells","setTableWells","headTableRef","rightColumnRef","scrollPositionRef","isAnimatingRef","useLayoutEffect","scrollTop","headColumn","querySelector","offsetTableStyles","wellNameFixed","classList","remove","noShadow","uniqTableWells","selectedTableWells","Boolean","_useMemo2","_useMemo","indeterminate","isAllWellsSelected","isImperial","getIsImperial","RESYNC_STATUS","SUCCEEDED","_jsx","Modal","className","styles","modalDialog","title","AppHeader","totalCount","filteredCount","selectedCount","onChangeMetricsKeys","actions","_jsxs","jsxs","actionsWrapper","children","Tooltip","placement","jsx","Button","onClick","color","startIcon","ReplayIcon","Replay","classNames","typography","regular12","colors","t6","medium12","buttonGap","variant","disabled","prefix","LoaderCircular","offsetWellDialog","NotificationsContainer","LoadingIndicator","contentWrapper","contentBlocked","columnsContainer","leftColumn","WellsMap","ref","offsetWellIds","_ref10","onBatchSelectWells","selectionZone","onSelectionZoneConfirm","onRecenterComplete","rightColumn","onScroll","e","target","scrollLeft","scrollHeight","offsetHeight","round","count","Filter","isHidden","onChangeBicWells","stickyTableWrapper","Table","innerRef","stickyTable","TableHead","OffsetWellsTableHead","onChangeSort","onUpdateMetricsKey","wellNameStyle","isTaColumnVisible","topGradient","_defineProperty","topGradientScrolled","searchCellWrapper","searchCell","AdvancedSearch","companyIds","onChange","_ref11","onHideAdvancedSearch","OffsetWellsTable","isLastWell","onRowClick","_wellsMapRef$current","flyToWell","scrollContainerRef","viewOnlyInfoContainer"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../stores/picker-props-store/usePickerPropsStore.js"),t=require("../stores/filter-store/useFilterStore.js");exports.useLoadAllWellsCompanySafeguard=function(n){var i,o
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../stores/picker-props-store/usePickerPropsStore.js"),t=require("../stores/filter-store/useFilterStore.js");exports.useLoadAllWellsCompanySafeguard=function(n){var u,i,o=n.companies,s=n.canViewCompanies,l=n.canViewCompaniesLoading,a=r.usePickerPropsStore((function(e){return e.isLoadAllWells})),c=r.usePickerPropsStore((function(e){var r;return null===(r=e.defaultSubjectWell)||void 0===r?void 0:r.companyId})),f=t.useFilterStore((function(e){return e.filters.companyId})),d=t.useFilterStore((function(e){return e.filters.hasUserConfirmedAllCompaniesLoadAll})),p=t.useFilterStore((function(e){return e.setFilter})),m=e.useRef(!1),v=e.useRef(!1),S=e.useCallback((function(){m.current=!1,v.current=!1}),[]),g=(u=f,i=o.length,!u||0===u.length||u.length===i);return e.useEffect((function(){if(!a)return m.current=a,v.current=g,void(d&&p("hasUserConfirmedAllCompaniesLoadAll",void 0));if(!l&&s&&0!==o.length){if(!g||d)return m.current=a,void(v.current=g);var e=m.current;m.current=a;var r=!e,t=v.current;if(v.current=g,r||!t&&g){var n=function(e,r){if(0===r.length)return null;var t=void 0!==e?Number(e):void 0;return void 0!==t&&!Number.isNaN(t)&&r.some((function(e){return e.id===t}))?t:r[0].id}(c,o);null!==n&&(p("companyId",[n]),1===o.length&&p("hasUserConfirmedAllCompaniesLoadAll",!0))}}}),[a,g,d,o,s,l,c,p]),{isSafeguardReady:!l&&(!s||!a||!g||!0===d),resetSafeguard:S}};
|
|
2
2
|
//# sourceMappingURL=useLoadAllWellsCompanySafeguard.js.map
|
package/cjs-bundle/components/OffsetWellPickerV5/stores/filter-store/utils/normalizeFilters.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var o=require('./../../../../../ext-esm/tslib/tslib.es6.js'),e=require("lodash");exports.normalizeFilters=function(s){if(null!=s){var l,n=e.omit(s,"hasUserConfirmedAllCompaniesLoadAll"),r=n.selectionMode,i=n.polygonCoords,t=o.__rest(n,["selectionMode","polygonCoords"]);return"lasso"!==r||(l=i,Boolean(l&&l.length>=3))?o.__assign(o.__assign({},t),{selectionMode:r,polygonCoords:i}):o.__assign(o.__assign({},t),{selectionMode:"radius",polygonCoords:i})}};
|
|
2
2
|
//# sourceMappingURL=normalizeFilters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OffsetWellPickerV5.d.ts","sourceRoot":"","sources":["../../../src/components/OffsetWellPickerV5/OffsetWellPickerV5.js"],"names":[],"mappings":"AA+DO,
|
|
1
|
+
{"version":3,"file":"OffsetWellPickerV5.d.ts","sourceRoot":"","sources":["../../../src/components/OffsetWellPickerV5/OffsetWellPickerV5.js"],"names":[],"mappings":"AA+DO,kDAykCN"}
|