Skip to content

Commit d998446

Browse files
committed
Add model.js support in Resource.vue
1 parent 4fa494c commit d998446

5 files changed

Lines changed: 51 additions & 6 deletions

File tree

generator/templates/Crud/src/components/Resource.vue

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,14 @@
3636
</vuetify-resource>
3737
</v-container>
3838
</template>
39+
3940
<script>
40-
import FormDataValues from './../mixins/formDataValues';
4141
import axios from '../api/implementation/app';
4242
import VuetifyResource from '@kingscode/vuetify-resource';
4343
4444
export default {
4545
name: 'Resource',
4646
components: {VuetifyResource},
47-
mixins: [FormDataValues],
4847
data() {
4948
return {
5049
createForm: {values: {}},
@@ -54,6 +53,10 @@ export default {
5453
};
5554
},
5655
props: {
56+
modelType: {
57+
type: Function,
58+
required: false,
59+
},
5760
tableContent: {
5861
type: Array,
5962
required: true,
@@ -151,7 +154,15 @@ export default {
151154
return new Promise((resolve) => {
152155
axios.get((this.showResourceUri || this.resourceUri) + '/' + id)
153156
.then((response) => {
154-
let item = response.data.data;
157+
let item;
158+
159+
if (this.modelType) {
160+
item = new this.modelType();
161+
item.mapResponse(response.data.data);
162+
} else {
163+
item = response.data.data;
164+
}
165+
155166
resolve({
156167
item,
157168
});
@@ -168,7 +179,12 @@ export default {
168179
if (this.createForm.valid) {
169180
this.createHandler(this.createForm.values)
170181
.then((response) => {
171-
this.createForm.values = {};
182+
if (this.modelType) {
183+
this.createForm.values = new this.modelType();
184+
} else {
185+
this.createForm.values = {};
186+
}
187+
172188
if (typeof this.afterCreate === 'function') {
173189
this.afterCreate(response.data).then(() => {
174190
resolve();
@@ -196,6 +212,7 @@ export default {
196212
process.nextTick(() => {
197213
if (this.updateForm.valid) {
198214
this.updateForm.values.id = selected[0].id;
215+
199216
this.updateHandler(this.updateForm.values)
200217
.then((response) => {
201218
if (typeof this.afterUpdate === 'function') {
@@ -243,7 +260,13 @@ export default {
243260
this.beforeOpenUpdate(selected);
244261
return;
245262
}
246-
this.updateForm.values = selected[0];
263+
264+
if (this.modelType) {
265+
this.updateForm.values = new this.modelType();
266+
this.updateForm.values.mapResponse(selected[0]);
267+
} else {
268+
this.updateForm.values = {};
269+
}
247270
},
248271
},
249272
};

generator/templates/Crud/src/views/UserResource.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,16 @@
77
:update-handler="updateHandler"
88
:delete-handler="deleteHandler"
99
:create-handler="createHandler"
10+
:model-type="modelType"
1011
resource-uri="user"
1112
/>
1213
</v-container>
1314
</template>
1415

1516
<script lang="js">
1617
import Resource from '@/components/Resource.vue';
17-
1818
import {create, destroy, update} from '../api/endpoints/user.js';
19+
import User from '../application/models/user.js';
1920
2021
export default {
2122
name: 'UserResource',
@@ -26,6 +27,7 @@ export default {
2627
updateHandler: () => update,
2728
deleteHandler: () => destroy,
2829
createHandler: () => create,
30+
modelType: () => User,
2931
tableContent: () => [
3032
{
3133
text: 'Naam',

generator/templates/Default/src/api/implementation/app/transformer.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,13 @@ function transformResponse(response) {
2626
*/
2727
function transformRequest(data) {
2828
if (data instanceof Model) {
29+
const isPutRequest = data._method === 'put';
30+
2931
data = data.mapForRequest();
32+
33+
if (isPutRequest) {
34+
data._method = 'put';
35+
}
3036
}
3137

3238
if (data) {

generator/templates/Default/src/application/models/model.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ class Model {
88
mapForRequest() {
99
throw new Error(`${this.constructor.name}::mapForRequest unset`);
1010
}
11+
12+
/**
13+
* @param data {{}}
14+
*/
15+
mapResponse(data) {
16+
throw new Error(`${this.constructor.name}::mapResponse unset, keys: ${Object.keys(data).join(', ')}`);
17+
}
1118
}
1219

1320
export default Model;

generator/templates/Default/src/application/models/user.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Model from './model.js';
22

33
class User extends Model {
4+
id = 0;
45
name = '';
56
email = '';
67

@@ -10,6 +11,12 @@ class User extends Model {
1011
email: this.email,
1112
};
1213
}
14+
15+
mapResponse(data) {
16+
this.id = data.id;
17+
this.name = data.name;
18+
this.email = data.email;
19+
}
1320
}
1421

1522
export default User;

0 commit comments

Comments
 (0)