import { useEffect, useState, useCallback } from 'react'; import { FormattedMessage, useIntl, defineMessages } from 'react-intl'; import { isFulfilled } from '@reduxjs/toolkit'; import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import AntennaIcon from '@/material-icons/400-24px/wifi.svg?react'; import { fetchAntennas } from 'mastodon/actions/antennas'; import { createAntenna } from 'mastodon/actions/antennas_typed'; import { apiGetAccountAntennas, apiAddAccountToAntenna, apiAddExcludeAccountToAntenna, apiRemoveAccountFromAntenna, apiRemoveExcludeAccountFromAntenna, } from 'mastodon/api/antennas'; import type { ApiAntennaJSON } from 'mastodon/api_types/antennas'; import { Button } from 'mastodon/components/button'; import { CheckBox } from 'mastodon/components/check_box'; import { Icon } from 'mastodon/components/icon'; import { IconButton } from 'mastodon/components/icon_button'; import { getOrderedAntennas } from 'mastodon/selectors/antennas'; import { useAppDispatch, useAppSelector } from 'mastodon/store'; const messages = defineMessages({ newAntenna: { id: 'antennas.new_antenna_name', defaultMessage: 'New antenna name', }, createAntenna: { id: 'antennas.create', defaultMessage: 'Create', }, close: { id: 'lightbox.close', defaultMessage: 'Close', }, }); const AntennaItem: React.FC<{ id: string; title: string; checked: boolean; onChange: (id: string, checked: boolean) => void; }> = ({ id, title, checked, onChange }) => { const handleChange = useCallback( (e: React.ChangeEvent) => { onChange(id, e.target.checked); }, [id, onChange], ); return ( // eslint-disable-next-line jsx-a11y/label-has-associated-control ); }; const NewAntennaItem: React.FC<{ onCreate: (antenna: ApiAntennaJSON) => void; }> = ({ onCreate }) => { const intl = useIntl(); const dispatch = useAppDispatch(); const [title, setTitle] = useState(''); const handleChange = useCallback( ({ target: { value } }: React.ChangeEvent) => { setTitle(value); }, [setTitle], ); const handleSubmit = useCallback(() => { if (title.trim().length === 0) { return; } void dispatch(createAntenna({ title })).then((result) => { if (isFulfilled(result)) { onCreate(result.payload); setTitle(''); } return ''; }); }, [setTitle, dispatch, onCreate, title]); return (