Skip to content

feat: add native Out of Office (OOO) feature#10

Draft
PeerRich wants to merge 1 commit intomainfrom
devin/1771505330-ooo-feature
Draft

feat: add native Out of Office (OOO) feature#10
PeerRich wants to merge 1 commit intomainfrom
devin/1771505330-ooo-feature

Conversation

@PeerRich
Copy link
Member

feat: add native Out of Office (OOO) feature

Summary

Ports the Out of Office feature from cal.com PR #27642 to the companion app. Replaces the existing external browser link for OOO with a fully native experience including list view, create/edit form, and delete confirmation.

New files (11):

  • app/(tabs)/(ooo)/ — Stack-based route group with index (list), index.ios (native list with search), and create-entry (form) screens
  • components/out-of-office/OutOfOfficeListItem, OutOfOfficeListSkeleton, CreateOutOfOfficeModal
  • components/screens/OutOfOfficeScreen — Web list screen
  • hooks/useOutOfOffice.ts — React Query hooks for CRUD
  • services/calcom/ooo.ts — API service layer targeting /me/out-of-office
  • services/types/ooo.types.ts — Type definitions

Modified files (8):

  • More menu (iOS + web): Added "Out of Office" menu item with airplane icon
  • Profile sheet (iOS + web): Changed OOO from external browser link to in-app navigation
  • Tab layout: Added hidden (ooo) tab screen
  • Barrel exports: hooks, services, types

Review & Testing Checklist for Human

  • API endpoint availability: The service calls /me/out-of-office (v2 user-level). Verify these endpoints exist and return the expected shape defined in ooo.types.ts. The GET endpoint has a silent 404 fallback, but create/update/delete will throw if missing.
  • Navigation: router.back() then router.push(): In both profile-sheet.ios.tsx and profile-sheet.tsx, the OOO action calls router.back() followed by router.push("/(tabs)/(ooo)"). Verify this doesn't cause race conditions or flicker on device.
  • Dependency check: create-entry.tsx imports @react-native-community/datetimepicker and uses DropdownMenu components. Confirm these packages are installed and the component APIs match what's used here.
  • makeRequest third argument: ooo.ts passes "2024-08-13" as a 3rd arg to makeRequest for POST/PATCH/DELETE but not GET. Verify this matches the function signature and is intentional.
  • Run type-check: bun run typecheck was not run during this session (biome lint passed). Run it locally to catch any type mismatches with existing components like EmptyScreen, AlertDialog, AppPressable, etc.

Suggested test plan: Install on iOS simulator/device → navigate to More → tap "Out of Office" → verify list loads (may be empty if API isn't ready) → tap "New" → fill form → save → verify entry appears → edit → delete → also test OOO entry point from profile sheet.

Notes

  • This is a large PR (19 files, ~1900 lines) because it's a vertical feature port. Could be split by layer (types+service → hooks → UI) if preferred.
  • The console.warn in getOutOfOfficeEntries for 404s is intentional — the user-level v2 endpoints may not be deployed yet.

Link to Devin run: https://app.devin.ai/sessions/081470421bee4e56abaff130a69dca72
Requested by: @PeerRich

Port OOO feature from cal.com PR #27642 to companion app.

New files:
- OOO route layout and screens (index, index.ios, create-entry)
- OOO components (CreateOutOfOfficeModal, OutOfOfficeListItem, OutOfOfficeListSkeleton)
- OutOfOfficeScreen for web
- useOutOfOffice hooks (CRUD operations with React Query)
- OOO service layer for API calls
- OOO type definitions

Modified files:
- More menu: added OOO entry with airplane icon
- Profile sheet: changed OOO from external link to native navigation
- Tab layout: added hidden (ooo) tab screen
- Barrel exports: hooks, services, types

Co-Authored-By: peer@cal.com <peer@cal.com>
@devin-ai-integration
Copy link
Contributor

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR that start with 'DevinAI' or '@devin'.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

@github-actions github-actions bot added the mobile Changes to the mobile app (ios/android) label Feb 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

mobile Changes to the mobile app (ios/android)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant