-
Notifications
You must be signed in to change notification settings - Fork 18
feat: add interview validation schemas for creation, updating, and querying #103
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 6 commits
Commits
Show all changes
37 commits
Select commit
Hold shift + click to select a range
be8f623
feat: add interview validation schemas for creation, updating, and qu…
JoachimLK 59bdb36
feat: add interviews dashboard page with filtering, editing, and dele…
JoachimLK 7879e38
feat: add email template validation schemas and pre-made templates
JoachimLK 616ada5
feat: add email template management system
JoachimLK 771917f
feat: integrate email template selection for interview invitations
JoachimLK 0eb29b0
feat: add interview scheduling functionality with sidebar integration
JoachimLK ef5cdbb
feat: enhance interview management with inline editing and rescheduli…
JoachimLK 27f179e
feat: implement advanced filtering and sorting options for job applic…
JoachimLK 6033d06
feat: refactor interview management with enhanced status transitions …
JoachimLK e05b877
feat: centralize system email templates in shared module for improved…
JoachimLK a60f489
feat(dashboard): enhance job management and pipeline tracking
JoachimLK a94e4b6
feat: add fullscreen toggle functionality to job detail view
JoachimLK 78a3ae8
feat: add teleport target prop to modals for improved flexibility in …
JoachimLK 2c01f77
feat: make candidate email addresses clickable for improved user inte…
JoachimLK 9188d3b
feat: implement sortable candidate and application tables with improv…
JoachimLK ddda624
feat: improve date formatting helper to return local timezone date st…
JoachimLK 22e6a0a
feat: add functionality to move applications directly to interview st…
JoachimLK 57e692a
feat: add iCalendar generation for interview invitations
JoachimLK 08f778a
feat(calendar): add Google Calendar integration with OAuth2 flow
JoachimLK be9ccbd
feat(google-calendar): update integration instructions and add enviro…
JoachimLK 7f19a06
fix the drizzle schema and improved org switcher
JoachimLK bb5244a
feat(calendar): add Google Calendar sync status indicators in intervi…
JoachimLK c46d13d
feat: add script to backfill google_calendar_event_link for existing …
JoachimLK a935615
fix: correct promise chaining for Google Calendar event creation
JoachimLK 6c942d0
feat(interview): add Google Calendar notification preferences and cus…
JoachimLK 58810b1
feat(interview): enhance interview scheduling with Google Calendar in…
JoachimLK 140d6ac
feat(calendar): update webhook renewal to require specific permission…
JoachimLK 457af10
feat: enhance webhook handling with cron secret validation and improv…
JoachimLK 728feb2
feat(dark mode): enhance checkbox and radio styles for dark mode rend…
JoachimLK b75b0e5
feat(dashboard): update job pipeline display logic to use application…
JoachimLK 49976c3
feat(AppTopBar): remove unused transition classes for user menu
JoachimLK 8c2e225
feat: add Greenhouse vs Open Source ATS comparison article and enhanc…
JoachimLK c46549e
fix: update G2 ranking link for Greenhouse in ATS comparison article
JoachimLK b9533fe
refactor: simplify refreshNuxtData calls in useInterview composable a…
JoachimLK de61770
Merge branch 'main' into feat/interview-scheduling
JoachimLK 3968d01
chore: update package overrides and dependencies
JoachimLK 665e059
fix: cast return type of getAuth function to Auth
JoachimLK File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Dismiss the nested scheduler before closing the parent sidebar.
This sidebar is rendered outside the
<aside>and is not tied toopen, so the header close button and the existing Escape path can close the parent whileInterviewScheduleSidebarstays mounted or reopens on the next open. It also is not reset onapplicationIdchanges, which can preserve stale initial form state becauseapp/components/InterviewScheduleSidebar.vueonly seeds its form on mount (Line 56-62).⚙️ Suggested fix
function onKeydown(e: KeyboardEvent) { if (e.key === 'Escape') { if (showPreview.value) { closePreview() } else if (showDocDeleteConfirm.value) { showDocDeleteConfirm.value = null + } else if (showScheduleSidebar.value) { + showScheduleSidebar.value = false } else { emit('close') } } } +watch(() => props.open, (isOpen) => { + if (!isOpen) showScheduleSidebar.value = false +}) + // Reset state when switching to a different application watch(() => props.applicationId, () => { isEditingNotes.value = false activeTab.value = 'overview' uploadError.value = null showDocDeleteConfirm.value = null + showScheduleSidebar.value = false closePreview() }) <InterviewScheduleSidebar - v-if="showScheduleSidebar && application" + v-if="open && showScheduleSidebar && application" :application-id="props.applicationId" :candidate-name="`${application.candidate.firstName} ${application.candidate.lastName}`" :job-title="application.job?.title ?? ''"Also applies to: 345-362, 784-792
🤖 Prompt for AI Agents