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>