diff --git a/components/CharacterGrid/index.tsx b/components/CharacterGrid/index.tsx index 207d1b1d..263e15a7 100644 --- a/components/CharacterGrid/index.tsx +++ b/components/CharacterGrid/index.tsx @@ -10,7 +10,7 @@ import JobSection from "~components/JobSection" import CharacterUnit from "~components/CharacterUnit" import CharacterConflictModal from "~components/CharacterConflictModal" -import type { SearchableObject } from "~types" +import type { JobSkillObject, SearchableObject } from "~types" import api from "~utils/api" import { appState } from "~utils/appState" @@ -48,6 +48,15 @@ const CharacterGrid = (props: Props) => { const [conflicts, setConflicts] = useState([]) const [position, setPosition] = useState(0) + // Set up state for data + const [job, setJob] = useState() + const [jobSkills, setJobSkills] = useState({ + 0: undefined, + 1: undefined, + 2: undefined, + 3: undefined, + }) + // Create a temporary state to store previous character uncap values const [previousUncapValues, setPreviousUncapValues] = useState<{ [key: number]: number | undefined @@ -64,6 +73,13 @@ const CharacterGrid = (props: Props) => { else appState.party.editable = false }, [props.new, accountData, party]) + useEffect(() => { + console.log("In useeffect") + console.log(party.jobSkills) + setJob(party.job) + setJobSkills(party.jobSkills) + }, [party]) + // Initialize an array of current uncap values for each characters useEffect(() => { let initialPreviousUncapValues: { [key: number]: number } = {} @@ -167,14 +183,22 @@ const CharacterGrid = (props: Props) => { // Methods: Saving job and job skills const saveJob = function (job: Job) { + const payload = { + party: { job_id: job ? job.id : "" }, + } + if (party.id && appState.party.editable) { - api.endpoints.parties.update( - party.id, - { - party: { job_id: job ? job.id : "" }, - }, - headers - ) + api.endpoints.parties + .update(party.id, payload, headers) + .then((response) => { + const newParty = response.data.party + + setJob(newParty.job) + appState.party.job = newParty.job + + setJobSkills(newParty.job_skills) + appState.party.jobSkills = newParty.job_skills + }) } } @@ -184,6 +208,7 @@ const CharacterGrid = (props: Props) => { let skillObject: { [key: string]: string | undefined + skill0_id?: string skill1_id?: string skill2_id?: string skill3_id?: string @@ -292,6 +317,8 @@ const CharacterGrid = (props: Props) => {
void saveSkill: (skill: JobSkill, position: number) => void @@ -25,15 +27,32 @@ const JobSection = (props: Props) => { const [job, setJob] = useState() const [imageUrl, setImageUrl] = useState("") - const { party } = useSnapshot(appState) + const { party, jobSkills } = useSnapshot(appState) const [numSkills, setNumSkills] = useState(4) - const [skills, setSkills] = useState([]) + const [skills, setSkills] = useState<{ [key: number]: JobSkill | undefined }>( + [] + ) + + const selectRef = React.createRef() useEffect(() => { + console.log("party has changed") // Set current job based on ID - if (party.job) setJob(party.job) - }, []) + console.log(props.jobSkills) + + if (props.job) { + setJob(props.job) + setSkills({ + 0: props.jobSkills[0], + 1: props.jobSkills[1], + 2: props.jobSkills[2], + 3: props.jobSkills[3], + }) + + if (selectRef.current) selectRef.current.value = props.job.id + } + }, [props]) useEffect(() => { generateImageUrl() @@ -41,8 +60,9 @@ const JobSection = (props: Props) => { useEffect(() => { if (job) { - appState.party.job = job - setBaseSkills(job) + if (job.id != party.job.id) appState.party.job = job + if (job.row === "1") setNumSkills(3) + else setNumSkills(4) } }, [job]) @@ -50,20 +70,6 @@ const JobSection = (props: Props) => { if (job) { setJob(job) props.saveJob(job) - setBaseSkills(job) - } - } - - function setBaseSkills(job?: Job) { - if (job) { - const baseSkills = appState.jobSkills.filter( - (skill) => skill.job.id === job.id && skill.main - ) - - if (job.row === "1") setNumSkills(3) - else setNumSkills(4) - - setSkills(baseSkills) } } @@ -80,11 +86,19 @@ const JobSection = (props: Props) => { setImageUrl(imgSrc) } + const canEditSkill = (skill?: JobSkill) => { + if (job && skill) { + if (skill.job.id === job.id && skill.main && !skill.sub) return false + } + + return props.editable + } + const skillItem = (index: number, editable: boolean) => { return ( @@ -98,16 +112,20 @@ const JobSection = (props: Props) => { fromPosition={index} object="job_skills" job={job} - send={updateObject} + send={saveJobSkill} > {skillItem(index, true)} ) } - function updateObject(object: SearchableObject, position: number) { + function saveJobSkill(object: SearchableObject, position: number) { const skill = object as JobSkill + const newSkills = skills + newSkills[position] = skill + setSkills(newSkills) + props.saveSkill(skill, position) } @@ -119,11 +137,15 @@ const JobSection = (props: Props) => {
- +
    {[...Array(numSkills)].map((e, i) => (
  • - {job && job.id != "-1" && !skills[i]?.main && props.editable + {canEditSkill(skills[i]) ? editableSkillItem(i) : skillItem(i, false)}