* refactor: make DataTableProvider framework-agnostic by requiring tableIdentifier
- Remove Next.js usePathname dependency from DataTableProvider
- Make tableIdentifier a required prop instead of optional
- Update all usages to provide explicit tableIdentifier values
- This makes DataTableProvider usable in non-Next.js contexts
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* refactor: use usePathname at usage sites instead of hardcoding tableIdentifier
- Add validation in DataTableProvider for empty/nullish tableIdentifier
- Use usePathname() in Next.js apps to pass pathname as tableIdentifier
- Use descriptive identifiers for non-Next.js package components
- This keeps DataTableProvider framework-agnostic while allowing Next.js apps to use pathname
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* use pathname instead of hard-coded identifiers
* change type of tableIdentifier
* simplify
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2025-10-23 15:32:16 +02:00
Eunjae LeeGitHubDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* 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>
* mv PaymentPage to web
* mv 2 more components to web
* refactor
* update imports
* mv
* revert
* fix
* fix
* update
* migrate relevant test too
* move setup components to web from appstore
* move wipemycalother
* mv
* fix typechecks
* mv more routing forms components
* fix
* fix
* fix
* fix: resolve type errors in SingleForm.tsx after migration
- Updated SingleFormComponentProps type to include enriched form properties
- Added proper typing for user, team, nonOrgUsername, nonOrgTeamslug, userOrigin, teamOrigin
- Fixes type errors that occurred after migrating SingleForm.tsx from packages/app-store/routing-forms/components/
- Resolves both SingleForm.tsx and TestForm.tsx type errors
Co-Authored-By: benny@cal.com <sldisek783@gmail.com>
* delete
* refactors
* fix
* fix
* fix
* remove usage of trpc client from OmniInstallAppButton.tsx
* fix test
* import only type
* fix test
* remove trpc package from appstore package.json
* remove remaining trpc usage
* update test
* fix type checks
* fix errors
* fix
* make it error
* nit
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2025-09-14 12:51:05 +00:00
Eunjae LeeGitHubDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* refactor: improve most booked & least booked
* add 2 new charts and trpc handlers
* update arg
* update comment
* completed booking filter
* update
* add change in component level and remove unused translations
* current time and accepted status logic handler
* resize some charts
* restore some i18n
* restore i18n
* restore i18n
---------
Co-authored-by: Eunjae Lee <hey@eunjae.dev>
2025-08-25 11:17:07 +00: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>
* refactor: event trends chart on /insights to use InsightsBookingService
* extract service instantiation
* remove unused code
* rename from eventsTimeline to eventTrends
* clean up
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* fix: update styles of charts on /insights
* clean up
* clean up
* share the same styles with ChartCardItem
* margin for event trends
* fix type error
* feat: adds timezone indicator on insights informing user that user settings timezone is used instead of browser timezone
* added i18 helper for translation
* chore: use entities.decodeHTML instead of custom decoder
* feat(insights): align TimezoneBadge with new timeZone prop flow
* chore
* chore: smaller icon
* do not escape value
---------
Co-authored-by: Kartik Saini <41051387+kart1ka@users.noreply.github.com>
Co-authored-by: Eunjae Lee <hey@eunjae.dev>
* add back all data to router-position
* fix type error
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* 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
* Reapply "feat: add text & numeric filters to insights routing responses (#18016)"
This reverts commit 49070b96ae.
* support SINGLE_SELECT
* fix type error
* put back ts-expect-error
* remove playground
---------
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
* feat: improve text filters (WIP)
* move function to bottom
* apply some styles
* fix selection of TextFilterOptions
* rename value to operand
* remove unused file
* merge filters/filters into filters/utils
* fix regression of not putting url params correctly
* move makeWhereClause to filters/utils
* fix negative, empty, and not empty operators
* fix initial filtering from search state (url)
* fix type errors
* do not send an empty array to query
* update yarn.lock
* i18n for text filter operators
* extract logic as useColumnFilters()
* add missing import
* fix type error
* revert yarn.lock
* use i18n
* insensitive text match
* move data-table to @calcom/features
* fix type errors
* fix type errors
* fix type errors
* feat: support DataTable filters for Insights Routing WIP
* remove unused filters
* remove additionalFilters and fix types
* clean up filter components
* support icons for ActiveFilters
* support filters on json
* fix filter ui
* fix type error and clean up
* revert changes
* revert change
* clean up
* revert change
* fix compatibility with insights booking page
* remove unused params
* fix type errors
* update yarn.lock
* fix field filter and adjust ui
* chore: update yarn.lock
* fix text filter
* add Clear Filters button
* add more test data
* feat: support numeric filter WIP
* feat: support numeric filter
* feat: move People to an external filter
* fixing query states
* rename state to activeFilters
* add useDataTable
* fix ResponseCellValue bug and enable resizing for RoutingFormResponsesTable
* fix response values
* truncate attribute text
* seed booking attendees
* fix accessor (no actual change though)
* add a gap
* rename
* use pathname as default identifier for DataTable
* fix type error
* support text filter for assignment reason
* Apply suggestions from code review
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* rename fields to headers
* use safeParse
* fix type error
* push yarn.lock with faker
* fix MemberList
---------
Co-authored-by: Udit Takkar <udit222001@gmail.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: sean-brydon <sean@cal.com>
* wip
* bring in users median status for selected range
* merge
* i18n
* routed to talbe period scroll x-y infinite
* insights i18n + hover card on user
* add search by name or email
* wip download button
* fix type error
* type fix
* type errors + status
* type error
* revert: "feat: refactor filters on insights response table (#17796)"
This reverts commit 5d88858995.
* Put back the search columns and options english terms
* feat: improve text filters (WIP)
* move function to bottom
* apply some styles
* fix selection of TextFilterOptions
* rename value to operand
* remove unused file
* merge filters/filters into filters/utils
* fix regression of not putting url params correctly
* move makeWhereClause to filters/utils
* fix negative, empty, and not empty operators
* fix initial filtering from search state (url)
* fix type errors
* do not send an empty array to query
* update yarn.lock
* i18n for text filter operators
* extract logic as useColumnFilters()
* add missing import
* fix type error
* revert yarn.lock
* use i18n
* insensitive text match
* move data-table to @calcom/features
* fix type errors
* fix type errors
* fix type errors
* feat: support DataTable filters for Insights Routing WIP
* remove unused filters
* remove additionalFilters and fix types
* clean up filter components
* support icons for ActiveFilters
* support filters on json
* fix filter ui
* fix type error and clean up
* revert changes
* revert change
* clean up
* revert change
* fix compatibility with insights booking page
* remove unused params
* fix type errors
* update yarn.lock
* fix field filter and adjust ui
* chore: update yarn.lock
* fix text filter
* add Clear Filters button
* add more test data
---------
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* fix overflow colour in darkmode
* truncate/show overflow scroll indicator when overflowing on response values
* remove total created count
* overflow Y on failed response container
* fix darkmode styles on barlist
* radix hovercards to properly allow overflow in container
* column visible state
* remove constrained width on dropdowns to w-fit
* export type
* remove outdated translations for insights
* use i18n strings for insights
* use i18n strings for routing forms
* use i18n strings for apps store
* fix more pages
* refactor
* fix
* remove references to /pages for sso, setup, signin pages in /auth
* remove references to pages for insights
* remove references to pages for d
* remove references to pages for signup
* add page for /future index page
* fix routing-forms
* fix
* add missing defaults
* use getServerSessionForAppDir instead
* fix apps/[slug]/[...pages]
* fix metadata in apps/slug/pages
* refactor
* refactor
* remove duplicate code for PageProps
* remove references to pages for /reschedule
* fix
* fix routing forms
* type fix
* fix routing forms again
* revert changes for app/slug/pages
* revert
* revert changes in yarn lock
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>