import { useCallback, useState } from 'react' import { Label } from '../../../lib/networking/fragments/labelFragment' import { showErrorToast, showSuccessToast } from '../../../lib/toastHelpers' import { SpanBox, VStack } from '../../elements/LayoutPrimitives' import { ModalRoot, ModalOverlay, ModalContent, ModalTitleBar, } from '../../elements/ModalPrimitives' import { LabelsProvider, SetLabelsControl } from './SetLabelsControl' type SetLabelsModalProps = { provider: LabelsProvider onOpenChange: (open: boolean) => void onLabelsChanged: (labels: Label[]) => void save: (labels: Label[]) => Promise } export function SetLabelsModal(props: SetLabelsModalProps): JSX.Element { const [selectedLabels, setSelectedLabels] = useState(props.provider.labels) const onOpenChange = useCallback( async (open: boolean) => { console.log('SetLabelsModal::onOpenChange: ', open, selectedLabels) if (selectedLabels) { const result = await props.save(selectedLabels) console.log('SetLabelsModal::onOpenChange: ', result) if (result) { props.onLabelsChanged(result) } else { showErrorToast('Error updating labels') } } else { console.log('SetLabelsModal::onOpenChange: no selectedLabels') } props.onOpenChange(open) }, [props.onOpenChange] ) const handleSave = useCallback( (labels: Label[]) => { setSelectedLabels(labels) return Promise.resolve(labels) }, [selectedLabels, setSelectedLabels] ) return ( { event.preventDefault() onOpenChange(false) }} > ) }