Skip to content

Adjusting based on feedback #42

Description

@pasc4le

Refine the current dashboard flows around interviewer availability, candidate actions, recruitment-session timeslot creation, and date rendering so the behavior is explicit, reliable, and easier to manage from the app.

The main goal is to remove hidden behaviors, fix the current availability and timezone issues, and extend the dashboard with an admin-managed availability mask and a direct self-service control for firstTimeInterviewer.

Requirements

  • split candidate actions in the candidate details flow, mainly around ActionButtons.tsx, stageButtons.tsx, and DeleteInterviewButton.tsx, so interview deletion and stage transitions are separate actions with no hidden side effects
  • keep interview deletion as an explicit standalone action on the candidate page and in the related interview service flow, mainly in the candidate [id]/page.tsx flow and the interview service layer
  • add a new admin-only dashboard page for an availability mask, likely near the current availability overview page and sidebar configuration
  • make the availability mask reuse the same weekly-grid interaction model used by AvailabilitiesTable.tsx, but persist it separately from personal interviewer availability in the schema and timeslot-related services
  • update aggregated availability and booking logic, mainly in timeslots.ts, the aggregated availability table, and the manual booking flow, so the mask acts as a global filter over availability selection rather than as personal interviewer availability data
  • investigate and fix the current availability update issues in the My Availability flow, especially me/availability/page.tsx, AvailabilityClient.tsx, and src/lib/actions/availability.ts
  • ensure saving availability is scoped correctly to the current recruitment session by adjusting the persistence and query logic in the availability action and timeslot service layer
  • ensure users can clear all selected availability from AvailabilityClient.tsx and still persist that empty state through the availability action
  • add a direct control for firstTimeInterviewer in the My Availability page, likely in me/availability/page.tsx and/or AvailabilityClient.tsx
  • reuse the existing isFirstTime flag and toggle flow already present in the auth schema, user actions, and users table, without introducing a second source of truth
  • fix timezone hydration issues in the timeslot-based tables, especially AvailabilitiesTable.tsx, AggregatedAvailabilityTable.tsx, and the booking-related table flows
  • update recruitment-session timeslot generation in the recruitment creation form and src/lib/actions/recruitmentSessions.ts so starting and ending hours are interpreted using an agreed user timezone instead of the server timezone
  • make the timezone used for recruitment-session timeslot generation explicit in both the UI and the server-side generation logic
  • when a user enters hours such as 9 to 20, generated timeslots must reflect 9:00 to 20:00 in the agreed timezone even if the server runs in a different timezone
  • keep the implementation extensible by centralizing shared availability and time-handling logic in the relevant services and utilities

Suggested Order

  1. Investigate and fix the availability update issues in My Availability.
  2. Fix timezone-safe rendering and hydration for timeslot tables.
  3. Fix Recruitment Session timeslot generation so submitted hours are interpreted in the agreed user timezone.
  4. Add the firstTimeInterviewer toggle to My Availability.
  5. Introduce the admin Availability Mask page and persistence model.
  6. Update aggregated availability and booking logic to respect the mask.
  7. Refactor candidate actions so interview deletion and stage moves are clearly detached.
  8. Verify the updated flows across candidate pages, personal availability, admin availability views, and recruitment-session creation.

Acceptance Criteria

  • interview deletion is exposed as a standalone action and is not implicitly coupled to stage transitions
  • stage actions do not trigger hidden interview cleanup or other unrelated side effects
  • admins can access a dedicated dashboard page to manage an availability mask
  • the availability mask is persisted independently from interviewer personal availability
  • availability and booking logic apply the availability mask consistently
  • saving My Availability updates the correct recruitment-session data only
  • availability changes persist reliably and are reflected correctly after save
  • users can submit an empty availability selection when that is the intended final state
  • My Availability includes a direct control for the current user’s firstTimeInterviewer status
  • toggling firstTimeInterviewer updates the existing persisted user flag and the page reflects the new state
  • timeslot-based tables do not visually change date/day/hour placement after hydration when client and server timezones differ
  • the same timezone-safe behavior is applied across personal availability, aggregated availability, and booking-related tables
  • Recruitment Session creation makes the reference timezone explicit when configuring starting and ending hours
  • when a user submits starting and ending hours in the agreed timezone, generated timeslots preserve those intended hours instead of shifting based on the server timezone
  • a case such as user timezone GMT+1 and server timezone GMT no longer turns submitted hours 9 to 20 into generated timeslots 10 to 21

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workinghelp wantedExtra attention is needed

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions