From f1397ce8475e7e2e7507cfc9890454d090ca423d Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Thu, 3 Mar 2022 20:45:34 -0800 Subject: [PATCH] Make WeaponKeyDropdown controlled I don't have time to waste figuring out state bullshit and this works --- components/WeaponKeyDropdown/index.tsx | 62 ++++++++++++-------------- components/WeaponModal/index.tsx | 2 +- 2 files changed, 29 insertions(+), 35 deletions(-) diff --git a/components/WeaponKeyDropdown/index.tsx b/components/WeaponKeyDropdown/index.tsx index e3cfa3d1..e9b15412 100644 --- a/components/WeaponKeyDropdown/index.tsx +++ b/components/WeaponKeyDropdown/index.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect, useState } from 'react' +import React, { useEffect, useState } from 'react' import api from '~utils/api' @@ -15,6 +15,7 @@ interface Props { const WeaponKeyDropdown = React.forwardRef(function useFieldSet(props, ref) { const [keys, setKeys] = useState([]) + const [currentKey, setCurrentKey] = useState('') const pendulumNames = [ { en: 'Pendulum', jp: '' }, @@ -29,34 +30,10 @@ const WeaponKeyDropdown = React.forwardRef(function us { en: 'Gate of Omnipotence', jp: '' } ] - const keyName = () => { - return { - en: '', - jp: '' - } - } - - const emptyKey: WeaponKey = { - id: '0', - name: { - en: `No ${keyName().en}`, - jp: `${keyName().jp}なし` - }, - series: props.series, - slot: props.slot, - group: -1, - order: 0 - } - - const organizeWeaponKeys = useCallback((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) - }, []) + useEffect(() => { + if (props.currentValue) + setCurrentKey(props.currentValue.id) + }, [props.currentValue]) useEffect(() => { const filterParams = { @@ -66,6 +43,16 @@ const WeaponKeyDropdown = React.forwardRef(function us } } + 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) => { @@ -75,7 +62,7 @@ const WeaponKeyDropdown = React.forwardRef(function us } fetchWeaponKeys() - }, [props.series, props.slot, organizeWeaponKeys]) + }, [props.series, props.slot]) function weaponKeyGroup(index: number) { ['α','β','γ','Δ'].sort((a, b) => a.localeCompare(b, 'el')) @@ -108,6 +95,13 @@ const WeaponKeyDropdown = React.forwardRef(function us ) } + function handleChange(event: React.ChangeEvent) { + if (props.onChange) + props.onChange(event) + + setCurrentKey(event.currentTarget.value) + } + const emptyOption = () => { let name = '' if (props.series == 2) @@ -124,12 +118,12 @@ const WeaponKeyDropdown = React.forwardRef(function us return (