/** * Orphan Concept Component * Renders a list of orphan concepts for a given schema. * @todo consider modularizing add and remove buttons */ import {useCallback, useContext, useState} from 'react' import {Box, Inline, Stack, Text, Tooltip} from '@sanity/ui' import {AddCircleIcon, SquareIcon, ToggleArrowRightIcon, TrashIcon} from '@sanity/icons' import {useCreateConcept, useRemoveConcept} from '../hooks' import {ChildConceptTerm} from '../types' import {StyledOrphan, StyledTreeButton, StyledTreeToggle} from '../styles' import {SchemeContext} from './TreeView' import {ChildConcepts} from './ChildConcepts' import {ConceptDetailLink} from './ConceptDetailLink' import {ConceptDetailDialogue} from './ConceptDetailDialogue' type OrphanProps = { concept: ChildConceptTerm treeVisibility: string } export const Orphans = ({concept, treeVisibility}: OrphanProps) => { const document: any = useContext(SchemeContext) || {} const createConcept = useCreateConcept(document) const removeConcept = useRemoveConcept(document) const [levelVisibility, setLevelVisibility] = useState(treeVisibility) const handleToggle = useCallback(() => { if (levelVisibility == 'open') { setLevelVisibility('closed') } else if (levelVisibility == 'closed') { setLevelVisibility('open') } }, [levelVisibility]) const handleAddChild = useCallback(() => { createConcept('concept', concept?.id, concept?.prefLabel.en) }, [concept?.id, concept?.prefLabel, createConcept]) const handleRemoveConcept = useCallback(() => { removeConcept(concept.id, 'concept', concept?.prefLabel.en) }, [concept.id, concept?.prefLabel, removeConcept]) return ( {concept?.childConcepts && concept.childConcepts.length > 0 && ( )} {concept?.childConcepts && concept.childConcepts.length == 0 && ( )} {!concept?.prefLabel && [new concept]} {document.displayed?.topConcepts?.length > 0 && ( orphan )} {!document.displayed?.controls && } {document.displayed?.controls && ( Add a child concept } fallbackPlacements={['right', 'left']} placement="top" > Remove concept from scheme } fallbackPlacements={['right', 'left']} placement="top" > )} {concept?.childConcepts && concept.childConcepts.length > 0 && ( )} ) }