import React, { useEffect, useState } from 'react' import api from '~utils/api' import './index.scss' // Props interface Props { currentValue?: WeaponKey series: number slot: number onChange?: (event: React.ChangeEvent) => void onBlur?: (event: React.ChangeEvent) => void } const WeaponKeyDropdown = React.forwardRef( function useFieldSet(props, ref) { const [keys, setKeys] = useState([]) const [currentKey, setCurrentKey] = useState('') const pendulumNames = [ { en: 'Pendulum', jp: '' }, { en: 'Chain', jp: '' }, ] const telumaNames = [{ en: 'Teluma', jp: '' }] const emblemNames = [{ en: 'Emblem', jp: '' }] const gauphNames = [ { en: 'Gauph Key', jp: '' }, { en: 'Ultima Key', jp: '' }, { en: 'Gate of Omnipotence', jp: '' }, ] useEffect(() => { if (props.currentValue) setCurrentKey(props.currentValue.id) }, [props.currentValue]) useEffect(() => { const filterParams = { params: { series: props.series, slot: props.slot, }, } function organizeWeaponKeys(weaponKeys: WeaponKey[]) { const numGroups = Math.max.apply( Math, weaponKeys.map((key) => key.group) ) let groupedKeys = [] for (let i = 0; i <= numGroups; i++) { groupedKeys[i] = weaponKeys.filter((key) => key.group == i) } setKeys(groupedKeys) } function fetchWeaponKeys() { api.endpoints.weapon_keys.getAll(filterParams).then((response) => { const keys = response.data.map((k: any) => k.weapon_key) organizeWeaponKeys(keys) }) } fetchWeaponKeys() }, [props.series, props.slot]) function weaponKeyGroup(index: number) { ;['α', 'β', 'γ', 'Δ'].sort((a, b) => a.localeCompare(b, 'el')) const sortByOrder = (a: WeaponKey, b: WeaponKey) => a.order > b.order ? 1 : -1 const options = keys && keys.length > 0 && keys[index].length > 0 && keys[index].sort(sortByOrder).map((item, i) => { return ( ) }) let name: { [key: string]: string } = {} if (props.series == 2 && index == 0) name = pendulumNames[0] else if (props.series == 2 && props.slot == 1 && index == 1) name = pendulumNames[1] else if (props.series == 3) name = telumaNames[index] else if (props.series == 17) name = gauphNames[props.slot] else if (props.series == 22) name = emblemNames[index] return ( {options} ) } function handleChange(event: React.ChangeEvent) { if (props.onChange) props.onChange(event) setCurrentKey(event.currentTarget.value) } const emptyOption = () => { let name = '' if (props.series == 2) name = pendulumNames[0].en else if (props.series == 3) name = telumaNames[0].en else if (props.series == 17) name = gauphNames[props.slot].en else if (props.series == 22) name = emblemNames[0].en return `No ${name}` } return ( ) } ) export default WeaponKeyDropdown