V1.0.1#279
Conversation
BDMS-777: Update the PDF preview and download button so that they only require view access.
Parse Ocotillo and AMP well show URLs so $pageview includes well_id, page_template, and well_detail_area for breakdowns. Extend feature_used on Ocotillo WellShow with well_detail_area.
…n replay. Emit global_search after API and docs searches with query, result_count, has_results, and had_error. Mask other inputs in replay but show the palette field via data-posthog-unmask-search and maskInputFn.
BDMS-562: PostHog well detail routing and command palette search analytics
Contacts that represent companies rather than individuals have no name value, causing blank labels across the UI and in search results. Add a getContactDisplayName utility that falls back to organization when name is absent, and apply it to the wells list, contacts list, contact show page, and the well detail contacts card. Document the logic and deferred follow-up work in feature_files/contact-display-name.md.
BDMS-775: Remove DataGrid Export and Type Contact Link Click Handler
…ntact-Name Show organization name for contacts without a personal name
BDMS-776: Increased the export hook pageSize from 20 to 500 on well list page
BDMS-788 Patch broken link in home page
Preview DeploymentPreview URL: https://preview-staging-auejgdbofq-uc.a.run.app Note: This preview uses the staging API endpoints. |
|
@jirhiker, is this release only for bug fixes? I ask because I'm wondering whether this release depends on |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6e9d2970d7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| import { FieldCompilationNotesPdf } from '@/components/pdf/FieldCompilationNotesPdf' | ||
| import type { IContact, IWell } from '@/interfaces/ocotillo' | ||
| import { formatContactPhones } from '@/components/pdf/fieldCompilationPhoneFormatter' | ||
| import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs' |
There was a problem hiding this comment.
Use a PDF parser compatible with Node 20 CI
The new pdfjs-dist import runs in Vitest’s Node environment, but this commit pins pdfjs-dist@^5.7.284, whose package metadata requires Node >=22.13.0; our Vitest workflow still runs on Node 20.x (.github/workflows/CI_vitest.yml, line 17). In that CI context, loading this module causes the test suite to fail before assertions run, so this change breaks the default test pipeline unless CI is upgraded to Node 22+ or the parser/version is downgraded.
Useful? React with 👍 / 👎.
|
@TylerAdamMartinez it is intended for only prioritized bug fixes. I changed this pr to draft as we currently don't have a time set for a new production hot fix release |
…re-staging-production
Switching tabs was triggering a full refetch of OGC layer data, causing useThingLayers references to churn and re-run the queryRenderedFeatures effect unnecessarily. OGC layer data changes infrequently so this is safe.
The layers object was rebuilt on every render even when no data changed, causing the queryRenderedFeatures effect in MapView to re-run unnecessarily. Wrapping the construction in useMemo with all layer objects as deps means it only rebuilds when OGC data actually changes.
The results panel was triggering a scrollbar oscillation loop when panning to feature-dense areas. The outer Box had gap:1 and mt:-1 which made the content ~8px taller than its scroll container, giving the loop a threshold to cross. Removed both. Wired in the existing useViewportBbox hook (350ms debounce, fires on moveend not onMove) to replace the raw setState that was running queryRenderedFeatures at 60fps during a drag. Added a loading skeleton to the features-in-view count panel that only appears on initial load, not during recalculation, to avoid a flash.
Tracks all meaningful user interactions on the map page: - map_layer_toggled: dataset turned on/off (layer_key, label, enabled, total active) - map_color_mapping_toggled: color scale toggle per layer - map_layer_group_toggled: dataset panel group expand/collapse - map_export: CSV/GeoJSON download with scope, layer count, feature count - map_export_error: catches and reports export failures - map_point_clicked: navigation from map point to well/spring detail page - map_piper_diagram_opened: Piper diagram panel opened with chemistry feature count - map_selection_drawn: draw-to-select polygon completed - map_basemap_changed: basemap switched
Tracks all meaningful interactions on the Wells list: - wells_searched: fires when the debounced search value changes (query_length only, no text) - wells_filter_applied: replaces vague feature_used/wells_filter; now includes operators - wells_column_visibility_changed: fires when columns are shown/hidden (hidden_columns, hidden_count) - wells_density_changed: fires when the density selector changes (compact/standard/comfortable) - wells_sorted: fires when a column sort is applied (field, direction) - wells_exported: fires on CSV export with search_active flag - wells_batch_field_sheets: fires when Batch Field Sheets is clicked - wells_row_clicked: fires when a well row is opened (well_id) Also adds an optional onRowClick callback prop to ListPage so consumers can hook into row navigation for analytics without changing shared logic.
queryRenderedFeatures is synchronous so featuresLoading was only true for a single paint before being cleared. In areas with no features, this caused a rapid skeleton-to-text flash on every map pan. Removed the featuresLoading state entirely. The count text now updates directly with no intermediate loading state.
Moved nav items out of AppShell into src/config/navigation.ts so permissions are visible in one place. Each item declares its Refine resource name (used for CanAccess) and an adminOnly flag for the three Admin-only items (Locations, Lexicon, Hydrograph Correction). AppShell now wraps every resource nav item in CanAccess so non-admins never see restricted items. Admin-only items show a small lock icon. Search nav item opens the existing search modal instead of being a placeholder. Import Log removed from the nav.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d73540124e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| } | ||
| > | ||
| {contact.name} | ||
| {getContactDisplayName(contact)} |
There was a problem hiding this comment.
Sanitize well contacts before organization fallback
When a non-confidential viewer loads wells whose contacts include a private org-only contact, this raw fallback can display contact.organization instead of the sanitized "Confidential Contact"; this component does not call sanitizeContacts before using getContactDisplayName, even though the new feature spec says the helper must run after sanitization. Please sanitize the well contacts (as the contact list does) before applying the name/organization fallback.
Useful? React with 👍 / 👎.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…validation for pod_id in useOSEPODInfo
…GS info cards to match existing app patterns
…ove sorting of URL rows in OSEPOD and USGS info cards
…ard-errors BDMS-863: OSE and USGS card errors
…rolling - Renamed SidebarProvider to AppLayout and SidebarInset to AppContent in sidebar.tsx so the component names reflect what they actually wrap (the whole app layout and the main content area, not sidebar-specific concepts) - Fixed Well Detail page scrolling by replacing the flex column main element with a plain div — flex children were shrinking instead of overflowing, which prevented overflow-y-auto from triggering - Fixed map right panel (visible features list) not scrolling by adding MuiCollapse-wrapper and MuiCollapse-wrapperInner flex overrides, the same fix already applied to the left datasets panel
- Added hamburger button to header on mobile by updating ExpandButton to check isMobile — previously it only showed on desktop when the sidebar was collapsed, so there was no way to open the nav on mobile - Made ShellHeader responsive: search bar hidden on mobile with a compact search icon button replacing it, user menu shows initials avatar on mobile instead of the full name, ReportBugButton hides its label on mobile (icon only) - Exported SupportPanelContext so ReportBugButton can import it - Rewrote ReportBugButton in shadcn (was still using the old MUI version that pointed at a Google Form); now opens the support panel - Removed @fontsource-variable/geist — installed but never imported anywhere; Public Sans and Outfit are the fonts in use
Both buttons were using raw <button> elements with hand-written classes that duplicated what Button variant="ghost" size="icon" already provides (flex, centering, rounded corners, hover bg, transitions). Switched both to the Button primitive to keep things consistent with the rest of the UI. SidebarTrigger was not used because it is hardcoded to PanelLeftIcon and does not support swapping icons based on sidebar state. The distinct collapse and expand icons (plus hamburger on mobile) are intentional.
- Added AmpRole const object to navigation.ts using the correct role strings
('AMP.Viewer', 'AMP.Editor', 'AMP.Admin') that match the existing PortalRole
type in accessControl.ts — avoids duplicating the type and keeps values in sync
- Every nav item now declares its roles explicitly: viewerAndAbove for Wells,
Field Sheets, Contacts, and Datasets; adminOnly for Locations, Lexicon, and
Hydrograph Correction; no roles for Home, Search, and Map (available to all)
- AppShell reads the current user's roles via useAccessCapabilities and filters
nav items before rendering — restricted items are not mounted at all rather
than relying solely on CanAccess async resolution
- CanAccess stays in place as a second enforcement layer for page-level access
- Removed the adminOnly boolean from NavItem — it was redundant once roles is
the explicit source of truth; the lock icon now derives from roles directly
…takes user prop" This reverts commit 3af4d9d.
… takes user prop" This reverts commit bbe962c.
…ryabhata-b85d79 Bump version to v1.0.1
App frame: shadcn Sidebar, Tailwind v4, single-shell layout
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4635809b79
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| href: '/ocotillo/location', | ||
| icon: MapPin, | ||
| resource: 'ocotillo.location', | ||
| roles: adminOnly, |
There was a problem hiding this comment.
Include Geothermal admins in Locations nav gate
When a user only has Geothermal.Admin, the new sidebar filters this item out before CanAccess runs (AppShell returns null when roles does not include a user role), even though the access policy still allows Geothermal.Admin to list/show/manage ocotillo.location in src/utils/accessControl.ts. This makes the Locations page disappear from navigation for an authorized admin role; use a roles set that matches the resource policy or rely on CanAccess for this item.
Useful? React with 👍 / 👎.
Ocotillo Release - v1.0.1
Release Date: June 10, 2026
Overview
A focused release addressing map stability, wells list usability, PDF access, and several bug fixes.
Improvements
Bug Fixes