Save job and job skill to party

This commit is contained in:
Justin Edmund 2022-12-01 01:46:11 -08:00
parent 1cb9d6c843
commit 6070164150
2 changed files with 59 additions and 7 deletions

View file

@ -165,6 +165,42 @@ const CharacterGrid = (props: Props) => {
setIncoming(undefined)
}
// Methods: Saving job and job skills
const saveJob = function (job: Job) {
console.log("Save job!")
if (party.id && appState.party.editable) {
api.endpoints.parties.update(
party.id,
{
party: { job_id: job ? job.id : "" },
},
headers
)
}
}
const saveJobSkill = function (skill: JobSkill, position: number) {
if (party.id && appState.party.editable) {
const positionedKey = `skill${position}_id`
let skillObject: {
[key: string]: string | undefined
skill1_id?: string
skill2_id?: string
skill3_id?: string
} = {}
skillObject[positionedKey] = skill.id
api.endpoints.parties.update(
party.id,
{
party: skillObject,
},
headers
)
}
}
// Methods: Helpers
function characterUncapLevel(character: Character) {
let uncapLevel
@ -256,7 +292,11 @@ const CharacterGrid = (props: Props) => {
return (
<div>
<div id="CharacterGrid">
<JobSection editable={party.editable} />
<JobSection
editable={party.editable}
saveJob={saveJob}
saveSkill={saveJobSkill}
/>
<CharacterConflictModal
open={modalOpen}
incomingCharacter={incoming}

View file

@ -15,6 +15,8 @@ import "./index.scss"
// Props
interface Props {
editable: boolean
saveJob: (job: Job) => void
saveSkill: (skill: JobSkill, position: number) => void
}
const JobSection = (props: Props) => {
@ -38,14 +40,23 @@ const JobSection = (props: Props) => {
})
useEffect(() => {
if (job) appState.party.job = job
if (job) {
appState.party.job = job
setBaseSkills(job)
}
}, [job])
function receiveJob(job?: Job) {
console.log(`Receiving job! Row ${job?.row}: ${job?.name.en}`)
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
)
@ -95,7 +106,11 @@ const JobSection = (props: Props) => {
)
}
function updateObject(object: SearchableObject, position: number) {}
function updateObject(object: SearchableObject, position: number) {
const skill = object as JobSkill
props.saveSkill(skill, position)
}
// Render: JSX components
return (
@ -105,10 +120,7 @@ const JobSection = (props: Props) => {
<div className="Overlay" />
</div>
<div className="JobDetails">
<JobDropdown
currentJob={party.job ? party.job.id : undefined}
onChange={receiveJob}
/>
<JobDropdown currentJob={party.job?.id} onChange={receiveJob} />
<ul className="JobSkills">
{[...Array(numSkills)].map((e, i) => (
<li key={`job-${i}`}>