diff --git a/apps/contacts/apps/web/src/lib/components/ContactsToolbar.svelte b/apps/contacts/apps/web/src/lib/components/ContactsToolbar.svelte index c69f7eeeb..c77dfca75 100644 --- a/apps/contacts/apps/web/src/lib/components/ContactsToolbar.svelte +++ b/apps/contacts/apps/web/src/lib/components/ContactsToolbar.svelte @@ -1,7 +1,9 @@ + + + +{#if !isSidebarMode} +
+ + + +
+{/if} + + diff --git a/apps/contacts/apps/web/src/lib/components/views/ContactAlphabetView.svelte b/apps/contacts/apps/web/src/lib/components/views/ContactAlphabetView.svelte index d3142c21a..244b244d5 100644 --- a/apps/contacts/apps/web/src/lib/components/views/ContactAlphabetView.svelte +++ b/apps/contacts/apps/web/src/lib/components/views/ContactAlphabetView.svelte @@ -3,6 +3,8 @@ import type { Contact } from '$lib/api/contacts'; import type { SortField } from '$lib/components/SortToggle.svelte'; import { newContactModalStore } from '$lib/stores/new-contact-modal.svelte'; + import { isSidebarMode } from '$lib/stores/navigation'; + import { contactsFilterStore } from '$lib/stores/filter.svelte'; interface Props { contacts: Contact[]; @@ -26,6 +28,14 @@ showNewContactCard = true, }: Props = $props(); + // Derived state for toolbar positioning + let isToolbarExpanded = $derived(!contactsFilterStore.isToolbarCollapsed); + let isAlphabetNavCollapsed = $derived(contactsFilterStore.isAlphabetNavCollapsed); + + function toggleAlphabetNav() { + contactsFilterStore.toggleAlphabetNav(); + } + function handleCheckboxClick(e: MouseEvent, id: string) { e.stopPropagation(); onToggleSelection?.(id); @@ -251,28 +261,67 @@ {/each} - -
-
- {#each alphabet as letter} - - {/each} - {#if availableLetters.includes('#')} - - {/if} -
+ +
+
+ + + {#if !isAlphabetNavCollapsed} +
+
+ {#each alphabet as letter} + + {/each} + {#if availableLetters.includes('#')} + + {/if} +
+
+ {/if}
diff --git a/apps/contacts/apps/web/src/lib/stores/filter.svelte.ts b/apps/contacts/apps/web/src/lib/stores/filter.svelte.ts index eba2b00d5..a715eb0ba 100644 --- a/apps/contacts/apps/web/src/lib/stores/filter.svelte.ts +++ b/apps/contacts/apps/web/src/lib/stores/filter.svelte.ts @@ -16,6 +16,7 @@ export interface ContactsFilterState { selectedTagId: string | null; selectedCompany: string | null; isToolbarCollapsed: boolean; + isAlphabetNavCollapsed: boolean; searchQuery: string; } @@ -26,6 +27,7 @@ const DEFAULT_STATE: ContactsFilterState = { selectedTagId: null, selectedCompany: null, isToolbarCollapsed: true, + isAlphabetNavCollapsed: false, searchQuery: '', }; @@ -80,6 +82,9 @@ export const contactsFilterStore = { get isToolbarCollapsed() { return state.isToolbarCollapsed; }, + get isAlphabetNavCollapsed() { + return state.isAlphabetNavCollapsed; + }, get searchQuery() { return state.searchQuery; }, @@ -120,6 +125,16 @@ export const contactsFilterStore = { saveState(state); }, + setAlphabetNavCollapsed(value: boolean) { + state = { ...state, isAlphabetNavCollapsed: value }; + saveState(state); + }, + + toggleAlphabetNav() { + state = { ...state, isAlphabetNavCollapsed: !state.isAlphabetNavCollapsed }; + saveState(state); + }, + setSearchQuery(value: string) { state = { ...state, searchQuery: value }; // Don't persist search query to localStorage