diff --git a/src/App.vue b/src/App.vue index 8a37dfb..3c16c2c 100644 --- a/src/App.vue +++ b/src/App.vue @@ -8,69 +8,69 @@ import Component from 'vue-class-component' import Vue from 'vue' import { namespace } from 'vuex-class' -import { Namespaces } from '@/store' -import { Api } from './store/modules/types' +import { AppRoomAction, Locale } from '@/store/modules/app/room' +import { SocketRoomAction, Game, SocketRoomGetters } from '@/store/modules/socket/room' +import { AppAuthenticationActions, AppAuthenticationGetters, ExtendedJWT, JWT_KEY } from '@/store/modules/app/authentication' +import { Api } from './store/types' import { getWowsApiData } from '@/games/wows/api' -import { GameName, Locale, RoomAction, RoomGetters } from '@/store/modules/room' -import { AuthenticationActions, AuthenticationGetters, ExtendedJWT, JWT_KEY } from '@/store/modules/authentication' +import { Namespaces } from '@/store' -const authNamespace = namespace(Namespaces.AUTH) -const roomNamespace = namespace(Namespaces.ROOM) +const AppAuthentication = namespace(Namespaces.APP_AUTHENTICATION) +const AppRoom = namespace(Namespaces.APP_ROOM) +const SocketRoom = namespace(Namespaces.SOCKET_ROOM) - @Component({ - name: 'TheApp' - }) +@Component({ + name: 'TheApp' +}) export default class TheApp extends Vue { - @roomNamespace.Action(RoomAction.SET_GAME_NAME) setGameName!: (name: string) => void - @roomNamespace.Action(RoomAction.SET_GAME_API) setGameApi!: (api: Api) => void - @roomNamespace.Action(RoomAction.SET_LOCALE) setLocale!: (locale: Locale) => void - @roomNamespace.Getter(RoomGetters.GAME_NAME) game!: GameName - @authNamespace.Action(AuthenticationActions.AUTHENTICATE) authenticate!: (token: string) => Promise - @authNamespace.Action(AuthenticationActions.STORE_TOKEN) storeToken!: (token: string) => void - @authNamespace.Action(AuthenticationActions.CHECK_TOKEN_EXPIRY) checkTokenExpiry!: () => Promise - @authNamespace.Action(AuthenticationActions.LOAD_PROVIDERS) loadProviders!: () => void - @authNamespace.Getter(AuthenticationGetters.JWT) jwt!: ExtendedJWT + @SocketRoom.Action(SocketRoomAction.SET_GAME) setGame!: (name: string) => void + @AppRoom.Action(AppRoomAction.ADD_API) addApi!: (api: Api) => void + @AppRoom.Action(AppRoomAction.SET_LOCALE) setLocale!: (locale: Locale) => void + @SocketRoom.Getter(SocketRoomGetters.GAME) game!: Game + @AppAuthentication.Action(AppAuthenticationActions.AUTHENTICATE) authenticate!: (token: string) => Promise + @AppAuthentication.Action(AppAuthenticationActions.CHECK_TOKEN_EXPIRY) checkTokenExpiry!: () => Promise + @AppAuthentication.Action(AppAuthenticationActions.STORE_TOKEN) storeToken!: (token: string) => void + @AppAuthentication.Action(AppAuthenticationActions.LOAD_PROVIDERS) loadProviders!: () => void + @AppAuthentication.Getter(AppAuthenticationGetters.JWT) jwt!: ExtendedJWT - async created () { - this.setGameName(GameName['WOWS']) - this.setLocale(Locale['EN']) - this.initAuthentication() - } + async created () { + this.setGame(Game['WOWS']) + this.setLocale(Locale['EN']) + this.initAuthentication() + } - async initAuthentication () { - this.loadProviders() - const localToken = localStorage.getItem(JWT_KEY) + async initAuthentication () { + this.loadProviders() + const localToken = localStorage.getItem(JWT_KEY) - if (this.checkTokenExpiry()) { - if (this.$route?.query?.code) { - this.authenticate(this.$route.query.code as string).then(jwt => this.storeToken(jwt.encoded)) - } else if (localToken !== null) { - this.authenticate(localToken) - } - if (localToken) { - switch (this.game) { - case GameName['WOWS']: - await getWowsApiData(localToken, this.setGameApi) - break - default: - break - } + if (this.checkTokenExpiry()) { + if (this.$route?.query?.code) { + this.authenticate(this.$route.query.code as string).then(jwt => this.storeToken(jwt.encoded)) + } else if (localToken !== null) { + this.authenticate(localToken) + } + if (localToken) { + switch (this.game) { + case Game['WOWS']: + await getWowsApiData(localToken, this.addApi) + break + default: break } } } + } } diff --git a/src/components/TheCanvas.vue b/src/components/TheCanvas.vue index 757015e..934f616 100644 --- a/src/components/TheCanvas.vue +++ b/src/components/TheCanvas.vue @@ -19,36 +19,46 @@ import Component, { mixins } from 'vue-class-component' import { Tool } from '@/tools/Tool' import { CanvasElement, VueKonvaLayer, VueKonvaStage } from '@/types/Canvas' -import { Action, Getter } from 'vuex-class' -import { ToolGetters } from '@/store/modules/tools' -import { CanvasAction, CanvasGetters } from '@/store/modules/canvas' +import { namespace } from 'vuex-class' +import { AppToolGetters } from '@/store/modules/app/tools' +import { SocketCanvasAction, SocketCanvasGetters } from '@/store/modules/socket/canvas' import Konva from 'konva' import { EventBus } from '@/event-bus' import PointerEventMapper, { CustomStageConfig } from '@/util/PointerEventMapper' import { KonvaPointerEvent } from 'konva/types/PointerEvents' import HandleRenderShapes from '@/util/HandleRenderShapes' -import { StageActions, StageGetters } from '@/store/modules/stage' -import { LayerActions, LayerGetters } from '@/store/modules/layer' -import { CanvasEntityGetters, CanvasEntityState } from '@/store/modules/canvasEntity' +import { AppStageActions, AppStageGetters } from '@/store/modules/app/stage' +import { SocketStageActions, SocketStageGetters } from '@/store/modules/socket/stage' +import { AppLayerActions, AppLayerGetters } from '@/store/modules/app/layer' +import { AppCanvasEntityGetters, AppCanvasEntityState } from '@/store/modules/app/canvasEntity' import CanvasSockets from '@/mixins/CanvasSockets' import StageWatcher from '@/mixins/StageWatcher' +import { Namespaces } from '@/store' + +const AppCanvasEntity = namespace(Namespaces.APP_CANVAS_ENTITY) +const AppLayer = namespace(Namespaces.APP_LAYER) +const AppStage = namespace(Namespaces.APP_STAGE) +const AppTools = namespace(Namespaces.APP_TOOLS) +const SocketCanvas = namespace(Namespaces.SOCKET_CANVAS) +const SocketStage = namespace(Namespaces.SOCKET_STAGE) + @Component({ name: 'TheCanvas', mixins: [CanvasSockets, StageWatcher] }) export default class TheCanvas extends mixins(CanvasSockets, StageWatcher) { - @Getter(`tools/${ToolGetters.ENABLED_TOOL}`) enabledTool!: Tool - @Getter(`tools/${ToolGetters.TOOLS}`) tools!: Tool[] - @Action(`canvas/${CanvasAction.ADD_CANVAS_ELEMENT}`) addCanvasElement!: (canvasElement: CanvasElement) => void - @Getter(`canvas/${CanvasGetters.CANVAS_ELEMENTS}`) canvasElements!: CanvasElement[] - @Getter(`stage/${StageGetters.STAGE_ZOOM}`) stageZoom!: number - @Getter(`stage/${StageGetters.STAGE_CONFIG}`) stageConfig!: CustomStageConfig - @Action(`layer/${LayerActions.LAYER_SET}`) setLayer!: (layer: Konva.Layer) => void - @Getter(`layer/${LayerGetters.LAYER}`) layerNode!: Konva.Layer - @Action(`stage/${StageActions.SET_STAGE}`) setStage!: (stage: Konva.Stage) => void - @Getter(`stage/${StageGetters.STAGE}`) stage!: Konva.Stage - @Getter(`canvasEntity/${CanvasEntityGetters.CANVAS_ENTITY}`) canvasEntity!: CanvasEntityState + @AppCanvasEntity.Getter(AppCanvasEntityGetters.CANVAS_ENTITY) canvasEntity!: AppCanvasEntityState + @AppTools.Getter(AppToolGetters.ENABLED_TOOL) enabledTool!: Tool + @AppTools.Getter(AppToolGetters.TOOLS) tools!: Tool[] + @AppLayer.Getter(AppLayerGetters.LAYER) layerNode!: Konva.Layer + @AppStage.Getter(AppStageGetters.STAGE) stage!: Konva.Stage + @AppStage.Getter(AppStageGetters.STAGE_ZOOM) stageZoom!: number + @SocketCanvas.Getter(SocketCanvasGetters.CANVAS_ELEMENTS) canvasElements!: CanvasElement[] + @SocketStage.Getter(SocketStageGetters.STAGE_CONFIG) stageConfig!: CustomStageConfig + @AppLayer.Action(AppLayerActions.LAYER_SET) setLayer!: (layer: Konva.Layer) => void + @AppStage.Action(AppStageActions.SET_STAGE) setStage!: (stage: Konva.Stage) => void + @SocketCanvas.Action(SocketCanvasAction.ADD_CANVAS_ELEMENT) addCanvasElement!: (canvasElement: CanvasElement) => void $refs!: { layer: VueKonvaLayer; diff --git a/src/components/TheEntityPanel.vue b/src/components/TheEntityPanel.vue index de4a5dd..fe5c99f 100644 --- a/src/components/TheEntityPanel.vue +++ b/src/components/TheEntityPanel.vue @@ -9,8 +9,8 @@ tile class="custom-entity-panel" > - - + + @@ -23,13 +23,12 @@
- +
@@ -44,8 +43,9 @@