Make WeaponKeyDropdown controlled
I don't have time to waste figuring out state bullshit and this works
This commit is contained in:
parent
5899e82cdc
commit
f1397ce847
2 changed files with 29 additions and 35 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useCallback, useEffect, useState } from 'react'
|
import React, { useEffect, useState } from 'react'
|
||||||
|
|
||||||
import api from '~utils/api'
|
import api from '~utils/api'
|
||||||
|
|
||||||
|
|
@ -15,6 +15,7 @@ interface Props {
|
||||||
|
|
||||||
const WeaponKeyDropdown = React.forwardRef<HTMLSelectElement, Props>(function useFieldSet(props, ref) {
|
const WeaponKeyDropdown = React.forwardRef<HTMLSelectElement, Props>(function useFieldSet(props, ref) {
|
||||||
const [keys, setKeys] = useState<WeaponKey[][]>([])
|
const [keys, setKeys] = useState<WeaponKey[][]>([])
|
||||||
|
const [currentKey, setCurrentKey] = useState('')
|
||||||
|
|
||||||
const pendulumNames = [
|
const pendulumNames = [
|
||||||
{ en: 'Pendulum', jp: '' },
|
{ en: 'Pendulum', jp: '' },
|
||||||
|
|
@ -29,34 +30,10 @@ const WeaponKeyDropdown = React.forwardRef<HTMLSelectElement, Props>(function us
|
||||||
{ en: 'Gate of Omnipotence', jp: '' }
|
{ en: 'Gate of Omnipotence', jp: '' }
|
||||||
]
|
]
|
||||||
|
|
||||||
const keyName = () => {
|
useEffect(() => {
|
||||||
return {
|
if (props.currentValue)
|
||||||
en: '',
|
setCurrentKey(props.currentValue.id)
|
||||||
jp: ''
|
}, [props.currentValue])
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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(() => {
|
useEffect(() => {
|
||||||
const filterParams = {
|
const filterParams = {
|
||||||
|
|
@ -66,6 +43,16 @@ const WeaponKeyDropdown = React.forwardRef<HTMLSelectElement, Props>(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() {
|
function fetchWeaponKeys() {
|
||||||
api.endpoints.weapon_keys.getAll(filterParams)
|
api.endpoints.weapon_keys.getAll(filterParams)
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
|
|
@ -75,7 +62,7 @@ const WeaponKeyDropdown = React.forwardRef<HTMLSelectElement, Props>(function us
|
||||||
}
|
}
|
||||||
|
|
||||||
fetchWeaponKeys()
|
fetchWeaponKeys()
|
||||||
}, [props.series, props.slot, organizeWeaponKeys])
|
}, [props.series, props.slot])
|
||||||
|
|
||||||
function weaponKeyGroup(index: number) {
|
function weaponKeyGroup(index: number) {
|
||||||
['α','β','γ','Δ'].sort((a, b) => a.localeCompare(b, 'el'))
|
['α','β','γ','Δ'].sort((a, b) => a.localeCompare(b, 'el'))
|
||||||
|
|
@ -108,6 +95,13 @@ const WeaponKeyDropdown = React.forwardRef<HTMLSelectElement, Props>(function us
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleChange(event: React.ChangeEvent<HTMLSelectElement>) {
|
||||||
|
if (props.onChange)
|
||||||
|
props.onChange(event)
|
||||||
|
|
||||||
|
setCurrentKey(event.currentTarget.value)
|
||||||
|
}
|
||||||
|
|
||||||
const emptyOption = () => {
|
const emptyOption = () => {
|
||||||
let name = ''
|
let name = ''
|
||||||
if (props.series == 2)
|
if (props.series == 2)
|
||||||
|
|
@ -124,12 +118,12 @@ const WeaponKeyDropdown = React.forwardRef<HTMLSelectElement, Props>(function us
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<select
|
<select
|
||||||
key={ (props.currentValue) ? props.currentValue.id : ''}
|
key={`weapon-key-${props.slot}`}
|
||||||
defaultValue={ (props.currentValue) ? props.currentValue.id : '' }
|
value={currentKey}
|
||||||
onBlur={props.onBlur}
|
onBlur={props.onBlur}
|
||||||
onChange={props.onChange}
|
onChange={handleChange}
|
||||||
ref={ref}>
|
ref={ref}>
|
||||||
<option key="-1" value="-1">{emptyOption()}</option>
|
<option key="-1" value="-1">{ emptyOption() }</option>
|
||||||
{ Array.from(Array(keys?.length)).map((x, i) => {
|
{ Array.from(Array(keys?.length)).map((x, i) => {
|
||||||
return weaponKeyGroup(i)
|
return weaponKeyGroup(i)
|
||||||
})}
|
})}
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ const WeaponModal = (props: Props) => {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const keySelect = () => {
|
const keySelect = () => {
|
||||||
return (
|
return (
|
||||||
<section>
|
<section>
|
||||||
<h3>Weapon Keys</h3>
|
<h3>Weapon Keys</h3>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue