From 2886272634db6aaabd09ef4f00225ee599342992 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Fri, 7 Mar 2025 15:52:24 +0100 Subject: [PATCH] small changes --- src/app/calendar/calendar.tsx | 194 ++++++++++++++++++---------- src/app/calendar/postDialog.tsx | 30 ++++- src/app/dashboard/accountStatus.tsx | 2 +- src/app/dashboard/recentPosts.tsx | 2 +- src/components/icons.tsx | 2 +- 5 files changed, 156 insertions(+), 74 deletions(-) diff --git a/src/app/calendar/calendar.tsx b/src/app/calendar/calendar.tsx index 067bb0e..49847eb 100644 --- a/src/app/calendar/calendar.tsx +++ b/src/app/calendar/calendar.tsx @@ -3,25 +3,31 @@ export interface CalendarSchedule { platforms: { user: string }[]; id: string; } +import { Button } from '@/components/ui/button'; import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger, } from '@/components/ui/context-menu'; +import { Popover } from '@/components/ui/popover'; +import { PopoverContent, PopoverTrigger } from '@/components/ui/popover'; +import { cn } from '@/lib/utils'; import axios from 'axios'; -import { Pencil, PlusCircle, Trash } from 'lucide-react'; -import React from 'react'; +import { format } from 'date-fns'; +import { CalendarIcon, Pencil, Plus, PlusCircle, Trash } from 'lucide-react'; +import React, { useState } from 'react'; +import { Calendar as ShadcnCalendar } from '@/components/ui/calendar'; const hours = Array.from({ length: 24 }, (_, i) => `${i}:00`); const days = [ - 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', + 'Sunday', ]; export interface Event { @@ -37,93 +43,151 @@ interface CalendarProps { setEvents: (events: Event[]) => void; } +const today = new Date(); +today.setHours(0, 0, 0, 0); + const Calendar: React.FC = ({ events, setDate, setDialog, setEvents, }) => { + const [calendarDate, setCalendarDate] = useState(new Date()); + return ( -
-
Time
- {days.map((day) => ( -
- {day} +
+
+
+ + + + + + { + if (d) { + setCalendarDate(d); + } + }} + mode="single" + disabled={(d) => d < today} + /> + +
- ))} +
+
+
Time
+ {days.map((day) => ( +
+ {day} +
+ ))} + {hours.map((hour, rowIdx) => ( + +
{hour}
+ {days.map((_, colIdx) => { + const currentDate = new Date(calendarDate); + currentDate.setDate( + calendarDate.getDate() - + calendarDate.getDay() + + colIdx + ); + currentDate.setHours(rowIdx, 0, 0, 0); - {hours.map((hour, rowIdx) => ( - -
{hour}
+ const event = events.find( + (e: Event) => + e.time.toDateString() === + currentDate.toDateString() && + e.time.getHours() === rowIdx + ); - {days.map((_, colIdx) => { - const event = events.find( - (e: Event) => - e.time.getDay() === colIdx && - e.time.getHours() === rowIdx - ); + if (!event) { + return ( + + +
{ + setDate( + new Date(currentDate) + ); + setDialog(true); + }} + > + +
+
+ + { + setDate( + new Date(currentDate) + ); + setDialog(true); + }} + > + + New Post + + +
+ ); + } - if (!event) { return ( -
+
+ {event && ( +
+ {event.title} +
+ )} +
+ + + Edit + { - setDate( - new Date(2024, 3, 4, rowIdx) + axios.delete( + `/api/posts?schedule=${event.id}` + ); + setEvents( + events.filter( + (e) => e.id !== event.id + ) ); - setDialog(true); }} > - - New Post + + Delete
); - } - - return ( - - -
- {event && ( -
- {event.title} -
- )} -
-
- - - - Edit - - { - axios.delete( - `/api/posts?schedule=${event.id}` - ); - setEvents( - events.filter( - (e) => e.id !== event.id - ) - ); - }} - > - - Delete - - -
- ); - })} -
- ))} + })} +
+ ))} +
); }; diff --git a/src/app/calendar/postDialog.tsx b/src/app/calendar/postDialog.tsx index 17ce63f..b271443 100644 --- a/src/app/calendar/postDialog.tsx +++ b/src/app/calendar/postDialog.tsx @@ -34,6 +34,9 @@ import { } from '@/lib/types'; import { CalendarSchedule, Event } from './calendar'; import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group'; +import RecentPosts from '../dashboard/recentPosts'; +import PlatformIcon from '@/components/icons'; +import { Input } from '@/components/ui/input'; type PostDialogProps = { newPostDialogOpen: boolean; @@ -55,6 +58,7 @@ export default function PostDialog({ }: PostDialogProps) { const [content, setContent] = useState(''); const [platforms, setPlatforms] = useState({}); + const [title, setTitle] = useState(''); const [selectedPlatforms, setSelectedPlatforms] = useState>( new Set() @@ -126,10 +130,9 @@ export default function PostDialog({
- {Object.entries(platforms).map(([name, platform]) => ( - +
+ + +
))}
+
+ + setTitle(e.target.value)} + /> +