diff --git a/src/App.vue b/src/App.vue index 314f406..031f6dc 100644 --- a/src/App.vue +++ b/src/App.vue @@ -8,7 +8,7 @@ import { RouterLink, RouterView } from 'vue-router' diff --git a/src/modules/counter/pages/Counter.vue b/src/modules/counter/pages/Counter.vue index 0048d11..d85391c 100644 --- a/src/modules/counter/pages/Counter.vue +++ b/src/modules/counter/pages/Counter.vue @@ -1,21 +1,33 @@ diff --git a/src/modules/counter/store/stores.ts b/src/modules/counter/store/stores.ts index 3d5e332..5a9d43c 100644 --- a/src/modules/counter/store/stores.ts +++ b/src/modules/counter/store/stores.ts @@ -1,12 +1,37 @@ +import type { ActionContext } from 'vuex' + export interface CounterStoreState { count: number + isLoading: boolean } export const COUNTER_STORE_MODULE = { - state: (): CounterStoreState => ({ count: 0 }), + namespaced: true, + state: (): CounterStoreState => ({ count: 0, isLoading: false }), mutations: { - increment(state: CounterStoreState) { - state.count++ + increment(state: CounterStoreState, incrementation: number) { + state.count = state.count + incrementation + }, + changeIsLoadingState(state: CounterStoreState) { + state.isLoading = !state.isLoading + } + }, + actions: { + async incrementRandomInt(context: ActionContext) { + context.commit('changeIsLoadingState') + const rn = () => { + return new Promise((resolve) => { + const random_number = Math.floor(Math.random() * 20 + 1) + setTimeout(() => { + resolve(random_number) + }, 3000) + }) + } + + const number: number = await rn() + + context.commit('increment', number) + context.commit('changeIsLoadingState') } }, getters: { diff --git a/src/store/global.store.ts b/src/store/global.store.ts index 9754de9..3557aa3 100644 --- a/src/store/global.store.ts +++ b/src/store/global.store.ts @@ -1,7 +1,13 @@ -import { COUNTER_STORE_MODULE } from '@/modules/counter/store/stores' -import { createStore } from 'vuex' +import { COUNTER_STORE_MODULE, type CounterStoreState } from '@/modules/counter/store/stores' + +import { Store, createStore } from 'vuex' // Create a new store instance. -export const GLOBAL_STORE = createStore({ + +export interface State { + counter: CounterStoreState +} + +export const GLOBAL_STORE:Store = createStore({ modules: { counter: COUNTER_STORE_MODULE } diff --git a/vuex-shim.d.ts b/vuex-shim.d.ts new file mode 100644 index 0000000..44eb598 --- /dev/null +++ b/vuex-shim.d.ts @@ -0,0 +1,9 @@ +import { ComponentCustomProperties } from 'vue' +import { Store } from 'vuex' +import { State } from './src/store/global.store' + +declare module '@vue/runtime-core' { + interface ComponentCustomProperties { + $store: Store + } +} diff --git a/vuex.d.ts b/vuex.d.ts index f10bd12..55e0202 100644 --- a/vuex.d.ts +++ b/vuex.d.ts @@ -4,3 +4,4 @@ declare module 'vuex' { export * from 'vuex/types/logger.d.ts' export * from 'vuex/types/vue.d.ts' } +