From 4910d4600f3e4ec379444190057baf43f90f00d5 Mon Sep 17 00:00:00 2001 From: Matteo Cominetti Date: Thu, 1 Oct 2020 14:43:06 +0100 Subject: [PATCH 01/44] chore(frontend): updates packages --- frontend/package-lock.json | 128 ++++++++++++++++++++++++------------- frontend/package.json | 24 +++---- package-lock.json | 5 -- 3 files changed, 96 insertions(+), 61 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f7c0952ba..ddca2ce1d 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1127,9 +1127,9 @@ } }, "@mdi/font": { - "version": "5.3.45", - "resolved": "https://registry.npmjs.org/@mdi/font/-/font-5.3.45.tgz", - "integrity": "sha512-SD5d2vHEKRvDCInZQFXOwiFpBlzpuZOiqwxKf6E+zCt7UDc52TUSrL0+TXqY57VQh/SnTpZVXM+Uvs21OdPFWg==", + "version": "5.6.55", + "resolved": "https://registry.npmjs.org/@mdi/font/-/font-5.6.55.tgz", + "integrity": "sha512-6wWrpTXiv2wBtoCL+EJ9Xxfy6Tv6Q1KxmrX54/M23tBNmdGmh417y1tn327oXQxO1nq7BiHGAKkWQZ/GQPLTCA==", "dev": true }, "@mrmlnc/readdir-enhanced": { @@ -2891,6 +2891,12 @@ "path-is-absolute": "^1.0.0" } }, + "graphql-tag": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.3.tgz", + "integrity": "sha512-4FOv3ZKfA4WdOKJeHdz6B3F/vxBLSgmBcGeAFPf4n1F64ltJUvOOerNj0rsJxONQGdhUMynQIvd6LzB+1J5oKA==", + "dev": true + }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -5307,9 +5313,9 @@ } }, "crypto-random-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-3.2.0.tgz", - "integrity": "sha512-8vPu5bsKaq2uKRy3OL7h1Oo7RayAWB8sYexLKAqvCXVib8SxgbmoF1IN4QMKjBv8uI8mp5gPPMbiRah25GMrVQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-3.3.0.tgz", + "integrity": "sha512-teWAwfMb1d6brahYyKqcBEb5Yp8PJPvPOdOonXDnvaKOTmKDFNVE8E3Y2XQuzjNV/3XMwHbrX9fHWvrhRKt4Gg==", "requires": { "type-fest": "^0.8.1" }, @@ -7129,9 +7135,9 @@ } }, "graphql-tag": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.3.tgz", - "integrity": "sha512-4FOv3ZKfA4WdOKJeHdz6B3F/vxBLSgmBcGeAFPf4n1F64ltJUvOOerNj0rsJxONQGdhUMynQIvd6LzB+1J5oKA==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.11.0.tgz", + "integrity": "sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA==", "dev": true }, "graphql-tools": { @@ -9512,6 +9518,29 @@ "boolbase": "~1.0.0" } }, + "null-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-3.0.0.tgz", + "integrity": "sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", @@ -10922,7 +10951,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -11400,8 +11428,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -11419,9 +11446,9 @@ "dev": true }, "sass": { - "version": "1.26.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.5.tgz", - "integrity": "sha512-FG2swzaZUiX53YzZSjSakzvGtlds0lcbF+URuU9mxOv7WBh7NhXEVDa4kPKN4hN6fC2TkOTOKqiqp6d53N9X5Q==", + "version": "1.26.11", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.11.tgz", + "integrity": "sha512-W1l/+vjGjIamsJ6OnTe0K37U2DBO/dgsv2Z4c89XQ8ZOO6l/VwkqwLSqoYzJeJs6CLuGSTRWc91GbQFL3lvrvw==", "dev": true, "requires": { "chokidar": ">=2.0.0 <4.0.0" @@ -11559,7 +11586,8 @@ "serialize-javascript": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==" + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", + "dev": true }, "serve-index": { "version": "1.9.1", @@ -12642,9 +12670,9 @@ } }, "throttle-debounce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.1.0.tgz", - "integrity": "sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz", + "integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==" }, "through2": { "version": "2.0.5", @@ -13313,18 +13341,28 @@ "dev": true }, "vue": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz", - "integrity": "sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==" + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz", + "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==" }, "vue-apollo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vue-apollo/-/vue-apollo-3.0.3.tgz", - "integrity": "sha512-WJaQ1v/i46/oIPlKv7J0Tx6tTlbuaeCdhrAbL06h+Zca2gzr5ywjUFpl8ijMTGJsQ+Ph/U4xEpBFBOMxQmL+7g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/vue-apollo/-/vue-apollo-3.0.4.tgz", + "integrity": "sha512-sthSS9E6FB7OMmSJmIG7e89QZvzwK/1PCD8A/IfGBST48pxY7sdSxRp22Gu2/s/gxQBnQPI1H1ZPZE97IG+zXA==", "requires": { "chalk": "^2.4.2", - "serialize-javascript": "^2.1.0", + "serialize-javascript": "^4.0.0", "throttle-debounce": "^2.1.0" + }, + "dependencies": { + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + } } }, "vue-cli-plugin-apollo": { @@ -13486,11 +13524,12 @@ } }, "vue-cli-plugin-vuetify": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vue-cli-plugin-vuetify/-/vue-cli-plugin-vuetify-2.0.5.tgz", - "integrity": "sha512-jtxcidjLT5f1H9QLYKLFjo/ZG42ud4pI9bK3WNO5DXyhiMDMTwSZ7b3NcJVRH7tKYbv5/ty0VPdDGlf4w22AMA==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/vue-cli-plugin-vuetify/-/vue-cli-plugin-vuetify-2.0.7.tgz", + "integrity": "sha512-4riK5bzyvkZ4CxpQk/Vl6z8n8tmJUhuxh+k8xc/MZRdCt9RxAm3G4SxcEweroqKGXg+CRRfhqysaEQVtd4D40Q==", "dev": true, "requires": { + "null-loader": "^3.0.0", "semver": "^7.1.2", "shelljs": "^0.8.3" }, @@ -13531,9 +13570,9 @@ } }, "vue-router": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.2.0.tgz", - "integrity": "sha512-khkrcUIzMcI1rDcNtqkvLwfRFzB97GmJEsPAQdj7t/VvpGhmXLOkUfhc+Ah8CvpSXGXwuWuQO+x8Sy/xDhXZIA==" + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.5.tgz", + "integrity": "sha512-ioRY5QyDpXM9TDjOX6hX79gtaMXSVDDzSlbIlyAmbHNteIL81WIVB2e+jbzV23vzxtoV0krdS2XHm+GxFg+Nxg==" }, "vue-style-loader": { "version": "4.1.2", @@ -13554,9 +13593,9 @@ } }, "vue-template-compiler": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz", - "integrity": "sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", + "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", "dev": true, "requires": { "de-indent": "^1.0.2", @@ -13570,23 +13609,24 @@ "dev": true }, "vuetify": { - "version": "2.2.29", - "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-2.2.29.tgz", - "integrity": "sha512-UI1i8kEdV+s7tNQe2yJJMPlvxGTE8cZfUAXEGV2yO4owHmeybn6p5YzFpJqimoKkfX6ok+zV29+6yIKfkyUDAA==" + "version": "2.3.12", + "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-2.3.12.tgz", + "integrity": "sha512-FSt1pzpf0/Lh0xuctAPB7RiLbUl7bzVc7ejbXLLhfmgm7zD7yabuhVYuyVda/SzokjZMGS3j1lNu2lLfdrz0oQ==" }, "vuetify-loader": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/vuetify-loader/-/vuetify-loader-1.4.3.tgz", - "integrity": "sha512-fS0wRil682Ebsj2as+eruBoMPKaQYDhu/fDAndnTItzSY4RK4LOEIsssVL4vD6QY8dvUgoGL84SUQ6vGr777CA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vuetify-loader/-/vuetify-loader-1.6.0.tgz", + "integrity": "sha512-1bx3YeZ712dT1+QMX+XSFlP0O5k5O5Ui9ysBBmUZ9bWkAEHWZJQI9soI+qG5qmeFxUC0L9QYMCIKP0hOL/pf3Q==", "dev": true, "requires": { + "file-loader": "^4.0.0", "loader-utils": "^1.2.0" } }, "vuex": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.4.0.tgz", - "integrity": "sha512-ajtqwEW/QhnrBZQsZxCLHThZZaa+Db45c92Asf46ZDXu6uHXgbfVuBaJ4gzD2r4UX0oMJHstFwd2r2HM4l8umg==" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.5.1.tgz", + "integrity": "sha512-w7oJzmHQs0FM9LXodfskhw9wgKBiaB+totOdb8sNzbTB2KDCEEwEs29NzBZFh/lmEK1t5tDmM1vtsO7ubG1DFw==" }, "watchpack": { "version": "1.7.2", diff --git a/frontend/package.json b/frontend/package.json index 75c785c71..69cd3f487 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -10,26 +10,26 @@ }, "dependencies": { "core-js": "^3.6.4", - "crypto-random-string": "^3.2.0", + "crypto-random-string": "^3.3.0", "lodash.debounce": "^4.0.8", - "vue": "^2.6.11", - "vue-apollo": "^3.0.0-beta.11", - "vue-router": "^3.1.6", - "vuetify": "^2.2.11", - "vuex": "^3.1.3" + "vue": "^2.6.12", + "vue-apollo": "^3.0.4", + "vue-router": "^3.4.5", + "vuetify": "^2.3.12", + "vuex": "^3.5.1" }, "devDependencies": { - "@mdi/font": "^5.3.45", + "@mdi/font": "^5.6.55", "@vue/cli-plugin-babel": "~4.3.0", "@vue/cli-plugin-router": "~4.3.0", "@vue/cli-plugin-vuex": "~4.3.0", "@vue/cli-service": "~4.3.0", - "graphql-tag": "^2.9.0", - "sass": "^1.19.0", + "graphql-tag": "^2.11.0", + "sass": "^1.26.11", "sass-loader": "^8.0.0", "vue-cli-plugin-apollo": "~0.21.3", - "vue-cli-plugin-vuetify": "~2.0.5", - "vue-template-compiler": "^2.6.11", - "vuetify-loader": "^1.3.0" + "vue-cli-plugin-vuetify": "^2.0.7", + "vue-template-compiler": "^2.6.12", + "vuetify-loader": "^1.6.0" } } diff --git a/package-lock.json b/package-lock.json index 7faaeac66..297de929b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3624,11 +3624,6 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "g": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/g/-/g-2.0.1.tgz", - "integrity": "sha1-C1lj69DKcOO8jGdmk0oCGCHIuFc=" - }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", From 3e8790965b54dab621d2a0d07daf2cacff65f6dd Mon Sep 17 00:00:00 2001 From: Matteo Cominetti Date: Thu, 1 Oct 2020 15:23:58 +0100 Subject: [PATCH 02/44] chore: adds sample .env for frontend --- frontend/.env-example | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 frontend/.env-example diff --git a/frontend/.env-example b/frontend/.env-example new file mode 100644 index 000000000..1a1203507 --- /dev/null +++ b/frontend/.env-example @@ -0,0 +1,6 @@ +#########################################################vvv +# Local dev environments +# If your frontend is served in dev from somewhere else, +# this is going to help out :) +#########################################################vvv +# PORT=8081 \ No newline at end of file From b299e18c2294ac51608a71f65e9ca295b42c36d5 Mon Sep 17 00:00:00 2001 From: Matteo Cominetti Date: Thu, 1 Oct 2020 20:27:25 +0100 Subject: [PATCH 03/44] feat(ui): scaffolds frontend wip --- frontend/.eslintrc.json | 57 +++ frontend/apollo.config.js | 16 +- frontend/package-lock.json | 620 +++++++++++++++++++++++++ frontend/package.json | 2 + frontend/src/AppFrontend.vue | 131 +++++- frontend/src/assets/logo.png | Bin 6849 -> 0 bytes frontend/src/assets/logo.svg | 19 +- frontend/src/components/HelloWorld.vue | 151 ------ frontend/src/graphql/user.gql | 30 ++ frontend/src/store/index.js | 20 +- frontend/src/views/Home.vue | 20 +- 11 files changed, 868 insertions(+), 198 deletions(-) create mode 100644 frontend/.eslintrc.json delete mode 100644 frontend/src/assets/logo.png delete mode 100644 frontend/src/components/HelloWorld.vue create mode 100644 frontend/src/graphql/user.gql diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json new file mode 100644 index 000000000..28940caaa --- /dev/null +++ b/frontend/.eslintrc.json @@ -0,0 +1,57 @@ +{ + "env": { + "browser": true, + "es2021": true + }, + "extends": [ + "eslint:recommended", + "plugin:vue/essential" + ], + "parserOptions": { + "ecmaVersion": 12, + "sourceType": "module" + }, + "plugins": [ + "vue" + ], + "rules": { + "arrow-spacing": [ + 2, + { + "before": true, + "after": true + } + ], + "array-bracket-spacing": [ + 2, + "always" + ], + "block-spacing": [ + 2, + "always" + ], + "camelcase": [ + 1, + { + "properties": "always" + } + ], + "space-in-parens": [ + 2, + "always" + ], + "keyword-spacing": 2, + "semi": "off", + "indent": [ + "error", + 2 + ], + "space-unary-ops": [ + 2, + { + "words": true, + "nonwords": false + } + ] + } +} \ No newline at end of file diff --git a/frontend/apollo.config.js b/frontend/apollo.config.js index 08cdb76b5..be3eb65d5 100644 --- a/frontend/apollo.config.js +++ b/frontend/apollo.config.js @@ -1,20 +1,20 @@ -const path = require('path') +const path = require( 'path' ) // Load .env files -const { loadEnv } = require('vue-cli-plugin-apollo/utils/load-env') -const env = loadEnv([ - path.resolve(__dirname, '.env'), - path.resolve(__dirname, '.env.local') -]) +const { loadEnv } = require( 'vue-cli-plugin-apollo/utils/load-env' ) +const env = loadEnv( [ + path.resolve( __dirname, '.env' ), + path.resolve( __dirname, '.env.local' ) +] ) module.exports = { client: { service: env.VUE_APP_APOLLO_ENGINE_SERVICE, - includes: ['src/**/*.{js,jsx,ts,tsx,vue,gql}'] + includes: [ 'src/**/*.{js,jsx,ts,tsx,vue,gql}' ] }, service: { name: env.VUE_APP_APOLLO_ENGINE_SERVICE, - localSchemaFile: path.resolve(__dirname, './node_modules/.temp/graphql/schema.json') + localSchemaFile: path.resolve( __dirname, './node_modules/.temp/graphql/schema.json' ) }, engine: { endpoint: process.env.APOLLO_ENGINE_API_ENDPOINT, diff --git a/frontend/package-lock.json b/frontend/package-lock.json index ddca2ce1d..01bbb8edb 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1076,6 +1076,87 @@ "tslib": "^1" } }, + "@eslint/eslintrc": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", + "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.5", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", + "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, "@hapi/address": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", @@ -2702,6 +2783,12 @@ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, "acorn-walk": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz", @@ -5598,6 +5685,12 @@ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, "deepmerge": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", @@ -5930,6 +6023,15 @@ "buffer-indexof": "^1.0.0" } }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -6155,6 +6257,23 @@ } } }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + } + } + }, "entities": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.2.tgz", @@ -6239,6 +6358,246 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, + "eslint": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.10.0.tgz", + "integrity": "sha512-BDVffmqWl7JJXqCjAK6lWtcQThZB/aP1HXSH1JKwGwv0LQEdvpR7qzNrUT487RM39B5goWuboFad5ovMBmD8yA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.1.3", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^1.3.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "eslint-plugin-vue": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.0.0.tgz", + "integrity": "sha512-SFcM8ZMdVRUQKrAryl6Q5razrJtloATUOKTZoK/8yvQig1c1L3VRoMLL9AXiV3VNsKXolkk6yeMIiqGf33/Iew==", + "dev": true, + "requires": { + "eslint-utils": "^2.1.0", + "natural-compare": "^1.4.0", + "semver": "^7.3.2", + "vue-eslint-parser": "^7.1.0" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -6249,18 +6608,69 @@ "estraverse": "^4.1.1" } }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, "esm": { "version": "3.2.25", "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", "dev": true }, + "espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "dev": true + } + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", @@ -6641,6 +7051,15 @@ "object-assign": "^4.1.0" } }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, "file-loader": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", @@ -6739,6 +7158,34 @@ "locate-path": "^2.0.0" } }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, "flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", @@ -6880,6 +7327,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "gaze": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", @@ -8315,6 +8768,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -8412,6 +8871,16 @@ "leven": "^3.1.0" } }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", @@ -9232,6 +9701,12 @@ "to-regex": "^3.0.1" } }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, "natural-orderby": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", @@ -9754,6 +10229,20 @@ "@wry/context": "^0.4.0" } }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, "ora": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", @@ -9880,6 +10369,23 @@ "no-case": "^2.2.0" } }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, "parse-asn1": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", @@ -10765,6 +11271,12 @@ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", @@ -10806,6 +11318,12 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -11120,6 +11638,12 @@ "es-abstract": "^1.17.0-next.1" } }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, "regexpu-core": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", @@ -12640,6 +13164,12 @@ } } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "thenify": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", @@ -12879,6 +13409,15 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, "type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", @@ -13263,6 +13802,12 @@ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -13542,6 +14087,66 @@ } } }, + "vue-eslint-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz", + "integrity": "sha512-Kr21uPfthDc63nDl27AGQEhtt9VrZ9nkYk/NTftJ2ws9XiJwzJJCnCr3AITQ2jpRMA0XPGDECxYH8E027qMK9Q==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-scope": "^5.0.0", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.0.1", + "lodash": "^4.17.15" + }, + "dependencies": { + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + } + } + }, "vue-hot-reload-api": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", @@ -14311,6 +14916,12 @@ "string-width": "^2.1.1" } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -14381,6 +14992,15 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, "write-file-atomic": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", diff --git a/frontend/package.json b/frontend/package.json index 69cd3f487..5bbbad25a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -24,6 +24,8 @@ "@vue/cli-plugin-router": "~4.3.0", "@vue/cli-plugin-vuex": "~4.3.0", "@vue/cli-service": "~4.3.0", + "eslint": "^7.10.0", + "eslint-plugin-vue": "^7.0.0", "graphql-tag": "^2.11.0", "sass": "^1.26.11", "sass-loader": "^8.0.0", diff --git a/frontend/src/AppFrontend.vue b/frontend/src/AppFrontend.vue index bdc0ce9bf..6ac03561e 100644 --- a/frontend/src/AppFrontend.vue +++ b/frontend/src/AppFrontend.vue @@ -1,33 +1,118 @@ \ No newline at end of file + diff --git a/frontend/src/assets/logo.png b/frontend/src/assets/logo.png deleted file mode 100644 index f3d2503fc2a44b5053b0837ebea6e87a2d339a43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6849 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 46 + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/components/HelloWorld.vue b/frontend/src/components/HelloWorld.vue deleted file mode 100644 index 099f43772..000000000 --- a/frontend/src/components/HelloWorld.vue +++ /dev/null @@ -1,151 +0,0 @@ - - - diff --git a/frontend/src/graphql/user.gql b/frontend/src/graphql/user.gql new file mode 100644 index 000000000..6e849b047 --- /dev/null +++ b/frontend/src/graphql/user.gql @@ -0,0 +1,30 @@ +query { + user { + id + email + name + bio + company + avatar + verified + profiles + role + streams(limit: 25) { + totalCount + cursor + items { + id + name + description + isPublic + createdAt + updatedAt + collaborators { + id + name + role + } + } + } + } +} \ No newline at end of file diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js index 332b91692..3979dc20a 100644 --- a/frontend/src/store/index.js +++ b/frontend/src/store/index.js @@ -1,15 +1,29 @@ import Vue from 'vue' import Vuex from 'vuex' +import gql from 'graphql-tag' -Vue.use(Vuex) -export default new Vuex.Store({ +Vue.use( Vuex ) + +export default new Vuex.Store( { state: { + user: {} }, mutations: { + SET_USER( state, value ) { + state.user = value + } }, actions: { + + // async getUser( { commit } ) { + // let user = gql `{ userQuery }` + // console.log( user ) + // commit( 'SET_USER', user ) + // } }, modules: { } -}) +} ) + + diff --git a/frontend/src/views/Home.vue b/frontend/src/views/Home.vue index 7e6b63155..56d9b906f 100644 --- a/frontend/src/views/Home.vue +++ b/frontend/src/views/Home.vue @@ -1,22 +1,18 @@ \ No newline at end of file From 4edf26e9e3a06cb57e6bb07da2b0e89c9d79d57e Mon Sep 17 00:00:00 2001 From: Matteo Cominetti Date: Thu, 1 Oct 2020 22:39:57 +0100 Subject: [PATCH 04/44] feat(ui): scaffolding feed --- .eslintrc.json | 11 +++++----- frontend/package-lock.json | 22 ++++++++++++++++---- frontend/package.json | 1 + frontend/src/AppFrontend.vue | 31 +++++++++++++++++++--------- frontend/src/main-frontend.js | 13 +++++++++--- frontend/src/views/Home.vue | 39 +++++++++++++++++++++++++++++++---- 6 files changed, 91 insertions(+), 26 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index e1fa319af..440e3dde0 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -9,8 +9,7 @@ }, "ignorePatterns": [ "modules/*/tests/*", - "node_modules/*", - "frontend/*" + "node_modules/*" ], "rules": { "arrow-spacing": [ @@ -45,9 +44,11 @@ 2 ], "space-unary-ops": [ - 2, { + 2, + { "words": true, "nonwords": false - }] + } + ] } -} +} \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 01bbb8edb..a5a257819 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -5635,8 +5635,7 @@ "date-fns": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" }, "de-indent": { "version": "1.0.2", @@ -9625,8 +9624,7 @@ "moment": { "version": "2.25.3", "resolved": "https://registry.npmjs.org/moment/-/moment-2.25.3.tgz", - "integrity": "sha512-PuYv0PHxZvzc15Sp8ybUCoQ+xpyPWvjOuK72a5ovzp2LI32rJXOiIfyoFoYvG3s6EwwrdkMyWuRiEHSZRLJNdg==", - "dev": true + "integrity": "sha512-PuYv0PHxZvzc15Sp8ybUCoQ+xpyPWvjOuK72a5ovzp2LI32rJXOiIfyoFoYvG3s6EwwrdkMyWuRiEHSZRLJNdg==" }, "move-concurrently": { "version": "1.0.1", @@ -14174,6 +14172,14 @@ } } }, + "vue-moment": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vue-moment/-/vue-moment-4.1.0.tgz", + "integrity": "sha512-Gzisqpg82ItlrUyiD9d0Kfru+JorW2o4mQOH06lEDZNgxci0tv/fua1Hl0bo4DozDV2JK1r52Atn/8QVCu8qQw==", + "requires": { + "moment": "^2.19.2" + } + }, "vue-router": { "version": "3.4.5", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.5.tgz", @@ -14213,6 +14219,14 @@ "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", "dev": true }, + "vue-timeago": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/vue-timeago/-/vue-timeago-5.1.2.tgz", + "integrity": "sha512-K74EdER1WO1XX+EIsf5ZeHucZjconfncOTlKxntC7s7q0QAAgiZt5BYenJ/GPHEEcxfmrGsiFWJPYmLHyNzDRg==", + "requires": { + "date-fns": "^1.29.0" + } + }, "vuetify": { "version": "2.3.12", "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-2.3.12.tgz", diff --git a/frontend/package.json b/frontend/package.json index 5bbbad25a..f269295d8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -15,6 +15,7 @@ "vue": "^2.6.12", "vue-apollo": "^3.0.4", "vue-router": "^3.4.5", + "vue-timeago": "^5.1.2", "vuetify": "^2.3.12", "vuex": "^3.5.1" }, diff --git a/frontend/src/AppFrontend.vue b/frontend/src/AppFrontend.vue index 6ac03561e..dd6dcc0f9 100644 --- a/frontend/src/AppFrontend.vue +++ b/frontend/src/AppFrontend.vue @@ -2,11 +2,16 @@ - - - SPECKLE ADMIN - + + + + + +
+ SPECKLE ADMIN +
+ +
{{ link }} @@ -56,11 +61,11 @@ - - - + + + - +
@@ -113,6 +118,12 @@ export default { data: () => ( { user: {}, links: [ "streams", "projects", "profile", "settings", "help" ], - } ) + } ), + + watch:{ + user( val ){ + console.log( val ) + } + } } diff --git a/frontend/src/main-frontend.js b/frontend/src/main-frontend.js index 7ad4ca59c..be37c923a 100644 --- a/frontend/src/main-frontend.js +++ b/frontend/src/main-frontend.js @@ -3,9 +3,10 @@ import App from './AppFrontend.vue' import router from './router' import store from './store' import vuetify from './plugins/vuetify'; -import { createProvider, onLogin } from './vue-apollo' +import { createProvider, } from './vue-apollo' import { signIn } from './auth-helpers' -import crs from 'crypto-random-string' +import VueTimeago from 'vue-timeago' + Vue.config.productionTip = false @@ -13,10 +14,16 @@ Vue.config.productionTip = false ; /* Semicolon of Doom */ + + ( async ( ) => { let result = await signIn( ) if ( !result ) return - let app = new Vue( { + + Vue.use( VueTimeago, { + locale: 'en' } ) + + new Vue( { router, store, vuetify, diff --git a/frontend/src/views/Home.vue b/frontend/src/views/Home.vue index 56d9b906f..e9bdf3db8 100644 --- a/frontend/src/views/Home.vue +++ b/frontend/src/views/Home.vue @@ -1,8 +1,39 @@ \ No newline at end of file + From 2a067339f4904b58459b4b17eda85575b4b7614e Mon Sep 17 00:00:00 2001 From: Matteo Cominetti Date: Fri, 2 Oct 2020 12:50:11 +0100 Subject: [PATCH 05/44] style(ui): adds prettier eslint integration, and disables space-in-parens eslint setting --- frontend/.eslintrc.json | 97 +++++++--------- frontend/.prettierrc | 9 ++ frontend/package-lock.json | 205 ++++++++++++++++++++++++++++++--- frontend/package.json | 5 + frontend/src/AppFrontend.vue | 15 ++- frontend/src/router/index.js | 23 ++-- frontend/src/store/index.js | 13 +-- frontend/src/views/Home.vue | 17 ++- frontend/src/views/Streams.vue | 57 +++++++++ 9 files changed, 347 insertions(+), 94 deletions(-) create mode 100644 frontend/.prettierrc create mode 100644 frontend/src/views/Streams.vue diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json index 28940caaa..533f9f072 100644 --- a/frontend/.eslintrc.json +++ b/frontend/.eslintrc.json @@ -1,57 +1,46 @@ { - "env": { - "browser": true, - "es2021": true - }, - "extends": [ - "eslint:recommended", - "plugin:vue/essential" + "env": { + "browser": true, + "es2021": true + }, + "extends": [ + "plugin:vue/recommended", + "prettier", + "prettier/vue", + "plugin:prettier/recommended", + "eslint:recommended" + ], + "parserOptions": { + "ecmaVersion": 12, + "sourceType": "module" + }, + "plugins": ["vue", "prettier"], + "rules": { + "arrow-spacing": [ + 2, + { + "before": true, + "after": true + } ], - "parserOptions": { - "ecmaVersion": 12, - "sourceType": "module" - }, - "plugins": [ - "vue" + "array-bracket-spacing": [2, "always"], + "block-spacing": [2, "always"], + "camelcase": [ + 1, + { + "properties": "always" + } ], - "rules": { - "arrow-spacing": [ - 2, - { - "before": true, - "after": true - } - ], - "array-bracket-spacing": [ - 2, - "always" - ], - "block-spacing": [ - 2, - "always" - ], - "camelcase": [ - 1, - { - "properties": "always" - } - ], - "space-in-parens": [ - 2, - "always" - ], - "keyword-spacing": 2, - "semi": "off", - "indent": [ - "error", - 2 - ], - "space-unary-ops": [ - 2, - { - "words": true, - "nonwords": false - } - ] - } -} \ No newline at end of file + // "space-in-parens": [2, "always"], + "keyword-spacing": 2, + "semi": "off", + "indent": ["error", 2], + "space-unary-ops": [ + 2, + { + "words": true, + "nonwords": false + } + ] + } +} diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 000000000..10899a358 --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,9 @@ +{ + "trailingComma": "none", + "tabWidth": 2, + "semi": false, + "endOfLine": "auto", + "bracketSpacing": true, + "eslintIntegration": true, + "jsxBracketSameLine": true +} diff --git a/frontend/package-lock.json b/frontend/package-lock.json index a5a257819..6fcddc235 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -2529,6 +2529,13 @@ "yallist": "^2.1.2" } }, + "prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "optional": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3670,6 +3677,20 @@ "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", "dev": true }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, "babel-loader": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", @@ -6577,6 +6598,145 @@ } } }, + "eslint-config-prettier": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.12.0.tgz", + "integrity": "sha512-9jWPlFlgNwRUYVoujvWTQ1aMO8o6648r+K7qU7K5Jmkbyqav1fuEZC0COYpGBxyiAJb65Ra9hrmFx19xRGwXWw==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + } + }, + "eslint-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-4.0.2.tgz", + "integrity": "sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "fs-extra": "^8.1.0", + "loader-utils": "^2.0.0", + "object-hash": "^2.0.3", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-prettier": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", + "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, "eslint-plugin-vue": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.0.0.tgz", @@ -6976,6 +7136,12 @@ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", "dev": true }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, "fast-glob": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", @@ -7353,6 +7519,12 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -9624,7 +9796,8 @@ "moment": { "version": "2.25.3", "resolved": "https://registry.npmjs.org/moment/-/moment-2.25.3.tgz", - "integrity": "sha512-PuYv0PHxZvzc15Sp8ybUCoQ+xpyPWvjOuK72a5ovzp2LI32rJXOiIfyoFoYvG3s6EwwrdkMyWuRiEHSZRLJNdg==" + "integrity": "sha512-PuYv0PHxZvzc15Sp8ybUCoQ+xpyPWvjOuK72a5ovzp2LI32rJXOiIfyoFoYvG3s6EwwrdkMyWuRiEHSZRLJNdg==", + "dev": true }, "move-concurrently": { "version": "1.0.1", @@ -10069,6 +10242,12 @@ } } }, + "object-hash": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz", + "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==", + "dev": true + }, "object-inspect": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", @@ -11282,11 +11461,19 @@ "dev": true }, "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", + "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, - "optional": true + "requires": { + "fast-diff": "^1.1.2" + } }, "pretty-error": { "version": "2.1.1", @@ -14172,14 +14359,6 @@ } } }, - "vue-moment": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vue-moment/-/vue-moment-4.1.0.tgz", - "integrity": "sha512-Gzisqpg82ItlrUyiD9d0Kfru+JorW2o4mQOH06lEDZNgxci0tv/fua1Hl0bo4DozDV2JK1r52Atn/8QVCu8qQw==", - "requires": { - "moment": "^2.19.2" - } - }, "vue-router": { "version": "3.4.5", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.5.tgz", diff --git a/frontend/package.json b/frontend/package.json index f269295d8..e28130051 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -25,9 +25,14 @@ "@vue/cli-plugin-router": "~4.3.0", "@vue/cli-plugin-vuex": "~4.3.0", "@vue/cli-service": "~4.3.0", + "babel-eslint": "^10.1.0", "eslint": "^7.10.0", + "eslint-config-prettier": "^6.12.0", + "eslint-loader": "^4.0.2", + "eslint-plugin-prettier": "^3.1.4", "eslint-plugin-vue": "^7.0.0", "graphql-tag": "^2.11.0", + "prettier": "^2.1.2", "sass": "^1.26.11", "sass-loader": "^8.0.0", "vue-cli-plugin-apollo": "~0.21.3", diff --git a/frontend/src/AppFrontend.vue b/frontend/src/AppFrontend.vue index dd6dcc0f9..65c504566 100644 --- a/frontend/src/AppFrontend.vue +++ b/frontend/src/AppFrontend.vue @@ -5,7 +5,7 @@ - +
SPECKLE ADMIN @@ -13,8 +13,8 @@ - - {{ link }} + + {{ link.name }} @@ -117,8 +117,13 @@ export default { data: () => ( { user: {}, - links: [ "streams", "projects", "profile", "settings", "help" ], - } ), + navLinks: [ + {link: "/streams", name:"streams"}, + {link: "/teams", name:"teams"}, + {link: "/profile", name:"profile"}, + {link: "/settings", name:"settings"}, + {link: "/help", name:"help"} + ] } ), watch:{ user( val ){ diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index c7142cb93..e7acc6464 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -1,25 +1,32 @@ import Vue from 'vue' import VueRouter from 'vue-router' import Home from '../views/Home.vue' +import Streams from '../views/Streams.vue' -Vue.use( VueRouter ) +Vue.use(VueRouter) -const routes = [ { +const routes = [ + { path: '/', - name: 'Home', - component: ( ) => import( '../views/Home.vue' ) + name: 'home', + component: Home + }, + { + path: '/streams', + name: 'streams', + component: Streams }, { path: '/about', name: 'About', - component: ( ) => import( '../views/About.vue' ) + component: () => import('../views/About.vue') } ] -const router = new VueRouter( { +const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes -} ) +}) -export default router \ No newline at end of file +export default router diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js index 3979dc20a..e01442512 100644 --- a/frontend/src/store/index.js +++ b/frontend/src/store/index.js @@ -1,7 +1,6 @@ -import Vue from 'vue' -import Vuex from 'vuex' -import gql from 'graphql-tag' - +import Vue from "vue" +import Vuex from "vuex" +import gql from "graphql-tag" Vue.use( Vuex ) @@ -15,15 +14,11 @@ export default new Vuex.Store( { } }, actions: { - // async getUser( { commit } ) { // let user = gql `{ userQuery }` // console.log( user ) // commit( 'SET_USER', user ) // } }, - modules: { - } + modules: {} } ) - - diff --git a/frontend/src/views/Home.vue b/frontend/src/views/Home.vue index e9bdf3db8..d4b39eb39 100644 --- a/frontend/src/views/Home.vue +++ b/frontend/src/views/Home.vue @@ -12,7 +12,6 @@ team activity - You created a new stream - - + @@ -43,7 +43,14 @@ export default { name: "Home", - data: () => ( {} ), - props: [ "user" ], + props: { + user: { + type: Object, + default: function () { + return {} + } + } + }, + data: () => ({}) } diff --git a/frontend/src/views/Streams.vue b/frontend/src/views/Streams.vue new file mode 100644 index 000000000..ba37071d2 --- /dev/null +++ b/frontend/src/views/Streams.vue @@ -0,0 +1,57 @@ + + From 33b5704cb421ae5ab1bf7a6e3587ff84ca1c084d Mon Sep 17 00:00:00 2001 From: Matteo Cominetti Date: Fri, 2 Oct 2020 12:52:51 +0100 Subject: [PATCH 06/44] style(ui): adds vscode workspace settings --- .vscode/settings.json | 29 ++++++++++++++++++ frontend/src/AppFrontend.vue | 57 +++++++++++++++++++++--------------- 2 files changed, 62 insertions(+), 24 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..a21d56f2c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,29 @@ +{ + "vetur.format.defaultFormatterOptions": { + "js-beautify-html": { + "wrap_attributes": "force-expand-multiline" + }, + "prettyhtml": { + "printWidth": 100, + "singleQuote": false, + "wrapAttributes": false, + "sortAttributes": false + } + }, + + "editor.formatOnSave": true, + "vetur.validation.template": false, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + }, + "cSpell.userWords": ["vetur", "vuetify"], + "vetur.format.defaultFormatter.js": "none", + "vetur.format.defaultFormatter.ts": "none", + "[vue]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + "[javascript]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + "eslint.validate": ["vue"] +} diff --git a/frontend/src/AppFrontend.vue b/frontend/src/AppFrontend.vue index 65c504566..10616bd15 100644 --- a/frontend/src/AppFrontend.vue +++ b/frontend/src/AppFrontend.vue @@ -2,18 +2,26 @@ - - - - +
- SPECKLE ADMIN + SPECKLE ADMIN
-
- + {{ link.name }} @@ -62,9 +70,9 @@ - - - + + + @@ -110,24 +118,25 @@ export default { } } } - `, - }, + ` + } }, components: {}, - data: () => ( { + data: () => ({ user: {}, - navLinks: [ - {link: "/streams", name:"streams"}, - {link: "/teams", name:"teams"}, - {link: "/profile", name:"profile"}, - {link: "/settings", name:"settings"}, - {link: "/help", name:"help"} - ] } ), - - watch:{ - user( val ){ - console.log( val ) + navLinks: [ + { link: "/streams", name: "streams" }, + { link: "/teams", name: "teams" }, + { link: "/profile", name: "profile" }, + { link: "/settings", name: "settings" }, + { link: "/help", name: "help" } + ] + }), + + watch: { + user(val) { + console.log(val) } } } From 77734b3dbf81b200c7b1a9eda31eb6ae3f907a3d Mon Sep 17 00:00:00 2001 From: Matteo Cominetti Date: Fri, 2 Oct 2020 17:37:39 +0100 Subject: [PATCH 07/44] feat(ui): adds server info and user commits --- frontend/.prettierrc | 4 +- frontend/src/AppFrontend.vue | 77 ++++++++----------- frontend/src/graphql/server.gql | 9 +++ frontend/src/graphql/user.gql | 43 +++++++---- frontend/src/views/Home.vue | 131 +++++++++++++++++++++++++++----- 5 files changed, 180 insertions(+), 84 deletions(-) create mode 100644 frontend/src/graphql/server.gql diff --git a/frontend/.prettierrc b/frontend/.prettierrc index 10899a358..4a0132b5d 100644 --- a/frontend/.prettierrc +++ b/frontend/.prettierrc @@ -5,5 +5,7 @@ "endOfLine": "auto", "bracketSpacing": true, "eslintIntegration": true, - "jsxBracketSameLine": true + "jsxBracketSameLine": true, + "vueIndentScriptAndStyle": false, + "htmlWhitespaceSensitivity": "ignore" } diff --git a/frontend/src/AppFrontend.vue b/frontend/src/AppFrontend.vue index 10616bd15..345733b57 100644 --- a/frontend/src/AppFrontend.vue +++ b/frontend/src/AppFrontend.vue @@ -43,21 +43,28 @@ - - - - - mdi-account - + + + + mdi-account + +
+ {{ user.name }} +
+
{{ user.company }}
+ {{ user.id }} +
-
- {{ user.name }} -
-
{{ user.company }}
- {{ user.id }} -
- - + +
+ {{ serverInfo.name }} +
+
{{ serverInfo.company }}
+
{{ serverInfo.description }}
+
{{ serverInfo.adminContact }}
+ {{ serverInfo.canonicalUrl }} +
+ @@ -81,50 +88,26 @@
From 557f24fe20763a8df43ce96dbea5979c7719a63c Mon Sep 17 00:00:00 2001 From: Matteo Cominetti Date: Fri, 2 Oct 2020 17:39:39 +0100 Subject: [PATCH 08/44] feat(commit): adds createdAt prop to user commit --- modules/core/graph/schemas/branchesAndCommits.graphql | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/core/graph/schemas/branchesAndCommits.graphql b/modules/core/graph/schemas/branchesAndCommits.graphql index df851f79c..a2d0097cd 100644 --- a/modules/core/graph/schemas/branchesAndCommits.graphql +++ b/modules/core/graph/schemas/branchesAndCommits.graphql @@ -34,6 +34,7 @@ type CommitCollectionUserNode { message: String streamId: String streamName: String + createdAt: String } type BranchCollection { From e03969c93cda2ffef260840c397beaf51fc6239e Mon Sep 17 00:00:00 2001 From: Matteo Cominetti Date: Sun, 4 Oct 2020 18:36:13 +0100 Subject: [PATCH 09/44] feat(ui): minor tweaks and additions --- .eslintrc.json | 89 +++++------ frontend/.eslintrc.json | 2 +- frontend/src/AppAuth.vue | 261 ++++++++++++++++++++------------- frontend/src/AppFrontend.vue | 14 +- frontend/src/graphql/user.gql | 6 + frontend/src/router/index.js | 29 ++-- frontend/src/views/Help.vue | 23 +++ frontend/src/views/Home.vue | 107 +++++++++++--- frontend/src/views/Streams.vue | 57 +++---- 9 files changed, 367 insertions(+), 221 deletions(-) create mode 100644 frontend/src/views/Help.vue diff --git a/.eslintrc.json b/.eslintrc.json index 440e3dde0..2c7fb2f30 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,54 +1,39 @@ { - "env": { - "browser": true, - "commonjs": true, - "es2020": true - }, - "parserOptions": { - "ecmaVersion": 11 - }, - "ignorePatterns": [ - "modules/*/tests/*", - "node_modules/*" + "env": { + "browser": true, + "commonjs": true, + "es2020": true + }, + "parserOptions": { + "ecmaVersion": 11 + }, + "ignorePatterns": ["modules/*/tests/*", "node_modules/*"], + "rules": { + "arrow-spacing": [ + 2, + { + "before": true, + "after": true + } ], - "rules": { - "arrow-spacing": [ - 2, - { - "before": true, - "after": true - } - ], - "array-bracket-spacing": [ - 2, - "always" - ], - "block-spacing": [ - 2, - "always" - ], - "camelcase": [ - 1, - { - "properties": "always" - } - ], - "space-in-parens": [ - 2, - "always" - ], - "keyword-spacing": 2, - "semi": "off", - "indent": [ - "error", - 2 - ], - "space-unary-ops": [ - 2, - { - "words": true, - "nonwords": false - } - ] - } -} \ No newline at end of file + "array-bracket-spacing": [2, "always"], + "block-spacing": [2, "always"], + "camelcase": [ + 1, + { + "properties": "always" + } + ], + "space-in-parens": [2, "always"], + "keyword-spacing": 2, + "semi": "off", + "indent": ["error", 2], + "space-unary-ops": [ + 2, + { + "words": true, + "nonwords": false + } + ] + } +} diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json index 533f9f072..e6a1cd31a 100644 --- a/frontend/.eslintrc.json +++ b/frontend/.eslintrc.json @@ -23,7 +23,7 @@ "after": true } ], - "array-bracket-spacing": [2, "always"], + //"array-bracket-spacing": [2, "always"], "block-spacing": [2, "always"], "camelcase": [ 1, diff --git a/frontend/src/AppAuth.vue b/frontend/src/AppAuth.vue index 93c046603..6573d2719 100644 --- a/frontend/src/AppAuth.vue +++ b/frontend/src/AppAuth.vue @@ -1,62 +1,107 @@ diff --git a/frontend/src/components/CommitBox.vue b/frontend/src/components/CommitBox.vue deleted file mode 100644 index 3b3ebedf7..000000000 --- a/frontend/src/components/CommitBox.vue +++ /dev/null @@ -1,67 +0,0 @@ - - diff --git a/frontend/src/components/FeedCommit.vue b/frontend/src/components/FeedCommit.vue new file mode 100644 index 000000000..7e4c4ef25 --- /dev/null +++ b/frontend/src/components/FeedCommit.vue @@ -0,0 +1,75 @@ + + diff --git a/frontend/src/components/FeedStream.vue b/frontend/src/components/FeedStream.vue new file mode 100644 index 000000000..8ba8078a1 --- /dev/null +++ b/frontend/src/components/FeedStream.vue @@ -0,0 +1,74 @@ + + diff --git a/frontend/src/components/SidebarHome.vue b/frontend/src/components/SidebarHome.vue new file mode 100644 index 000000000..003f02322 --- /dev/null +++ b/frontend/src/components/SidebarHome.vue @@ -0,0 +1,47 @@ + + diff --git a/frontend/src/components/SidebarStream.vue b/frontend/src/components/SidebarStream.vue new file mode 100644 index 000000000..b281b3d7c --- /dev/null +++ b/frontend/src/components/SidebarStream.vue @@ -0,0 +1,71 @@ + + diff --git a/frontend/src/components/StreamBox.vue b/frontend/src/components/StreamBox.vue index d1f9e7cef..093e5eaf7 100644 --- a/frontend/src/components/StreamBox.vue +++ b/frontend/src/components/StreamBox.vue @@ -1,59 +1,54 @@ diff --git a/frontend/src/views/Home.vue b/frontend/src/views/Home.vue index 0007f5cab..d50873c82 100644 --- a/frontend/src/views/Home.vue +++ b/frontend/src/views/Home.vue @@ -1,46 +1,54 @@ diff --git a/frontend/src/views/Stream.vue b/frontend/src/views/Stream.vue index 5b875b1fa..6b3855ad2 100644 --- a/frontend/src/views/Stream.vue +++ b/frontend/src/views/Stream.vue @@ -1,14 +1,52 @@ + diff --git a/frontend/src/views/Streams.vue b/frontend/src/views/Streams.vue index 080a8d9bd..13d9f4439 100644 --- a/frontend/src/views/Streams.vue +++ b/frontend/src/views/Streams.vue @@ -1,26 +1,50 @@ + From 0958847356d1631602a5f94c2932ae796ace8ea4 Mon Sep 17 00:00:00 2001 From: Matteo Cominetti Date: Wed, 7 Oct 2020 17:41:58 +0100 Subject: [PATCH 16/44] feat(ui): updates stream page, add new branch flow --- frontend/.eslintrc.json | 1 + frontend/src/components/FeedStream.vue | 2 +- frontend/src/components/SidebarHome.vue | 2 +- frontend/src/components/SidebarStream.vue | 20 ++- frontend/src/components/StreamBox.vue | 2 +- frontend/src/components/dialogs/NewBranch.vue | 83 ++++++++++++ frontend/src/main-frontend.js | 6 +- frontend/src/plugins/vuetify.js | 34 ++--- frontend/src/views/Home.vue | 61 +++++---- frontend/src/views/Stream.vue | 122 +++++++++++++----- 10 files changed, 246 insertions(+), 87 deletions(-) create mode 100644 frontend/src/components/dialogs/NewBranch.vue diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json index e6a1cd31a..9150775fa 100644 --- a/frontend/.eslintrc.json +++ b/frontend/.eslintrc.json @@ -3,6 +3,7 @@ "browser": true, "es2021": true }, + "ignorePatterns": ["main-frontend.js"], "extends": [ "plugin:vue/recommended", "prettier", diff --git a/frontend/src/components/FeedStream.vue b/frontend/src/components/FeedStream.vue index 8ba8078a1..3ebb3670c 100644 --- a/frontend/src/components/FeedStream.vue +++ b/frontend/src/components/FeedStream.vue @@ -21,7 +21,7 @@ - {{ stream.name }} as asa dfsd f gdfgdfg gdfg fg dfgd + {{ stream.name }} diff --git a/frontend/src/components/SidebarHome.vue b/frontend/src/components/SidebarHome.vue index 003f02322..d9536713f 100644 --- a/frontend/src/components/SidebarHome.vue +++ b/frontend/src/components/SidebarHome.vue @@ -12,7 +12,7 @@ {{ user.id }} - +
{{ serverInfo.name }}
diff --git a/frontend/src/components/SidebarStream.vue b/frontend/src/components/SidebarStream.vue index b281b3d7c..ccec83682 100644 --- a/frontend/src/components/SidebarStream.vue +++ b/frontend/src/components/SidebarStream.vue @@ -1,6 +1,6 @@ diff --git a/frontend/src/main-frontend.js b/frontend/src/main-frontend.js index be37c923a..6fca7d63b 100644 --- a/frontend/src/main-frontend.js +++ b/frontend/src/main-frontend.js @@ -9,13 +9,11 @@ import VueTimeago from 'vue-timeago' Vue.config.productionTip = false - + /* Semicolon of Doom */ ; /* Semicolon of Doom */ - - ( async ( ) => { let result = await signIn( ) if ( !result ) return @@ -23,6 +21,8 @@ Vue.config.productionTip = false Vue.use( VueTimeago, { locale: 'en' } ) + + new Vue( { router, store, diff --git a/frontend/src/plugins/vuetify.js b/frontend/src/plugins/vuetify.js index 026c5e94d..122626d9f 100644 --- a/frontend/src/plugins/vuetify.js +++ b/frontend/src/plugins/vuetify.js @@ -1,24 +1,24 @@ -import '@mdi/font/css/materialdesignicons.css' -import Vue from 'vue' -import Vuetify from 'vuetify/lib' +import "@mdi/font/css/materialdesignicons.css" +import Vue from "vue" +import Vuetify from "vuetify/lib" -Vue.use( Vuetify ) +Vue.use(Vuetify) -export default new Vuetify( { +export default new Vuetify({ icons: { - iconfont: 'mdi' + iconfont: "mdi" }, theme: { themes: { light: { - primary: '#262E37', - secondary: '#0A66FF', - accent: '#0A66FF', - error: '#FF5252', - info: '#0A66FF', - success: '#0A66FF', - warning: '#FFC107' - }, - }, - }, -} ); \ No newline at end of file + primary: "#2196f3", + secondary: "#607d8b", + accent: "#03a9f4", + error: "#ff5722", + warning: "#ffc107", + info: "#3f51b5", + success: "#4caf50" + } + } + } +}) diff --git a/frontend/src/views/Home.vue b/frontend/src/views/Home.vue index d50873c82..86ba4a970 100644 --- a/frontend/src/views/Home.vue +++ b/frontend/src/views/Home.vue @@ -4,31 +4,40 @@ - -
- - Recent activity: - - all activity - streams - commits - - -
- - -
-
+ + + + + Recent activity: + + all activity + streams + commits + + +
+
+
+
+ + + +
+ + +
+
+
@@ -130,7 +139,7 @@ export default { } } - From 4b804df84e6fd31bf739972308a7e59ffcf2ac0a Mon Sep 17 00:00:00 2001 From: Matteo Cominetti Date: Wed, 7 Oct 2020 17:44:57 +0100 Subject: [PATCH 17/44] refractor(server): replaces the 'master' branch name with 'main' --- modules/core/services/streams.js | 4 ++-- modules/core/tests/branches.spec.js | 6 +++--- modules/core/tests/commits.spec.js | 18 +++++++++--------- modules/core/tests/graph.spec.js | 12 ++++++------ modules/core/tests/graphSubs.spec.js | 10 +++++----- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/modules/core/services/streams.js b/modules/core/services/streams.js index 490e4c6a1..12242c124 100644 --- a/modules/core/services/streams.js +++ b/modules/core/services/streams.js @@ -23,8 +23,8 @@ module.exports = { let [ streamId ] = await Streams( ).returning( 'id' ).insert( stream ) await Acl( ).insert( { userId: ownerId, resourceId: streamId, role: 'stream:owner' } ) - // Create a default master branch - await createBranch( { name: 'master', description: 'default branch', streamId: streamId, authorId: ownerId } ) + // Create a default main branch + await createBranch( { name: 'main', description: 'default branch', streamId: streamId, authorId: ownerId } ) return streamId }, diff --git a/modules/core/tests/branches.spec.js b/modules/core/tests/branches.spec.js index 32de3398f..efb21fb49 100644 --- a/modules/core/tests/branches.spec.js +++ b/modules/core/tests/branches.spec.js @@ -61,7 +61,7 @@ describe( 'Branches', ( ) => { it( 'Should not allow duplicate branch names', async ( ) => { try { - await createBranch( { name: 'master', streamId: stream.id, authorId: user.id } ) + await createBranch( { name: 'main', streamId: stream.id, authorId: user.id } ) assert.fail( 'Duplicate branches should not be allowed.' ) } catch ( err ) { expect( err.message ).to.contain( 'duplicate key value violates unique constraint' ) @@ -83,8 +83,8 @@ describe( 'Branches', ( ) => { it( 'Should get all stream branches', async ( ) => { - await createBranch( { name: 'master-faster', streamId: stream.id, authorId: user.id } ) - await createBranch( { name: 'master-blaster', streamId: stream.id, authorId: user.id } ) + await createBranch( { name: 'main-faster', streamId: stream.id, authorId: user.id } ) + await createBranch( { name: 'main-blaster', streamId: stream.id, authorId: user.id } ) await createBranch( { name: 'blaster-farter', streamId: stream.id, authorId: user.id } ) let { items, cursor, totalCount } = await getBranchesByStreamId( { streamId: stream.id } ) diff --git a/modules/core/tests/commits.spec.js b/modules/core/tests/commits.spec.js index 687a9595d..cab86c345 100644 --- a/modules/core/tests/commits.spec.js +++ b/modules/core/tests/commits.spec.js @@ -76,15 +76,15 @@ describe( 'Commits', ( ) => { let commitId1, commitId2, commitId3 it( 'Should create a commit by branch name', async ( ) => { - commitId1 = await createCommitByBranchName( { streamId: stream.id, branchName: 'master', message: 'first commit', objectId: testObject.id, authorId: user.id } ) + commitId1 = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'first commit', objectId: testObject.id, authorId: user.id } ) expect( commitId1 ).to.be.a.string } ) it( 'Should create a commit with a previous commit id', async ( ) => { - commitId2 = await createCommitByBranchName( { streamId: stream.id, branchName: 'master', message: 'second commit', objectId: testObject2.id, authorId: user.id, previousCommitIds: [ commitId1 ] } ) + commitId2 = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'second commit', objectId: testObject2.id, authorId: user.id, previousCommitIds: [ commitId1 ] } ) expect( commitId2 ).to.be.a.string - commitId3 = await createCommitByBranchName( { streamId: stream.id, branchName: 'master', message: 'third commit', objectId: testObject3.id, authorId: user.id, previousCommitIds: [ commitId1, commitId2 ] } ) + commitId3 = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'third commit', objectId: testObject3.id, authorId: user.id, previousCommitIds: [ commitId1, commitId2 ] } ) expect( commitId3 ).to.be.a.string } ) @@ -95,7 +95,7 @@ describe( 'Commits', ( ) => { } ) it( 'Should delete a commit', async ( ) => { - let tempCommit = await createCommitByBranchName( { streamId: stream.id, branchName: 'master', message: 'temp commit', objectId: testObject.id, authorId: user.id } ) + let tempCommit = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'temp commit', objectId: testObject.id, authorId: user.id } ) let res = await deleteCommit( { id: tempCommit } ) expect( res ).to.equal( 1 ) @@ -111,19 +111,19 @@ describe( 'Commits', ( ) => { for ( let i = 0; i < 10; i++ ) { let t = { qux: i } t.id = await createObject( t ) - await createCommitByBranchName( { streamId: stream.id, branchName: 'master', message: `commit # ${i+3}`, objectId: t.id, authorId: user.id } ) + await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: `commit # ${i+3}`, objectId: t.id, authorId: user.id } ) } - let { commits, cursor } = await getCommitsByBranchName( { streamId: stream.id, branchName: 'master', limit: 2 } ) + let { commits, cursor } = await getCommitsByBranchName( { streamId: stream.id, branchName: 'main', limit: 2 } ) expect( commits ).to.be.an( 'array' ) expect( commits.length ).to.equal( 2 ) - let { commits: commits2, cursor: cursor2 } = await getCommitsByBranchName( { streamId: stream.id, branchName: 'master', limit: 5, cursor: cursor } ) + let { commits: commits2, cursor: cursor2 } = await getCommitsByBranchName( { streamId: stream.id, branchName: 'masmainter', limit: 5, cursor: cursor } ) expect( commits2.length ).to.equal( 5 ) } ) it( 'Should get the commit count from a branch', async ( ) => { - let c = await getCommitsTotalCountByBranchName( { streamId: stream.id, branchName: 'master' } ) + let c = await getCommitsTotalCountByBranchName( { streamId: stream.id, branchName: 'main' } ) expect( c ).to.equal( 13 ) } ) @@ -158,7 +158,7 @@ describe( 'Commits', ( ) => { it( 'Should get the public commits of an user only', async ( ) => { let privateStreamId = await createStream( { name: 'private', isPublic: false, ownerId: user.id } ) - let commitId = await createCommitByBranchName( { streamId: privateStreamId, branchName: 'master', message: 'first commit', objectId: testObject.id, authorId: user.id } ) + let commitId = await createCommitByBranchName( { streamId: privateStreamId, branchName: 'main', message: 'first commit', objectId: testObject.id, authorId: user.id } ) let { commits, cursor } = await getCommitsByUserId( { userId: user.id, limit: 1000 } ) expect( commits.length ).to.equal( 23 ) diff --git a/modules/core/tests/graph.spec.js b/modules/core/tests/graph.spec.js index 35f974d7c..e3f6636ec 100644 --- a/modules/core/tests/graph.spec.js +++ b/modules/core/tests/graph.spec.js @@ -264,7 +264,7 @@ describe( 'GraphQL API Core @core-api', ( ) => { c1.message = 'what a message for a first commit' c1.streamId = ts1 c1.objectId = objIds[ 0 ] - c1.branchName = 'master' + c1.branchName = 'main' let res = await sendRequest( userA.token, { query: `mutation( $myCommit: CommitCreateInput! ) { commitCreate( commit: $myCommit ) }`, variables: { myCommit: c1 } } ) @@ -277,7 +277,7 @@ describe( 'GraphQL API Core @core-api', ( ) => { c2.message = 'what a message for a second commit' c2.streamId = ts1 c2.objectId = objIds[ 1 ] - c2.branchName = 'master' + c2.branchName = 'main' c2.previousCommitIds = [ c1.id ] res = await sendRequest( userA.token, { query: `mutation( $myCommit: CommitCreateInput! ) { commitCreate( commit: $myCommit ) }`, variables: { myCommit: c2 } } ) @@ -388,7 +388,7 @@ describe( 'GraphQL API Core @core-api', ( ) => { await sendRequest( userA.token, { query: `mutation{ streamRevokePermission( permissionParams: {streamId: "${ts1}", userId: "${userC.id}"} ) }` } ) } ) - it( 'Should commit to a non-master branch as well...', async ( ) => { + it( 'Should commit to a non-main branch as well...', async ( ) => { let cc = {} cc.message = 'what a message for a second commit' cc.streamId = ts1 @@ -459,7 +459,7 @@ describe( 'GraphQL API Core @core-api', ( ) => { message: `what a message for commit number ${i}`, streamId: ts1, objectId: objIds[ i ], - branchName: 'master', + branchName: 'main', } let res = await sendRequest( userA.token, { query: `mutation( $myCommit: CommitCreateInput! ) { commitCreate( commit: $myCommit ) }`, variables: { myCommit: c1 } } ) } @@ -692,7 +692,7 @@ describe( 'GraphQL API Core @core-api', ( ) => { let query = ` query { stream( id: "${ts1}" ) { - branch( name: "master" ) { + branch( name: "main" ) { id name commits( limit: 5 ) { @@ -719,7 +719,7 @@ describe( 'GraphQL API Core @core-api', ( ) => { let query2 = ` query { stream( id: "${ts1}" ) { - branch( name: "master" ) { + branch( name: "main" ) { id name commits( limit: 3, cursor: "${res.body.data.stream.branch.commits.cursor}" ) { diff --git a/modules/core/tests/graphSubs.spec.js b/modules/core/tests/graphSubs.spec.js index 5887274e8..91816e1b6 100644 --- a/modules/core/tests/graphSubs.spec.js +++ b/modules/core/tests/graphSubs.spec.js @@ -463,12 +463,12 @@ describe( 'GraphQL API Subscriptions @gql-subscriptions', ( ) => { await sleep( 500 ) let cc1 = await sendRequest( userA.token, { - query: `mutation { commitCreate ( commit: { streamId: "${streamId}", branchName: "master", objectId: "${objId1}" } ) }` + query: `mutation { commitCreate ( commit: { streamId: "${streamId}", branchName: "main", objectId: "${objId1}" } ) }` } ) .expect( 200 ) .expect( noErrors ) let cc2 = await sendRequest( userA.token, { - query: `mutation { commitCreate ( commit: { streamId: "${streamId}", branchName: "master", objectId: "${objId2}" } ) }` + query: `mutation { commitCreate ( commit: { streamId: "${streamId}", branchName: "main", objectId: "${objId2}" } ) }` } ) .expect( 200 ) .expect( noErrors ) @@ -483,7 +483,7 @@ describe( 'GraphQL API Subscriptions @gql-subscriptions', ( ) => { const streamId = resSC.body.data.streamCreate const resOC = await sendRequest( userA.token, { query: `mutation { objectCreate( objectInput: {streamId: "${streamId}", objects: {hello: "goodbye 🌊"}} ) }` } ) const objId = resOC.body.data.objectCreate - const resCC = await sendRequest( userA.token, { query: `mutation { commitCreate ( commit: { streamId: "${streamId}", branchName: "master", objectId: "${objId}" } ) }` } ) + const resCC = await sendRequest( userA.token, { query: `mutation { commitCreate ( commit: { streamId: "${streamId}", branchName: "main", objectId: "${objId}" } ) }` } ) const commitId = resCC.body.data.commitCreate let eventNum = 0 @@ -517,7 +517,7 @@ describe( 'GraphQL API Subscriptions @gql-subscriptions', ( ) => { const streamId = resSC.body.data.streamCreate const resOC = await sendRequest( userA.token, { query: `mutation { objectCreate( objectInput: {streamId: "${streamId}", objects: {hello: "goodbye 🌊"}} ) }` } ) const objId = resOC.body.data.objectCreate - const resCC = await sendRequest( userA.token, { query: `mutation { commitCreate ( commit: { streamId: "${streamId}", branchName: "master", objectId: "${objId}" } ) }` } ) + const resCC = await sendRequest( userA.token, { query: `mutation { commitCreate ( commit: { streamId: "${streamId}", branchName: "main", objectId: "${objId}" } ) }` } ) const commitId = resCC.body.data.commitCreate let eventNum = 0 @@ -558,7 +558,7 @@ describe( 'GraphQL API Subscriptions @gql-subscriptions', ( ) => { await sleep( 500 ) let cc = await sendRequest( userA.token, { - query: `mutation { commitCreate ( commit: { streamId: "${streamId}", branchName: "master", objectId: "${objId}" } ) }` + query: `mutation { commitCreate ( commit: { streamId: "${streamId}", branchName: "main", objectId: "${objId}" } ) }` } ) .expect( 200 ) .expect( noErrors ) From 46acb27dca58dee73769d1eaa04c1503ea44ae45 Mon Sep 17 00:00:00 2001 From: Matteo Cominetti Date: Thu, 8 Oct 2020 10:42:08 +0100 Subject: [PATCH 18/44] feat(ui): adds new stream dialog --- frontend/src/components/SidebarStream.vue | 2 +- frontend/src/components/dialogs/NewBranch.vue | 2 + frontend/src/components/dialogs/NewStream.vue | 85 +++++++++++++++++++ frontend/src/views/Stream.vue | 39 ++++++++- frontend/src/views/Streams.vue | 53 +++++++++++- 5 files changed, 174 insertions(+), 7 deletions(-) create mode 100644 frontend/src/components/dialogs/NewStream.vue diff --git a/frontend/src/components/SidebarStream.vue b/frontend/src/components/SidebarStream.vue index ccec83682..dfed77e9b 100644 --- a/frontend/src/components/SidebarStream.vue +++ b/frontend/src/components/SidebarStream.vue @@ -49,7 +49,7 @@
- + Collaborators diff --git a/frontend/src/components/dialogs/NewBranch.vue b/frontend/src/components/dialogs/NewBranch.vue index e8353e615..4f2e053b8 100644 --- a/frontend/src/components/dialogs/NewBranch.vue +++ b/frontend/src/components/dialogs/NewBranch.vue @@ -59,6 +59,8 @@ export default { methods: { open() { this.dialog = true + this.name = "" + this.description = "" return new Promise((resolve, reject) => { this.resolve = resolve this.reject = reject diff --git a/frontend/src/components/dialogs/NewStream.vue b/frontend/src/components/dialogs/NewStream.vue new file mode 100644 index 000000000..586a34717 --- /dev/null +++ b/frontend/src/components/dialogs/NewStream.vue @@ -0,0 +1,85 @@ + + diff --git a/frontend/src/views/Stream.vue b/frontend/src/views/Stream.vue index 7ff970789..351a62d10 100644 --- a/frontend/src/views/Stream.vue +++ b/frontend/src/views/Stream.vue @@ -11,12 +11,13 @@ Branches:
+ +

+ {{ branches[selectedBranch].description }} +

@@ -44,6 +52,25 @@ Commits: + + +

+ There are no commits in this branch just yet, try sending + something... +

+
+
+ {{ commit.message }} +
+ +
+
@@ -72,9 +99,15 @@ export default { } } }, - data: () => ({}), + data: () => ({ selectedBranch: 0 }), + computed: { + branches() { + //reverse without changing original array + return this.stream.branches.items.slice().reverse() + } + }, watch: { - stream(val) { + selectedBranch(val) { console.log(val) } }, diff --git a/frontend/src/views/Streams.vue b/frontend/src/views/Streams.vue index 13d9f4439..4e4ccd106 100644 --- a/frontend/src/views/Streams.vue +++ b/frontend/src/views/Streams.vue @@ -4,9 +4,22 @@ - + Your Streams + + mdi-plus-box-outline + new stream + + + +
@@ -19,20 +32,54 @@ diff --git a/frontend/src/components/SidebarHome.vue b/frontend/src/components/SidebarHome.vue index d9536713f..bc0e6a3b9 100644 --- a/frontend/src/components/SidebarHome.vue +++ b/frontend/src/components/SidebarHome.vue @@ -1,9 +1,12 @@