* feat: allow to choose dateTarget for /insights (startTime by default)
* feat: add timestamp selector for insights date filtering
- Add TimestampFilter component with Start Time/Created At options
- Extend useInsightsBookingParameters hook with timestamp selection
- Update all insight components to use dateTarget parameter
- Add i18n translations for new UI strings
- Position selector next to DateRangeFilter as requested
Addresses user request to add select box next to date range filter
allowing users to choose between startTime (default) and createdAt
for displaying booking metrics on the Insights page.
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* refactor: rename TimestampFilter to DateTargetSelector with nuqs URL state
- Rename TimestampFilter component to DateTargetSelector
- Implement nuqs hook in InsightsPageContent for URL state management
- Update useInsightsBookingParameters to return dateTarget from URL state
- Add dateTarget field to insightsRoutingServiceInputSchema and related types
- Simplify individual insight components to use insightsBookingParams directly
- Remove manual timestampTarget destructuring from all components
- Update all tRPC routing service calls to include dateTarget parameter
- All TypeScript checks now pass successfully
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* update styles
* fix inconsistency
* feat: replace Select with Command component and rename filter ID
- Replace Select with Command + Popover for compact width and wider dropdown
- Add descriptive option labels with translations
- Change filter ID from 'createdAt' to 'timestamp' across all components
- Maintain URL state management with nuqs
- Fix ESLint warning for missing dependency in useEffect
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* fix: revert routing components to use createdAt filter ID
- Keep timestamp filter ID change scoped only to main insights page
- Routing components should continue using createdAt as filter ID
- Only insights-view.tsx and related booking hooks use timestamp
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* update styles
* fix trpc router
* refactor timestamp column for insights booking service
* fix
* update text
* rename and clean up
* fix endDate in DateRangeFilter
* fix type errors
* fix startTime filter and type errors
* provide default date range
* add completed to getMembersStatsWithCount
* add unit tests
* fix type error
* address feedback
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2025-09-18 11:32:50 +01:00
Eunjae LeeGitHubDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* feat: implement default filter segments for data tables
- Add defaultSegmentId column to UserFilterSegmentPreference table
- Support mixed segment ID types (number for user segments, string for default segments)
- Add DefaultFilterSegment and CombinedFilterSegment types
- Update useSegments hook to handle default segments with date range recalculation
- Modify FilterSegmentSelect to group and display default segments separately
- Add default segments to bookings view (My Bookings, Upcoming Bookings)
- Prevent editing/deleting of default segments in SaveFilterSegmentButton
- Update DataTableProvider to support defaultSegments prop
- Update parsers and repository to handle mixed segment ID types
Implements frontend-only default segments as specified in the requirements.
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* chore: update ESLint dependencies to resolve configuration issues
- Update eslint-config-next and @typescript-eslint packages to latest versions
- Fix dependency compatibility issues that were blocking pre-commit hooks
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* revert eslint change
* some changes
* refactor: implement discriminated union for segment types
- Update SegmentIdentifier to use discriminated union with 'custom' vs 'default' types
- Refactor setSegmentId to accept object parameters: { id: string; type: 'default' } | { id: number; type: 'custom' }
- Update type definitions with DefaultFilterSegment, CustomFilterSegment, and CombinedFilterSegment
- Modify useSegments hook to handle new segment type structure
- Update FilterSegmentSelect component to work with discriminated unions
- Refactor database preference handling to store segment type alongside ID
- Add proper type safety throughout the data flow
- Remove description property from DefaultFilterSegment type
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* fix: update unit test to expect discriminated union format for preferredSegmentId
The test was expecting preferredSegmentId to be a number, but after the discriminated union refactor it now returns { id: number, type: 'custom' } for custom segments. Updated the assertion to use toEqual() for deep object comparison.
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* fix: correct SegmentIdentifier type to exclude undefined
- Remove null from SegmentIdentifier type definition since null/undefined indicate absence of identifier
- Update DataTableProvider and useSegments to handle SegmentIdentifier | null properly
- Fix type safety while maintaining discriminated union functionality
- Ensure setAndPersistSegmentId accepts null values for clearing segments
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* remove unused segment
* a little update
* feat: add default- prefix to default segment IDs for clearer type identification
- Update 'my_bookings' to 'default-my_bookings'
- Update 'upcoming-bookings' to 'default-upcoming-bookings'
- Makes it easier to verify segment type by looking at the ID string
- Maintains all existing discriminated union functionality
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* refactor: rename segment types from default/custom to system/user for better semantics
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* fix: update unit test to expect 'user' type instead of 'custom' in discriminated union
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* fix: complete type renaming from default/custom to system/user across all component files
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* refactor: update segment ID prefix from default- to system- to match type naming
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* remove unused segment
* some fixes
* revert schema change
* rename defaultSegmentId to systemSegmentId
* renaming
* fix save button
* remove as any
* clean up prisma migrations
* type fixes
* many fixes
* remove icon property
* fix infinite rendering
* fix race condition
* re-visiting useSegments implementation WIP
* extract useElementByClassName
* add e2e tests
* fix a bug that the created segment was not selected automatically
* add useSegments to /insights and fix e2e test
* fix type error
* fix type error
* apply feedback
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* fix: recalculate date range from filter segments
* clean up
* add unit tets for date-range utils
---------
Co-authored-by: Sean Brydon <sean@Seans-Mac-mini.local>
* fix: relocate filter segment buttons on org member list
* implement toolbarContainerRef
* adjust location
* reorganize the hierarchy of DataTableProvider
* rename toolbar container to cta container
* move clear button to toolbar right
* feat: implement standard pagination for org member list
* fix type error
* i18n for pagination
* add paginationMode
* apply the change to PlatformManagedUsersTable
* replace useInfiniteQuery with useQuery
* fix type error
* fix type error
* fix type error
* fix type error
* update comment
* remove optimistic update
* minor changes
* update usage on nuqs
---------
Co-authored-by: Benny Joo <sldisek783@gmail.com>
* fix: show selected filter values first in single- & multi-select filters
* fix type errors
* fix type error
* fix type error
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* feat: apply full width automatically for DataTable
* change implementation
* load all columns of insights routing table at the same time
* update team member list
* sticky columns for >= sm
* fix type error
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>