From 654956d8e518bf1cbe29efff7356afab323afdd9 Mon Sep 17 00:00:00 2001
From: Pierre-Jean CHANCELLIER <paidge_cs@hotmail.com>
Date: Thu, 16 Dec 2021 14:46:13 +0100
Subject: [PATCH] POC improvements

---
 assets/css/style.scss                  | 22 +++++++
 components/btn/Theme.vue               | 12 +---
 components/navigation/Bar.vue          | 42 ++-----------
 components/navigation/Breadcrumb.vue   |  2 +-
 components/navigation/Loader.vue       | 11 ++++
 components/navigation/menu/Group.vue   |  2 +-
 components/navigation/menu/Sidebar.vue |  2 +-
 layouts/default.vue                    | 26 --------
 mixins/wotwizard.js                    | 36 -----------
 nuxt.config.js                         |  4 ++
 pages/appolo.vue                       | 31 +++++++---
 pages/explore.vue                      | 85 -------------------------
 pages/hash/_hash.vue                   | 86 ++++----------------------
 pages/test.vue                         | 48 --------------
 store/README.md                        | 10 ---
 15 files changed, 79 insertions(+), 340 deletions(-)
 create mode 100644 components/navigation/Loader.vue
 delete mode 100644 mixins/wotwizard.js
 delete mode 100644 pages/explore.vue
 delete mode 100644 pages/test.vue
 delete mode 100644 store/README.md

diff --git a/assets/css/style.scss b/assets/css/style.scss
index b402489..5a6a721 100644
--- a/assets/css/style.scss
+++ b/assets/css/style.scss
@@ -1,7 +1,29 @@
+// Bootstrap variables customisation
+// Fonts & Typo
 $link-hover-decoration: none;
 $text-muted: #a6a4b0;
 $enable-responsive-font-sizes: true;
 $font-family-base: Montserrat, Helvetica, Arial, serif;
 
+// Body
+$body-bg: var(--background-color-primary);
+$body-color: var(--text-primary-color);
+
+// Tables
+$table-bg: var(--text-primary-color);
+$table-color: var(--background-color-primary);
+$table-head-bg: red;
+
+// Breadcrumb
+$breadcrumb-bg: var(--background-color-secondary);
+$breadcrumb-active-color: var(--text-primary-color);
+$breadcrumb-divider-color: var(--text-primary-color);
+
+// List-groups
+$list-group-bg: var(--background-color-primary);
+$list-group-action-active-bg: transparent;
+$list-group-hover-bg: transparent;
+$list-group-action-color: var(--text-primary-color);
+
 @import 'font';
 @import 'bootstrap';
\ No newline at end of file
diff --git a/components/btn/Theme.vue b/components/btn/Theme.vue
index cb98626..19b479c 100644
--- a/components/btn/Theme.vue
+++ b/components/btn/Theme.vue
@@ -1,10 +1,10 @@
 <template>
   <div>
     <input @change="toggleTheme" id="checkbox" type="checkbox" class="switch-checkbox" />
-    <label for="checkbox" class="switch-label">
+    <label for="checkbox" class="switch-label d-flex align-items-center justify-content-between position-relative mb-0 ">
       <span>🌙</span>
       <span>☀️</span>
-      <div class="switch-toggle" :class="{ 'switch-toggle-checked': userTheme === 'dark-theme' }"></div>
+      <div class="switch-toggle position-absolute rounded-circle" :class="{ 'switch-toggle-checked': userTheme === 'dark-theme' }"></div>
     </label>
   </div>
 </template>
