Parcourir la source

feat: add store

Ahmad Kholid il y a 3 ans
Parent
commit
8857f3a6d3
8 fichiers modifiés avec 109 ajouts et 1 suppressions
  1. 18 0
      .editorconfig
  2. 2 0
      package.json
  3. 19 0
      src/lib/vuex-orm.js
  4. 2 0
      src/models/index.js
  5. 26 0
      src/models/task.js
  6. 20 0
      src/models/workflow.js
  7. 9 0
      src/store/index.js
  8. 13 1
      yarn.lock

+ 18 - 0
.editorconfig

@@ -0,0 +1,18 @@
+# EditorConfig is awesome: http://EditorConfig.org
+
+# https://github.com/jokeyrhyme/standard-editorconfig
+
+# top-most EditorConfig file
+root = true
+
+# defaults
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+indent_size = 2
+indent_style = space
+
+[*.md]
+trim_trailing_whitespace = false

+ 2 - 0
package.json

@@ -15,6 +15,8 @@
   },
   "dependencies": {
     "@medv/finder": "^2.1.0",
+    "@vuex-orm/core": "^0.36.4",
+    "nanoid": "^3.1.25",
     "tiny-emitter": "^2.1.0",
     "tippy.js": "^6.3.1",
     "v-remixicon": "^0.0.12",

+ 19 - 0
src/lib/vuex-orm.js

@@ -0,0 +1,19 @@
+import VuexORM, { Query } from '@vuex-orm/core';
+
+function callback(model, param, entity) {
+  console.log('halo?', model, param, entity);
+  // this.store.dispatch('saveToStorage', entity);
+}
+
+Query.on('afterUpdate', callback);
+Query.on('afterDelete', callback);
+
+const database = new VuexORM.Database();
+
+export default function (models) {
+  Object.values(models).forEach((model) => {
+    database.register(model);
+  });
+
+  return VuexORM.install(database);
+}

+ 2 - 0
src/models/index.js

@@ -0,0 +1,2 @@
+export { default as Workflow } from './workflow';
+export { default as Task } from './task';

+ 26 - 0
src/models/task.js

@@ -0,0 +1,26 @@
+import { Model } from '@vuex-orm/core';
+import { nanoid } from 'nanoid';
+
+class Task extends Model {
+  static entity = 'tasks';
+
+  static fields() {
+    return {
+      id: this.uid(() => nanoid()),
+      name: this.string(''),
+      type: this.string(''),
+      createdAt: this.number(),
+      workflowId: this.attr(null),
+    };
+  }
+
+  static async insert(payload) {
+    const res = await super.insert(payload);
+
+    console.log(payload);
+
+    return res;
+  }
+}
+
+export default Task;

+ 20 - 0
src/models/workflow.js

@@ -0,0 +1,20 @@
+import { Model } from '@vuex-orm/core';
+import { nanoid } from 'nanoid';
+import Task from './task';
+
+class Workflow extends Model {
+  static entity = 'workflows';
+
+  static primaryKey = 'id';
+
+  static fields() {
+    return {
+      id: this.uid(() => nanoid()),
+      name: this.string(''),
+      data: this.attr(null),
+      tasks: this.hasMany(Task, 'workflowId'),
+    };
+  }
+}
+
+export default Workflow;

+ 9 - 0
src/store/index.js

@@ -0,0 +1,9 @@
+import { createStore } from 'vuex';
+import vuexORM from '@/lib/vuex-orm';
+import * as models from '@/models';
+
+const store = createStore({
+  plugins: [vuexORM(models)],
+});
+
+export default store;

+ 13 - 1
yarn.lock

@@ -1152,6 +1152,13 @@
   resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.11.tgz#01899f54949caf1ac241de397bd17069632574de"
   integrity sha512-ovfXAsSsCvV9JVceWjkqC/7OF5HbgLOtCWjCIosmPGG8lxbPuavhIxRH1dTx4Dg9xLgRTNLvI3pVxG4ItQZekg==
 
+"@vuex-orm/core@^0.36.4":
+  version "0.36.4"
+  resolved "https://registry.yarnpkg.com/@vuex-orm/core/-/core-0.36.4.tgz#9e2b1b8dfd74c2a508f1862ffa3e4a2c1e4cc60c"
+  integrity sha512-Wkq1G+FtcEQ4LbhEZUZalhuErb2nY2nuBo2UeGVpbVKkMss5piJhw7bt5TpWecDNmIUc2BzaenDDqm08AAe7Hw==
+  dependencies:
+    normalizr "^3.6.0"
+
 "@webassemblyjs/ast@1.11.1":
   version "1.11.1"
   resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7"
@@ -4405,7 +4412,7 @@ nanoevents@^6.0.0:
   resolved "https://registry.yarnpkg.com/nanoevents/-/nanoevents-6.0.1.tgz#4e49e895953d15a7ba06187d7a5fcd148abde990"
   integrity sha512-pV++eMfEBTnNQgtzW93LfVezbA1BPaPSgIgyK+ZskLSEEKjHThs4Pp2UqfOjI+EFD3UkVYbwmpxf1WSSX0ALzA==
 
-nanoid@^3.1.23:
+nanoid@^3.1.23, nanoid@^3.1.25:
   version "3.1.25"
   resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152"
   integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==
@@ -4499,6 +4506,11 @@ normalize-range@^0.1.2:
   resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
   integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
 
+normalizr@^3.6.0:
+  version "3.6.1"
+  resolved "https://registry.yarnpkg.com/normalizr/-/normalizr-3.6.1.tgz#d367ab840e031ff382141b8d81ce279292ff69fe"
+  integrity sha512-8iEmqXmPtll8PwbEFrbPoDxVw7MKnNvt3PZzR2Xvq9nggEEOgBlNICPXYzyZ4w4AkHUzCU998mdatER3n2VaMA==
+
 npm-run-path@^2.0.0:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"