@processmaker/screen-builder 2.76.2 → 2.76.4

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": "@processmaker/screen-builder",
3
- "version": "2.76.2",
3
+ "version": "2.76.4",
4
4
  "scripts": {
5
5
  "serve": "vue-cli-service serve",
6
6
  "build": "vue-cli-service build",
@@ -39,7 +39,7 @@
39
39
  "@cypress/code-coverage": "^3.8.1",
40
40
  "@fortawesome/fontawesome-free": "^5.6.1",
41
41
  "@panter/vue-i18next": "^0.15.2",
42
- "@processmaker/vue-form-elements": "0.49.2",
42
+ "@processmaker/vue-form-elements": "0.49.3",
43
43
  "@processmaker/vue-multiselect": "^2.2.0",
44
44
  "@vue/cli-plugin-babel": "^3.6.0",
45
45
  "@vue/cli-plugin-e2e-cypress": "^4.0.3",
@@ -88,7 +88,7 @@
88
88
  },
89
89
  "peerDependencies": {
90
90
  "@panter/vue-i18next": "^0.15.0",
91
- "@processmaker/vue-form-elements": "0.49.2",
91
+ "@processmaker/vue-form-elements": "0.49.3",
92
92
  "i18next": "^15.0.8",
93
93
  "vue": "^2.6.12",
94
94
  "vuex": "^3.1.1"
@@ -67,7 +67,7 @@
67
67
  <b-modal
68
68
  :static="true"
69
69
  @ok="handleOk"
70
- @hidden="addItem = initFormValues"
70
+ @hidden="handleHideAddModal"
71
71
  size="lg"
72
72
  v-if="editable && !selfReferenced"
73
73
  ref="addModal"
@@ -95,6 +95,7 @@
95
95
  <b-modal
96
96
  :static="true"
97
97
  @ok="edit"
98
+ @hidden="$refs.addRenderer.hasSubmitted(false)"
98
99
  size="lg"
99
100
  v-if="editable && !selfReferenced"
100
101
  ref="editModal"
@@ -380,6 +381,7 @@ export default {
380
381
  });
381
382
  },