@@ -62,27 +62,19 @@ export default {
 }
 
 .switch-label {
-  align-items: center;
   background: var(--text-primary-color);
-  border: calc(var(--element-size) * 0.025) solid var(--accent-color);
   border-radius: var(--element-size);
   cursor: pointer;
-  display: flex;
   font-size: calc(var(--element-size) * 0.3);
   height: calc(var(--element-size) * 0.35);
-  position: relative;
   padding: calc(var(--element-size) * 0.1);
   transition: background 0.5s ease;
-  justify-content: space-between;
   width: var(--element-size);
   z-index: 1;
-  margin-bottom: 0;
 }
 
 .switch-toggle {
-  position: absolute;
   background-color: var(--background-color-primary);
-  border-radius: 50%;
   top: calc(var(--element-size) * 0.07);
   left: calc(var(--element-size) * 0.07);
   height: calc(var(--element-size) * 0.4);
diff --git a/components/navigation/Bar.vue b/components/navigation/Bar.vue
index 6fb9982..70f17e5 100644
--- a/components/navigation/Bar.vue
+++ b/components/navigation/Bar.vue
@@ -5,7 +5,7 @@
       <NavigationBreadcrumb :breadcrumb="breadcrumb" class="breadcrumb p-1" />
     </div>
     <NavigationMenuSidebar @toggleMenu="toggleMenu" :menus="menus" />
-    <div class="bg_overlay" @click="toggleMenu"></div>
+    <div class="bg_overlay position-fixed" @click="toggleMenu"></div>
   </header>
 </template>
 
@@ -24,28 +24,15 @@ export default {
 </script>
 
 <style lang="scss">
-$bg-menu: #fff;
 $btn-width: 50px;
-$line-color: #000;
 
 nav.breadcrumb {
   margin: .5rem .5rem .5rem 5rem;
-  justify-content: space-between;
-  align-items: center;
 
   a {color: var(--text-primary-color)}
 
-  .breadcrumb-item {
-    &.active {
-      color: var(--text-primary-color);
+  .breadcrumb-item.active {
       opacity: .7;
-    }
-
-    & + .breadcrumb-item::before {color: var(--text-primary-color)}
-  }
-
-  &, .breadcrumb {
-    background-color: var(--background-color-secondary);
   }
 }
 
@@ -102,9 +89,8 @@ nav.breadcrumb {
 }
 
 .menu {
-  width: var(--menu-size);
   background: var(--background-color-primary);
-  position: fixed;
+  width: var(--menu-size);
   top: 0;
   z-index: 1200;
   height: 100vh;
@@ -117,26 +103,9 @@ nav.breadcrumb {
 
   h1 {color: var(--text-primary-color);}
 
-  .list-group-item {
-    background-color: var(--background-color-primary);
-
-    &-action {
-      color: var(--text-primary-color);
-    }
-
-    &.nuxt-link-active {
-      z-index: 2;
-      color: #fff;
-      background-color: var(--primary);
-      border-color: var(--primary);
-    }
-
-    span {
+  .list-group-item div {
       transition: left .3s ease-in-out;
-      display: block;
-      position: relative;
       left: 0;
-      padding: 0.75rem 1.25rem;
 
       &::before {
         content: "›";
@@ -148,7 +117,6 @@ nav.breadcrumb {
         left: .5em;
       }
     }
-  }
 
   .open & {
     left: 0;
@@ -169,13 +137,11 @@ nav.breadcrumb {
 }
 
 .bg_overlay {
-  position: fixed;
   top: 0;
   left: 0;
   right: 0;
   height: 120vh;
   z-index: 1100;
-  display: block;
   visibility: hidden;
   opacity: 0;
   transition: all .5s ease;
diff --git a/components/navigation/Breadcrumb.vue b/components/navigation/Breadcrumb.vue
index e5d6383..6e40c09 100644
--- a/components/navigation/Breadcrumb.vue
+++ b/components/navigation/Breadcrumb.vue
@@ -1,5 +1,5 @@
 <template>
-    <nav aria-label="breadcrumb">
+    <nav aria-label="Fil d'Ariane" class="justify-content-between align-items-center">
       <ol class="breadcrumb m-0">
           <li class="breadcrumb-item" :class="{ 'active': item.active }" :aria-current="item.active ? 'page' : null" v-for="item in breadcrumb" :key="item.text">
               <NuxtLink :to="item.to" v-if="item.to">{{ item.text }}</NuxtLink>
diff --git a/components/navigation/Loader.vue b/components/navigation/Loader.vue
new file mode 100644
index 0000000..d04b8f2
--- /dev/null
+++ b/components/navigation/Loader.vue
@@ -0,0 +1,11 @@
+<template>
+  <div class="spinner-border text-primary mx-auto" role="status" v-if="isLoading">
+    <span class="sr-only">Chargement...</span>
+  </div>
+</template>
+
+<script>
+export default {
+    props: {isLoading: Boolean}
+}
+</script>
\ No newline at end of file
diff --git a/components/navigation/menu/Group.vue b/components/navigation/menu/Group.vue
index 54812d3..9718576 100644
--- a/components/navigation/menu/Group.vue
+++ b/components/navigation/menu/Group.vue
@@ -2,7 +2,7 @@
     <div class="mb-4">
         <h2 class="small text-muted text-uppercase ml-4 mb-3">{{ menu.title }}</h2>
         <div class="nav navbar-nav list-group list-group-flush">
-            <NuxtLink class="list-group-item list-group-item-action p-0" :to="item.path" v-for="item in menu.items" :key="item.path"><span>{{ item.title }}</span></NuxtLink>
+            <NuxtLink class="list-group-item list-group-item-action" :to="item.path" v-for="item in menu.items" :key="item.path"><div class="position-relative">{{ item.title }}</div></NuxtLink>
         </div>
     </div>
 </template>
diff --git a/components/navigation/menu/Sidebar.vue b/components/navigation/menu/Sidebar.vue
index d76a2ae..35092ee 100644
--- a/components/navigation/menu/Sidebar.vue
+++ b/components/navigation/menu/Sidebar.vue
@@ -1,5 +1,5 @@
 <template>
-    <aside class="menu shadow">
+    <aside class="menu shadow position-fixed">
         <div class="nav_header border-bottom pb-3 mb-5">
             <nuxt-link to="/"><h1 class="h2 d-flex"><img src="@/assets/img/logo.png" alt="Accueil" class="logo">&nbsp;Wotwizard</h1></nuxt-link>
             <button type="button" class="close position-absolute d-xl-none" aria-label="Close" @click="toggleMenu">
diff --git a/layouts/default.vue b/layouts/default.vue
index 37ec8bd..35fe300 100644
--- a/layouts/default.vue
+++ b/layouts/default.vue
@@ -14,10 +14,8 @@ export default {
           {
           title: 'Développement',
           items : [
-              {path: '/explore',title: 'Explorer la toile de confiance'},
               {path: '/appolo',title: 'Appolo'},
               {path: '/chartjs',title: 'ChartJS'},
-              {path: '/test',title: 'Test'}
           ]},
           {
           title: 'Un menu',
@@ -40,8 +38,6 @@ export default {
 /* Define styles for the default root window element */
 :root {
   --text-primary-color: var(--dark);
-  --text-secondary-color: var(--white);
-  --accent-color: var(--light);
   --background-color-primary: var(--white);
   --background-color-secondary: #e9ecef;
   --element-size: 4rem;
@@ -51,33 +47,11 @@ export default {
 /* Define styles for the root window with dark - mode preference */
 :root.dark-theme {
   --text-primary-color: var(--white);
-  --text-secondary-color: var(--dark);
-  --accent-color: var(--dark);
   --background-color-primary: var(--dark);
   --background-color-secondary: hsl(210, 16%, 60%);
 }
 
-body {
-  background-color: var(--background-color-primary);
-  color: var(--text-primary-color);
-}
-
 .app {
     transition: margin .5s ease-in-out;
 }
-
-.table.striped tbody {
-    tr {
-        opacity: .9;
-        cursor: pointer;
-
-        &:nth-child(2n+1) {
-            opacity: .7;
-        }
-
-        &:hover {
-            opacity: 1;
-        }
-    }
-}
 </style>
\ No newline at end of file
diff --git a/mixins/wotwizard.js b/mixins/wotwizard.js
deleted file mode 100644
index 1d3119a..0000000
--- a/mixins/wotwizard.js
+++ /dev/null
@@ -1,36 +0,0 @@
-export default {
-    data() {
-        return {
-            WWZ_URL : "https://wwgql.coinduf.eu",
-            WWZ_REQUEST_VERSION : "{version}",
-            query: "",
-            retour: null,
-            isError: false
-        }
-    },
-    methods: {
-        WWZ_REQUEST_IDS(hint) { return `{idSearch(with:{hint:\\"${hint}\\"}){ids{uid}}}` },
-        WWZ_REQUEST_DETAILS(hint) { return `{idSearch(with:{hint:\\"${hint}\\"}){ids{pubkey,uid,status}}}` },
-    },
-    async fetch() {
-        if (this.query != "") {
-            this.retour = await fetch(this.WWZ_URL, {
-                method: 'POST',
-                headers: {
-                    'Content-Type': 'application/json'
-                },
-                body: '{"query":"' + this.query + '"}'
-            }).then((res) => {
-                return res.json()
-            }).catch((error) => {
-                this.isError = true
-                return {errors: error}
-            })
-        }
-    },
-    watch: {
-      query : function() {
-        this.$fetch()
-      }
-    }
-}
\ No newline at end of file
diff --git a/nuxt.config.js b/nuxt.config.js
index 1c3d5d5..80b72ab 100644
--- a/nuxt.config.js
+++ b/nuxt.config.js
@@ -59,6 +59,10 @@ export default {
     },
   },
 
+  router: {
+    linkActiveClass: 'active'
+  },
+
   // Build Configuration: https://go.nuxtjs.dev/config-build
   build: {
   }
diff --git a/pages/appolo.vue b/pages/appolo.vue
index 491fe2d..c4c3712 100644
--- a/pages/appolo.vue
+++ b/pages/appolo.vue
@@ -1,22 +1,22 @@
 <template>
 <main class="content">
   <h2 class="display-2 text-center mb-5">Test Appolo</h2>
-  <div class="row">
+  <div class="row mb-4">
     <div class="col-6 m-auto text-center">
       <p>Cette page uilise la bibliothèque <a href="https://apollo.vuejs.org/" target="_blank">Apollo</a> pour requêter graphQL</p>
       <p>Le endpoint se configure dans le fichier <code>./nuxt.config.js</code></p>
       <p>Il est possible de <a href="https://apollo.vuejs.org/guide/components/query.html#query-with-gql-files" target="_blank">mettre les requêtes dans des fichiers séparés</a> et de faire <a href="https://apollo.vuejs.org/guide/apollo/pagination.html" target="_blank">de la pagination</a></p>
-      <input type="text" v-model="param" class="mb-4">
+      <label for="rech" class="form-label">Votre recherche</label>
+      <input type="text" class="form-control" id="rech" aria-describedby="rechHelp" v-model="param" autocomplete="off">
+      <small id="rechHelp" class="form-text text-muted">Saisissez le début d'un pseudo ou d'une clé publique</small>
     </div>
   </div>
-  <div class="spinner-border text-primary mx-auto d-block mb-3" role="status" v-if="$apollo.queries.idSearch.loading">
-    <span class="sr-only">Loading...</span>
-  </div>
+  <NavigationLoader :isLoading="$apollo.queries.idSearch.loading" class="d-block mx-auto" />
   <div class="row" v-if="idSearch && !$apollo.queries.idSearch.loading && param.length > 2">
     <div class="col-8 m-auto">
       <div class="table-responsive">
         <table class="table striped">
-          <thead class="thead-light">
+          <thead>
             <tr>
               <th scope="col">UID</th>
               <th scope="col" class="d-none d-xl-table-cell">PUBKEY</th>
@@ -25,6 +25,7 @@
           </thead>
           <tbody>
             <tr v-for="member in idSearch.ids" :key="member.uid"
+              @click="redirect('/hash/' + member.hash)"
               :class="{
                 'table-danger' : member.status == 'REVOKED',
                 'table-success' : member.status == 'MEMBER',
@@ -32,7 +33,7 @@
                 'table-warning' : member.status == 'MISSING',
             }">
               <th scope="row">{{ member.uid }}</th>
-              <td class="d-none d-xl-table-cell"><a :href="'/hash/' + member.hash">{{ member.pubkey }}</a></td>
+              <td class="d-none d-xl-table-cell">{{ member.pubkey }}</td>
               <td class="d-none d-sm-table-cell">{{ member.status }}</td>
             </tr>
           </tbody>
@@ -62,12 +63,14 @@ export default {
         }
       ],
       // Requête graphQL
-      query: gql`{version}`,
-      param: '4Fge',
+      param: '',
     }
   },
   // Fonctions locales
   methods: {
+    redirect(path) {
+      this.$router.push({ path: path })
+    }
   },
   apollo: {
     idSearch : {
@@ -95,5 +98,15 @@ export default {
 
 <style lang="sass" scoped>
 // CSS Lié au composant
+.table.striped tbody
+  color: var(--dark)
+  tr
+    opacity: .9
+    cursor: pointer
+
+  &:nth-child(2n+1)
+    opacity: .7
 
+  &:hover
+    opacity: 1
 </style>
\ No newline at end of file
diff --git a/pages/explore.vue b/pages/explore.vue
deleted file mode 100644
index b6651fe..0000000
--- a/pages/explore.vue
+++ /dev/null
@@ -1,85 +0,0 @@
-<template>
-<main class="container-fluid">
-  <h2 class="display-2 text-center mb-5">Explorer avec fetch</h2>
-  <div class="row">
-    <div class="col-6 m-auto">
-      <p>Cette page uilise le script <code>/mixins/wotwizard.js</code> pour requêter graphQL. Il faut privilégier Apollo car ce script est amené à disparaître au profit d'Apollo.</p>
-      <form @submit.prevent="refresh" class="mb-5">
-        <div class="mb-3">
-          <label for="rech" class="form-label">Votre recherche</label>
-          <input type="text" class="form-control" id="rech" aria-describedby="rechHelp" v-model="search" :disabled="isError">
-          <small id="rechHelp" class="form-text text-muted">Saisissez le début d'un pseudo ou d'une clé publique</small>
-        </div>
-        <BtnLoading :isWaiting="$fetchState.pending" :disabled="isError"/>
-      </form>
-    </div>
-  </div>
-  <div class="row" v-if="retour && !$fetchState.pending">
-    <div class="col-8 m-auto">
-      <p v-if="retour.errors" class="alert alert-danger">{{ retour.errors }}</p>
-      <div class="table-responsive" v-else>
-        <table class="table striped">
-          <thead class="thead-light">
-            <tr>
-              <th scope="col">UID</th>
-              <th scope="col" class="d-none d-xl-table-cell">PUBKEY</th>
-              <th scope="col" class="d-none d-sm-table-cell">STATUS</th>
-            </tr>
-          </thead>
-          <tbody>
-            <tr v-for="member in retour.data.idSearch.ids" :key="member.uid"
-              :class="{
-                'table-danger' : member.status == 'REVOKED',
-                'table-success' : member.status == 'MEMBER',
-                'table-info' : member.status == 'NEWCOMER',
-                'table-warning' : member.status == 'MISSING',
-            }">
-              <th scope="row">{{ member.uid }}</th>
-              <td class="d-none d-xl-table-cell">{{ member.pubkey }}</td>
-              <td class="d-none d-sm-table-cell">{{ member.status }}</td>
-            </tr>
-          </tbody>
-        </table>
-      </div>
-    </div>
-  </div>
-</main>
-</template>
-
-<script>
-import global from "~/mixins/wotwizard"
-
-export default {
-  data() {
-    // Variables locales
-    return {
-      breadcrumb: [
-        {
-          text: 'Accueil',
-          to: "/"
-        },
-        {
-          text: 'Explorer la wot',
-          active: true
-        }
-      ],
-      search : ""
-    }
-  },
-  // Fonctions locales
-  methods: {
-    refresh() {
-      if (this.search != "") {this.query = this.WWZ_REQUEST_DETAILS(this.search)}
-    }
-  },
-  mounted () {
-    $nuxt.$emit('changeRoute',this.breadcrumb)
-  },
-  mixins: [global]
-}
-</script>
-
-<style lang="sass" scoped>
-// CSS Lié au composant
-
-</style>
\ No newline at end of file
diff --git a/pages/hash/_hash.vue b/pages/hash/_hash.vue
index 82dc6d4..db76383 100644
--- a/pages/hash/_hash.vue
+++ b/pages/hash/_hash.vue
@@ -3,8 +3,7 @@
     <div
       class="spinner-border text-primary mx-auto d-block mb-3"
       role="status"
-      v-if="$apollo.queries.idFromHash.loading"
-    >
+      v-if="$apollo.queries.idFromHash.loading">
       <span class="sr-only">Loading...</span>
     </div>
     <div v-if="!$apollo.queries.idFromHash.loading">
@@ -13,78 +12,16 @@
         <div class="col-8 m-auto">
           <div class="table-responsive">
             <table class="table striped">
-              <tr>
-                <td>uid</td>
-                <td>{{ idFromHash.uid }}</td>
-              </tr>
-              <tr>
-                <td>pubkey</td>
-                <td>{{ idFromHash.pubkey }}</td>
-              </tr>
-              <tr>
-                <td>status</td>
-                <td>{{ idFromHash.status }}</td>
-              </tr>
-              <tr>
-                <td>membership_pending</td>
-                <td>{{ idFromHash.membership_pending }}</td>
-              </tr>
-              <tr>
-                <td>membership_pending_block</td>
-                <td>{{ idFromHash.membership_pending_block }}</td>
-              </tr>
-              <tr>
-                <td>membership_pending_limitDate</td>
-                <td>{{ idFromHash.membership_pending_limitDate }}</td>
-              </tr>
-              <tr>
-                <td>id_written_block</td>
-                <td>{{ idFromHash.id_written_block.number }}</td>
-              </tr>
-              <tr>
-                <td>lastApplication</td>
-                <td>{{ idFromHash.lastApplication.number }}</td>
-              </tr>
-              <tr>
-                <td>limitDate</td>
-                <td>{{ idFromHash.limitDate }}</td>
-              </tr>
-              <tr>
-                <td>isLeaving</td>
-                <td>{{ idFromHash.isLeaving }}</td>
-              </tr>
-              <tr>
-                <td>sentry</td>
-                <td>{{ idFromHash.sentry }}</td>
-              </tr>
-              <tr>
-                <td>received_certifications</td>
-                <td>{{ idFromHash.received_certifications.limit }}</td>
-              </tr>
-              <tr>
-                <td>distance</td>
-                <td>{{ idFromHash.distance.value.ratio }}</td>
-              </tr>
-              <tr>
-                <td>distanceE</td>
-                <td>{{ idFromHash.distanceE.value.ratio }}</td>
-              </tr>
-              <tr>
-                <td>quality</td>
-                <td>{{ idFromHash.quality.ratio }}</td>
-              </tr>
-              <tr>
-                <td>qualityE</td>
-                <td>{{ idFromHash.qualityE.ratio }}</td>
-              </tr>
-              <tr>
-                <td>minDate</td>
-                <td>{{ idFromHash.minDate }}</td>
-              </tr>
-              <tr>
-                <td>minDatePassed</td>
-                <td>{{ idFromHash.minDatePassed }}</td>
-              </tr>
+              <thead>
+                <th>Champ</th>
+                <th>Valeur</th>
+              </thead>
+              <tbody>
+                <tr v-for="(value, propertyName) in idFromHash" :key="propertyName">
+                  <td>{{ propertyName }}</td>
+                  <td>{{ value }}</td>
+                </tr>
+              </tbody>
             </table>
           </div>
         </div>
@@ -93,7 +30,6 @@
   </main>
 </template>
 
-
 <script>
 import gql from "graphql-tag";
 
diff --git a/pages/test.vue b/pages/test.vue
deleted file mode 100644
index 4071e11..0000000
--- a/pages/test.vue
+++ /dev/null
@@ -1,48 +0,0 @@
-<template>
-  <main class="container-fluid">
-    <h1>Hello Nuxters! 👋</h1>
-    <p>
-      This page is rendered on the <strong>{{ rendering }}</strong>
-    </p>
-    <p v-if="rendering === 'server'">
-      First load or hard refresh is done on server side.
-    </p>
-    <p v-if="rendering === 'client'">Navigation is done on client side.</p>
-    <ul>
-      <li>Refresh the page for server side rendering.</li>
-      <li>Click the links to see client side rendering.</li>
-    </ul>
-    <NuxtLink to="/">Home Page</NuxtLink>
-  </main>
-</template>
-
-<script>
-export default {
-  data() {
-    // Variables locales
-    return {
-      // Fil d'ariane
-      breadcrumb: [
-        {
-          text: 'Accueil',
-          to: "/"
-        },
-        {
-          text: 'Test',
-          active: true
-        }
-      ],
-      hello: ''
-    }
-  },
-  asyncData() {
-    return {
-      rendering: process.server ? 'server' : 'client'
-    }
-  },
-  mounted () {
-    // Mise à jour du fil d'ariane au chargement
-    $nuxt.$emit('changeRoute',this.breadcrumb)
-  }
-}
-</script>
diff --git a/store/README.md b/store/README.md
deleted file mode 100644
index 1972d27..0000000
--- a/store/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# STORE
-
-**This directory is not required, you can delete it if you don't want to use it.**
-
-This directory contains your Vuex Store files.
-Vuex Store option is implemented in the Nuxt.js framework.
-
-Creating a file in this directory automatically activates the option in the framework.
-
-More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/vuex-store).
-- 
GitLab