From e1fe9810ce1b23cb8b4bfc31936109cc7e6eddff Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Sat, 20 Dec 2025 01:58:11 -0800 Subject: [PATCH] add unlimited raids with 7 character slots --- .../database/cells/RaidGroupFlagsCell.svelte | 8 +++++++- src/lib/components/grids/CharacterGrid.svelte | 16 +++++++++++++--- src/lib/components/party/Party.svelte | 1 + src/lib/types/RaidGroup.d.ts | 1 + src/lib/types/api/raid.ts | 4 ++++ .../(app)/database/raid-groups/[id]/+page.svelte | 3 +++ .../database/raid-groups/[id]/edit/+page.svelte | 15 ++++++++++++--- .../(app)/database/raid-groups/new/+page.svelte | 12 ++++++++++-- 8 files changed, 51 insertions(+), 9 deletions(-) diff --git a/src/lib/components/database/cells/RaidGroupFlagsCell.svelte b/src/lib/components/database/cells/RaidGroupFlagsCell.svelte index 6bf8eaed..52d3d7d4 100644 --- a/src/lib/components/database/cells/RaidGroupFlagsCell.svelte +++ b/src/lib/components/database/cells/RaidGroupFlagsCell.svelte @@ -12,7 +12,8 @@ {#if row.hl}HL{/if} {#if row.extra}Extra{/if} {#if row.guidebooks}Guidebooks{/if} - {#if !row.hl && !row.extra && !row.guidebooks} + {#if row.unlimited}Unlimited{/if} + {#if !row.hl && !row.extra && !row.guidebooks && !row.unlimited} {/if} @@ -47,6 +48,11 @@ background: #28a745; color: white; } + + &.unlimited { + background: #fd7e14; + color: white; + } } .no-flags { diff --git a/src/lib/components/grids/CharacterGrid.svelte b/src/lib/components/grids/CharacterGrid.svelte index bc64e2e5..5edeb76a 100644 --- a/src/lib/components/grids/CharacterGrid.svelte +++ b/src/lib/components/grids/CharacterGrid.svelte @@ -13,15 +13,20 @@ mainWeaponElement?: number | null | undefined partyElement?: number | null | undefined container?: string | undefined + unlimited?: boolean } let { characters = [], mainWeaponElement = undefined, partyElement = undefined, - container = 'main-characters' + container = 'main-characters', + unlimited = false }: Props = $props() + // Dynamic slot count based on unlimited flag + const slotCount = $derived(unlimited ? 7 : 5) + import CharacterUnit from '$lib/components/units/CharacterUnit.svelte' const ctx = getContext('party') @@ -29,9 +34,9 @@ // Create array with proper empty slots let characterSlots = $derived.by(() => { - const slots: (GridCharacter | undefined)[] = Array(5).fill(undefined) + const slots: (GridCharacter | undefined)[] = Array(slotCount).fill(undefined) characters.forEach(char => { - if (char.position >= 0 && char.position < 5) { + if (char.position >= 0 && char.position < slotCount) { slots[char.position] = char } }) @@ -42,6 +47,7 @@
    {#each characterSlots as character, i} @@ -95,6 +101,10 @@ grid-template-columns: repeat(5, minmax(0, 1fr)); gap: $unit-3x; + &.unlimited { + grid-template-columns: repeat(7, minmax(0, 1fr)); + } + & > li { list-style: none; } diff --git a/src/lib/components/party/Party.svelte b/src/lib/components/party/Party.svelte index 35d95dad..393b5179 100644 --- a/src/lib/components/party/Party.svelte +++ b/src/lib/components/party/Party.svelte @@ -999,6 +999,7 @@ characters={party.characters} {mainWeaponElement} {partyElement} + unlimited={(party as any)?.raid?.group?.unlimited} />
{/if} diff --git a/src/lib/types/RaidGroup.d.ts b/src/lib/types/RaidGroup.d.ts index 32f6515f..4a5a7169 100644 --- a/src/lib/types/RaidGroup.d.ts +++ b/src/lib/types/RaidGroup.d.ts @@ -12,4 +12,5 @@ export interface RaidGroup { extra: boolean guidebooks: boolean hl: boolean + unlimited: boolean } diff --git a/src/lib/types/api/raid.ts b/src/lib/types/api/raid.ts index d5380945..25f63614 100644 --- a/src/lib/types/api/raid.ts +++ b/src/lib/types/api/raid.ts @@ -29,6 +29,7 @@ export interface RaidGroupFlat { hl: boolean extra: boolean guidebooks: boolean + unlimited: boolean } // Full RaidGroup (from :full view, includes raids) @@ -65,6 +66,7 @@ export interface CreateRaidGroupInput { hl: boolean extra: boolean guidebooks: boolean + unlimited: boolean } export interface UpdateRaidGroupInput { @@ -76,6 +78,7 @@ export interface UpdateRaidGroupInput { hl?: boolean extra?: boolean guidebooks?: boolean + unlimited?: boolean } // Filter types for raid queries @@ -86,4 +89,5 @@ export interface RaidFilters { hl?: boolean extra?: boolean guidebooks?: boolean + unlimited?: boolean } diff --git a/src/routes/(app)/database/raid-groups/[id]/+page.svelte b/src/routes/(app)/database/raid-groups/[id]/+page.svelte index 7f04c507..ae016e93 100644 --- a/src/routes/(app)/database/raid-groups/[id]/+page.svelte +++ b/src/routes/(app)/database/raid-groups/[id]/+page.svelte @@ -96,6 +96,9 @@ {group.guidebooks ? 'Yes' : 'No'} + + {group.unlimited ? 'Yes' : 'No'} + {#if group.raids && group.raids.length > 0} diff --git a/src/routes/(app)/database/raid-groups/[id]/edit/+page.svelte b/src/routes/(app)/database/raid-groups/[id]/edit/+page.svelte index 91bb8809..2b5a32d0 100644 --- a/src/routes/(app)/database/raid-groups/[id]/edit/+page.svelte +++ b/src/routes/(app)/database/raid-groups/[id]/edit/+page.svelte @@ -44,7 +44,8 @@ difficulty: 1, hl: false, extra: false, - guidebooks: false + guidebooks: false, + unlimited: false }) // Sync edit data when group changes @@ -58,7 +59,8 @@ difficulty: group.difficulty ?? 1, hl: group.hl ?? false, extra: group.extra ?? false, - guidebooks: group.guidebooks ?? false + guidebooks: group.guidebooks ?? false, + unlimited: group.unlimited ?? false } } }) @@ -84,7 +86,8 @@ difficulty: editData.difficulty, hl: editData.hl, extra: editData.extra, - guidebooks: editData.guidebooks + guidebooks: editData.guidebooks, + unlimited: editData.unlimited }) // Invalidate queries @@ -181,6 +184,12 @@ editable={true} type="checkbox" /> + {:else} diff --git a/src/routes/(app)/database/raid-groups/new/+page.svelte b/src/routes/(app)/database/raid-groups/new/+page.svelte index ee0a8b27..e9acceca 100644 --- a/src/routes/(app)/database/raid-groups/new/+page.svelte +++ b/src/routes/(app)/database/raid-groups/new/+page.svelte @@ -31,7 +31,8 @@ difficulty: 1, hl: false, extra: false, - guidebooks: false + guidebooks: false, + unlimited: false }) // Validation @@ -55,7 +56,8 @@ difficulty: editData.difficulty, hl: editData.hl, extra: editData.extra, - guidebooks: editData.guidebooks + guidebooks: editData.guidebooks, + unlimited: editData.unlimited }) // Invalidate queries @@ -147,6 +149,12 @@ editable={true} type="checkbox" /> +