Skip to content

Commit b68472c

Browse files
committed
feat: add create pet form toggle functionality and update UI helpers for better pet management
1 parent 14da99f commit b68472c

File tree

3 files changed

+49
-40
lines changed

3 files changed

+49
-40
lines changed

src/lib/components/panels/PetPanel.svelte

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { Upload, Terminal } from 'lucide-svelte';
44
import { petStore, selectedPetStore, petHelpers, selectedPetHelpers } from '$lib/stores/pets';
55
import type { PetPanelData } from '$lib/types/Pet.js';
6-
import { rightPanelView, uiHelpers } from '$lib/stores/ui';
6+
import { rightPanelView, uiHelpers, createPetFormOpen } from '$lib/stores/ui';
77
88
let pets: PetPanelData[] = [];
99
// Derived lists
@@ -92,6 +92,13 @@
9292
let formErrors: Record<string, string> = {};
9393
9494
onMount(() => {
95+
createPetFormOpen.subscribe((open) => {
96+
if (open) {
97+
showCreateForm = true;
98+
} else {
99+
// don't forcibly close if user opened manually; only close when toggled locally
100+
}
101+
});
95102
petStore.subscribe((value) => {
96103
pets = value;
97104
// If no selected pet and we have pets, auto-select the first ACTIVE one
@@ -115,6 +122,7 @@
115122
showCreateForm = !showCreateForm;
116123
if (!showCreateForm) {
117124
resetForm();
125+
uiHelpers.closeCreatePetForm();
118126
}
119127
}
120128
@@ -401,7 +409,7 @@
401409
<div class="px-2 py-2" style="color: var(--petalytics-subtle);">none</div>
402410
{:else}
403411
{#each archivedPets as pet}
404-
<div class="cli-row px-2 py-1" style="opacity: 0.9;">
412+
<div class="cli-row px-2 py-1" style="opacity: 0.9; cursor: default;">
405413
<span class="label" style="color: var(--petalytics-text);">{pet.name}</span>
406414
<span class="value" style="color: var(--petalytics-subtle);">
407415
{pet.species || 'pet'} | {pet.breed || ''} | {pet.age}{pet.ageUnit === 'months' ? 'm' : pet.ageUnit === 'weeks' ? 'w' : 'y'}

src/lib/components/panels/Viewport.svelte

Lines changed: 27 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -138,14 +138,14 @@
138138
<Skeleton height="h-6" />
139139
<Skeleton height="h-4" />
140140
</div>
141-
{:else if !selectedPet}
141+
{:else if !selectedPet && currentView !== 'memories'}
142142
<EmptyState
143143
icon="file-text"
144144
title="No pet selected"
145145
description="Select a pet from the left panel to view details, add journal entries, and see AI insights."
146146
actionText="Add a Pet"
147147
onAction={() => {
148-
console.log('Add a Pet clicked');
148+
uiHelpers.openCreatePetForm();
149149
}}
150150
/>
151151
{:else}
@@ -167,32 +167,25 @@
167167
</div>
168168
</div>
169169

170-
<div class="flex space-x-2">
171-
<button
172-
on:click={() => uiHelpers.setView('dashboard')}
173-
class="nav-button px-3 py-1 rounded-md text-sm"
174-
class:active={currentView === 'dashboard'}
175-
disabled={isArchived(selectedPet)}
176-
>
177-
Dashboard
178-
</button>
179-
<button
180-
on:click={() => uiHelpers.setView('journal')}
181-
class="nav-button px-3 py-1 rounded-md text-sm"
182-
class:active={currentView === 'journal'}
183-
disabled={isArchived(selectedPet)}
184-
>
185-
New Entry
186-
</button>
187-
<button
188-
on:click={() => uiHelpers.setView('history')}
189-
class="nav-button px-3 py-1 rounded-md text-sm"
190-
class:active={currentView === 'history'}
191-
disabled={isArchived(selectedPet)}
192-
>
193-
History
194-
</button>
195-
</div>
170+
{#if currentView === 'memories'}
171+
<div class="flex space-x-2">
172+
<button
173+
on:click={() => {
174+
// return to dashboard; select first active pet if available
175+
const firstActive = (pets || []).find((p) => !p.archived) || null;
176+
if (firstActive) {
177+
selectedPetHelpers.select(firstActive.id);
178+
} else {
179+
selectedPetHelpers.clear();
180+
}
181+
uiHelpers.setView('dashboard');
182+
}}
183+
class="nav-button px-3 py-1 rounded-md text-sm"
184+
>
185+
Back to Dashboard
186+
</button>
187+
</div>
188+
{/if}
196189
</div>
197190
</div>
198191

@@ -223,7 +216,7 @@
223216
<div class="flex items-center justify-between">
224217
<div>
225218
<div class="text-base font-semibold" style="color: var(--petalytics-text);">Memories</div>
226-
<div class="text-xs" style="color: var(--petalytics-subtle);">All archived pets</div>
219+
<div class="text-xs" style="color: var(--petalytics-subtle);">Archived memories</div>
227220
</div>
228221
<div class="text-xs px-2 py-1 rounded" style="background: var(--petalytics-surface); color: var(--petalytics-subtle);">
229222
{archivedPetsList().length} pets
@@ -261,7 +254,7 @@
261254
{/each}
262255
{/if}
263256
</div>
264-
{:else if currentView === 'dashboard'}
257+
{:else if currentView === 'dashboard' && selectedPet}
265258
<!-- Dashboard View -->
266259
<div class="dashboard-grid space-y-4">
267260
<!-- Stats Cards -->
@@ -381,7 +374,7 @@
381374
</div>
382375
</div>
383376
</div>
384-
{:else if currentView === 'journal'}
377+
{:else if currentView === 'journal' && selectedPet}
385378
<!-- Journal Entry Form -->
386379
<div class="journal-form max-w-2xl mx-auto">
387380
<div class="form-card p-6 rounded-lg" style="background: var(--petalytics-surface);">
@@ -479,7 +472,7 @@
479472
</div>
480473
</div>
481474
</div>
482-
{:else if currentView === 'history'}
475+
{:else if currentView === 'history' && selectedPet}
483476
<!-- History View -->
484477
<div class="history-view max-w-4xl mx-auto">
485478
<h3 class="text-xl font-semibold mb-4" style="color: var(--petalytics-text);">
@@ -551,12 +544,8 @@
551544
transition: all 0.2s;
552545
}
553546
554-
.nav-button.active {
555-
background: var(--petalytics-accent);
556-
color: var(--petalytics-bg);
557-
}
558-
559-
.nav-button:hover:not(.active) {
547+
.nav-button:hover {
560548
opacity: 0.8;
549+
background: var(--petalytics-highlight-low);
561550
}
562551
</style>

src/lib/stores/ui.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,20 @@ export type RightPanelView = 'dashboard' | 'journal' | 'history' | 'memories' |
44

55
export const rightPanelView = writable<RightPanelView>('dashboard');
66

7+
// Global flag to open the create-pet form from anywhere (e.g., right panel EmptyState)
8+
export const createPetFormOpen = writable<boolean>(false);
9+
710
export const uiHelpers = {
811
setView(view: RightPanelView) {
912
rightPanelView.set(view);
13+
},
14+
setCreatePetFormOpen(open: boolean) {
15+
createPetFormOpen.set(open);
16+
},
17+
openCreatePetForm() {
18+
createPetFormOpen.set(true);
19+
},
20+
closeCreatePetForm() {
21+
createPetFormOpen.set(false);
1022
}
1123
};

0 commit comments

Comments
 (0)