import {cn} from '@/lib/utils' import {useGlobalContext} from '@/term-merger/context' import {ActionType} from '@/term-merger/reducer' import type {Group, GroupId, Term} from '@/types' import {__} from '@wordpress/i18n' import {useState} from 'react' type Props = { group: Group } export default function Group(props: Props) { const { state: { terms, }, } = useGlobalContext() const {group} = props return (
) } type GroupHeaderProps = Props & { hovered?: boolean, } const GroupHeader = (props: GroupHeaderProps) => { const {dispatch} = useGlobalContext() const { group: { id, isEdited, isRenaming, title, }, } = props return (

{!isRenaming && title} {isRenaming && ( <> { if (e.key === 'Enter') { const title = (e.target as HTMLInputElement).value.trim() dispatch({ type: ActionType.SET_GROUP, payload: { id, isRenaming: false, title, }, }) } }} onChange={(e) => { const value = e.target.value as string dispatch({ type: ActionType.SET_GROUP, payload: { id: id, title: value, }, }) }} type="text" value={title} /> )}

{/* Upper tool area */}
{__('ID', 'swpmu-term-merger')}: {id}
{ const target = e.target as HTMLAnchorElement e.preventDefault() dispatch({ type: ActionType.SET_GROUP, payload: { id: id, isRenaming: !isRenaming, }, }) target.blur() }} title={'Rename the title of this group'} > {!isRenaming && __('Rename', 'swpmu-term-merger')} {!isRenaming || __('Done', 'swpmu-term-merger')} {' '}|{' '} { const target = e.target as HTMLAnchorElement e.preventDefault() if (isEdited && !confirm('Are you sure you want to remove this group?')) { target.blur() return false } dispatch({ type: ActionType.REMOVE_GROUP, payload: id, }) target.blur() }} title={'Remove this group'} > {__('Remove', 'swpmu-term-merger')}
) } const GroupItem = ({group, term}: { group: Group; term: Term }) => { const { dispatch, state: { groups, groupOrders, }, } = useGlobalContext() const [isReassigning, setIsReassigning] = useState(false), [reAssignedGroupId, setReAssignedGroupId] = useState(0) return (

{term.name}

{groups.size > 1 && ( <> { const target = e.target as HTMLAnchorElement e.preventDefault() setIsReassigning(!isReassigning) target.blur() }} title={'Move to another group'} > {isReassigning ? __('Cancel', 'swpmu-term-merger') : __('Re-assign', 'swpmu-term-merger')} {' '}|{' '} )} { const target = e.target as HTMLAnchorElement e.preventDefault() dispatch({ type: ActionType.SET_GROUP, payload: { id: group.id, terms: group.terms.filter((termId) => termId !== term.term_id), }, }) target.blur() }} title={__('Remove this term from the group', 'swpmu-term-merger')} > {__('Remove', 'swpmu-term-merger')}

{isReassigning && (
)}
) } const GroupFooter = (props: Props) => { const {dispatch} = useGlobalContext() const {group} = props return group.terms.length > 1 && (

) }