From e3fbebe1b800f64da1d32fda285b4b01d429acb7 Mon Sep 17 00:00:00 2001 From: Matthieu Bessat Date: Sat, 11 Jul 2020 00:57:23 +0200 Subject: [PATCH] feat: add tag management feature --- package.json | 7 +- public/index.html | 10 +- src/App.vue | 20 +- src/assets/logo.svg | 1 + src/components/GlobalSnackbar.vue | 29 +++ src/components/HelloWorld.vue | 203 +++++++++++++------ src/components/OrganizationListItem.vue | 3 + src/layouts/Admin.vue | 111 ++++++++++- src/layouts/Organization.vue | 16 +- src/main.ts | 9 + src/plugins/vuetify.ts | 7 + src/router/index.ts | 5 + src/store/index.ts | 15 ++ src/views/Admin/Tags.vue | 252 ++++++++++++++++++++++++ tsconfig.json | 5 +- vue.config.js | 5 + yarn.lock | 114 +++++++++-- 17 files changed, 726 insertions(+), 86 deletions(-) create mode 100644 src/assets/logo.svg create mode 100644 src/components/GlobalSnackbar.vue create mode 100644 src/components/OrganizationListItem.vue create mode 100644 src/plugins/vuetify.ts create mode 100644 src/views/Admin/Tags.vue create mode 100644 vue.config.js diff --git a/package.json b/package.json index 9a47ffc..382504a 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,11 @@ "core-js": "^3.6.5", "register-service-worker": "^1.7.1", "vue": "^2.6.11", + "vue-apitator": "^0.0.16", "vue-class-component": "^7.2.3", "vue-property-decorator": "^8.4.2", "vue-router": "^3.2.0", + "vuetify": "^2.2.11", "vuex": "^3.4.0" }, "devDependencies": { @@ -35,9 +37,12 @@ "eslint-plugin-standard": "^4.0.0", "eslint-plugin-vue": "^6.2.2", "lint-staged": "^9.5.0", + "sass": "^1.19.0", + "sass-loader": "^8.0.0", "typescript": "~3.9.3", "vue-cli-plugin-vuetify": "^2.0.6", - "vue-template-compiler": "^2.6.11" + "vue-template-compiler": "^2.6.11", + "vuetify-loader": "^1.3.0" }, "gitHooks": { "pre-commit": "lint-staged" diff --git a/public/index.html b/public/index.html index 4123528..229abf4 100644 --- a/public/index.html +++ b/public/index.html @@ -5,11 +5,17 @@ - <%= htmlWebpackPlugin.options.title %> + Forum virtuel des associaitons + + +
diff --git a/src/App.vue b/src/App.vue index 66d3b85..76f6032 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,5 +1,21 @@ + + diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 0000000..145b6d1 --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1 @@ +Artboard 46 diff --git a/src/components/GlobalSnackbar.vue b/src/components/GlobalSnackbar.vue new file mode 100644 index 0000000..24914fe --- /dev/null +++ b/src/components/GlobalSnackbar.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue index c725245..ff173ff 100644 --- a/src/components/HelloWorld.vue +++ b/src/components/HelloWorld.vue @@ -1,62 +1,153 @@ - - - diff --git a/src/components/OrganizationListItem.vue b/src/components/OrganizationListItem.vue new file mode 100644 index 0000000..61c7765 --- /dev/null +++ b/src/components/OrganizationListItem.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src/layouts/Admin.vue b/src/layouts/Admin.vue index 91c6c26..1dbae87 100644 --- a/src/layouts/Admin.vue +++ b/src/layouts/Admin.vue @@ -1,14 +1,119 @@ diff --git a/src/layouts/Organization.vue b/src/layouts/Organization.vue index 2ff359b..13d8ebb 100644 --- a/src/layouts/Organization.vue +++ b/src/layouts/Organization.vue @@ -8,7 +8,21 @@ diff --git a/src/main.ts b/src/main.ts index d12df39..2341423 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,11 +3,20 @@ import App from './App.vue' import './registerServiceWorker' import router from './router' import store from './store' +import vuetify from './plugins/vuetify' +import apitator from 'vue-apitator' Vue.config.productionTip = false +Vue.use(apitator, { + baseUrl: 'http://localhost:8001' +}) +Vue.filter('less', (s: string, l = 60) => { + return s.substr(0, l) + (s.length > 60 ? '...' : '') +}) new Vue({ router, store, + vuetify, render: h => h(App) }).$mount('#app') diff --git a/src/plugins/vuetify.ts b/src/plugins/vuetify.ts new file mode 100644 index 0000000..8e697aa --- /dev/null +++ b/src/plugins/vuetify.ts @@ -0,0 +1,7 @@ +import Vue from 'vue' +import Vuetify from 'vuetify/lib' + +Vue.use(Vuetify) + +export default new Vuetify({ +}) diff --git a/src/router/index.ts b/src/router/index.ts index 91ad774..95fec4f 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -28,6 +28,11 @@ const routes: Array = [ path: '/', name: 'OrganizationList', component: () => import(/* webpackChunkName: "organizationList" */ '../views/Admin/OrganizationList.vue') + }, + { + path: 'tags', + name: 'Tags', + component: () => import(/* webpackChunkName: "tags" */ '../views/Admin/Tags.vue') } ] } diff --git a/src/store/index.ts b/src/store/index.ts index 332b916..89d71f0 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -5,8 +5,23 @@ Vue.use(Vuex) export default new Vuex.Store({ state: { + alert: { + color: '', + text: '', + enabled: false + } }, mutations: { + ADD_ALERT (state, payload) { + state.alert = { + color: payload.color, + text: payload.text, + enabled: true + } + }, + DISABLE_ALERT (state) { + state.alert.enabled = false + } }, actions: { }, diff --git a/src/views/Admin/Tags.vue b/src/views/Admin/Tags.vue new file mode 100644 index 0000000..352efe0 --- /dev/null +++ b/src/views/Admin/Tags.vue @@ -0,0 +1,252 @@ + + + diff --git a/tsconfig.json b/tsconfig.json index b57578e..74cc5e8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,5 @@ { - "compilerOptions": { + "compilerOptions": { "target": "esnext", "module": "esnext", "strict": true, @@ -12,7 +12,8 @@ "sourceMap": true, "baseUrl": ".", "types": [ - "webpack-env" + "webpack-env", + "vuetify" ], "paths": { "@/*": [ diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..2ae460b --- /dev/null +++ b/vue.config.js @@ -0,0 +1,5 @@ +module.exports = { + transpileDependencies: [ + 'vuetify' + ] +} diff --git a/yarn.lock b/yarn.lock index fbbae64..9c97fbc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1776,6 +1776,13 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== +axios@^0.19.0: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + babel-code-frame@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -2297,6 +2304,21 @@ check-types@^8.0.3: resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== +"chokidar@>=2.0.0 <4.0.0", chokidar@^3.3.0, chokidar@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" + integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -2316,21 +2338,6 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.3.0, chokidar@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" - integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.4.0" - optionalDependencies: - fsevents "~2.1.2" - chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -2449,6 +2456,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -2991,6 +3007,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: dependencies: ms "2.0.0" +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -3986,7 +4009,7 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -file-loader@^4.2.0: +file-loader@^4.0.0, file-loader@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== @@ -4118,6 +4141,13 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + follow-redirects@^1.0.0: version "1.12.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6" @@ -5513,7 +5543,7 @@ loader-utils@^0.2.16: json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.0, loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -7582,6 +7612,24 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sass-loader@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" + integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== + dependencies: + clone-deep "^4.0.1" + loader-utils "^1.2.3" + neo-async "^2.6.1" + schema-utils "^2.6.1" + semver "^6.3.0" + +sass@^1.19.0: + version "1.26.10" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.10.tgz#851d126021cdc93decbf201d1eca2a20ee434760" + integrity sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw== + dependencies: + chokidar ">=2.0.0 <4.0.0" + sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -7596,7 +7644,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: +schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== @@ -7734,6 +7782,13 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -8804,6 +8859,14 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== +vue-apitator@^0.0.16: + version "0.0.16" + resolved "https://registry.yarnpkg.com/vue-apitator/-/vue-apitator-0.0.16.tgz#4c59f617aa692e7f0d3fd059424c3938a9666bea" + integrity sha512-k0hQS8jR10avPTd28vPHjTV+H7aW2pfSz4O3gJ4D1z5J/ne4l+ygNAqQofOzgGL9bKaiojc9Guxr2f34fnUvYg== + dependencies: + axios "^0.19.0" + vue "^2.5.17" + vue-class-component@^7.1.0, vue-class-component@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-7.2.3.tgz#a5b1abd53513a72ad51098752e2dedd499807cca" @@ -8878,11 +8941,24 @@ vue-template-es2015-compiler@^1.9.0: resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== -vue@^2.6.11: +vue@^2.5.17, vue@^2.6.11: version "2.6.11" resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5" integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ== +vuetify-loader@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/vuetify-loader/-/vuetify-loader-1.5.0.tgz#511173c4d1498761210708f7e475dff60fcee8bb" + integrity sha512-JC2EVAblox2FFWE8NIUoHvQmGnnGJLrHISo2Ngciov3mWEWpt2B3qfQ3CYwmUJ7nM99DQgYDdNs26Dg3bgKzEQ== + dependencies: + file-loader "^4.0.0" + loader-utils "^1.2.0" + +vuetify@^2.2.11: + version "2.3.4" + resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-2.3.4.tgz#fdb03b3281d40a8420b0295ea865843abdc69792" + integrity sha512-vMtCNqv5BhrjfTfIhH2Lptoxx7z/Nu1NfBiZ2oCvI2QbTagMlhF5GMXgbnnyTGIjooFf/ozKznuMxk6tuI5cxw== + vuex@^3.4.0: version "3.5.1" resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.5.1.tgz#f1b8dcea649bc25254cf4f4358081dbf5da18b3d"