diff --git a/src/lib/components/job/JobSkillItem.svelte b/src/lib/components/job/JobSkillItem.svelte
index 392d8c80..2b3a23b3 100644
--- a/src/lib/components/job/JobSkillItem.svelte
+++ b/src/lib/components/job/JobSkillItem.svelte
@@ -14,7 +14,7 @@
let { skill, onClick, disabled = false, variant = 'default', onRemove }: Props = $props()
function getSkillIcon(skill: JobSkill): string {
- return getJobSkillIcon(skill.slug)
+ return getJobSkillIcon(skill)
}
function getSkillColorClass(skill: JobSkill): string {
diff --git a/src/lib/components/job/JobSkillSlot.svelte b/src/lib/components/job/JobSkillSlot.svelte
index f3e9e7c8..2a0d5e07 100644
--- a/src/lib/components/job/JobSkillSlot.svelte
+++ b/src/lib/components/job/JobSkillSlot.svelte
@@ -27,7 +27,7 @@
}: Props = $props()
const categoryColor = $derived(skill ? getSkillCategoryColor(skill) : '')
- const skillIconUrl = $derived(skill?.slug ? getJobSkillIcon(skill.slug) : '')
+ const skillIconUrl = $derived(skill ? getJobSkillIcon(skill) : '')
const isEditable = $derived(editable && !locked && available)
const isUnavailable = $derived(!available)
diff --git a/src/lib/features/database/jobs/tabs/JobSkillsTab.svelte b/src/lib/features/database/jobs/tabs/JobSkillsTab.svelte
index f25d1e05..cd78f150 100644
--- a/src/lib/features/database/jobs/tabs/JobSkillsTab.svelte
+++ b/src/lib/features/database/jobs/tabs/JobSkillsTab.svelte
@@ -2,20 +2,37 @@
@@ -53,7 +110,12 @@
{:else if skillsQuery.isError}
Failed to load skills
{:else if !skillsQuery.data?.length}
-
No skills found for this job
+
+
No skills found for this job
+ {#if canEdit}
+
+ {/if}
+
{:else}
{#if hasSkills('main')}
@@ -61,7 +123,7 @@
{#each groupedSkills.main as skill}
-
})
+
{skill.name.en}
{#if skill.name.ja}
@@ -71,6 +133,32 @@
{getSkillCategoryName(skill)}
+ {#if canEdit}
+
+
+ {#snippet child({ props })}
+
+ {/snippet}
+
+
+
+
+
+ {/if}
{/each}
@@ -83,7 +171,7 @@
{#each groupedSkills.sub as skill}
-
})
+
{skill.name.en}
{#if skill.name.ja}
@@ -93,6 +181,32 @@
{getSkillCategoryName(skill)}
+ {#if canEdit}
+
+
+ {#snippet child({ props })}
+
+ {/snippet}
+
+
+
+
+
+ {/if}
{/each}
@@ -105,7 +219,7 @@
{#each groupedSkills.emp as skill}
-
})
+
{skill.name.en}
{#if skill.name.ja}
@@ -115,6 +229,32 @@
{getSkillCategoryName(skill)}
+ {#if canEdit}
+
+
+ {#snippet child({ props })}
+
+ {/snippet}
+
+
+
+
+
+ {/if}
{/each}
@@ -127,7 +267,7 @@
{#each groupedSkills.base as skill}
-
})
+
{skill.name.en}
{#if skill.name.ja}
@@ -137,14 +277,69 @@
{getSkillCategoryName(skill)}
+ {#if canEdit}
+
+
+ {#snippet child({ props })}
+
+ {/snippet}
+
+
+
+
+
+ {/if}
{/each}
{/if}
+
+ {#if canEdit}
+
+
+
+ {/if}
{/if}
+
+
+
diff --git a/src/lib/utils/images.ts b/src/lib/utils/images.ts
index b8382aa4..f90614b5 100644
--- a/src/lib/utils/images.ts
+++ b/src/lib/utils/images.ts
@@ -255,10 +255,21 @@ export function getWeaponGridImage(
/**
* Get job skill icon URL
+ * Uses slug for the image path
*/
-export function getJobSkillIcon(slug: string | undefined): string {
- if (!slug) return '/images/job-skills/default.png'
- return `${getBasePath()}/job-skills/${slug}.png`
+export function getJobSkillIcon(skill: { imageId?: string; slug?: string } | string | undefined): string {
+ if (!skill) return '/images/job-skills/default.png'
+
+ // Handle string input (backward compatibility)
+ if (typeof skill === 'string') {
+ return `${getBasePath()}/job-skills/${skill}.png`
+ }
+
+ // Use slug for the image path
+ if (skill.slug) {
+ return `${getBasePath()}/job-skills/${skill.slug}.png`
+ }
+ return '/images/job-skills/default.png'
}
/**