From a109a01959de0d37f85feb8d35417ad8a533dcb8 Mon Sep 17 00:00:00 2001 From: Torben Indorf Date: Sun, 2 Feb 2020 15:22:20 +0100 Subject: [PATCH] create entity-stuff --- src/api/RepositoryFactory.ts | 6 +- src/api/repositories/AreaRepository.ts | 2 +- src/api/repositories/EntityRepository.ts | 20 +++++ src/api/repositories/StatusRepository.ts | 20 +++++ src/api/repositories/UserRepository.ts | 2 +- src/components/area/AreaTable.component.vue | 8 +- src/components/area/CreateArea.component.vue | 1 + .../entity/CreateEntity.component.vue | 77 +++++++++++++++++++ .../entity/EntityTable.component.vue | 75 ++++++++++++++++++ .../status/CreateStatus.component.vue | 77 +++++++++++++++++++ .../status/StatusTable.component.vue | 77 +++++++++++++++++++ src/components/user/CreateUser.component.vue | 1 + src/components/user/UserTable.component.vue | 2 +- src/helper/NavigationItemStorage.ts | 2 +- src/models/Entity.ts | 10 +++ src/models/Status.ts | 9 +++ src/router.ts | 2 +- src/store.ts | 10 +++ src/stores/area.store.ts | 3 +- src/stores/entity.store.ts | 62 +++++++++++++++ src/stores/status.store.ts | 62 +++++++++++++++ src/views/areas/Areas.view.vue | 7 +- src/views/entities/Entites.view.vue | 16 ---- src/views/entity/Entity.view.vue | 45 +++++++++++ src/views/status/Status.view.vue | 37 ++++++++- 25 files changed, 595 insertions(+), 38 deletions(-) create mode 100644 src/api/repositories/EntityRepository.ts create mode 100644 src/api/repositories/StatusRepository.ts create mode 100644 src/components/entity/CreateEntity.component.vue create mode 100644 src/components/entity/EntityTable.component.vue create mode 100644 src/components/status/CreateStatus.component.vue create mode 100644 src/components/status/StatusTable.component.vue create mode 100644 src/models/Entity.ts create mode 100644 src/models/Status.ts create mode 100644 src/stores/entity.store.ts create mode 100644 src/stores/status.store.ts delete mode 100644 src/views/entities/Entites.view.vue create mode 100644 src/views/entity/Entity.view.vue diff --git a/src/api/RepositoryFactory.ts b/src/api/RepositoryFactory.ts index 9d7ec8f..75b58c9 100644 --- a/src/api/RepositoryFactory.ts +++ b/src/api/RepositoryFactory.ts @@ -1,12 +1,16 @@ import AuthRepository from '@/api/repositories/AuthRepository'; import AreaRepository from '@/api/repositories/AreaRepository'; import UserRepository from '@/api/repositories/UserRepository'; +import StatusRepository from '@/api/repositories/StatusRepository'; +import EntityRepository from '@/api/repositories/EntityRepository'; const repositories: any = { auth: {repository: AuthRepository, instance: null}, area: {repository: AreaRepository, instance: null}, - user: {repository: UserRepository, instance: null} + user: {repository: UserRepository, instance: null}, + status: {repository: StatusRepository, instance: null}, + entity: {repository: EntityRepository, instance: null} }; /** diff --git a/src/api/repositories/AreaRepository.ts b/src/api/repositories/AreaRepository.ts index cd0f4d0..2fc30c7 100644 --- a/src/api/repositories/AreaRepository.ts +++ b/src/api/repositories/AreaRepository.ts @@ -15,7 +15,7 @@ export default class AreaRepository extends BaseRepository { } public editArea(area: any): Promise { - return this.axiosClient.put(`area/${area.id}`, area); + return this.axiosClient.patch(`area/${area.id}`, area); } public setUsers(area: any, userIds: any): Promise { diff --git a/src/api/repositories/EntityRepository.ts b/src/api/repositories/EntityRepository.ts new file mode 100644 index 0000000..3c78b7c --- /dev/null +++ b/src/api/repositories/EntityRepository.ts @@ -0,0 +1,20 @@ +import BaseRepository from '@/api/repositories/BaseRepository'; + +export default class EntityRepository extends BaseRepository { + + public loadAllEntities(): Promise { + return this.axiosClient(`entity`); + } + + public loadEntity(entityId: string): Promise { + return this.axiosClient(`entity/${entityId}`); + } + + public createEntity(entity: any): Promise { + return this.axiosClient.post(`entity`, entity); + } + + public editEntity(entity: any): Promise { + return this.axiosClient.patch(`entity/${entity.id}`, entity); + } +} diff --git a/src/api/repositories/StatusRepository.ts b/src/api/repositories/StatusRepository.ts new file mode 100644 index 0000000..d547052 --- /dev/null +++ b/src/api/repositories/StatusRepository.ts @@ -0,0 +1,20 @@ +import BaseRepository from '@/api/repositories/BaseRepository'; + +export default class StatusRepository extends BaseRepository { + + public loadAllStatus(): Promise { + return this.axiosClient(`status`); + } + + public loadStatus(statusId: string): Promise { + return this.axiosClient(`status/${statusId}`); + } + + public createStatus(status: any): Promise { + return this.axiosClient.post(`status`, status); + } + + public editStatus(status: any): Promise { + return this.axiosClient.patch(`status/${status.id}`, status); + } +} diff --git a/src/api/repositories/UserRepository.ts b/src/api/repositories/UserRepository.ts index 6b32dc0..efc5d2e 100644 --- a/src/api/repositories/UserRepository.ts +++ b/src/api/repositories/UserRepository.ts @@ -15,6 +15,6 @@ export default class UserRepository extends BaseRepository { } public editUser(user: any): Promise { - return this.axiosClient.put(`user/${user.id}`, user); + return this.axiosClient.patch(`user/${user.id}`, user); } } diff --git a/src/components/area/AreaTable.component.vue b/src/components/area/AreaTable.component.vue index 09ba93e..b38ca89 100644 --- a/src/components/area/AreaTable.component.vue +++ b/src/components/area/AreaTable.component.vue @@ -10,7 +10,7 @@ + @closeDialog="showEditAreaDialog = false"> @@ -86,12 +86,6 @@ this.selectedArea = selectedArea; this.showUsersDialog = true; } - - private createdArea() { - this.loadAreas(); - this.showEditAreaDialog = false; - } - } diff --git a/src/components/area/CreateArea.component.vue b/src/components/area/CreateArea.component.vue index 97c0e40..93c8b3b 100644 --- a/src/components/area/CreateArea.component.vue +++ b/src/components/area/CreateArea.component.vue @@ -63,6 +63,7 @@ } else { await this.createAreaAction(this.selectedArea); } + this.closeDialog(); } else { // TODO: Show error message } diff --git a/src/components/entity/CreateEntity.component.vue b/src/components/entity/CreateEntity.component.vue new file mode 100644 index 0000000..4cf4dc2 --- /dev/null +++ b/src/components/entity/CreateEntity.component.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/src/components/entity/EntityTable.component.vue b/src/components/entity/EntityTable.component.vue new file mode 100644 index 0000000..f02bdca --- /dev/null +++ b/src/components/entity/EntityTable.component.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/src/components/status/CreateStatus.component.vue b/src/components/status/CreateStatus.component.vue new file mode 100644 index 0000000..7e70c29 --- /dev/null +++ b/src/components/status/CreateStatus.component.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/src/components/status/StatusTable.component.vue b/src/components/status/StatusTable.component.vue new file mode 100644 index 0000000..c85f619 --- /dev/null +++ b/src/components/status/StatusTable.component.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/src/components/user/CreateUser.component.vue b/src/components/user/CreateUser.component.vue index 8eedfb9..31c4424 100644 --- a/src/components/user/CreateUser.component.vue +++ b/src/components/user/CreateUser.component.vue @@ -81,6 +81,7 @@ } else { await this.createUserAction(this.selectedUser); } + this.closeDialog(); } else { // TODO: Show error message } diff --git a/src/components/user/UserTable.component.vue b/src/components/user/UserTable.component.vue index d5f3a26..19372f9 100644 --- a/src/components/user/UserTable.component.vue +++ b/src/components/user/UserTable.component.vue @@ -11,7 +11,7 @@ + @closeDialog="showEditUserDialog = false"> diff --git a/src/helper/NavigationItemStorage.ts b/src/helper/NavigationItemStorage.ts index 9a15515..9abc0e5 100644 --- a/src/helper/NavigationItemStorage.ts +++ b/src/helper/NavigationItemStorage.ts @@ -45,7 +45,7 @@ export const NavigationItemStorage: NavigationItemInterface[] = [ dropdownOptions: [ { title: 'NAVIGATION.DROPDOWN.ALL_ENTITIES', - routerName: 'entityOverview', + routerName: 'entitiesOverview', icon: 'mdi-account-multiple' }, { diff --git a/src/models/Entity.ts b/src/models/Entity.ts new file mode 100644 index 0000000..3dc9399 --- /dev/null +++ b/src/models/Entity.ts @@ -0,0 +1,10 @@ +export class Entity { + + public id?: string; + public name?: string; + public description?: string; + + constructor(data: any) { + Object.assign(this, data); + } +} diff --git a/src/models/Status.ts b/src/models/Status.ts new file mode 100644 index 0000000..624ffda --- /dev/null +++ b/src/models/Status.ts @@ -0,0 +1,9 @@ +export class Status { + + public id?: string; + public name?: string; + + constructor(data: any) { + Object.assign(this, data); + } +} diff --git a/src/router.ts b/src/router.ts index 53e0d74..2b5e360 100644 --- a/src/router.ts +++ b/src/router.ts @@ -63,7 +63,7 @@ export default new Router({ { path: 'entities', name: 'entitiesOverview', - component: () => import('./views/entities/Entites.view.vue') + component: () => import('./views/entity/Entity.view.vue') }, { path: 'status', diff --git a/src/store.ts b/src/store.ts index a93f72a..745ff54 100644 --- a/src/store.ts +++ b/src/store.ts @@ -4,6 +4,8 @@ import VuexPersistence from 'vuex-persist'; import authStore from './stores/auth.store'; import areaStore from '@/stores/area.store'; import userStore from '@/stores/user.store'; +import statusStore from '@/stores/status.store'; +import entityStore from '@/stores/entity.store'; Vue.use(Vuex); @@ -28,6 +30,14 @@ const store: StoreOptions = { user: { namespaced: true, ...userStore + }, + status: { + namespaced: true, + ...statusStore + }, + entity: { + namespaced: true, + ...entityStore } }, plugins: [vuexPersistence.plugin], diff --git a/src/stores/area.store.ts b/src/stores/area.store.ts index e7aa563..1cddb2c 100644 --- a/src/stores/area.store.ts +++ b/src/stores/area.store.ts @@ -30,7 +30,8 @@ const actions: ActionTree = { return area; }, editAreaAction: async ({commit}, areaData: any): Promise => { - const areaRaw = await areaRepository.createArea(areaData); + delete areaData.users; + const areaRaw = await areaRepository.editArea(areaData); const area = new Area(areaRaw.data); commit('handleArea', area); return area; diff --git a/src/stores/entity.store.ts b/src/stores/entity.store.ts new file mode 100644 index 0000000..501fc7b --- /dev/null +++ b/src/stores/entity.store.ts @@ -0,0 +1,62 @@ +import {ActionTree, Module} from 'vuex'; +import {RepositoryFactory} from '@/api/RepositoryFactory'; +import {Entity} from '@/models/Entity'; +import EntityRepository from '@/api/repositories/EntityRepository'; + +const entityRepository: EntityRepository = RepositoryFactory.get('entity'); + +const store = { + entities: [], +}; + +const actions: ActionTree = { + loadEntitiesAction: async ({commit}): Promise => { + const entitiesRaw = await entityRepository.loadAllEntities(); + const entities = entitiesRaw.data.map((data: any) => new Entity(data)); + commit('storeEntities', entities); + return entities; + }, + loadSingleEntityAction: async ({commit}, entityId: string): Promise => { + const entityRaw = await entityRepository.loadEntity(entityId); + const entity = new Entity(entityRaw.data); + return entity; + }, + createEntityAction: async ({commit}, entityData: any): Promise => { + const entityRaw = await entityRepository.createEntity(entityData); + const entity = new Entity(entityRaw.data); + commit('handleEntity', entity); + return entity; + }, + editEntityAction: async ({commit}, entityData: any): Promise => { + const entityRaw = await entityRepository.editEntity(entityData); + const entity = new Entity(entityRaw.data); + commit('handleEntity', entity); + return entity; + } +}; + +const mutations = { + storeEntities: (state: any, entities: Entity[]) => state.entities = entities, + handleEntity: (state: any, entity: Entity) => { + const index = state.entities.findIndex((item: Entity) => item.id === entity.id); + // replace or add entity object + if (index >= 0) { + state.entities.splice(index, 1, entity); + } else { + state.entities.push(entity); + } + } +}; + +const getters = { + entities: (state: any) => state.entities, +}; + +const entityStore: Module = { + state: store, + actions, + mutations, + getters, +}; + +export default entityStore; diff --git a/src/stores/status.store.ts b/src/stores/status.store.ts new file mode 100644 index 0000000..4601f49 --- /dev/null +++ b/src/stores/status.store.ts @@ -0,0 +1,62 @@ +import {ActionTree, Module} from 'vuex'; +import {RepositoryFactory} from '@/api/RepositoryFactory'; +import StatusRepository from '@/api/repositories/StatusRepository'; +import {Status} from '@/models/Status'; + +const statusRepository: StatusRepository = RepositoryFactory.get('status'); + +const store = { + status: [], +}; + +const actions: ActionTree = { + loadStatusAction: async ({commit}): Promise => { + const statusRaw = await statusRepository.loadAllStatus(); + const status = statusRaw.data.map((data: any) => new Status(data)); + commit('storeStatus', status); + return status; + }, + loadSingleStatusAction: async ({commit}, statusId: string): Promise => { + const statusRaw = await statusRepository.loadStatus(statusId); + const status = new Status(statusRaw.data); + return status; + }, + createStatusAction: async ({commit}, statusData: any): Promise => { + const statusRaw = await statusRepository.createStatus(statusData); + const status = new Status(statusRaw.data); + commit('handleStatus', status); + return status; + }, + editStatusAction: async ({commit}, statusData: any): Promise => { + const statusRaw = await statusRepository.editStatus(statusData); + const status = new Status(statusRaw.data); + commit('handleStatus', status); + return status; + } +}; + +const mutations = { + storeStatus: (state: any, status: Status[]) => state.status = status, + handleStatus: (state: any, status: Status) => { + const index = state.status.findIndex((item: Status) => item.id === status.id); + // replace or add status object + if (index >= 0) { + state.status.splice(index, 1, status); + } else { + state.status.push(status); + } + } +}; + +const getters = { + status: (state: any) => state.status, +}; + +const statusStore: Module = { + state: store, + actions, + mutations, + getters, +}; + +export default statusStore; diff --git a/src/views/areas/Areas.view.vue b/src/views/areas/Areas.view.vue index 26be9db..df088af 100644 --- a/src/views/areas/Areas.view.vue +++ b/src/views/areas/Areas.view.vue @@ -12,7 +12,7 @@ + @closeDialog="showCreateDialog = false"/> @@ -44,11 +44,6 @@ private openCreateDialog() { this.showCreateDialog = true; } - - private createdArea() { - this.loadAreas(); - this.showCreateDialog = false; - } } diff --git a/src/views/entities/Entites.view.vue b/src/views/entities/Entites.view.vue deleted file mode 100644 index 256e541..0000000 --- a/src/views/entities/Entites.view.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - - - diff --git a/src/views/entity/Entity.view.vue b/src/views/entity/Entity.view.vue new file mode 100644 index 0000000..92cb376 --- /dev/null +++ b/src/views/entity/Entity.view.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/views/status/Status.view.vue b/src/views/status/Status.view.vue index 7f0d28b..2e0f46d 100644 --- a/src/views/status/Status.view.vue +++ b/src/views/status/Status.view.vue @@ -1,13 +1,46 @@