@saltcorn/builder 0.9.0-beta.9 → 0.9.1-beta.0

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,6 +1,6 @@
1
1
  {
2
2
  "name": "@saltcorn/builder",
3
- "version": "0.9.0-beta.9",
3
+ "version": "0.9.1-beta.0",
4
4
  "description": "Drag and drop view builder for Saltcorn, open-source no-code platform",
5
5
  "main": "index.js",
6
6
  "homepage": "https://saltcorn.com",
@@ -471,7 +471,6 @@ const Builder = ({ options, layout, mode }) => {
471
471
  icon={faSave}
472
472
  className={isSaving ? "d-inline" : "d-none"}
473
473
  />
474
- <ViewPageLink />
475
474
  <SettingsPanel />
476
475
  </div>
477
476
  </div>
@@ -15,6 +15,7 @@ import {
15
15
  reactifyStyles,
16
16
  SettingsSectionHeaderRow,
17
17
  buildBootstrapOptions,
18
+ parseStyles,
18
19
  } from "./utils";
19
20
  import { BoxModelEditor } from "./BoxModelEditor";
20
21
  import {
@@ -83,6 +84,8 @@ const Columns = ({
83
84
  gy,
84
85
  aligns,
85
86
  vAligns,
87
+ colClasses,
88
+ colStyles,
86
89
  }) => {
87
90
  const {
88
91
  selected,
@@ -101,7 +104,8 @@ const Columns = ({
101
104
  key={ix}
102
105
  className={`split-col col-sm-${getWidth(widths, ix)} text-${
103
106
  aligns?.[ix]
104
- } align-items-${vAligns?.[ix]}`}
107
+ } align-items-${vAligns?.[ix]} ${colClasses?.[ix] || ""}`}
108
+ style={parseStyles(colStyles?.[ix] || "")}
105
109
  >
106
110
  <Element canvas id={`Col${ix}`} is={Column}>
107
111
  {contents[ix]}
@@ -129,6 +133,8 @@ const ColumnsSettings = () => {
129
133
  gy: node.data.props.gy,
130
134
  vAligns: node.data.props.vAligns,
131
135
  aligns: node.data.props.aligns,
136
+ colClasses: node.data.props.colClasses,
137
+ colStyles: node.data.props.colStyles,
132
138
  }));
133
139
  const {
134
140
  actions: { setProp },
@@ -139,10 +145,14 @@ const ColumnsSettings = () => {
139
145
  setting_col_n,
140
146
  vAligns,
141
147
  aligns,
148
+ colClasses,
149
+ colStyles,
142
150
  } = node;
143
151
  const colSetsNode = {
144
152
  vAlign: vAligns?.[setting_col_n - 1],
145
153
  hAlign: aligns?.[setting_col_n - 1],
154
+ colClass: colClasses?.[setting_col_n - 1] || "",
155
+ colStyle: colStyles?.[setting_col_n - 1] || "",
146
156
  };
147
157
  return (
148
158
  <Accordion>
@@ -283,6 +293,36 @@ const ColumnsSettings = () => {
283
293
  })
284
294
  }
285
295
  />
296
+ <SettingsRow
297
+ field={{
298
+ name: "colClass",
299
+ label: "Class",
300
+ type: "String",
301
+ }}
302
+ node={colSetsNode}
303
+ setProp={setProp}
304
+ onChange={(k, v) =>
305
+ setProp((prop) => {
306
+ if (!prop.colClasses) prop.colClasses = [];
307
+ prop.colClasses[setting_col_n - 1] = v;
308
+ })
309
+ }
310
+ />
311
+ <SettingsRow
312
+ field={{
313
+ name: "colStyle",
314
+ label: "CSS",
315
+ type: "textarea",
316
+ }}
317
+ node={colSetsNode}
318
+ setProp={setProp}
319
+ onChange={(k, v) =>
320
+ setProp((prop) => {
321
+ if (!prop.colStyles) prop.colStyles = [];
322
+ prop.colStyles[setting_col_n - 1] = v;
323
+ })
324
+ }
325
+ />
286
326
  </tbody>
287
327
  </table>
288
328
  </div>
@@ -4,7 +4,7 @@
4
4
  * @subcategory components / elements
5
5
  */
6
6
 
7
- import React from "react";
7
+ import React, { Fragment, useContext } from "react";
8
8
  import { useNode } from "@craftjs/core";
9
9
  import {
10
10
  blockProps,
@@ -12,6 +12,7 @@ import {
12
12
  SettingsFromFields,
13
13
  TextStyleSetting,
14
14
  } from "./utils";
15
+ import optionsCtx from "../context";
15
16
 
16
17
  export /**
17
18
  * @param {object} props
@@ -37,14 +38,20 @@ const HTMLCode = ({ text }) => {
37
38
  );
38
39
  };
39
40
 
40
- const fields = [
41
- {
42
- label: "HTML Code",
43
- name: "text",
44
- type: "textarea",
45
- segment_name: "contents"
46
- },
47
- ];
41
+ const fields = (mode) => {
42
+ return [
43
+ {
44
+ label: "HTML Code",
45
+ name: "text",
46
+ type: "textarea",
47
+ segment_name: "contents",
48
+ sublabel:
49
+ mode === "show"
50
+ ? "Access fields with <code>{{ var_name }}</code>"
51
+ : undefined,
52
+ },
53
+ ];
54
+ };
48
55
 
49
56
  /**
50
57
  * @type {object}
@@ -52,10 +59,14 @@ const fields = [
52
59
  HTMLCode.craft = {
53
60
  displayName: "HTMLCode",
54
61
  related: {
55
- settings: SettingsFromFields(fields),
62
+ settings: () => {
63
+ const options = useContext(optionsCtx);
64
+
65
+ return SettingsFromFields(fields(options.mode))();
66
+ },
56
67
  segment_type: "blank",
57
68
  segment_vars: { isHTML: true },
58
69
  segment_match: (segment) => segment.isHTML,
59
- fields,
70
+ fields: fields(),
60
71
  },
61
72
  };
@@ -1078,13 +1078,27 @@ const SettingsRow = ({ field, node, setProp, onChange, isStyle }) => {
1078
1078
  <td colSpan="2">
1079
1079
  {needLabel && <label>{field.label}</label>}
1080
1080
  {inner}
1081
+ {field.sublabel ? (
1082
+ <i
1083
+ className="small"
1084
+ dangerouslySetInnerHTML={{ __html: field.sublabel }}
1085
+ ></i>
1086
+ ) : null}
1081
1087
  </td>
1082
1088
  ) : (
1083
1089
  <Fragment>
1084
1090
  <td>
1085
1091
  <label>{field.label}</label>
1086
1092
  </td>
1087
- <td>{inner}</td>
1093
+ <td>
1094
+ {inner}
1095
+ {field.sublabel ? (
1096
+ <i
1097
+ className="small"
1098
+ dangerouslySetInnerHTML={{ __html: field.sublabel }}
1099
+ ></i>
1100
+ ) : null}
1101
+ </td>
1088
1102
  </Fragment>
1089
1103
  )}
1090
1104
  </tr>
@@ -283,6 +283,8 @@ const layoutToNodes = (layout, query, actions, parent = "ROOT") => {
283
283
  gx={segment.gx}
284
284
  gy={segment.gy}
285
285
  vAligns={segment.vAligns}
286
+ colClasses={segment.colClasses}
287
+ colStyles={segment.colStyles}
286
288
  aligns={segment.aligns}
287
289
  setting_col_n={1}
288
290
  contents={segment.besides.map(toTag)}
@@ -315,6 +317,8 @@ const layoutToNodes = (layout, query, actions, parent = "ROOT") => {
315
317
  gx={segment.gx}
316
318
  gy={segment.gy}
317
319
  vAligns={segment.vAligns}
320
+ colClasses={segment.colClasses}
321
+ colStyles={segment.colStyles}
318
322
  aligns={segment.aligns}
319
323
  setting_col_n={1}
320
324
  contents={segment.besides.map(toTag)}
@@ -485,6 +489,8 @@ const craftToSaltcorn = (nodes, startFrom = "ROOT") => {
485
489
  gy: +node.props.gy,
486
490
  aligns: node.props.aligns,
487
491
  vAligns: node.props.vAligns,
492
+ colClasses: node.props.colClasses,
493
+ colStyles: node.props.colStyles,
488
494
  style: node.props.style,
489
495
  widths,
490
496
  };