useStore composable
useStore composable allows loading and changing currently active store.
API
useStore composable returns the following properties:
load- function that fetches a list of available stores.change- function that changes the current store and reloads the page.stores- main data object populated by theload()method.error- ref that contains an errors from the composable methods.loading- ref that contains information whether any of the composable methods is loading.
Interfaces
interface UseStoreErrors { load: Error | null; change: Error | null; } interface UseStoreInterface { change(store: StoreConfig): void; load(customQuery?: { availableStores: string }): Promise<void>; stores: Ref<AvailableStores>; loading: DeepReadonly<Ref<boolean>>; error: DeepReadonly<Ref<UseStoreErrors>>; } Example
Load available stores on mount and handle change of the store:
<template> <SfList v-if="availableStores.length > 1"> <SfListItem v-for="store in availableStores" :key="store.id" > <a href="/" @click.prevent="changeStore(store)" ... > <SfCharacteristic class="language"> <span>{{ store.store_name }}</span> <SfImage :src="`/icons/langs/${store.locale}.webp`" ... /> </SfCharacteristic> </a> </SfListItem> </SfList> </template> <script> import { useStore, AvailableStores } from '~/composables'; setup() { const { stores, load, change } = useStore(); const availableStores = computed<AvailableStores>(() => stores.value ?? []); onMounted(() => { if (stores.value && stores.value?.length) return; load(); }); return { availableStores, change }; } </script>