382
383
  edit(event) {
384
+ this.$refs.addRenderer.hasSubmitted(true);
383
385
  if (this.$refs.editRenderer.$refs.renderer.$refs.component.$v.vdata.$invalid) {
384
386
  event.preventDefault();
385
387
  return;
@@ -411,7 +413,12 @@ export default {
411
413
  let {_parent, ...result} = this.addItem;
412
414
  this.initFormValues = _.cloneDeep(result);
413
415
  },
416
+ handleHideAddModal() {
417
+ this.addItem = this.initFormValues;
418
+ this.$refs.addRenderer.hasSubmitted(false);
419
+ },
414
420
  async handleOk(bvModalEvt) {
421
+ this.$refs.addRenderer.hasSubmitted(true);
415
422
  bvModalEvt.preventDefault();
416
423
 
417
424
  if (this.$refs.addRenderer.$refs.renderer.$refs.component.$v.vdata.$invalid) {
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <div
3
3
  id="vue-form-renderer"
4
+ ref="formRendererContainer"
4
5
  :class="[containerClass, containerDeviceClass]"
5
6
  :style="cssDevice"
6
7
  data-cy="screen-renderer-container"
@@ -104,6 +105,7 @@ export default {
104
105
  },
105
106
  },
106
107
  scrollable: null,
108
+ containerObserver: null,
107
109
  };
108
110
  },
109
111
  computed: {
@@ -156,14 +158,17 @@ export default {
156
158
  },
157
159
  created() {
158
160
  this.parseCss = _.debounce(this.parseCss, 500, {leading: true});
161
+
162
+ this.containerObserver = new ResizeObserver(this.onContainerObserver);
159
163
  },
160
164
  mounted() {
161
- this.parseCss();
162
165
  this.registerCustomFunctions();
163
166
  if (window.ProcessMaker && window.ProcessMaker.EventBus) {
164
167
  window.ProcessMaker.EventBus.$emit('screen-renderer-init', this);
165
168
  }
166
169
  this.scrollable = Scrollparent(this.$el);
170
+
171
+ this.containerObserver.observe(this.$refs.formRendererContainer);
167
172
  },
168
173
  methods: {
169
174
  ...mapActions("globalErrorsModule", ["validate", "hasSubmitted", "showValidationOnLoad"]),
@@ -230,7 +235,8 @@ export default {
230
235
  this.$emit('submit', this.data);
231
236
  },
232
237
  parseCss() {
233
- const containerSelector = '.' + this.containerClass;
238
+ const containerSelector = `.${this.containerClass}`;
239
+
234
240
  try {
235
241
  const ast = csstree.parse(this.customCss, {
236
242
  onParseError(error) {
@@ -238,16 +244,13 @@ export default {
238
244
  throw error.formattedMessage;
239
245
  },
240
246
  });
247
+
241
248
  let i = 0;
242
249
  csstree.walk(ast, function(node, item, list) {
243
- if (
244
- node.type.match(/^.+Selector$/) &&
245
- node.name !== containerSelector &&
246
- list
247
- ) {
250
+ if (node.type.match(/^.+Selector$/) && node.name !== containerSelector && list) {
248
251
  // Wait until we get to the first item before prepending our container selector
249
252
  if (!item.prev) {
250
- list.prependData({type: 'WhiteSpace', loc: null, value: ' '});
253
+ list.prependData({ type: 'WhiteSpace', loc: null, value: ' ' });
251
254
  list.prependData({
252
255
  type: 'TypeSelector',
253
256
  loc: null,
@@ -256,14 +259,61 @@ export default {
256
259
  }
257
260
  }
258
261
  if (i > 5000) {
259
- throw 'CSS is too big';
262
+ throw Error('CSS is too long');
260
263
  }
261
- i = i + 1;
264
+
265
+ i += 1;
266
+ });
267
+
268
+ // Find the media block
269
+ const mediaConditions = [];
270
+ csstree.walk(ast, {
271
+ visit: 'Atrule',
272
+ enter: (node, item, list) => {
273
+ if (!item.prev && node.name === 'media') {
274
+ const mediaCondition = {
275
+ minWidth: 0,
276
+ maxWidth: Math.max(document.documentElement.clientWidth, window.innerWidth || 0),
277
+ rules: [],
278
+ };
279
+
280
+ csstree.walk(node.prelude, {
281
+ visit: 'MediaFeature',
282
+ enter: (featureNode) => {
283
+ if (['min-width', 'max-width'].includes(featureNode.name)) {
284
+ mediaCondition[_.camelCase(featureNode.name)] = parseInt(featureNode.value.value, 10);
285
+
286
+ if (mediaCondition.rules.length === 0) {
287
+ csstree.walk(node.block, {
288
+ visit: 'Rule',
289
+ enter: (ruleNode) => {
290
+ const rule = csstree.generate(ruleNode);
291
+
292
+ mediaCondition.rules.push(rule);
293
+ },
294
+ });
295
+ }
296
+
297
+ mediaConditions.push(mediaCondition);
298
+ }
299
+ },
300
+ });
301
+
302
+ list.remove(item);
303
+ }
304
+ },
262
305
  });
263
306
 
264
307
  this.customCssWrapped = csstree.generate(ast);
265
308
 
266
- // clear errors
309
+ mediaConditions.forEach((condition) => {
310
+ const { width: currentWidth } = this.$refs.formRendererContainer.getBoundingClientRect();
311
+
312
+ if (currentWidth >= condition.minWidth && currentWidth <= condition.maxWidth) {
313
+ this.customCssWrapped += condition.rules.join(' ');
314
+ }
315
+ });
316
+
267
317
  this.$emit('css-errors', '');
268
318
  } catch (error) {
269
319
  this.$emit('css-errors', error);
@@ -275,6 +325,11 @@ export default {
275
325
  setCurrentPage(page) {
276
326
  this.$refs.renderer.setCurrentPage(page);
277
327
  },
328
+ onContainerObserver(entries) {
329
+ // Control coordinates
330
+ const controlEl = entries[0].target.getBoundingClientRect();
331
+ this.parseCss();
332
+ },
278
333
  },
279
334
  };
280
335
  </script>