@saltcorn/server 0.7.4-beta.1 → 0.7.4-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.
@@ -31,6 +31,7 @@ const {
31
31
 
32
32
  const { getState } = require("@saltcorn/data/db/state");
33
33
  const { isAdmin, error_catcher } = require("./utils.js");
34
+ const { setTableRefs, viewsList } = require("./common_lists");
34
35
  const Form = require("@saltcorn/data/models/form");
35
36
  const Field = require("@saltcorn/data/models/field");
36
37
  const Table = require("@saltcorn/data/models/table");
@@ -38,10 +39,10 @@ const View = require("@saltcorn/data/models/view");
38
39
  const Workflow = require("@saltcorn/data/models/workflow");
39
40
  const User = require("@saltcorn/data/models/user");
40
41
  const Page = require("@saltcorn/data/models/page");
42
+ const Tag = require("@saltcorn/data/models/tag");
41
43
  const db = require("@saltcorn/data/db");
42
44
 
43
45
  const { add_to_menu } = require("@saltcorn/admin-models/models/pack");
44
- const { editRoleForm } = require("../markup/forms.js");
45
46
 
46
47
  /**
47
48
  * @type {object}
@@ -53,68 +54,6 @@ const { editRoleForm } = require("../markup/forms.js");
53
54
  const router = new Router();
54
55
  module.exports = router;
55
56
 
56
- /**
57
- * @param {object} view
58
- * @param {object[]} roles
59
- * @param {object} req
60
- * @returns {Form}
61
- */
62
- const editViewRoleForm = (view, roles, req) =>
63
- editRoleForm({
64
- url: `/viewedit/setrole/${view.id}`,
65
- current_role: view.min_role,
66
- roles,
67
- req,
68
- });
69
-
70
- /**
71
- * @param {object} view
72
- * @param {object} req
73
- * @returns {div}
74
- */
75
- const view_dropdown = (view, req) =>
76
- settingsDropdown(`dropdownMenuButton${view.id}`, [
77
- a(
78
- {
79
- class: "dropdown-item",
80
- href: `/view/${encodeURIComponent(view.name)}`,
81
- },
82
- '<i class="fas fa-running"></i>&nbsp;' + req.__("Run")
83
- ),
84
- a(
85
- {
86
- class: "dropdown-item",
87
- href: `/viewedit/edit/${encodeURIComponent(view.name)}`,
88
- },
89
- '<i class="fas fa-edit"></i>&nbsp;' + req.__("Edit")
90
- ),
91
- post_dropdown_item(
92
- `/viewedit/add-to-menu/${view.id}`,
93
- '<i class="fas fa-bars"></i>&nbsp;' + req.__("Add to menu"),
94
- req
95
- ),
96
- post_dropdown_item(
97
- `/viewedit/clone/${view.id}`,
98
- '<i class="far fa-copy"></i>&nbsp;' + req.__("Duplicate"),
99
- req
100
- ),
101
- a(
102
- {
103
- class: "dropdown-item",
104
- href: `javascript:ajax_modal('/admin/snapshot-restore/view/${view.name}')`,
105
- },
106
- '<i class="fas fa-undo-alt"></i>&nbsp;' + req.__("Restore")
107
- ),
108
- div({ class: "dropdown-divider" }),
109
- post_dropdown_item(
110
- `/viewedit/delete/${view.id}`,
111
- '<i class="far fa-trash-alt"></i>&nbsp;' + req.__("Delete"),
112
- req,
113
- true,
114
- view.name
115
- ),
116
- ]);
117
-
118
57
  /**
119
58
  * @name get
120
59
  * @function
@@ -125,77 +64,18 @@ router.get(
125
64
  "/",
126
65
  isAdmin,
127
66
  error_catcher(async (req, res) => {
128
- var orderBy = "name";
67
+ let orderBy = "name";
129
68
  if (req.query._sortby === "viewtemplate") orderBy = "viewtemplate";
69
+ const views = await View.find({}, { orderBy, nocase: true });
70
+ await setTableRefs(views);
130
71
 
131
- var views = await View.find({}, { orderBy, nocase: true });
132
- const tables = await Table.find();
133
- const getTable = (tid) => tables.find((t) => t.id === tid).name;
134
- views.forEach((v) => {
135
- if (v.table_id) v.table = getTable(v.table_id);
136
- else if (v.exttable_name) v.table = v.exttable_name;
137
- else v.table = "";
138
- });
139
72
  if (req.query._sortby === "table")
140
73
  views.sort((a, b) =>
141
74
  a.table.toLowerCase() > b.table.toLowerCase() ? 1 : -1
142
75
  );
143
- const roles = await User.get_roles();
144
76
 
145
- const viewMarkup =
146
- views.length > 0
147
- ? mkTable(
148
- [
149
- {
150
- label: req.__("Name"),
151
- key: (r) => link(`/view/${encodeURIComponent(r.name)}`, r.name),
152
- sortlink: `javascript:set_state_field('_sortby', 'name')`,
153
- },
154
- // description - currently I dont want to show description in view list
155
- // because description can be long
156
- /*
157
- {
158
- label: req.__("Description"),
159
- key: "description",
160
- // this is sorting by column
161
- sortlink: `javascript:set_state_field('_sortby', 'description')`,
162
- },
163
- */
164
- // template
165
- {
166
- label: req.__("Pattern"),
167
- key: "viewtemplate",
168
- sortlink: `javascript:set_state_field('_sortby', 'viewtemplate')`,
169
- },
170
- {
171
- label: req.__("Table"),
172
- key: (r) => link(`/table/${r.table}`, r.table),
173
- sortlink: `javascript:set_state_field('_sortby', 'table')`,
174
- },
175
- {
176
- label: req.__("Role to access"),
177
- key: (row) => editViewRoleForm(row, roles, req),
178
- },
179
- {
180
- label: "",
181
- key: (r) =>
182
- link(
183
- `/viewedit/config/${encodeURIComponent(r.name)}`,
184
- req.__("Configure")
185
- ),
186
- },
187
- {
188
- label: "",
189
- key: (r) => view_dropdown(r, req),
190
- },
191
- ],
192
- views,
193
- { hover: true }
194
- )
195
- : div(
196
- h4(req.__("No views defined")),
197
- p(req.__("Views define how table rows are displayed to the user"))
198
- );
77
+ const viewMarkup = await viewsList(views, req);
78
+ const tables = await Table.find();
199
79
  res.sendWrap(req.__(`Views`), {
200
80
  above: [
201
81
  {
@@ -210,14 +90,14 @@ router.get(
210
90
  viewMarkup,
211
91
  tables.length > 0
212
92
  ? a(
213
- { href: `/viewedit/new`, class: "btn btn-primary" },
214
- req.__("Create view")
215
- )
216
- : p(
217
- req.__(
218
- "You must create at least one table before you can create views."
93
+ { href: `/viewedit/new`, class: "btn btn-primary" },
94
+ req.__("Create view")
219
95
  )
220
- ),
96
+ : p(
97
+ req.__(
98
+ "You must create at least one table before you can create views."
99
+ )
100
+ ),
221
101
  ],
222
102
  },
223
103
  ],
@@ -273,7 +153,9 @@ const viewForm = async (req, tableOptions, roles, pages, values) => {
273
153
  label: req.__("View pattern"),
274
154
  name: "viewtemplate",
275
155
  input_type: "select",
276
- sublabel: req.__("The view pattern sets the foundation of how the view relates to the table and the behaviour of the view"),
156
+ sublabel: req.__(
157
+ "The view pattern sets the foundation of how the view relates to the table and the behaviour of the view"
158
+ ),
277
159
  options: Object.keys(getState().viewtemplates),
278
160
  attributes: {
279
161
  explainers: mapObjectValues(
@@ -362,7 +244,8 @@ router.get(
362
244
  }
363
245
  const tables = await Table.find_with_external();
364
246
  const currentTable = tables.find(
365
- (t) => (t.id && t.id === viewrow.table_id) || t.name === viewrow.exttable_name
247
+ (t) =>
248
+ (t.id && t.id === viewrow.table_id) || t.name === viewrow.exttable_name
366
249
  );
367
250
  viewrow.table_name = currentTable && currentTable.name;
368
251
  if (viewrow.slug && currentTable) {