feat: add recurring event deletion with three modes
Implement three deletion modes for recurring events: - single: exclude specific occurrence via EXDATE mechanism - future: set RRULE UNTIL to stop future occurrences - all: delete entire event series Changes include: - Add exceptionDates field to CalendarEvent model - Add RecurringDeleteMode type and DeleteRecurringEventDTO - EventService.deleteRecurring() with mode-based logic using rrule library - EventController DELETE endpoint accepts mode/occurrenceDate query params - recurrenceExpander filters out exception dates during expansion - AI tools support deleteMode and occurrenceDate for proposed deletions - ChatService.confirmEvent() handles recurring delete modes - New DeleteEventModal component for unified delete confirmation UI - Calendar screen integrates modal for both recurring and non-recurring events
This commit is contained in:
@@ -19,27 +19,49 @@ const EventDetailScreen = () => {
|
||||
return (
|
||||
<BaseBackground>
|
||||
<View className="flex-1 p-4">
|
||||
<Text className="text-2xl mb-4" style={{ color: theme.textPrimary }}>Event Detail</Text>
|
||||
<Text className="mb-4" style={{ color: theme.textSecondary }}>ID: {id}</Text>
|
||||
<Text className="text-2xl mb-4" style={{ color: theme.textPrimary }}>
|
||||
Event Detail
|
||||
</Text>
|
||||
<Text className="mb-4" style={{ color: theme.textSecondary }}>
|
||||
ID: {id}
|
||||
</Text>
|
||||
<TextInput
|
||||
placeholder="Title"
|
||||
placeholderTextColor={theme.textMuted}
|
||||
className="w-full border rounded p-2 mb-4"
|
||||
style={{ color: theme.textPrimary, borderColor: theme.borderPrimary, backgroundColor: theme.secondaryBg }}
|
||||
style={{
|
||||
color: theme.textPrimary,
|
||||
borderColor: theme.borderPrimary,
|
||||
backgroundColor: theme.secondaryBg,
|
||||
}}
|
||||
/>
|
||||
<TextInput
|
||||
placeholder="Description"
|
||||
placeholderTextColor={theme.textMuted}
|
||||
multiline
|
||||
className="w-full border rounded p-2 mb-4 h-24"
|
||||
style={{ color: theme.textPrimary, borderColor: theme.borderPrimary, backgroundColor: theme.secondaryBg }}
|
||||
style={{
|
||||
color: theme.textPrimary,
|
||||
borderColor: theme.borderPrimary,
|
||||
backgroundColor: theme.secondaryBg,
|
||||
}}
|
||||
/>
|
||||
<View className="flex-row gap-2">
|
||||
<Pressable className="p-3 rounded flex-1" style={{ backgroundColor: theme.confirmButton }}>
|
||||
<Text className="text-center" style={{ color: theme.buttonText }}>Save</Text>
|
||||
<Pressable
|
||||
className="p-3 rounded flex-1"
|
||||
style={{ backgroundColor: theme.confirmButton }}
|
||||
>
|
||||
<Text className="text-center" style={{ color: theme.buttonText }}>
|
||||
Save
|
||||
</Text>
|
||||
</Pressable>
|
||||
<Pressable className="p-3 rounded flex-1" style={{ backgroundColor: theme.rejectButton }}>
|
||||
<Text className="text-center" style={{ color: theme.buttonText }}>Delete</Text>
|
||||
<Pressable
|
||||
className="p-3 rounded flex-1"
|
||||
style={{ backgroundColor: theme.rejectButton }}
|
||||
>
|
||||
<Text className="text-center" style={{ color: theme.buttonText }}>
|
||||
Delete
|
||||
</Text>
|
||||
</Pressable>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
Reference in New Issue
Block a user