Skip to content

Commit e079c0d

Browse files
committed
docs(VSnackbarQueue): add examples
1 parent 10b2a9f commit e079c0d

File tree

2 files changed

+94
-4
lines changed

2 files changed

+94
-4
lines changed

packages/docs/src/examples/v-snackbar-queue/usage.vue

+31-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
:code="code"
55
:name="name"
66
:options="options"
7+
:script="script"
78
>
8-
<div>
9+
<div style="height: 188px">
910
<v-text-field
1011
v-model="text"
1112
label="Queue a message"
@@ -24,6 +25,21 @@
2425
</template>
2526
</v-text-field>
2627

28+
<v-list density="compact" variant="tonal" nav>
29+
<v-list-subheader>Queue:</v-list-subheader>
30+
<v-fade-transition
31+
v-for="message in queue"
32+
:key="message"
33+
appear
34+
>
35+
<v-list-item
36+
:color="message.color"
37+
:subtitle="message.timeout + 'ms'"
38+
:title="message.text"
39+
></v-list-item>
40+
</v-fade-transition>
41+
</v-list>
42+
2743
<v-snackbar-queue v-model="queue" :color="color" :timeout="timeout"></v-snackbar-queue>
2844
</div>
2945

@@ -55,11 +71,13 @@
5571
timeout: timeout.value,
5672
color: color.value,
5773
})
74+
text.value = ''
5875
}
5976
6077
const props = computed(() => {
6178
return {
62-
color: color.value,
79+
'v-model': 'messages',
80+
color: color.value ?? undefined,
6381
timeout: timeout.value !== 5000 ? timeout.value : undefined,
6482
}
6583
})
@@ -71,4 +89,15 @@
7189
const code = computed(() => {
7290
return `<v-snackbar-queue${propsToString(props.value)}>${slots.value}</v-snackbar-queue>`
7391
})
92+
93+
const script = computed(() => {
94+
return `<script setup>
95+
const text = ref('')
96+
const messages = ref([])
97+
98+
function onClick () {
99+
messages.value.push(text.value)
100+
}
101+
<` + '/script>'
102+
})
74103
</script>

packages/docs/src/pages/en/components/snackbar-queue.md

+63-2
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,24 @@ related:
1010
- /components/snackbars/
1111
- /components/defaults-providers/
1212
features:
13-
github: /labs/VSnackbarQueue/
13+
github: /components/VSnackbarQueue/
1414
label: 'C: VSnackbarQueue'
1515
report: true
1616
spec: https://m2.material.io/components/snackbars
1717
---
1818

1919
# Snackbar Queue
2020

21-
The `v-snackbar-queue` component is used to queue up multiple snackbar messages to be displayed to the user. Snackbars support positioning, removal delay, and callbacks.
21+
The `v-snackbar-queue` component is used to display a sequence of messages to the user.
2222

2323
<PageFeatures />
2424

2525
<DocIntroduced version="3.7.0" />
2626

2727
## Usage
2828

29+
Messages are passed as an array of strings to `v-model`, when a message is displayed it will be removed from the start of the array.
30+
2931
<ExamplesUsage name="v-snackbar-queue" />
3032

3133
<PromotedEntry />
@@ -38,3 +40,62 @@ The `v-snackbar-queue` component is used to queue up multiple snackbar messages
3840
| [v-snackbar](/api/v-snackbar/) | The actual Snackbar Component |
3941

4042
<ApiInline hide-links />
43+
44+
## Examples
45+
46+
### Additional props
47+
48+
Snackbar props can be set either on the queue to apply to all messages:
49+
50+
```html
51+
<v-snackbar-queue timeout="2000" color="error" />
52+
```
53+
54+
Or individual messages as objects:
55+
56+
```js
57+
queue.push({
58+
text: text.value,
59+
timeout: 2000,
60+
color: 'error',
61+
})
62+
```
63+
64+
### Global state
65+
66+
You can use pinia or vuex to display messages from any component:
67+
68+
```js { resource="stores/messages.js" }
69+
export const useMessagesStore = defineStore('messages', () => {
70+
const queue = ref([])
71+
function add (message) {
72+
queue.push(message)
73+
}
74+
75+
return { queue, add }
76+
})
77+
```
78+
79+
```html { resource="App.vue" }
80+
<template>
81+
<v-app>
82+
<router-view></router-view>
83+
84+
<v-snackbar-queue v-model="messages.queue"></v-snackbar-queue>
85+
</v-app>
86+
</template>
87+
88+
<script setup>
89+
const messages = useMessagesStore()
90+
</script>
91+
```
92+
93+
```html { resource="pages/error.vue" }
94+
<script setup>
95+
const messages = useMessagesStore()
96+
97+
function onError (err) {
98+
messages.add({ text: err.message, color: 'error' })
99+
}
100+
</script>
101+
```

0 commit comments

Comments
 (0)