'use client' // Core dependencies import React, { useEffect, useState } from 'react' import { getCookie } from 'cookies-next' import { useTranslations } from 'next-intl' import classNames from 'classnames' // UI Dependencies import Select from '~components/common/Select' import SelectItem from '~components/common/SelectItem' // Styles and icons import styles from './index.module.scss' // Types interface Props { name: string object: 'ring' dataSet: ItemSkill[] leftSelectValue: number leftSelectDisabled: boolean rightSelectValue: number sendValues: (left: number, right: number) => void } const defaultProps = { selectDisabled: false, } const ExtendedMasterySelect = ({ name, object, dataSet, leftSelectDisabled, leftSelectValue, rightSelectValue, sendValues, }: Props) => { const locale = (getCookie('NEXT_LOCALE') as string) || 'en' const t = useTranslations('common') // UI state const [leftSelectOpen, setLeftSelectOpen] = useState(false) const [rightSelectOpen, setRightSelectOpen] = useState(false) // Field properties // prettier-ignore const [currentItemSkill, setCurrentItemSkill] = useState(undefined) const [currentItemValue, setCurrentItemValue] = useState(rightSelectValue) // Hooks // if (currentItemSkill) sendValues(currentItemSkill.id, currentItemValue) // Set default values from props useEffect(() => { setCurrentItemSkill(dataSet.find((sk) => sk.id === leftSelectValue)) setCurrentItemValue(rightSelectValue) }, [leftSelectValue, rightSelectValue]) // Methods: UI state management function changeOpen(side: 'left' | 'right') { if (side === 'left' && !leftSelectDisabled) { setLeftSelectOpen(!leftSelectOpen) } else if (side === 'right') { setRightSelectOpen(!rightSelectOpen) } } function onClose() { setLeftSelectOpen(false) setRightSelectOpen(false) } // Methods: Rendering function generateLeftOptions() { let options: React.ReactNode[] = dataSet.map((skill, i) => { return ( {skill.name[locale]} ) }) return options } function generateRightOptions() { if (currentItemSkill && currentItemSkill.values) { let options = currentItemSkill.values.map((value, i) => { return ( {value} {currentItemSkill.suffix ? currentItemSkill.suffix : ''} ) }) options.unshift( {t('no_value')} ) return options } } // Methods: User input detection function handleLeftSelectChange(rawValue: string) { const value = parseInt(rawValue) const skill = dataSet.find((sk) => sk.id === value) setCurrentItemSkill(skill) setCurrentItemValue(0) if (skill) sendValues(skill.id, 0) } function handleRightSelectChange(rawValue: string) { const value = parseFloat(rawValue) setCurrentItemValue(value) if (currentItemSkill) sendValues(currentItemSkill.id, value) } return (
) } ExtendedMasterySelect.defaultProps = defaultProps export default ExtendedMasterySelect