'use client'; import Note from '@/components/Note'; import LoaderButton from '@/components/primitives/LoaderButton'; import AppGrid from '@/components/AppGrid'; import { useAppState } from '@/state/AppState'; import { clsx } from 'clsx/lite'; import { IoCloseSharp } from 'react-icons/io5'; import { useState } from 'react'; import { TAG_FAVS, Tags } from '@/tag'; import { usePathname } from 'next/navigation'; import { PATH_GRID_INFERRED } from '@/app/paths'; import PhotoTagFieldset from './PhotoTagFieldset'; import { tagMultiplePhotosAction } from '@/photo/actions'; import { toastSuccess } from '@/toast'; import DeletePhotosButton from './DeletePhotosButton'; import { photoQuantityText } from '@/photo'; import { FaArrowDown, FaCheck } from 'react-icons/fa6'; import ResponsiveText from '@/components/primitives/ResponsiveText'; import IconFavs from '@/components/icons/IconFavs'; import IconTag from '@/components/icons/IconTag'; export default function AdminBatchEditPanelClient({ uniqueTags, }: { uniqueTags: Tags }) { const pathname = usePathname(); const { isUserSignedIn, selectedPhotoIds, setSelectedPhotoIds, isPerformingSelectEdit, setIsPerformingSelectEdit, } = useAppState(); const [tags, setTags] = useState(); const [tagErrorMessage, setTagErrorMessage] = useState(''); const isInTagMode = tags !== undefined; const resetForm = () => { setSelectedPhotoIds?.(undefined); setTags(undefined); setTagErrorMessage(''); }; const photosText = photoQuantityText( selectedPhotoIds?.length ?? 0, false, false, ); const isFormDisabled = isPerformingSelectEdit || selectedPhotoIds?.length === 0; const renderPhotoCTA = selectedPhotoIds?.length === 0 ? <> Select photos below : {photosText} selected ; const renderActions = isInTagMode ? <> } onClick={() => { setTags(undefined); setTagErrorMessage(''); }} disabled={isPerformingSelectEdit} > Cancel } // eslint-disable-next-line max-len confirmText={`Are you sure you want to apply tags to ${photosText}? This action cannot be undone.`} onClick={() => { setIsPerformingSelectEdit?.(true); tagMultiplePhotosAction( tags, selectedPhotoIds ?? [], ) .then(() => { toastSuccess(`${photosText} tagged`); resetForm(); }) .finally(() => setIsPerformingSelectEdit?.(false)); }} disabled={ !tags || Boolean(tagErrorMessage) || (selectedPhotoIds?.length ?? 0) === 0 || isPerformingSelectEdit } primary > Apply Tags : <> setIsPerformingSelectEdit?.(true)} onDelete={resetForm} onFinish={() => setIsPerformingSelectEdit?.(false)} /> } disabled={isFormDisabled} confirmText={`Are you sure you want to favorite ${photosText}?`} onClick={() => { setIsPerformingSelectEdit?.(true); tagMultiplePhotosAction( TAG_FAVS, selectedPhotoIds ?? [], ) .then(() => { toastSuccess(`${photosText} favorited`); resetForm(); }) .finally(() => setIsPerformingSelectEdit?.(false)); }} /> setTags('')} disabled={isFormDisabled} icon={} > Tag ... } onClick={() => setSelectedPhotoIds?.(undefined)} /> ; return ( isUserSignedIn && pathname === PATH_GRID_INFERRED && selectedPhotoIds !== undefined ) ? content spacing '[&>*>*:first-child]:gap-1.5 sm:[&>*>*:first-child]:gap-2.5', )} padding={isInTagMode ? 'tight-cta-right-left' : 'tight-cta-right'} cta={
{renderActions}
} spaceChildren={false} hideIcon > {isInTagMode ? :
{renderPhotoCTA}
}
{tagErrorMessage &&
{tagErrorMessage}
} } /> : null; }