'use client' import React, { PropsWithChildren, useEffect, useState } from 'react' import { getCookie } from 'cookies-next' import { useTranslations } from 'next-intl' import classNames from 'classnames' import capitalizeFirstLetter from '~utils/capitalizeFirstLetter' import * as RadioGroup from '@radix-ui/react-radio-group' import Button from '~components/common/Button' import { Popover, PopoverTrigger, PopoverContent, } from '~components/common/PopoverContent' import JobAccessoryItem from '~components/job/JobAccessoryItem' import styles from './index.module.scss' interface Props { buttonref: React.RefObject currentAccessory?: JobAccessory accessories: JobAccessory[] editable: boolean open: boolean job: Job onAccessorySelected: (value: string) => void onOpenChange: (open: boolean) => void } const JobAccessoryPopover = ({ buttonref, currentAccessory, accessories, editable, open: modalOpen, children, job, onAccessorySelected, onOpenChange, }: PropsWithChildren) => { // Localization const t = useTranslations('common') const locale = (getCookie('NEXT_LOCALE') as string) || 'en' // Component state const [open, setOpen] = useState(false) const classes = classNames({ jobAccessory: true, readOnly: !editable, }) // Hooks useEffect(() => { setOpen(modalOpen) }, [modalOpen]) // Event handlers function handleAccessorySelected(value: string) { onAccessorySelected(value) closePopover() } function handlePointerDownOutside( event: CustomEvent<{ originalEvent: PointerEvent }> ) { const target = event.detail.originalEvent.target as Element if ( target && buttonref.current && target.closest('.JobAccessory.Button') !== buttonref.current ) { onOpenChange(false) } } function closePopover() { onOpenChange(false) } const radioGroup = ( <>

{capitalizeFirstLetter( job.accessory_type === 1 ? `${t('accessories.paladin')}s` : t('accessories.manadiver') )}

{accessories.map((accessory) => ( ))} ) const readOnly = currentAccessory ? (

{t('equipped')}{' '} {job.accessory_type === 1 ? `${t('accessories.paladin')}s` : t('accessories.manadiver')}

{currentAccessory.name[locale]}

{currentAccessory.name[locale]}

) : (

{t('no_accessory', { accessory: t( `accessories.${job.accessory_type === 1 ? 'paladin' : 'manadiver'}` ), })}

) return ( {children} {editable ? radioGroup : readOnly} ) } export default JobAccessoryPopover