import type { ChangeEventHandler, FC } from 'react'; import { useCallback, useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { CharacterCounter } from '@/mastodon/components/character_counter'; import { Details } from '@/mastodon/components/details'; import { TextAreaField } from '@/mastodon/components/form_fields'; import { LoadingIndicator } from '@/mastodon/components/loading_indicator'; import { patchProfile } from '@/mastodon/reducers/slices/profile_edit'; import type { ImageLocation } from '@/mastodon/reducers/slices/profile_edit'; import { useAppDispatch, useAppSelector } from '@/mastodon/store'; import { ConfirmationModal } from '../../ui/components/confirmation_modals'; import type { DialogModalProps } from '../../ui/components/dialog_modal'; import classes from './styles.module.scss'; export const ImageAltModal: FC< DialogModalProps & { location: ImageLocation } > = ({ onClose, location }) => { const { profile, isPending } = useAppSelector((state) => state.profileEdit); const initialAlt = profile?.[`${location}Description`]; const imageSrc = profile?.[`${location}Static`]; const [altText, setAltText] = useState(initialAlt ?? ''); const dispatch = useAppDispatch(); const handleSave = useCallback(() => { void dispatch( patchProfile({ [`${location}_description`]: altText, }), ).then(onClose); }, [altText, dispatch, location, onClose]); if (!imageSrc) { return ; } return ( ) : ( ) } onClose={onClose} onConfirm={handleSave} confirm={ } updating={isPending} >
); }; export const ImageAltTextField: FC<{ imageSrc: string; altText: string; onChange: (altText: string) => void; }> = ({ imageSrc, altText, onChange }) => { const altLimit = useAppSelector( (state) => state.server.getIn( ['server', 'configuration', 'media_attachments', 'description_limit'], 150, ) as number, ); const handleChange: ChangeEventHandler = useCallback( (event) => { onChange(event.currentTarget.value); }, [onChange], ); return ( <>
} hint={ } onChange={handleChange} value={altText} />
} className={classes.altHint} >
    {chunks}
, li: (chunks) =>
  • {chunks}
  • , }} tagName='div' />
    ); };