@saltcorn/server 0.6.1-beta.3 → 0.6.2-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app.js +9 -13
- package/auth/admin.js +5 -22
- package/auth/index.js +15 -2
- package/auth/roleadmin.js +6 -16
- package/auth/routes.js +23 -52
- package/index.js +17 -1
- package/locales/en.json +20 -1
- package/markup/admin.js +17 -0
- package/markup/index.js +14 -1
- package/package.json +22 -9
- package/public/saltcorn.css +2 -2
- package/public/saltcorn.js +12 -0
- package/restart_watcher.js +155 -0
- package/routes/actions.js +1 -15
- package/routes/admin.js +6 -23
- package/routes/api.js +51 -60
- package/routes/config.js +0 -1
- package/routes/crashlog.js +1 -4
- package/routes/delete.js +1 -2
- package/routes/edit.js +1 -2
- package/routes/eventlog.js +2 -15
- package/routes/events.js +0 -1
- package/routes/fields.js +14 -22
- package/routes/files.js +144 -64
- package/routes/homepage.js +131 -105
- package/routes/index.js +37 -0
- package/routes/infoarch.js +12 -19
- package/routes/library.js +1 -4
- package/routes/list.js +2 -5
- package/routes/menu.js +6 -8
- package/routes/packs.js +2 -8
- package/routes/page.js +7 -8
- package/routes/pageedit.js +18 -30
- package/routes/plugins.js +21 -34
- package/routes/scapi.js +155 -184
- package/routes/search.js +6 -10
- package/routes/settings.js +1 -2
- package/routes/tables.js +1 -22
- package/routes/tenant.js +1 -9
- package/routes/utils.js +19 -19
- package/routes/view.js +11 -9
- package/routes/viewedit.js +18 -29
- package/s3storage.js +167 -0
- package/serve.js +10 -2
- package/wrapper.js +3 -0
package/routes/api.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
/** @type {module:express-promise-router} */
|
|
17
17
|
const Router = require("express-promise-router");
|
|
18
18
|
//const db = require("@saltcorn/data/db");
|
|
19
|
-
const {
|
|
19
|
+
const { error_catcher } = require("./utils.js");
|
|
20
20
|
//const { mkTable, renderForm, link, post_btn } = require("@saltcorn/markup");
|
|
21
21
|
const { getState } = require("@saltcorn/data/db/state");
|
|
22
22
|
const Table = require("@saltcorn/data/models/table");
|
|
@@ -41,7 +41,7 @@ const router = new Router();
|
|
|
41
41
|
module.exports = router;
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
|
-
* @param {*} fields
|
|
44
|
+
* @param {*} fields
|
|
45
45
|
* @returns {*}
|
|
46
46
|
*/
|
|
47
47
|
const limitFields = (fields) => (r) => {
|
|
@@ -64,14 +64,14 @@ const limitFields = (fields) => (r) => {
|
|
|
64
64
|
* @param {Table} table
|
|
65
65
|
* @returns {boolean}
|
|
66
66
|
*/
|
|
67
|
-
function accessAllowedRead(req, user, table){
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
67
|
+
function accessAllowedRead(req, user, table) {
|
|
68
|
+
const role = req.isAuthenticated()
|
|
69
|
+
? req.user.role_id
|
|
70
|
+
: user && user.role_id
|
|
71
|
+
? user.role_id
|
|
72
|
+
: 10;
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
return role <= table.min_role_read;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
/**
|
|
@@ -81,15 +81,14 @@ function accessAllowedRead(req, user, table){
|
|
|
81
81
|
* @param {Table} table
|
|
82
82
|
* @returns {boolean}
|
|
83
83
|
*/
|
|
84
|
-
function accessAllowedWrite(req, user, table){
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return role <= table.min_role_write;
|
|
84
|
+
function accessAllowedWrite(req, user, table) {
|
|
85
|
+
const role = req.isAuthenticated()
|
|
86
|
+
? req.user.role_id
|
|
87
|
+
: user && user.role_id
|
|
88
|
+
? user.role_id
|
|
89
|
+
: 10;
|
|
92
90
|
|
|
91
|
+
return role <= table.min_role_write;
|
|
93
92
|
}
|
|
94
93
|
/**
|
|
95
94
|
* Check that user has right to trigger call
|
|
@@ -98,14 +97,14 @@ function accessAllowedWrite(req, user, table){
|
|
|
98
97
|
* @param {Trigger} trigger
|
|
99
98
|
* @returns {boolean}
|
|
100
99
|
*/
|
|
101
|
-
function accessAllowed(req, user, trigger){
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
100
|
+
function accessAllowed(req, user, trigger) {
|
|
101
|
+
const role = req.isAuthenticated()
|
|
102
|
+
? req.user.role_id
|
|
103
|
+
: user && user.role_id
|
|
104
|
+
? user.role_id
|
|
105
|
+
: 10;
|
|
107
106
|
|
|
108
|
-
|
|
107
|
+
return role <= trigger.min_role;
|
|
109
108
|
}
|
|
110
109
|
|
|
111
110
|
/**
|
|
@@ -117,7 +116,6 @@ function accessAllowed(req, user, trigger){
|
|
|
117
116
|
// todo add paging
|
|
118
117
|
router.get(
|
|
119
118
|
"/:tableName/",
|
|
120
|
-
setTenant,
|
|
121
119
|
//passport.authenticate("api-bearer", { session: false }),
|
|
122
120
|
error_catcher(async (req, res, next) => {
|
|
123
121
|
const { tableName } = req.params;
|
|
@@ -176,7 +174,6 @@ router.get(
|
|
|
176
174
|
*/
|
|
177
175
|
router.post(
|
|
178
176
|
"/action/:actionname/",
|
|
179
|
-
setTenant,
|
|
180
177
|
error_catcher(async (req, res, next) => {
|
|
181
178
|
const { actionname } = req.params;
|
|
182
179
|
// todo protect action by authorization check
|
|
@@ -189,30 +186,30 @@ router.post(
|
|
|
189
186
|
when_trigger: "API call",
|
|
190
187
|
});
|
|
191
188
|
|
|
192
|
-
if (!trigger){
|
|
193
|
-
|
|
194
|
-
|
|
189
|
+
if (!trigger) {
|
|
190
|
+
res.status(400).json({ error: req.__("Not found") });
|
|
191
|
+
return;
|
|
195
192
|
}
|
|
196
193
|
await passport.authenticate(
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
}
|
|
194
|
+
"api-bearer",
|
|
195
|
+
{ session: false },
|
|
196
|
+
async function (err, user, info) {
|
|
197
|
+
if (accessAllowed(req, user, trigger)) {
|
|
198
|
+
try {
|
|
199
|
+
const action = getState().actions[trigger.action];
|
|
200
|
+
const resp = await action.run({
|
|
201
|
+
configuration: trigger.configuration,
|
|
202
|
+
body: req.body,
|
|
203
|
+
req,
|
|
204
|
+
});
|
|
205
|
+
res.json({ success: true, data: resp });
|
|
206
|
+
} catch (e) {
|
|
207
|
+
res.status(400).json({ success: false, error: e.message });
|
|
208
|
+
}
|
|
209
|
+
} else {
|
|
210
|
+
res.status(401).json({ error: req.__("Not authorized") });
|
|
215
211
|
}
|
|
212
|
+
}
|
|
216
213
|
)(req, res, next);
|
|
217
214
|
})
|
|
218
215
|
);
|
|
@@ -225,7 +222,6 @@ router.post(
|
|
|
225
222
|
*/
|
|
226
223
|
router.post(
|
|
227
224
|
"/:tableName/",
|
|
228
|
-
setTenant,
|
|
229
225
|
error_catcher(async (req, res, next) => {
|
|
230
226
|
const { tableName } = req.params;
|
|
231
227
|
const table = await Table.findOne({ name: tableName });
|
|
@@ -294,7 +290,6 @@ router.post(
|
|
|
294
290
|
*/
|
|
295
291
|
router.post(
|
|
296
292
|
"/:tableName/:id",
|
|
297
|
-
setTenant,
|
|
298
293
|
error_catcher(async (req, res, next) => {
|
|
299
294
|
const { tableName, id } = req.params;
|
|
300
295
|
const table = await Table.findOne({ name: tableName });
|
|
@@ -355,7 +350,6 @@ router.post(
|
|
|
355
350
|
router.delete(
|
|
356
351
|
"/:tableName/:id",
|
|
357
352
|
// in case of primary key different from id - id will be string "undefined"
|
|
358
|
-
setTenant,
|
|
359
353
|
error_catcher(async (req, res, next) => {
|
|
360
354
|
const { tableName, id } = req.params;
|
|
361
355
|
const table = await Table.findOne({ name: tableName });
|
|
@@ -368,17 +362,14 @@ router.delete(
|
|
|
368
362
|
{ session: false },
|
|
369
363
|
async function (err, user, info) {
|
|
370
364
|
if (accessAllowedWrite(req, user, table)) {
|
|
371
|
-
|
|
372
365
|
try {
|
|
373
|
-
if(id === "undefined"){
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
}
|
|
380
|
-
else
|
|
381
|
-
await table.deleteRows({ id });
|
|
366
|
+
if (id === "undefined") {
|
|
367
|
+
const pk_name = table.pk_name;
|
|
368
|
+
//const fields = await table.getFields();
|
|
369
|
+
const row = req.body;
|
|
370
|
+
//readState(row, fields);
|
|
371
|
+
await table.deleteRows({ [pk_name]: row[pk_name] });
|
|
372
|
+
} else await table.deleteRows({ id });
|
|
382
373
|
res.json({ success: true });
|
|
383
374
|
} catch (e) {
|
|
384
375
|
res.status(400).json({ error: e.message });
|
package/routes/config.js
CHANGED
package/routes/crashlog.js
CHANGED
|
@@ -20,7 +20,7 @@ const {
|
|
|
20
20
|
p,
|
|
21
21
|
} = require("@saltcorn/markup/tags");
|
|
22
22
|
|
|
23
|
-
const {
|
|
23
|
+
const { isAdmin, error_catcher } = require("./utils.js");
|
|
24
24
|
const { send_events_page } = require("../markup/admin.js");
|
|
25
25
|
|
|
26
26
|
/**
|
|
@@ -41,7 +41,6 @@ module.exports = router;
|
|
|
41
41
|
*/
|
|
42
42
|
router.get(
|
|
43
43
|
"/",
|
|
44
|
-
setTenant,
|
|
45
44
|
isAdmin,
|
|
46
45
|
error_catcher(async (req, res) => {
|
|
47
46
|
const state = req.query,
|
|
@@ -103,7 +102,6 @@ router.get(
|
|
|
103
102
|
*/
|
|
104
103
|
router.post(
|
|
105
104
|
"/",
|
|
106
|
-
setTenant,
|
|
107
105
|
isAdmin,
|
|
108
106
|
error_catcher(async (req, res) => {
|
|
109
107
|
const err = {
|
|
@@ -123,7 +121,6 @@ router.post(
|
|
|
123
121
|
*/
|
|
124
122
|
router.get(
|
|
125
123
|
"/:id",
|
|
126
|
-
setTenant,
|
|
127
124
|
isAdmin,
|
|
128
125
|
error_catcher(async (req, res) => {
|
|
129
126
|
const { id } = req.params;
|
package/routes/delete.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
const Router = require("express-promise-router");
|
|
8
8
|
|
|
9
|
-
const {
|
|
9
|
+
const { loggedIn, error_catcher } = require("./utils.js");
|
|
10
10
|
const Table = require("@saltcorn/data/models/table");
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -29,7 +29,6 @@ module.exports = router;
|
|
|
29
29
|
*/
|
|
30
30
|
router.post(
|
|
31
31
|
"/:name/:id",
|
|
32
|
-
setTenant,
|
|
33
32
|
error_catcher(async (req, res) => {
|
|
34
33
|
const { name, id } = req.params;
|
|
35
34
|
const { redirect } = req.query;
|
package/routes/edit.js
CHANGED
|
@@ -9,7 +9,7 @@ const Router = require("express-promise-router");
|
|
|
9
9
|
const Field = require("@saltcorn/data/models/field");
|
|
10
10
|
const File = require("@saltcorn/data/models/file");
|
|
11
11
|
const Form = require("@saltcorn/data/models/form");
|
|
12
|
-
const {
|
|
12
|
+
const { loggedIn, error_catcher } = require("./utils.js");
|
|
13
13
|
const Table = require("@saltcorn/data/models/table");
|
|
14
14
|
const pluralize = require("pluralize");
|
|
15
15
|
|
|
@@ -33,7 +33,6 @@ module.exports = router;
|
|
|
33
33
|
*/
|
|
34
34
|
router.post(
|
|
35
35
|
"/toggle/:name/:id/:field_name",
|
|
36
|
-
setTenant,
|
|
37
36
|
error_catcher(async (req, res) => {
|
|
38
37
|
const { name, id, field_name } = req.params;
|
|
39
38
|
const { redirect } = req.query;
|
package/routes/eventlog.js
CHANGED
|
@@ -5,12 +5,7 @@
|
|
|
5
5
|
* @subcategory routes
|
|
6
6
|
*/
|
|
7
7
|
const Router = require("express-promise-router");
|
|
8
|
-
const {
|
|
9
|
-
isAdmin,
|
|
10
|
-
setTenant,
|
|
11
|
-
error_catcher,
|
|
12
|
-
get_base_url,
|
|
13
|
-
} = require("./utils.js");
|
|
8
|
+
const { isAdmin, error_catcher, get_base_url } = require("./utils.js");
|
|
14
9
|
const { getState } = require("@saltcorn/data/db/state");
|
|
15
10
|
const Trigger = require("@saltcorn/data/models/trigger");
|
|
16
11
|
|
|
@@ -52,7 +47,7 @@ const { send_events_page } = require("../markup/admin.js");
|
|
|
52
47
|
const EventLog = require("@saltcorn/data/models/eventlog");
|
|
53
48
|
|
|
54
49
|
/**
|
|
55
|
-
* @param {object} req
|
|
50
|
+
* @param {object} req
|
|
56
51
|
* @returns {Promise<Form>}
|
|
57
52
|
*/
|
|
58
53
|
const logSettingsForm = async (req) => {
|
|
@@ -101,7 +96,6 @@ const logSettingsForm = async (req) => {
|
|
|
101
96
|
*/
|
|
102
97
|
router.get(
|
|
103
98
|
"/settings",
|
|
104
|
-
setTenant,
|
|
105
99
|
isAdmin,
|
|
106
100
|
error_catcher(async (req, res) => {
|
|
107
101
|
const form = await logSettingsForm(req);
|
|
@@ -128,7 +122,6 @@ router.get(
|
|
|
128
122
|
*/
|
|
129
123
|
router.get(
|
|
130
124
|
"/custom",
|
|
131
|
-
setTenant,
|
|
132
125
|
isAdmin,
|
|
133
126
|
error_catcher(async (req, res) => {
|
|
134
127
|
const cevs = getState().getConfig("custom_events", []);
|
|
@@ -202,7 +195,6 @@ const customEventForm = () =>
|
|
|
202
195
|
*/
|
|
203
196
|
router.get(
|
|
204
197
|
"/custom/new",
|
|
205
|
-
setTenant,
|
|
206
198
|
isAdmin,
|
|
207
199
|
error_catcher(async (req, res) => {
|
|
208
200
|
const form = customEventForm();
|
|
@@ -228,7 +220,6 @@ router.get(
|
|
|
228
220
|
*/
|
|
229
221
|
router.post(
|
|
230
222
|
"/custom/new",
|
|
231
|
-
setTenant,
|
|
232
223
|
isAdmin,
|
|
233
224
|
error_catcher(async (req, res) => {
|
|
234
225
|
const form = customEventForm();
|
|
@@ -264,7 +255,6 @@ router.post(
|
|
|
264
255
|
*/
|
|
265
256
|
router.post(
|
|
266
257
|
"/custom/delete/:name",
|
|
267
|
-
setTenant,
|
|
268
258
|
isAdmin,
|
|
269
259
|
error_catcher(async (req, res) => {
|
|
270
260
|
const { name } = req.params;
|
|
@@ -288,7 +278,6 @@ router.post(
|
|
|
288
278
|
*/
|
|
289
279
|
router.post(
|
|
290
280
|
"/settings",
|
|
291
|
-
setTenant,
|
|
292
281
|
isAdmin,
|
|
293
282
|
error_catcher(async (req, res) => {
|
|
294
283
|
const form = await logSettingsForm(req);
|
|
@@ -321,7 +310,6 @@ router.post(
|
|
|
321
310
|
*/
|
|
322
311
|
router.get(
|
|
323
312
|
"/",
|
|
324
|
-
setTenant,
|
|
325
313
|
isAdmin,
|
|
326
314
|
error_catcher(async (req, res) => {
|
|
327
315
|
const state = req.query,
|
|
@@ -377,7 +365,6 @@ router.get(
|
|
|
377
365
|
*/
|
|
378
366
|
router.get(
|
|
379
367
|
"/:id",
|
|
380
|
-
setTenant,
|
|
381
368
|
isAdmin,
|
|
382
369
|
error_catcher(async (req, res) => {
|
|
383
370
|
const { id } = req.params;
|
package/routes/events.js
CHANGED
package/routes/fields.js
CHANGED
|
@@ -22,7 +22,7 @@ const {
|
|
|
22
22
|
} = require("@saltcorn/data/models/expression");
|
|
23
23
|
const db = require("@saltcorn/data/db");
|
|
24
24
|
|
|
25
|
-
const {
|
|
25
|
+
const { isAdmin, error_catcher } = require("./utils.js");
|
|
26
26
|
const expressionBlurb = require("../markup/expression_blurb");
|
|
27
27
|
const { readState } = require("@saltcorn/data/plugin-helper");
|
|
28
28
|
const { wizardCardTitle } = require("../markup/forms.js");
|
|
@@ -38,11 +38,11 @@ const router = new Router();
|
|
|
38
38
|
module.exports = router;
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
|
-
* @param {object} req
|
|
42
|
-
* @param {*} fkey_opts
|
|
43
|
-
* @param {*} existing_names
|
|
44
|
-
* @param {*} id
|
|
45
|
-
* @param {*} hasData
|
|
41
|
+
* @param {object} req
|
|
42
|
+
* @param {*} fkey_opts
|
|
43
|
+
* @param {*} existing_names
|
|
44
|
+
* @param {*} id
|
|
45
|
+
* @param {*} hasData
|
|
46
46
|
* @returns {Promise<Form>}
|
|
47
47
|
*/
|
|
48
48
|
const fieldForm = async (req, fkey_opts, existing_names, id, hasData) => {
|
|
@@ -137,7 +137,7 @@ const fieldForm = async (req, fkey_opts, existing_names, id, hasData) => {
|
|
|
137
137
|
};
|
|
138
138
|
|
|
139
139
|
/**
|
|
140
|
-
* @param {string} ctxType
|
|
140
|
+
* @param {string} ctxType
|
|
141
141
|
* @returns {object}
|
|
142
142
|
*/
|
|
143
143
|
const calcFieldType = (ctxType) =>
|
|
@@ -146,8 +146,8 @@ const calcFieldType = (ctxType) =>
|
|
|
146
146
|
: { type: ctxType };
|
|
147
147
|
|
|
148
148
|
/**
|
|
149
|
-
* @param {*} attrs
|
|
150
|
-
* @param {object} req
|
|
149
|
+
* @param {*} attrs
|
|
150
|
+
* @param {object} req
|
|
151
151
|
* @returns {*}
|
|
152
152
|
*/
|
|
153
153
|
const translateAttributes = (attrs, req) =>
|
|
@@ -156,8 +156,8 @@ const translateAttributes = (attrs, req) =>
|
|
|
156
156
|
: attrs;
|
|
157
157
|
|
|
158
158
|
/**
|
|
159
|
-
* @param {*} attr
|
|
160
|
-
* @param {*} req
|
|
159
|
+
* @param {*} attr
|
|
160
|
+
* @param {*} req
|
|
161
161
|
* @returns {object}
|
|
162
162
|
*/
|
|
163
163
|
const translateAttribute = (attr, req) => {
|
|
@@ -167,7 +167,7 @@ const translateAttribute = (attr, req) => {
|
|
|
167
167
|
};
|
|
168
168
|
|
|
169
169
|
/**
|
|
170
|
-
* @param {*} req
|
|
170
|
+
* @param {*} req
|
|
171
171
|
* @returns {Workflow}
|
|
172
172
|
*/
|
|
173
173
|
const fieldFlow = (req) =>
|
|
@@ -419,7 +419,6 @@ const fieldFlow = (req) =>
|
|
|
419
419
|
*/
|
|
420
420
|
router.get(
|
|
421
421
|
"/:id",
|
|
422
|
-
setTenant,
|
|
423
422
|
isAdmin,
|
|
424
423
|
error_catcher(async (req, res) => {
|
|
425
424
|
const { id } = req.params;
|
|
@@ -472,7 +471,6 @@ router.get(
|
|
|
472
471
|
*/
|
|
473
472
|
router.get(
|
|
474
473
|
"/new/:table_id",
|
|
475
|
-
setTenant,
|
|
476
474
|
isAdmin,
|
|
477
475
|
error_catcher(async (req, res) => {
|
|
478
476
|
const { table_id } = req.params;
|
|
@@ -509,7 +507,6 @@ router.get(
|
|
|
509
507
|
*/
|
|
510
508
|
router.post(
|
|
511
509
|
"/delete/:id",
|
|
512
|
-
setTenant,
|
|
513
510
|
isAdmin,
|
|
514
511
|
error_catcher(async (req, res) => {
|
|
515
512
|
const { id } = req.params;
|
|
@@ -535,7 +532,6 @@ router.post(
|
|
|
535
532
|
*/
|
|
536
533
|
router.post(
|
|
537
534
|
"/",
|
|
538
|
-
setTenant,
|
|
539
535
|
isAdmin,
|
|
540
536
|
error_catcher(async (req, res) => {
|
|
541
537
|
const wf = fieldFlow(req);
|
|
@@ -584,7 +580,6 @@ router.post(
|
|
|
584
580
|
*/
|
|
585
581
|
router.post(
|
|
586
582
|
"/test-formula",
|
|
587
|
-
setTenant,
|
|
588
583
|
isAdmin,
|
|
589
584
|
error_catcher(async (req, res) => {
|
|
590
585
|
const { formula, tablename, stored } = req.body;
|
|
@@ -622,7 +617,6 @@ router.post(
|
|
|
622
617
|
*/
|
|
623
618
|
router.post(
|
|
624
619
|
"/show-calculated/:tableName/:fieldName/:fieldview",
|
|
625
|
-
setTenant,
|
|
626
620
|
isAdmin,
|
|
627
621
|
error_catcher(async (req, res) => {
|
|
628
622
|
const { tableName, fieldName, fieldview } = req.params;
|
|
@@ -657,7 +651,6 @@ router.post(
|
|
|
657
651
|
*/
|
|
658
652
|
router.post(
|
|
659
653
|
"/preview/:tableName/:fieldName/:fieldview",
|
|
660
|
-
setTenant,
|
|
661
654
|
isAdmin,
|
|
662
655
|
error_catcher(async (req, res) => {
|
|
663
656
|
const { tableName, fieldName, fieldview } = req.params;
|
|
@@ -697,12 +690,12 @@ router.post(
|
|
|
697
690
|
if (!fv && field.type === "Key" && fieldview === "select")
|
|
698
691
|
res.send("<select disabled></select>");
|
|
699
692
|
else if (!fv) res.send("");
|
|
700
|
-
else if (fv.isEdit)
|
|
693
|
+
else if (fv.isEdit || fv.isFilter)
|
|
701
694
|
res.send(
|
|
702
695
|
fv.run(
|
|
703
696
|
field.name,
|
|
704
697
|
undefined,
|
|
705
|
-
{ disabled: true, ...configuration },
|
|
698
|
+
{ disabled: true, ...configuration, ...(field.attributes || {}) },
|
|
706
699
|
"",
|
|
707
700
|
false,
|
|
708
701
|
field
|
|
@@ -722,7 +715,6 @@ router.post(
|
|
|
722
715
|
*/
|
|
723
716
|
router.post(
|
|
724
717
|
"/preview/:tableName/:fieldName/",
|
|
725
|
-
setTenant,
|
|
726
718
|
isAdmin,
|
|
727
719
|
error_catcher(async (req, res) => {
|
|
728
720
|
res.send("");
|