mirror of
https://github.com/hanzoai/calendar.git
synced 2026-10-30 14:46:43 +00:00
* feat(companion): add native iOS UI components for modals and pickers - Add LogoutConfirmModal.ios.tsx using native Alert.alert() - Add BookingModals.ios.tsx using native Alert.prompt() for reject modal - Add RescheduleScreen.ios.tsx using @expo/ui/swift-ui DateTimePicker These iOS-specific implementations provide native glass UI experience instead of custom React Native modals. * fix(companion): use correct DatePicker API from @expo/ui/swift-ui - Change import from DateTimePicker to DatePicker - Use onDateChange instead of onDateSelected - Use displayedComponents as array instead of string - Use selection instead of initialDate * feat(companion): add native Android DateTimePicker for RescheduleScreen - Use @expo/ui/jetpack-compose DateTimePicker for native Android date/time selection - Use variant='picker' with showVariantToggle=false for consistent UI - Use displayedComponents='date' for date picker and 'hourAndMinute' for time picker - Use is24Hour=true for 24-hour time format * Revert "feat(companion): add native Android DateTimePicker for RescheduleScreen" This reverts commit 95677679c2e86889b935e658fac011ae9669fa10. * adjust date and time picker for ios, and use native ios ui for delete event type * feat(companion): add native Android DateTimePicker and web HTML inputs for RescheduleScreen - Add RescheduleScreen.android.tsx using @react-native-community/datetimepicker for native Android date/time pickers - Update RescheduleScreen.tsx to use native HTML date/time inputs on web/extension - Install @react-native-community/datetimepicker package * fix lint errors * use expos date and time picker for android * address cubics comments * remove dependancy causing android build fail * fix versions * custom date and time picker for android * fix react compiler memo issue * address cubics commments * feat(companion): convert booking action pages to native iOS bottom sheets (#26366) * feat(companion): add native iOS bottom sheet for meeting session details * move file to correct location, remove bg and use glass ui bg * feat(companion): convert booking action pages to iOS bottom sheets - Add iOS-specific bottom sheet implementations for: - edit-location (detents: 0.5, 0.7) - mark-no-show (detents: 0.4, 0.6) - view-recordings (detents: 0.7, 0.9) - add-guests (detents: 0.6, 0.8) - reschedule (detents: 0.8, 0.95) - Move route files from (tabs)/(bookings)/ to root app/ level - Register screens in root _layout.tsx with platform-specific options - Update navigation paths from nested to root level - Remove migrated screens from bookings _layout.tsx * updated booking actions pages to use glass ui bottom sheet * new ui for booking actions ready * add biome file * fix event type detail react compiler issue * update button style * fix black flash ui * use glass ui buttons for Availability and event type detail page * fix lint issue * address cubics comments * make booking actions ui transparent * remove black flash and keep transparent ui --------- Co-authored-by: Volnei Munhoz <[email protected]>
44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import { useEffect, useRef } from "react";
|
|
import { Alert } from "react-native";
|
|
|
|
interface LogoutConfirmModalProps {
|
|
visible: boolean;
|
|
onConfirm: () => void;
|
|
onCancel: () => void;
|
|
}
|
|
|
|
export function LogoutConfirmModal({ visible, onConfirm, onCancel }: LogoutConfirmModalProps) {
|
|
// Track if alert has been shown for current visible=true state to prevent re-triggering
|
|
// when parent passes unstable callback references
|
|
const alertShownRef = useRef(false);
|
|
|
|
useEffect(() => {
|
|
if (visible && !alertShownRef.current) {
|
|
alertShownRef.current = true;
|
|
Alert.alert(
|
|
"Sign Out",
|
|
"Are you sure you want to sign out?",
|
|
[
|
|
{
|
|
text: "Cancel",
|
|
style: "cancel",
|
|
onPress: onCancel,
|
|
},
|
|
{
|
|
text: "Sign Out",
|
|
style: "destructive",
|
|
onPress: onConfirm,
|
|
},
|
|
],
|
|
{ cancelable: true, onDismiss: onCancel }
|
|
);
|
|
}
|
|
|
|
if (!visible) {
|
|
alertShownRef.current = false;
|
|
}
|
|
}, [visible, onConfirm, onCancel]);
|
|
|
|
return null;
|
|
}
|