import { useCallback, useState, useEffect } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { Helmet } from 'react-helmet'; import { useParams, useHistory, Link } from 'react-router-dom'; import { isFulfilled } from '@reduxjs/toolkit'; import Toggle from 'react-toggle'; import AntennaIcon from '@/material-icons/400-24px/wifi.svg?react'; import { fetchAntenna } from 'mastodon/actions/antennas'; import { createAntenna, updateAntenna } from 'mastodon/actions/antennas_typed'; import { fetchLists } from 'mastodon/actions/lists'; import Column from 'mastodon/components/column'; import { ColumnHeader } from 'mastodon/components/column_header'; import { LoadingIndicator } from 'mastodon/components/loading_indicator'; import { useAppDispatch, useAppSelector } from 'mastodon/store'; const messages = defineMessages({ edit: { id: 'column.edit_antenna', defaultMessage: 'Edit antenna' }, create: { id: 'column.create_antenna', defaultMessage: 'Create antenna' }, }); const FiltersLink: React.FC<{ id: string; }> = ({ id }) => { return (
); }; const NewAntenna: React.FC<{ multiColumn?: boolean; }> = ({ multiColumn }) => { const dispatch = useAppDispatch(); const { id } = useParams<{ id?: string }>(); const intl = useIntl(); const history = useHistory(); const antenna = useAppSelector((state) => id ? state.antennas.get(id) : undefined, ); const lists = useAppSelector((state) => state.lists); const [title, setTitle] = useState(''); const [stl, setStl] = useState(false); const [ltl, setLtl] = useState(false); const [insertFeeds, setInsertFeeds] = useState(false); const [listId, setListId] = useState(''); const [withMediaOnly, setWithMediaOnly] = useState(false); const [ignoreReblog, setIgnoreReblog] = useState(false); const [submitting, setSubmitting] = useState(false); useEffect(() => { if (id) { dispatch(fetchAntenna(id)); dispatch(fetchLists()); } }, [dispatch, id]); useEffect(() => { if (id && antenna) { setTitle(antenna.title); setStl(antenna.stl); setLtl(antenna.ltl); setInsertFeeds(antenna.insert_feeds); setListId(antenna.list?.id ?? ''); setWithMediaOnly(antenna.with_media_only); setIgnoreReblog(antenna.ignore_reblog); } }, [ setTitle, setStl, setLtl, setInsertFeeds, setListId, setWithMediaOnly, setIgnoreReblog, id, antenna, lists, ]); const handleTitleChange = useCallback( ({ target: { value } }: React.ChangeEvent) => { setTitle(value); }, [setTitle], ); /* const handleStlChange = useCallback( ({ target: { checked } }: React.ChangeEvent) => { setStl(checked); }, [setStl], ); const handleLtlChange = useCallback( ({ target: { checked } }: React.ChangeEvent) => { setLtl(checked); }, [setLtl], ); */ const handleInsertFeedsChange = useCallback( ({ target: { checked } }: React.ChangeEvent) => { setInsertFeeds(checked); }, [setInsertFeeds], ); const handleListIdChange = useCallback( ({ target: { value } }: React.ChangeEvent) => { setListId(value); }, [setListId], ); /* const handleWithMediaOnlyChange = useCallback( ({ target: { checked } }: React.ChangeEvent) => { setWithMediaOnly(checked); }, [setWithMediaOnly], ); const handleIgnoreReblogChange = useCallback( ({ target: { checked } }: React.ChangeEvent) => { setIgnoreReblog(checked); }, [setIgnoreReblog], ); */ const handleSubmit = useCallback(() => { setSubmitting(true); if (id) { void dispatch( updateAntenna({ id, title, stl, ltl, insert_feeds: insertFeeds, list_id: listId, with_media_only: withMediaOnly, ignore_reblog: ignoreReblog, }), ).then(() => { setSubmitting(false); return ''; }); } else { void dispatch( createAntenna({ title, stl, ltl, insert_feeds: insertFeeds, list_id: listId, with_media_only: withMediaOnly, ignore_reblog: ignoreReblog, }), ).then((result) => { setSubmitting(false); if (isFulfilled(result)) { history.replace(`/antennas/${result.payload.id}/edit`); history.push(`/antennas/${result.payload.id}/members`); } return ''; }); } }, [ history, dispatch, setSubmitting, id, title, stl, ltl, insertFeeds, listId, withMediaOnly, ignoreReblog, ]); return (
{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}
{id && (
)}
{intl.formatMessage(id ? messages.edit : messages.create)}
); }; // eslint-disable-next-line import/no-default-export export default NewAntenna;