import React, { useState, useEffect } from 'react';
import { Head, useForm } from '@inertiajs/react';
import EmployerLayout from '../../Layouts/EmployerLayout';
import { useTranslation } from '../../lib/LanguageContext';
import {
Megaphone,
Send,
CheckCircle2,
Users,
Search,
Calendar,
Target,
Filter,
ChevronRight,
MessageSquare,
Info,
Heart,
MapPin,
Clock,
Sparkles,
BellRing,
ChevronDown,
ChevronUp,
Gift,
Plus,
User
} from 'lucide-react';
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
DialogTrigger,
DialogFooter
} from '@/components/ui/dialog';
const hoursList = [
'12:00', '12:30', '01:00', '01:30', '02:00', '02:30',
'03:00', '03:30', '04:00', '04:30', '05:00', '05:30',
'06:00', '06:30', '07:00', '07:30', '08:00', '08:30',
'09:00', '09:30', '10:00', '10:30', '11:00', '11:30'
];
export default function Announcements({ initialAnnouncements }) {
const { t } = useTranslation();
const [isDialogOpen, setIsDialogOpen] = useState(false);
const [selectedAnnouncement, setSelectedAnnouncement] = useState(null);
const [searchTerm, setSearchTerm] = useState('');
const [toastMessage, setToastMessage] = useState(null);
const [toastSub, setToastSub] = useState(null);
const [announcements, setAnnouncements] = useState(initialAnnouncements || []);
// Time picker states
const [startTimeHour, setStartTimeHour] = useState('09:00');
const [startTimeAmpm, setStartTimeAmpm] = useState('AM');
const [endTimeHour, setEndTimeHour] = useState('04:00');
const [endTimeAmpm, setEndTimeAmpm] = useState('PM');
const [isStartPickerOpen, setIsStartPickerOpen] = useState(false);
const [isEndPickerOpen, setIsEndPickerOpen] = useState(false);
const [expandedCards, setExpandedCards] = useState({});
const [statusFilter, setStatusFilter] = useState('All');
useEffect(() => {
setAnnouncements(initialAnnouncements || []);
}, [initialAnnouncements]);
const { data: newAnnouncement, setData: setNewAnnouncement, post, processing, reset } = useForm({
title: '',
content: '',
audience: 'Charity',
type: 'Charity',
provided_items: '',
event_date: '',
event_time: '09:00 AM - 04:00 PM',
location_details: '',
location_pin: '',
contact_person_name: '',
contact_number: '',
country_code: '+971'
});
const updateEventTime = (sh, sa, eh, ea) => {
setNewAnnouncement({
...newAnnouncement,
event_time: `${sh} ${sa} - ${eh} ${ea}`
});
};
const toggleExpand = (id) => {
setExpandedCards(prev => ({
...prev,
[id]: !prev[id]
}));
};
const showToast = (message, subMessage = null) => {
setToastMessage(message);
setToastSub(subMessage);
setTimeout(() => {
setToastMessage(null);
setToastSub(null);
}, 5000);
};
const handleCreate = (e) => {
e.preventDefault();
post('/employer/events/create', {
preserveScroll: true,
onSuccess: () => {
reset();
setStartTimeHour('09:00');
setStartTimeAmpm('AM');
setEndTimeHour('04:00');
setEndTimeAmpm('PM');
setIsDialogOpen(false);
showToast(
t('community_charity_event_posted', 'COMMUNITY CHARITY EVENT POSTED!'),
t('community_charity_event_posted_desc', 'Instant Push Notification sent to all workers! Morning-of reminder notification scheduled successfully.')
);
}
});
};
const filteredAnnouncements = announcements.filter(ann => {
const matchesSearch =
ann.title.toLowerCase().includes(searchTerm.toLowerCase()) ||
ann.content.toLowerCase().includes(searchTerm.toLowerCase());
const matchesStatus = statusFilter === 'All' || ann.status.toLowerCase() === statusFilter.toLowerCase();
return matchesSearch && matchesStatus;
});
return (
{toastSub}
}{t('free_medical_checks_desc', 'Organizing a support program? Share community campaigns directly. The platform will automatically push an instant pop-up notification to workers, followed by a morning-of event reminder to keep attendance strong.')}