Work.js
2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
'use strict';
/**
* Read the documentation (https://strapi.io/documentation/3.0.0-beta.x/guides/controllers.html#core-controllers)
* to customize this controller
*/
module.exports = {
// GET /previewOne
// strapi-hook-ejs: https://github.com/strapi/strapi/tree/master/packages/strapi-hook-ejs
previewOne: async (ctx) => {
const work = await strapi.services.work.findOne(ctx.params);
return ctx.render('engine', { work });
},
submitForm: async (ctx) => {
const work = await strapi.services.work.findOne(ctx.params);
const formData = ctx.request.body.fields;
// eslint-disable-next-line no-unused-vars
const workform = await strapi.services.workform.create({ form: formData, work });
// eslint-disable-next-line require-atomic-updates
ctx.body = { message: 'success', status: 0 };
},
queryFormsOfOneWork: async (ctx) => {
// move to util module or front-end
function getUuidMap2Name(work) {
const uuidMap2Name = {};
work.pages.forEach(page => {
page.elements.forEach(ele => {
if (ele.name === 'lbp-form-input') {
uuidMap2Name[ele.uuid] = ele.pluginProps.placeholder;
}
if (ele.name === 'lbp-form-radio-group') {
uuidMap2Name[ele.uuid] = ele.pluginProps.aliasName;
}
});
});
return uuidMap2Name;
}
let work = await strapi.services.work.findOne(ctx.params);
work = work.toJSON();
// learn the query from: https://github.com/strapi/foodadvisor/blob/master/api/api/restaurant/controllers/Restaurant.js#L40
// eslint-disable-next-line no-undef
let formDetails = await Workform.query(qb => {
qb.where('work', '=', work.id);
}).fetchAll();
formDetails = formDetails.toJSON();
const uuidMap2Name = getUuidMap2Name(work);
// eslint-disable-next-line require-atomic-updates
return ctx.body = { uuidMap2Name, formDetails };
},
setAsTemplate: async (ctx) => {
let work = await strapi.services.work.findOne(ctx.params);
work = work.toJSON();
// eslint-disable-next-line no-unused-vars
const templateWork = await strapi.services.work.create();
return strapi.services.work.update({id: templateWork.id}, { pages: work.pages, is_template: true, cover_image_url: work.cover_image_url });
},
useTemplate: async (ctx) => {
let templateWork = await strapi.services.work.findOne(ctx.params);
templateWork = templateWork.toJSON();
// eslint-disable-next-line no-unused-vars
const work = await strapi.services.work.create();
return strapi.services.work.update({id: work.id}, { pages: templateWork.pages, is_template: false });
},
uploadPSD: async (ctx) => {
const pageJSON = await strapi.services.work.parsePSD(ctx.request.body.files.file);
// eslint-disable-next-line
ctx.body = pageJSON;
}
};