import React, { useState } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { closeModal } from 'soapbox/actions/modals'; import { useAnnouncements } from 'soapbox/api/hooks/admin/useAnnouncements'; import { Form, FormGroup, HStack, Modal, Stack, Text, Textarea, Toggle } from 'soapbox/components/ui'; import { DatePicker } from 'soapbox/features/ui/util/async-components'; import { useAppDispatch } from 'soapbox/hooks'; import toast from 'soapbox/toast'; import type { AdminAnnouncement } from 'soapbox/schemas'; const messages = defineMessages({ save: { id: 'admin.edit_announcement.save', defaultMessage: 'Save' }, announcementContentPlaceholder: { id: 'admin.edit_announcement.fields.content_placeholder', defaultMessage: 'Announcement content' }, announcementStartTimePlaceholder: { id: 'admin.edit_announcement.fields.start_time_placeholder', defaultMessage: 'Announcement starts on:' }, announcementEndTimePlaceholder: { id: 'admin.edit_announcement.fields.end_time_placeholder', defaultMessage: 'Announcement ends on:' }, announcementCreateSuccess: { id: 'admin.edit_announcement.created', defaultMessage: 'Announcement created' }, announcementUpdateSuccess: { id: 'admin.edit_announcement.updated', defaultMessage: 'Announcement edited' }, }); interface IEditAnnouncementModal { onClose: (type?: string) => void; announcement?: AdminAnnouncement; } const EditAnnouncementModal: React.FC = ({ onClose, announcement }) => { const dispatch = useAppDispatch(); const { createAnnouncement, updateAnnouncement } = useAnnouncements(); const intl = useIntl(); const [content, setContent] = useState(announcement?.content || ''); const [startTime, setStartTime] = useState(announcement?.starts_at ? new Date(announcement.starts_at) : null); const [endTime, setEndTime] = useState(announcement?.ends_at ? new Date(announcement.ends_at) : null); const [allDay, setAllDay] = useState(announcement?.all_day || false); const onChangeContent: React.ChangeEventHandler = ({ target }) => setContent(target.value); const onChangeStartTime = (date: Date | null) => setStartTime(date); const onChangeEndTime = (date: Date | null) => setEndTime(date); const onChangeAllDay: React.ChangeEventHandler = ({ target }) => setAllDay(target.checked); const onClickClose = () => { onClose('EDIT_ANNOUNCEMENT'); }; const handleSubmit = () => { const form = { content, starts_at: startTime?.toISOString() || null, ends_at: endTime?.toISOString() || null, all_day: allDay, }; if (announcement) { updateAnnouncement({ ...form, id: announcement.id }, { onSuccess: () => { dispatch(closeModal('EDIT_ANNOUNCEMENT')); toast.success(messages.announcementUpdateSuccess); }, }); } else { createAnnouncement(form, { onSuccess: () => { dispatch(closeModal('EDIT_ANNOUNCEMENT')); toast.success(messages.announcementCreateSuccess); }, }); } }; return ( : } confirmationAction={handleSubmit} confirmationText={intl.formatMessage(messages.save)} >
} >