feat: add pinia stores (#170)
This commit is contained in:
parent
423b506d70
commit
4a412acc9e
@ -9,5 +9,6 @@ intro:
|
|||||||
desc: Opinionated Vite Starter Template
|
desc: Opinionated Vite Starter Template
|
||||||
dynamic-route: Demo of dynamic route
|
dynamic-route: Demo of dynamic route
|
||||||
hi: Hi, {name}!
|
hi: Hi, {name}!
|
||||||
|
aka: Also known as
|
||||||
whats-your-name: What's your name?
|
whats-your-name: What's your name?
|
||||||
not-found: Not found
|
not-found: Not found
|
||||||
|
@ -9,5 +9,6 @@ intro:
|
|||||||
desc: Plantilla de Inicio de Vite Dogmática
|
desc: Plantilla de Inicio de Vite Dogmática
|
||||||
dynamic-route: Demo de ruta dinámica
|
dynamic-route: Demo de ruta dinámica
|
||||||
hi: ¡Hola, {name}!
|
hi: ¡Hola, {name}!
|
||||||
|
aka: También conocido como
|
||||||
whats-your-name: ¿Cómo te llamas?
|
whats-your-name: ¿Cómo te llamas?
|
||||||
not-found: No se ha encontrado
|
not-found: No se ha encontrado
|
||||||
|
@ -9,5 +9,6 @@ intro:
|
|||||||
desc: Exemple d'application Vite
|
desc: Exemple d'application Vite
|
||||||
dynamic-route: Démo de route dynamique
|
dynamic-route: Démo de route dynamique
|
||||||
hi: Salut, {name}!
|
hi: Salut, {name}!
|
||||||
|
aka: Aussi connu sous le nom de
|
||||||
whats-your-name: Comment t'appelles-tu ?
|
whats-your-name: Comment t'appelles-tu ?
|
||||||
not-found: Page non trouvée
|
not-found: Page non trouvée
|
||||||
|
@ -9,5 +9,6 @@ intro:
|
|||||||
desc: Modelo Opinativo de Partida de Vite
|
desc: Modelo Opinativo de Partida de Vite
|
||||||
dynamic-route: Demonstração de rota dinâmica
|
dynamic-route: Demonstração de rota dinâmica
|
||||||
hi: Olá, {name}!
|
hi: Olá, {name}!
|
||||||
|
aka: Também conhecido como
|
||||||
whats-your-name: Qual é o seu nome?
|
whats-your-name: Qual é o seu nome?
|
||||||
not-found: Não encontrado
|
not-found: Não encontrado
|
||||||
|
@ -9,5 +9,6 @@ intro:
|
|||||||
desc: 固执己见的 Vite 项目模板
|
desc: 固执己见的 Vite 项目模板
|
||||||
dynamic-route: 动态路由演示
|
dynamic-route: 动态路由演示
|
||||||
hi: 你好,{name}
|
hi: 你好,{name}
|
||||||
|
aka: 也叫
|
||||||
whats-your-name: 输入你的名字
|
whats-your-name: 输入你的名字
|
||||||
not-found: 未找到页面
|
not-found: 未找到页面
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"@vueuse/core": "^6.0.0",
|
"@vueuse/core": "^6.0.0",
|
||||||
"@vueuse/head": "^0.6.0",
|
"@vueuse/head": "^0.6.0",
|
||||||
"nprogress": "^0.2.0",
|
"nprogress": "^0.2.0",
|
||||||
|
"pinia": "^2.0.0-0",
|
||||||
"prism-theme-vars": "^0.2.2",
|
"prism-theme-vars": "^0.2.2",
|
||||||
"vue": "^3.2.2",
|
"vue": "^3.2.2",
|
||||||
"vue-demi": "^0.11.3",
|
"vue-demi": "^0.11.3",
|
||||||
@ -22,7 +23,6 @@
|
|||||||
"@iconify/json": "^1.1.387",
|
"@iconify/json": "^1.1.387",
|
||||||
"@intlify/vite-plugin-vue-i18n": "^2.4.0",
|
"@intlify/vite-plugin-vue-i18n": "^2.4.0",
|
||||||
"@types/nprogress": "^0.2.0",
|
"@types/nprogress": "^0.2.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^4.29.1",
|
|
||||||
"@vitejs/plugin-vue": "^1.4.0",
|
"@vitejs/plugin-vue": "^1.4.0",
|
||||||
"@vue/compiler-sfc": "^3.2.2",
|
"@vue/compiler-sfc": "^3.2.2",
|
||||||
"@vue/server-renderer": "^3.2.2",
|
"@vue/server-renderer": "^3.2.2",
|
||||||
|
106
pnpm-lock.yaml
106
pnpm-lock.yaml
@ -5,7 +5,6 @@ specifiers:
|
|||||||
'@iconify/json': ^1.1.387
|
'@iconify/json': ^1.1.387
|
||||||
'@intlify/vite-plugin-vue-i18n': ^2.4.0
|
'@intlify/vite-plugin-vue-i18n': ^2.4.0
|
||||||
'@types/nprogress': ^0.2.0
|
'@types/nprogress': ^0.2.0
|
||||||
'@typescript-eslint/eslint-plugin': ^4.29.1
|
|
||||||
'@vitejs/plugin-vue': ^1.4.0
|
'@vitejs/plugin-vue': ^1.4.0
|
||||||
'@vue/compiler-sfc': ^3.2.2
|
'@vue/compiler-sfc': ^3.2.2
|
||||||
'@vue/server-renderer': ^3.2.2
|
'@vue/server-renderer': ^3.2.2
|
||||||
@ -18,6 +17,7 @@ specifiers:
|
|||||||
markdown-it-link-attributes: ^3.0.0
|
markdown-it-link-attributes: ^3.0.0
|
||||||
markdown-it-prism: ^2.1.8
|
markdown-it-prism: ^2.1.8
|
||||||
nprogress: ^0.2.0
|
nprogress: ^0.2.0
|
||||||
|
pinia: ^2.0.0-0
|
||||||
pnpm: ^6.13.0
|
pnpm: ^6.13.0
|
||||||
prism-theme-vars: ^0.2.2
|
prism-theme-vars: ^0.2.2
|
||||||
typescript: ^4.3.5
|
typescript: ^4.3.5
|
||||||
@ -41,6 +41,7 @@ dependencies:
|
|||||||
'@vueuse/core': 6.0.0_vue@3.2.2
|
'@vueuse/core': 6.0.0_vue@3.2.2
|
||||||
'@vueuse/head': 0.6.0_vue@3.2.2
|
'@vueuse/head': 0.6.0_vue@3.2.2
|
||||||
nprogress: 0.2.0
|
nprogress: 0.2.0
|
||||||
|
pinia: 2.0.0-rc.4_typescript@4.3.5+vue@3.2.2
|
||||||
prism-theme-vars: 0.2.2
|
prism-theme-vars: 0.2.2
|
||||||
vue: 3.2.2
|
vue: 3.2.2
|
||||||
vue-demi: 0.11.3_vue@3.2.2
|
vue-demi: 0.11.3_vue@3.2.2
|
||||||
@ -53,7 +54,6 @@ devDependencies:
|
|||||||
'@iconify/json': 1.1.387
|
'@iconify/json': 1.1.387
|
||||||
'@intlify/vite-plugin-vue-i18n': 2.4.0_bdfaf14c5541fb1bd751e193a94ac007
|
'@intlify/vite-plugin-vue-i18n': 2.4.0_bdfaf14c5541fb1bd751e193a94ac007
|
||||||
'@types/nprogress': 0.2.0
|
'@types/nprogress': 0.2.0
|
||||||
'@typescript-eslint/eslint-plugin': 4.29.1_eslint@7.32.0+typescript@4.3.5
|
|
||||||
'@vitejs/plugin-vue': 1.4.0_@vue+compiler-sfc@3.2.2
|
'@vitejs/plugin-vue': 1.4.0_@vue+compiler-sfc@3.2.2
|
||||||
'@vue/compiler-sfc': 3.2.2
|
'@vue/compiler-sfc': 3.2.2
|
||||||
'@vue/server-renderer': 3.2.2_vue@3.2.2
|
'@vue/server-renderer': 3.2.2_vue@3.2.2
|
||||||
@ -1615,30 +1615,6 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@typescript-eslint/eslint-plugin/4.29.1_eslint@7.32.0+typescript@4.3.5:
|
|
||||||
resolution: {integrity: sha512-AHqIU+SqZZgBEiWOrtN94ldR3ZUABV5dUG94j8Nms9rQnHFc8fvDOue/58K4CFz6r8OtDDc35Pw9NQPWo0Ayrw==}
|
|
||||||
engines: {node: ^10.12.0 || >=12.0.0}
|
|
||||||
peerDependencies:
|
|
||||||
'@typescript-eslint/parser': ^4.0.0
|
|
||||||
eslint: ^5.0.0 || ^6.0.0 || ^7.0.0
|
|
||||||
typescript: '*'
|
|
||||||
peerDependenciesMeta:
|
|
||||||
typescript:
|
|
||||||
optional: true
|
|
||||||
dependencies:
|
|
||||||
'@typescript-eslint/experimental-utils': 4.29.1_eslint@7.32.0+typescript@4.3.5
|
|
||||||
'@typescript-eslint/scope-manager': 4.29.1
|
|
||||||
debug: 4.3.2
|
|
||||||
eslint: 7.32.0
|
|
||||||
functional-red-black-tree: 1.0.1
|
|
||||||
regexpp: 3.2.0
|
|
||||||
semver: 7.3.5
|
|
||||||
tsutils: 3.21.0_typescript@4.3.5
|
|
||||||
typescript: 4.3.5
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@typescript-eslint/experimental-utils/4.28.4_eslint@7.32.0+typescript@4.3.5:
|
/@typescript-eslint/experimental-utils/4.28.4_eslint@7.32.0+typescript@4.3.5:
|
||||||
resolution: {integrity: sha512-OglKWOQRWTCoqMSy6pm/kpinEIgdcXYceIcH3EKWUl4S8xhFtN34GQRaAvTIZB9DD94rW7d/U7tUg3SYeDFNHA==}
|
resolution: {integrity: sha512-OglKWOQRWTCoqMSy6pm/kpinEIgdcXYceIcH3EKWUl4S8xhFtN34GQRaAvTIZB9DD94rW7d/U7tUg3SYeDFNHA==}
|
||||||
engines: {node: ^10.12.0 || >=12.0.0}
|
engines: {node: ^10.12.0 || >=12.0.0}
|
||||||
@ -1657,24 +1633,6 @@ packages:
|
|||||||
- typescript
|
- typescript
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@typescript-eslint/experimental-utils/4.29.1_eslint@7.32.0+typescript@4.3.5:
|
|
||||||
resolution: {integrity: sha512-kl6QG6qpzZthfd2bzPNSJB2YcZpNOrP6r9jueXupcZHnL74WiuSjaft7WSu17J9+ae9zTlk0KJMXPUj0daBxMw==}
|
|
||||||
engines: {node: ^10.12.0 || >=12.0.0}
|
|
||||||
peerDependencies:
|
|
||||||
eslint: '*'
|
|
||||||
dependencies:
|
|
||||||
'@types/json-schema': 7.0.8
|
|
||||||
'@typescript-eslint/scope-manager': 4.29.1
|
|
||||||
'@typescript-eslint/types': 4.29.1
|
|
||||||
'@typescript-eslint/typescript-estree': 4.29.1_typescript@4.3.5
|
|
||||||
eslint: 7.32.0
|
|
||||||
eslint-scope: 5.1.1
|
|
||||||
eslint-utils: 3.0.0_eslint@7.32.0
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
- typescript
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@typescript-eslint/parser/4.28.4_eslint@7.32.0+typescript@4.3.5:
|
/@typescript-eslint/parser/4.28.4_eslint@7.32.0+typescript@4.3.5:
|
||||||
resolution: {integrity: sha512-4i0jq3C6n+og7/uCHiE6q5ssw87zVdpUj1k6VlVYMonE3ILdFApEzTWgppSRG4kVNB/5jxnH+gTeKLMNfUelQA==}
|
resolution: {integrity: sha512-4i0jq3C6n+og7/uCHiE6q5ssw87zVdpUj1k6VlVYMonE3ILdFApEzTWgppSRG4kVNB/5jxnH+gTeKLMNfUelQA==}
|
||||||
engines: {node: ^10.12.0 || >=12.0.0}
|
engines: {node: ^10.12.0 || >=12.0.0}
|
||||||
@ -1703,24 +1661,11 @@ packages:
|
|||||||
'@typescript-eslint/visitor-keys': 4.28.4
|
'@typescript-eslint/visitor-keys': 4.28.4
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@typescript-eslint/scope-manager/4.29.1:
|
|
||||||
resolution: {integrity: sha512-Hzv/uZOa9zrD/W5mftZa54Jd5Fed3tL6b4HeaOpwVSabJK8CJ+2MkDasnX/XK4rqP5ZTWngK1ZDeCi6EnxPQ7A==}
|
|
||||||
engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
|
|
||||||
dependencies:
|
|
||||||
'@typescript-eslint/types': 4.29.1
|
|
||||||
'@typescript-eslint/visitor-keys': 4.29.1
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@typescript-eslint/types/4.28.4:
|
/@typescript-eslint/types/4.28.4:
|
||||||
resolution: {integrity: sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww==}
|
resolution: {integrity: sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww==}
|
||||||
engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
|
engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@typescript-eslint/types/4.29.1:
|
|
||||||
resolution: {integrity: sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA==}
|
|
||||||
engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@typescript-eslint/typescript-estree/4.28.4_typescript@4.3.5:
|
/@typescript-eslint/typescript-estree/4.28.4_typescript@4.3.5:
|
||||||
resolution: {integrity: sha512-z7d8HK8XvCRyN2SNp+OXC2iZaF+O2BTquGhEYLKLx5k6p0r05ureUtgEfo5f6anLkhCxdHtCf6rPM1p4efHYDQ==}
|
resolution: {integrity: sha512-z7d8HK8XvCRyN2SNp+OXC2iZaF+O2BTquGhEYLKLx5k6p0r05ureUtgEfo5f6anLkhCxdHtCf6rPM1p4efHYDQ==}
|
||||||
engines: {node: ^10.12.0 || >=12.0.0}
|
engines: {node: ^10.12.0 || >=12.0.0}
|
||||||
@ -1742,27 +1687,6 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@typescript-eslint/typescript-estree/4.29.1_typescript@4.3.5:
|
|
||||||
resolution: {integrity: sha512-lIkkrR9E4lwZkzPiRDNq0xdC3f2iVCUjw/7WPJ4S2Sl6C3nRWkeE1YXCQ0+KsiaQRbpY16jNaokdWnm9aUIsfw==}
|
|
||||||
engines: {node: ^10.12.0 || >=12.0.0}
|
|
||||||
peerDependencies:
|
|
||||||
typescript: '*'
|
|
||||||
peerDependenciesMeta:
|
|
||||||
typescript:
|
|
||||||
optional: true
|
|
||||||
dependencies:
|
|
||||||
'@typescript-eslint/types': 4.29.1
|
|
||||||
'@typescript-eslint/visitor-keys': 4.29.1
|
|
||||||
debug: 4.3.2
|
|
||||||
globby: 11.0.4
|
|
||||||
is-glob: 4.0.1
|
|
||||||
semver: 7.3.5
|
|
||||||
tsutils: 3.21.0_typescript@4.3.5
|
|
||||||
typescript: 4.3.5
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@typescript-eslint/visitor-keys/4.28.4:
|
/@typescript-eslint/visitor-keys/4.28.4:
|
||||||
resolution: {integrity: sha512-NIAXAdbz1XdOuzqkJHjNKXKj8QQ4cv5cxR/g0uQhCYf/6//XrmfpaYsM7PnBcNbfvTDLUkqQ5TPNm1sozDdTWg==}
|
resolution: {integrity: sha512-NIAXAdbz1XdOuzqkJHjNKXKj8QQ4cv5cxR/g0uQhCYf/6//XrmfpaYsM7PnBcNbfvTDLUkqQ5TPNm1sozDdTWg==}
|
||||||
engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
|
engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
|
||||||
@ -1771,14 +1695,6 @@ packages:
|
|||||||
eslint-visitor-keys: 2.1.0
|
eslint-visitor-keys: 2.1.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@typescript-eslint/visitor-keys/4.29.1:
|
|
||||||
resolution: {integrity: sha512-zLqtjMoXvgdZY/PG6gqA73V8BjqPs4af1v2kiiETBObp+uC6gRYnJLmJHxC0QyUrrHDLJPIWNYxoBV3wbcRlag==}
|
|
||||||
engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
|
|
||||||
dependencies:
|
|
||||||
'@typescript-eslint/types': 4.29.1
|
|
||||||
eslint-visitor-keys: 2.1.0
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@vitejs/plugin-vue/1.4.0_@vue+compiler-sfc@3.2.2:
|
/@vitejs/plugin-vue/1.4.0_@vue+compiler-sfc@3.2.2:
|
||||||
resolution: {integrity: sha512-RkqfJHz9wdLKBp5Yi+kQL8BAljdrvPoccQm2PTZc/UcL4EjD11xsv2PPCduYx2oV1a/bpSKA3sD5sxOHFhz+LA==}
|
resolution: {integrity: sha512-RkqfJHz9wdLKBp5Yi+kQL8BAljdrvPoccQm2PTZc/UcL4EjD11xsv2PPCduYx2oV1a/bpSKA3sD5sxOHFhz+LA==}
|
||||||
engines: {node: '>=12.0.0'}
|
engines: {node: '>=12.0.0'}
|
||||||
@ -4633,6 +4549,24 @@ packages:
|
|||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/pinia/2.0.0-rc.4_typescript@4.3.5+vue@3.2.2:
|
||||||
|
resolution: {integrity: sha512-I43V1TIFyDWT4UTi1CPLQXQZYXGQHQMKpDPI+oxC2fv0c+ej0fQBoKCn4WbfRWB+Vf5chhWM97GFLI+OWmUQEQ==}
|
||||||
|
peerDependencies:
|
||||||
|
'@vue/composition-api': ^1.1.0
|
||||||
|
typescript: ^4.3.5
|
||||||
|
vue: ^2.6.14 || ^3.2.0
|
||||||
|
peerDependenciesMeta:
|
||||||
|
'@vue/composition-api':
|
||||||
|
optional: true
|
||||||
|
typescript:
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
'@vue/devtools-api': 6.0.0-beta.15
|
||||||
|
typescript: 4.3.5
|
||||||
|
vue: 3.2.2
|
||||||
|
vue-demi: 0.11.3_vue@3.2.2
|
||||||
|
dev: false
|
||||||
|
|
||||||
/pkg-dir/2.0.0:
|
/pkg-dir/2.0.0:
|
||||||
resolution: {integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=}
|
resolution: {integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
|
15
src/modules/pinia.ts
Normal file
15
src/modules/pinia.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import { createPinia } from 'pinia'
|
||||||
|
import { UserModule } from '~/types'
|
||||||
|
|
||||||
|
export const install: UserModule = ({ isClient, initialState, app }) => {
|
||||||
|
const pinia = createPinia()
|
||||||
|
app.use(pinia)
|
||||||
|
// Refer to
|
||||||
|
// https://github.com/antfu/vite-ssg/blob/main/README.md#state-serialization
|
||||||
|
// for other serialization strategies.
|
||||||
|
if (isClient)
|
||||||
|
pinia.state.value = (initialState.pinia) || {}
|
||||||
|
|
||||||
|
else
|
||||||
|
initialState.pinia = pinia.state.value
|
||||||
|
}
|
@ -1,10 +1,17 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
|
import { useUserStore } from '~/stores/user'
|
||||||
|
|
||||||
const props = defineProps<{ name: string }>()
|
const props = defineProps<{ name: string }>()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
const user = useUserStore()
|
||||||
|
|
||||||
|
watch(() => props.name, (name) => {
|
||||||
|
user.setNewName(name)
|
||||||
|
}, { immediate: true })
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -15,6 +22,17 @@ const { t } = useI18n()
|
|||||||
<p>
|
<p>
|
||||||
{{ t('intro.hi', { name: props.name }) }}
|
{{ t('intro.hi', { name: props.name }) }}
|
||||||
</p>
|
</p>
|
||||||
|
<template v-if="user.otherNames.length">
|
||||||
|
<p class="text-sm">
|
||||||
|
{{ t('intro.aka') }}:
|
||||||
|
<ul>
|
||||||
|
<li v-for="name in user.otherNames">
|
||||||
|
{{ name }}
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
</template>
|
||||||
|
|
||||||
<p class="text-sm opacity-50">
|
<p class="text-sm opacity-50">
|
||||||
<em>{{ t('intro.dynamic-route') }}</em>
|
<em>{{ t('intro.dynamic-route') }}</em>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
|
import { useUserStore } from '~/stores/user'
|
||||||
|
|
||||||
const name = ref('')
|
const user = useUserStore()
|
||||||
|
const name = ref(user.savedName)
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const go = () => {
|
const go = () => {
|
||||||
|
34
src/stores/user.ts
Normal file
34
src/stores/user.ts
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import { acceptHMRUpdate, defineStore } from 'pinia'
|
||||||
|
|
||||||
|
export const useUserStore = defineStore('user', () => {
|
||||||
|
/**
|
||||||
|
* Current named of the user.
|
||||||
|
*/
|
||||||
|
const savedName = ref('')
|
||||||
|
const previousNames = ref(new Set<string>())
|
||||||
|
|
||||||
|
const usedNames = computed(() => Array.from(previousNames.value))
|
||||||
|
const otherNames = computed(() => usedNames.value.filter(name => name !== savedName.value))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes the current name of the user and saves the one that was used
|
||||||
|
* before.
|
||||||
|
*
|
||||||
|
* @param name - new name to set
|
||||||
|
*/
|
||||||
|
function setNewName(name: string) {
|
||||||
|
if (savedName.value)
|
||||||
|
previousNames.value.add(savedName.value)
|
||||||
|
|
||||||
|
savedName.value = name
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
setNewName,
|
||||||
|
otherNames,
|
||||||
|
savedName,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if (import.meta.hot)
|
||||||
|
import.meta.hot.accept(acceptHMRUpdate(useUserStore, import.meta.hot))
|
Loading…
Reference in New Issue
Block a user