1- import { PatchedModel , Options , ActionParams } from "./support/interfaces" ;
1+ import { Options } from "./support/interfaces" ;
22import Context from "./common/context" ;
33import { PluginComponents } from "@vuex-orm/core/lib/plugins/use" ;
4- import { Destroy , Fetch , Mutate , Persist , Push } from "./actions" ;
5- import Query from "./actions/query" ;
6- import SimpleQuery from "./actions/simple-query" ;
7- import SimpleMutation from "./actions/simple-mutation" ;
8- import { isPlainObject , toNumber } from "./support/utils" ;
4+ import {
5+ Destroy ,
6+ Fetch ,
7+ Mutate ,
8+ Persist ,
9+ Push ,
10+ Query ,
11+ SimpleQuery ,
12+ SimpleMutation
13+ } from "./actions" ;
914
1015/**
1116 * Main class of the plugin. Setups the internal context, Vuex actions and model methods
@@ -19,7 +24,6 @@ export default class VuexORMGraphQL {
1924 public constructor ( components : PluginComponents , options : Options ) {
2025 Context . setup ( components , options ) ;
2126 VuexORMGraphQL . setupActions ( ) ;
22- VuexORMGraphQL . setupModelMethods ( ) ;
2327 }
2428
2529 /**
@@ -30,86 +34,19 @@ export default class VuexORMGraphQL {
3034 }
3135
3236 /**
33- * This method will setup following Vuex actions: fetch, persist, push, destroy, mutate
37+ * This method will setup:
38+ * - Vuex actions: fetch, persist, push, destroy, mutate
39+ * - Model methods: fetch(), mutate(), customQuery()
40+ * - Record method: $mutate(), $persist(), $push(), $destroy(), $deleteAndDestroy(), $customQuery()
3441 */
3542 private static setupActions ( ) {
36- const context = Context . getInstance ( ) ;
37-
38- context . components . RootActions . simpleQuery = SimpleQuery . call . bind ( SimpleQuery ) ;
39- context . components . RootActions . simpleMutation = SimpleMutation . call . bind ( SimpleMutation ) ;
40-
41- context . components . Actions . fetch = Fetch . call . bind ( Fetch ) ;
42- context . components . Actions . persist = Persist . call . bind ( Persist ) ;
43- context . components . Actions . push = Push . call . bind ( Push ) ;
44- context . components . Actions . destroy = Destroy . call . bind ( Destroy ) ;
45- context . components . Actions . mutate = Mutate . call . bind ( Mutate ) ;
46- context . components . Actions . query = Query . call . bind ( Query ) ;
47- }
48-
49- /**
50- * This method will setup following model methods: Model.fetch, Model.mutate, Model.customQuery, record.$mutate,
51- * record.$persist, record.$push, record.$destroy and record.$deleteAndDestroy, record.$customQuery
52- */
53- private static setupModelMethods ( ) {
54- const context = Context . getInstance ( ) ;
55-
56- // Register static model convenience methods
57- ( context . components . Model as typeof PatchedModel ) . fetch = async function (
58- filter : any ,
59- bypassCache = false
60- ) {
61- let filterObj = filter ;
62- if ( ! isPlainObject ( filterObj ) ) {
63- filterObj = { id : filter } ;
64- }
65- return this . dispatch ( "fetch" , { filter : filterObj , bypassCache } ) ;
66- } ;
67-
68- ( context . components . Model as typeof PatchedModel ) . mutate = async function (
69- params : ActionParams
70- ) {
71- return this . dispatch ( "mutate" , params ) ;
72- } ;
73-
74- ( context . components . Model as typeof PatchedModel ) . customQuery = async function ( {
75- name,
76- filter,
77- multiple,
78- bypassCache
79- } : ActionParams ) {
80- return this . dispatch ( "query" , { name, filter, multiple, bypassCache } ) ;
81- } ;
82-
83- // Register model convenience methods
84- const model : PatchedModel = context . components . Model . prototype as PatchedModel ;
85-
86- model . $mutate = async function ( { name, args, multiple } : ActionParams ) {
87- args = args || { } ;
88- if ( ! args [ "id" ] ) args [ "id" ] = toNumber ( this . $id ) ;
89- return this . $dispatch ( "mutate" , { name, args, multiple } ) ;
90- } ;
91-
92- model . $customQuery = async function ( { name, filter, multiple, bypassCache } : ActionParams ) {
93- filter = filter || { } ;
94- if ( ! filter [ "id" ] ) filter [ "id" ] = toNumber ( this . $id ) ;
95- return this . $dispatch ( "query" , { name, filter, multiple, bypassCache } ) ;
96- } ;
97-
98- model . $persist = async function ( args : any ) {
99- return this . $dispatch ( "persist" , { id : this . $id , args } ) ;
100- } ;
101-
102- model . $push = async function ( args : any ) {
103- return this . $dispatch ( "push" , { data : this , args } ) ;
104- } ;
105-
106- model . $destroy = async function ( ) {
107- return this . $dispatch ( "destroy" , { id : toNumber ( this . $id ) } ) ;
108- } ;
109-
110- model . $deleteAndDestroy = async function ( ) {
111- await this . $delete ( ) ;
112- return this . $destroy ( ) ;
113- } ;
43+ Fetch . setup ( ) ;
44+ Persist . setup ( ) ;
45+ Push . setup ( ) ;
46+ Destroy . setup ( ) ;
47+ Mutate . setup ( ) ;
48+ Query . setup ( ) ;
49+ SimpleQuery . setup ( ) ;
50+ SimpleMutation . setup ( ) ;
11451 }
11552}
0 commit comments