Persist and recall accessory from server

This commit is contained in:
Justin Edmund 2023-01-24 02:39:04 -08:00
parent bef9c2b286
commit 9a3d833092
8 changed files with 56 additions and 11 deletions

View file

@ -55,6 +55,7 @@ const CharacterGrid = (props: Props) => {
2: undefined, 2: undefined,
3: undefined, 3: undefined,
}) })
const [jobAccessory, setJobAccessory] = useState<JobAccessory>()
const [errorMessage, setErrorMessage] = useState('') const [errorMessage, setErrorMessage] = useState('')
// Create a temporary state to store previous weapon uncap values and transcendence stages // Create a temporary state to store previous weapon uncap values and transcendence stages
@ -81,6 +82,7 @@ const CharacterGrid = (props: Props) => {
useEffect(() => { useEffect(() => {
setJob(appState.party.job) setJob(appState.party.job)
setJobSkills(appState.party.jobSkills) setJobSkills(appState.party.jobSkills)
setJobAccessory(appState.party.accessory)
}, [appState]) }, [appState])
// Initialize an array of current uncap values for each characters // Initialize an array of current uncap values for each characters
@ -186,7 +188,7 @@ const CharacterGrid = (props: Props) => {
} }
// Methods: Saving job and job skills // Methods: Saving job and job skills
const saveJob = async function (job?: Job) { async function saveJob(job?: Job) {
const payload = { const payload = {
party: { party: {
job_id: job ? job.id : -1, job_id: job ? job.id : -1,
@ -214,7 +216,7 @@ const CharacterGrid = (props: Props) => {
} }
} }
const saveJobSkill = function (skill: JobSkill, position: number) { function saveJobSkill(skill: JobSkill, position: number) {
if (party.id && appState.party.editable) { if (party.id && appState.party.editable) {
const positionedKey = `skill${position}_id` const positionedKey = `skill${position}_id`
@ -253,6 +255,29 @@ const CharacterGrid = (props: Props) => {
} }
} }
async function saveAccessory(accessory: JobAccessory) {
const payload = {
party: {
accessory_id: accessory.id,
},
}
if (appState.party.id) {
const response = await api.endpoints.parties.update(
appState.party.id,
payload
)
const team = response.data
setJobAccessory(team.accessory)
appState.party.accessory = team.accessory
}
}
useEffect(() => {
console.log(jobAccessory)
}, [jobAccessory])
// Methods: Helpers // Methods: Helpers
function characterUncapLevel(character: Character) { function characterUncapLevel(character: Character) {
let uncapLevel let uncapLevel
@ -474,9 +499,11 @@ const CharacterGrid = (props: Props) => {
<JobSection <JobSection
job={job} job={job}
jobSkills={jobSkills} jobSkills={jobSkills}
jobAccessory={jobAccessory}
editable={party.editable} editable={party.editable}
saveJob={saveJob} saveJob={saveJob}
saveSkill={saveJobSkill} saveSkill={saveJobSkill}
saveAccessory={saveAccessory}
/> />
<CharacterConflictModal <CharacterConflictModal
open={modalOpen} open={modalOpen}

View file

@ -52,8 +52,8 @@ const JobAccessoryPopover = ({
}, [modalOpen]) }, [modalOpen])
// Event handlers // Event handlers
function handleAccessorySelected() { function handleAccessorySelected(value: string) {
onAccessorySelected onAccessorySelected(value)
closePopover() closePopover()
} }

View file

@ -19,9 +19,11 @@ import './index.scss'
interface Props { interface Props {
job?: Job job?: Job
jobSkills: JobSkillObject jobSkills: JobSkillObject
jobAccessory?: JobAccessory
editable: boolean editable: boolean
saveJob: (job?: Job) => void saveJob: (job?: Job) => void
saveSkill: (skill: JobSkill, position: number) => void saveSkill: (skill: JobSkill, position: number) => void
saveAccessory: (accessory: JobAccessory) => void
} }
const JobSection = (props: Props) => { const JobSection = (props: Props) => {
@ -56,6 +58,7 @@ const JobSection = (props: Props) => {
2: props.jobSkills[2], 2: props.jobSkills[2],
3: props.jobSkills[3], 3: props.jobSkills[3],
}) })
setCurrentAccessory(props.jobAccessory)
if (selectRef.current && props.job) selectRef.current.value = props.job.id if (selectRef.current && props.job) selectRef.current.value = props.job.id
}, [props]) }, [props])
@ -90,13 +93,12 @@ const JobSection = (props: Props) => {
function handleAccessorySelected(value: string) { function handleAccessorySelected(value: string) {
const accessory = accessories.find((accessory) => accessory.id === value) const accessory = accessories.find((accessory) => accessory.id === value)
if (accessory) setCurrentAccessory(accessory) if (accessory) {
setCurrentAccessory(accessory)
props.saveAccessory(accessory)
}
} }
useEffect(() => {
console.log(currentAccessory)
}, [currentAccessory])
function generateImageUrl() { function generateImageUrl() {
let imgSrc = '' let imgSrc = ''

View file

@ -147,6 +147,7 @@ const Party = (props: Props) => {
appState.party.updated_at = team.updated_at appState.party.updated_at = team.updated_at
appState.party.job = team.job appState.party.job = team.job
appState.party.jobSkills = team.job_skills appState.party.jobSkills = team.job_skills
appState.party.accessory = team.accessory
appState.party.id = team.id appState.party.id = team.id
appState.party.extra = team.extra appState.party.extra = team.extra

View file

@ -14,10 +14,11 @@ const SelectItem = React.forwardRef<HTMLDivElement, Props>(function selectItem(
{ children, ...props }, { children, ...props },
forwardedRef forwardedRef
) { ) {
const { altText, iconSrc, ...rest } = props
return ( return (
<Select.Item <Select.Item
className={classNames('SelectItem', props.className)} className={classNames('SelectItem', props.className)}
{...props} {...rest}
ref={forwardedRef} ref={forwardedRef}
value={`${props.value}`} value={`${props.value}`}
> >

1
types/Party.d.ts vendored
View file

@ -20,6 +20,7 @@ interface Party {
chain_count?: number chain_count?: number
job: Job job: Job
job_skills: JobSkillObject job_skills: JobSkillObject
accessory: JobAccessory
shortcode: string shortcode: string
extra: boolean extra: boolean
favorited: boolean favorited: boolean

View file

@ -18,6 +18,17 @@ const emptyJob: Job = {
}, },
} }
const emptyJobAccessory: JobAccessory = {
id: '-1',
granblue_id: '-1',
job: emptyJob,
name: {
en: '',
ja: '',
},
rarity: 0,
}
interface AppState { interface AppState {
[key: string]: any [key: string]: any
@ -29,6 +40,7 @@ interface AppState {
description: string | undefined description: string | undefined
job: Job job: Job
jobSkills: JobSkillObject jobSkills: JobSkillObject
accessory: JobAccessory
raid: Raid | undefined raid: Raid | undefined
element: number element: number
fullAuto: boolean fullAuto: boolean
@ -83,6 +95,7 @@ export const initialAppState: AppState = {
2: undefined, 2: undefined,
3: undefined, 3: undefined,
}, },
accessory: emptyJobAccessory,
raid: undefined, raid: undefined,
fullAuto: false, fullAuto: false,
autoGuard: false, autoGuard: false,

View file

@ -13,7 +13,7 @@ export function printError(error: any, type?: string) {
if (type === 'axios') { if (type === 'axios') {
const response = handleAxiosError(error) const response = handleAxiosError(error)
console.log(`${response?.status} ${response?.statusText}`) console.log(`${response?.status} ${response?.statusText}`)
console.log(response?.data.toJSON()) console.log(response?.data)
} else { } else {
console.log(handleError(error)) console.log(handleError(error))
} }