@saltcorn/server 0.9.1-beta.11 → 0.9.1-beta.13

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/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@saltcorn/server",
3
- "version": "0.9.1-beta.11",
3
+ "version": "0.9.1-beta.13",
4
4
  "description": "Server app for Saltcorn, open-source no-code platform",
5
5
  "homepage": "https://saltcorn.com",
6
6
  "main": "index.js",
7
7
  "license": "MIT",
8
8
  "dependencies": {
9
9
  "@aws-sdk/client-s3": "^3.451.0",
10
- "@saltcorn/base-plugin": "0.9.1-beta.11",
11
- "@saltcorn/builder": "0.9.1-beta.11",
12
- "@saltcorn/data": "0.9.1-beta.11",
13
- "@saltcorn/admin-models": "0.9.1-beta.11",
14
- "@saltcorn/filemanager": "0.9.1-beta.11",
15
- "@saltcorn/markup": "0.9.1-beta.11",
16
- "@saltcorn/sbadmin2": "0.9.1-beta.11",
10
+ "@saltcorn/base-plugin": "0.9.1-beta.13",
11
+ "@saltcorn/builder": "0.9.1-beta.13",
12
+ "@saltcorn/data": "0.9.1-beta.13",
13
+ "@saltcorn/admin-models": "0.9.1-beta.13",
14
+ "@saltcorn/filemanager": "0.9.1-beta.13",
15
+ "@saltcorn/markup": "0.9.1-beta.13",
16
+ "@saltcorn/sbadmin2": "0.9.1-beta.13",
17
17
  "@socket.io/cluster-adapter": "^0.2.1",
18
18
  "@socket.io/sticky": "^1.0.1",
19
19
  "adm-zip": "0.5.10",
@@ -1090,11 +1090,13 @@ function common_done(res, viewname, isWeb = true) {
1090
1090
  handle(res.error, (text) => notifyAlert({ type: "danger", text: text }));
1091
1091
 
1092
1092
  if (res.eval_js && res.row && res.field_names) {
1093
- const f = new Function(`row, {${res.field_names}}`, res.eval_js);
1094
- const evalres = f(res.row, res.row);
1093
+ const f = new Function(`viewname, row, {${res.field_names}}`, res.eval_js);
1094
+ const evalres = f(viewname, res.row, res.row);
1095
1095
  if (evalres) common_done(evalres, viewname, isWeb);
1096
1096
  } else if (res.eval_js) {
1097
- handle(res.eval_js, eval);
1097
+ const f = new Function(`viewname`, res.eval_js);
1098
+ const evalres = f(viewname);
1099
+ if (evalres) common_done(evalres, viewname, isWeb);
1098
1100
  }
1099
1101
 
1100
1102
  if (res.reload_page) {
package/routes/actions.js CHANGED
@@ -478,7 +478,9 @@ router.get(
478
478
  res.redirect(`/actions/`);
479
479
  } else {
480
480
  // get configuration fields
481
- const cfgFields = await getActionConfigFields(action, table);
481
+ const cfgFields = await getActionConfigFields(action, table, {
482
+ mode: "trigger",
483
+ });
482
484
  // create form
483
485
  const form = new Form({
484
486
  action: addOnDoneRedirect(`/actions/configure/${id}`, req),
@@ -523,7 +525,9 @@ router.post(
523
525
  const table = trigger.table_id
524
526
  ? Table.findOne({ id: trigger.table_id })
525
527
  : null;
526
- const cfgFields = await getActionConfigFields(action, table);
528
+ const cfgFields = await getActionConfigFields(action, table, {
529
+ mode: "trigger",
530
+ });
527
531
  const form = new Form({
528
532
  action: `/actions/configure/${id}`,
529
533
  fields: cfgFields,
@@ -123,40 +123,46 @@ const view_dropdown = (view, req, on_done_redirect_str = "") =>
123
123
  },
124
124
  '<i class="fas fa-running"></i>&nbsp;' + req.__("Run")
125
125
  ),
126
- a(
127
- {
128
- class: "dropdown-item",
129
- href: `/viewedit/edit/${encodeURIComponent(
130
- view.name
131
- )}${on_done_redirect_str}`,
132
- },
133
- '<i class="fas fa-edit"></i>&nbsp;' + req.__("Edit")
134
- ),
126
+ view.id &&
127
+ a(
128
+ {
129
+ class: "dropdown-item",
130
+ href: `/viewedit/edit/${encodeURIComponent(
131
+ view.name
132
+ )}${on_done_redirect_str}`,
133
+ },
134
+ '<i class="fas fa-edit"></i>&nbsp;' + req.__("Edit")
135
+ ),
135
136
  post_dropdown_item(
136
- `/viewedit/add-to-menu/${view.id}${on_done_redirect_str}`,
137
+ `/viewedit/add-to-menu/${encodeURIComponent(
138
+ view.name
139
+ )}${on_done_redirect_str}`,
137
140
  '<i class="fas fa-bars"></i>&nbsp;' + req.__("Add to menu"),
138
141
  req
139
142
  ),
140
- post_dropdown_item(
141
- `/viewedit/clone/${view.id}${on_done_redirect_str}`,
142
- '<i class="far fa-copy"></i>&nbsp;' + req.__("Duplicate"),
143
- req
144
- ),
145
- a(
146
- {
147
- class: "dropdown-item",
148
- href: `javascript:ajax_modal('/admin/snapshot-restore/view/${view.name}')`,
149
- },
150
- '<i class="fas fa-undo-alt"></i>&nbsp;' + req.__("Restore")
151
- ),
152
- div({ class: "dropdown-divider" }),
153
- post_dropdown_item(
154
- `/viewedit/delete/${view.id}${on_done_redirect_str}`,
155
- '<i class="far fa-trash-alt"></i>&nbsp;' + req.__("Delete"),
156
- req,
157
- true,
158
- view.name
159
- ),
143
+ view.id &&
144
+ post_dropdown_item(
145
+ `/viewedit/clone/${view.id}${on_done_redirect_str}`,
146
+ '<i class="far fa-copy"></i>&nbsp;' + req.__("Duplicate"),
147
+ req
148
+ ),
149
+ view.id &&
150
+ a(
151
+ {
152
+ class: "dropdown-item",
153
+ href: `javascript:ajax_modal('/admin/snapshot-restore/view/${view.name}')`,
154
+ },
155
+ '<i class="fas fa-undo-alt"></i>&nbsp;' + req.__("Restore")
156
+ ),
157
+ view.id && div({ class: "dropdown-divider" }),
158
+ view.id &&
159
+ post_dropdown_item(
160
+ `/viewedit/delete/${view.id}${on_done_redirect_str}`,
161
+ '<i class="far fa-trash-alt"></i>&nbsp;' + req.__("Delete"),
162
+ req,
163
+ true,
164
+ view.name
165
+ ),
160
166
  ]);
161
167
 
162
168
  const setTableRefs = async (views) => {
@@ -222,17 +228,21 @@ const viewsList = async (
222
228
  {
223
229
  label: req.__("Role to access"),
224
230
  key: (row) =>
225
- editViewRoleForm(row, roles, req, on_done_redirect_str),
231
+ row.id
232
+ ? editViewRoleForm(row, roles, req, on_done_redirect_str)
233
+ : "admin",
226
234
  },
227
235
  {
228
236
  label: "",
229
237
  key: (r) =>
230
- link(
231
- `/viewedit/config/${encodeURIComponent(
232
- r.name
233
- )}${on_done_redirect_str}`,
234
- req.__("Configure")
235
- ),
238
+ r.id && r.viewtemplateObj?.configuration_workflow
239
+ ? link(
240
+ `/viewedit/config/${encodeURIComponent(
241
+ r.name
242
+ )}${on_done_redirect_str}`,
243
+ req.__("Configure")
244
+ )
245
+ : "",
236
246
  },
237
247
  !tagId
238
248
  ? {
@@ -167,7 +167,9 @@ const pageBuilderData = async (req, context) => {
167
167
  for (const name of actions) {
168
168
  const action = stateActions[name];
169
169
  if (action && action.configFields) {
170
- actionConfigForms[name] = await getActionConfigFields(action);
170
+ actionConfigForms[name] = await getActionConfigFields(action, null, {
171
+ mode: "page",
172
+ });
171
173
  }
172
174
  }
173
175
  const library = (await Library.find({})).filter((l) => l.suitableFor("page"));
@@ -118,6 +118,9 @@ const viewForm = async (req, tableOptions, roles, pages, values) => {
118
118
  .filter(([k, v]) => !v.tableless)
119
119
  .map(([k, v]) => k);
120
120
  const slugOptions = await Table.allSlugOptions();
121
+ const viewpatternOptions = Object.values(getState().viewtemplates)
122
+ .filter((vt) => !vt.singleton)
123
+ .map((vt) => vt.name);
121
124
  return new Form({
122
125
  action: addOnDoneRedirect("/viewedit/save", req),
123
126
  submitLabel: req.__("Configure") + " &raquo;",
@@ -151,7 +154,7 @@ const viewForm = async (req, tableOptions, roles, pages, values) => {
151
154
  topic: "View patterns",
152
155
  context: {},
153
156
  },
154
- options: Object.keys(getState().viewtemplates),
157
+ options: viewpatternOptions,
155
158
  attributes: {
156
159
  explainers: mapObjectValues(
157
160
  getState().viewtemplates,
@@ -661,11 +664,11 @@ router.post(
661
664
  * @function
662
665
  */
663
666
  router.post(
664
- "/add-to-menu/:id",
667
+ "/add-to-menu/:viewname",
665
668
  isAdmin,
666
669
  error_catcher(async (req, res) => {
667
- const { id } = req.params;
668
- const view = await View.findOne({ id });
670
+ const { viewname } = req.params;
671
+ const view = await View.findOne({ name: viewname });
669
672
  await add_to_menu({
670
673
  label: view.name,
671
674
  type: "View",