From 034b6b7b5cc162e7dbce9682eb99e017d7cde2a6 Mon Sep 17 00:00:00 2001 From: SebClem Date: Fri, 17 Jun 2022 18:08:04 +0200 Subject: [PATCH] :hammer: Add setting skeleton --- package.json | 2 +- src/App.vue | 6 ++ src/components/Header/HeaderComponent.vue | 2 +- src/components/Header/ServerListComponent.vue | 2 +- .../guild/Settings/SettingGroupComponent.vue | 68 ++++++++++++++ .../guild/Settings/SettingListComponent.vue | 84 +++++++++++++++++ .../Settings/fields/BoolFieldComponent.vue | 34 +++++++ .../Settings/fields/SelectFieldComponent.vue | 50 ++++++++++ .../Settings/fields/TextFieldComponent.vue | 30 ++++++ .../guild/home/SettingPreviewComponent.vue | 4 +- src/data/Setting/SettingDescription.ts | 14 +++ src/data/Setting/SettingValue.ts | 5 + src/data/guild/Channel.ts | 6 ++ src/data/{ => guild}/Guild.ts | 0 src/services/guildService.ts | 94 ++++++++++++++++++- src/services/settingsService.ts | 19 ++++ src/stores/mutualGuilds.ts | 2 +- src/stores/setting.ts | 15 +++ src/tools/GuildTools.ts | 2 +- src/views/GuildHomeView.vue | 2 +- src/views/GuildSettingView.vue | 28 +++++- yarn.lock | 12 +-- 22 files changed, 463 insertions(+), 18 deletions(-) create mode 100644 src/components/guild/Settings/SettingGroupComponent.vue create mode 100644 src/components/guild/Settings/SettingListComponent.vue create mode 100644 src/components/guild/Settings/fields/BoolFieldComponent.vue create mode 100644 src/components/guild/Settings/fields/SelectFieldComponent.vue create mode 100644 src/components/guild/Settings/fields/TextFieldComponent.vue create mode 100644 src/data/Setting/SettingDescription.ts create mode 100644 src/data/Setting/SettingValue.ts create mode 100644 src/data/guild/Channel.ts rename src/data/{ => guild}/Guild.ts (100%) create mode 100644 src/services/settingsService.ts create mode 100644 src/stores/setting.ts diff --git a/package.json b/package.json index c4c9d2c..a359b7c 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "uuid": "^8.3.2", "vue": "^3.2.33", "vue-router": "^4.0.14", - "vuetify": "^3.0.0-beta.2", + "vuetify": "^3.0.0-beta.3", "webfontloader": "^1.0.0" }, "devDependencies": { diff --git a/src/App.vue b/src/App.vue index 84a8718..3e55b4d 100644 --- a/src/App.vue +++ b/src/App.vue @@ -16,3 +16,9 @@ + + diff --git a/src/components/Header/HeaderComponent.vue b/src/components/Header/HeaderComponent.vue index bde785f..c3df782 100644 --- a/src/components/Header/HeaderComponent.vue +++ b/src/components/Header/HeaderComponent.vue @@ -16,7 +16,7 @@ + + diff --git a/src/components/guild/Settings/SettingListComponent.vue b/src/components/guild/Settings/SettingListComponent.vue new file mode 100644 index 0000000..b703ba1 --- /dev/null +++ b/src/components/guild/Settings/SettingListComponent.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/guild/Settings/fields/BoolFieldComponent.vue b/src/components/guild/Settings/fields/BoolFieldComponent.vue new file mode 100644 index 0000000..9c67155 --- /dev/null +++ b/src/components/guild/Settings/fields/BoolFieldComponent.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/src/components/guild/Settings/fields/SelectFieldComponent.vue b/src/components/guild/Settings/fields/SelectFieldComponent.vue new file mode 100644 index 0000000..246f714 --- /dev/null +++ b/src/components/guild/Settings/fields/SelectFieldComponent.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/src/components/guild/Settings/fields/TextFieldComponent.vue b/src/components/guild/Settings/fields/TextFieldComponent.vue new file mode 100644 index 0000000..844ed86 --- /dev/null +++ b/src/components/guild/Settings/fields/TextFieldComponent.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/src/components/guild/home/SettingPreviewComponent.vue b/src/components/guild/home/SettingPreviewComponent.vue index 5945e25..5a3d697 100644 --- a/src/components/guild/home/SettingPreviewComponent.vue +++ b/src/components/guild/home/SettingPreviewComponent.vue @@ -20,10 +20,10 @@ diff --git a/src/data/Setting/SettingDescription.ts b/src/data/Setting/SettingDescription.ts new file mode 100644 index 0000000..a8f1038 --- /dev/null +++ b/src/data/Setting/SettingDescription.ts @@ -0,0 +1,14 @@ +type SettingDescrition = { + name: string; + mainField: FieldDescriptor; + fields: FieldDescriptor[]; +}; + +type FieldDescriptor = { + id: string; + name: string; + description: string; + type: string; +}; + +export type { SettingDescrition, FieldDescriptor }; diff --git a/src/data/Setting/SettingValue.ts b/src/data/Setting/SettingValue.ts new file mode 100644 index 0000000..f64121a --- /dev/null +++ b/src/data/Setting/SettingValue.ts @@ -0,0 +1,5 @@ +type SettingValue = { + [key: string]: string | boolean; +}; + +export type { SettingValue }; diff --git a/src/data/guild/Channel.ts b/src/data/guild/Channel.ts new file mode 100644 index 0000000..510fc89 --- /dev/null +++ b/src/data/guild/Channel.ts @@ -0,0 +1,6 @@ +type Chanel = { + id: string; + name: string; +}; + +export type { Chanel }; diff --git a/src/data/Guild.ts b/src/data/guild/Guild.ts similarity index 100% rename from src/data/Guild.ts rename to src/data/guild/Guild.ts diff --git a/src/services/guildService.ts b/src/services/guildService.ts index 28bf93a..9241a70 100644 --- a/src/services/guildService.ts +++ b/src/services/guildService.ts @@ -1,4 +1,5 @@ -import type { Guild } from "@/data/Guild"; +import type { Chanel } from "@/data/guild/Channel"; +import type { Guild } from "@/data/guild/Guild"; import type { InviteLink } from "@/data/InviteLink"; import { useEventQueuStore } from "@/stores/eventQueu"; import { useUserStore } from "@/stores/user"; @@ -21,6 +22,12 @@ function getMutualGuilds(): Promise { .catch((reason) => { console.error(`Fail to get mutal guilds !`); console.log(reason); + const eventQueuStore = useEventQueuStore(); + eventQueuStore.push({ + uuid: undefined, + type: "error", + text: "Fail to retrive guilds !", + }); reject(reason); }); }); @@ -54,4 +61,87 @@ function getInviteLink(): Promise { }); } -export { getMutualGuilds, getInviteLink }; +function getTextChannels(guildId: string): Promise { + return new Promise((resolve, reject) => { + const userStore = useUserStore(); + axios + .get(`/guild/${guildId}/textChannels`, { + headers: { + authorization: `Bearer ${userStore.token}`, + }, + }) + .then((value) => { + resolve(value.data); + }) + .catch((reason) => { + console.error(`Fail to get text channels !`); + console.log(reason); + const eventQueuStore = useEventQueuStore(); + eventQueuStore.push({ + uuid: undefined, + type: "error", + text: "Fail to retrive text channels!", + }); + reject(reason); + }); + }); +} + +function getVoiceChannels(guildId: string): Promise { + return new Promise((resolve, reject) => { + const userStore = useUserStore(); + axios + .get(`/guild/${guildId}/voiceChannels`, { + headers: { + authorization: `Bearer ${userStore.token}`, + }, + }) + .then((value) => { + resolve(value.data); + }) + .catch((reason) => { + console.error(`Fail to get text channels !`); + console.log(reason); + const eventQueuStore = useEventQueuStore(); + eventQueuStore.push({ + uuid: undefined, + type: "error", + text: "Fail to retrive voice channels!", + }); + reject(reason); + }); + }); +} +function getRoles(guildId: string): Promise { + return new Promise((resolve, reject) => { + const userStore = useUserStore(); + axios + .get(`/guild/${guildId}/roles`, { + headers: { + authorization: `Bearer ${userStore.token}`, + }, + }) + .then((value) => { + resolve(value.data); + }) + .catch((reason) => { + console.error(`Fail to get roles !`); + console.log(reason); + const eventQueuStore = useEventQueuStore(); + eventQueuStore.push({ + uuid: undefined, + type: "error", + text: "Fail to retrive roles!", + }); + reject(reason); + }); + }); +} + +export { + getMutualGuilds, + getInviteLink, + getTextChannels, + getVoiceChannels, + getRoles, +}; diff --git a/src/services/settingsService.ts b/src/services/settingsService.ts new file mode 100644 index 0000000..3dfa8bb --- /dev/null +++ b/src/services/settingsService.ts @@ -0,0 +1,19 @@ +import type { SettingDescrition } from "@/data/Setting/SettingDescription"; +import { useUserStore } from "@/stores/user"; +import axios from "axios"; + +export function getSettingDescrition() { + return new Promise((resole, reject) => { + const userStore = useUserStore(); + + axios + .get("/setting/description", { + headers: { + authorization: `Bearer ${userStore.token}`, + }, + }) + .then((value) => { + resole(value.data); + }); + }); +} diff --git a/src/stores/mutualGuilds.ts b/src/stores/mutualGuilds.ts index edc2440..3195aef 100644 --- a/src/stores/mutualGuilds.ts +++ b/src/stores/mutualGuilds.ts @@ -1,4 +1,4 @@ -import type { Guild } from "@/data/Guild"; +import type { Guild } from "@/data/guild/Guild"; import { defineStore } from "pinia"; export const useMutualGuildsStore = defineStore({ diff --git a/src/stores/setting.ts b/src/stores/setting.ts new file mode 100644 index 0000000..5aea389 --- /dev/null +++ b/src/stores/setting.ts @@ -0,0 +1,15 @@ +import type { SettingValue } from "@/data/Setting/SettingValue"; +import { defineStore } from "pinia"; + +export const useSettingStore = defineStore({ + id: "setting", + state: () => ({ + values: {} as SettingValue, + text_channels: [] as SettingValue[], + voice_channels: [] as SettingValue[], + roles: [] as SettingValue[], + loading: true, + }), + getters: {}, + actions: {}, +}); diff --git a/src/tools/GuildTools.ts b/src/tools/GuildTools.ts index 78e257c..4d02d79 100644 --- a/src/tools/GuildTools.ts +++ b/src/tools/GuildTools.ts @@ -1,4 +1,4 @@ -import type { Guild } from "@/data/Guild"; +import type { Guild } from "@/data/guild/Guild"; import { useMutualGuildsStore } from "@/stores/mutualGuilds"; import type { Router } from "vue-router"; diff --git a/src/views/GuildHomeView.vue b/src/views/GuildHomeView.vue index 479f4a0..0958230 100644 --- a/src/views/GuildHomeView.vue +++ b/src/views/GuildHomeView.vue @@ -1,5 +1,5 @@