@projectcaluma/ember-form 12.1.0 → 12.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -121,7 +121,7 @@ export default class CfContentComponent extends Component {
121
121
  this.document?.raw.form.slug;
122
122
 
123
123
  return this.document.fieldsets.find(
124
- (fieldset) => fieldset.form.slug === slug
124
+ (fieldset) => fieldset.form.slug === slug,
125
125
  );
126
126
  }
127
127
 
@@ -140,7 +140,7 @@ export default class CfContentComponent extends Component {
140
140
  fetchPolicy: "network-only",
141
141
  variables: { id: this.args.documentId },
142
142
  },
143
- "allDocuments.edges"
143
+ "allDocuments.edges",
144
144
  )).map(({ node }) => node);
145
145
 
146
146
  const [form] = (yield this.apollo.query(
@@ -149,7 +149,7 @@ export default class CfContentComponent extends Component {
149
149
  fetchPolicy: "cache-first",
150
150
  variables: { slug: answerDocument.form.slug },
151
151
  },
152
- "allForms.edges"
152
+ "allForms.edges",
153
153
  )).map(({ node }) => node);
154
154
 
155
155
  const owner = getOwner(this);
@@ -8,6 +8,24 @@
8
8
  @validateOnEnter={{this.validateOnEnter}}
9
9
  as |isValid validate|
10
10
  >
11
+ {{#if (and this.invalidFields.length @field.question.raw.showValidation)}}
12
+ <div class="uk-alert uk-alert-danger uk-animation-fade">
13
+ <div class="uk-flex-inline uk-flex-middle uk-text-bold">
14
+ <UkIcon @icon="warning" class="uk-margin-small-right" />
15
+ {{t "caluma.form.validation.error"}}
16
+ </div>
17
+ <ul class="uk-list uk-list-bullet">
18
+ {{#each this.invalidFields as |invalidField|}}
19
+ <li>
20
+ <LinkTo
21
+ @query={{hash displayedForm=invalidField.fieldset.form.slug}}
22
+ >{{invalidField.question.raw.label}}</LinkTo>
23
+ </li>
24
+ {{/each}}
25
+ </ul>
26
+ </div>
27
+ {{/if}}
28
+
11
29
  <WorkItemButton
12
30
  @workItemId={{this.workItem}}
13
31
  @mutation={{this.action}}
@@ -12,8 +12,9 @@ if (macroCondition(dependencySatisfies("@projectcaluma/ember-workflow", ""))) {
12
12
  super(...args);
13
13
 
14
14
  assert(
15
- "The document must have a `workItemUuid` for `<CfField::Input::ActionButton />` to work.",
16
- this.args.field.document.workItemUuid
15
+ "`<CfField::Input::ActionButton />` did not find a `workItem` related to the `document` or passed via `context.actionButtonWorkItemId`.",
16
+ this.args.field.document.workItemUuid ||
17
+ this.args.context?.actionButtonWorkItemId,
17
18
  );
18
19
  }
19
20
 
@@ -39,6 +40,12 @@ if (macroCondition(dependencySatisfies("@projectcaluma/ember-workflow", ""))) {
39
40
  );
40
41
  }
41
42
 
43
+ get invalidFields() {
44
+ return this.args.field.document.fields.filter(
45
+ (field) => !field.hidden && field.isInvalid,
46
+ );
47
+ }
48
+
42
49
  @action
43
50
  async beforeMutate(validateFn) {
44
51
  if (
@@ -69,7 +76,7 @@ if (macroCondition(dependencySatisfies("@projectcaluma/ember-workflow", ""))) {
69
76
  super(...args);
70
77
 
71
78
  assert(
72
- "@projectcaluma/ember-workflow must be installed to enable the usage of the action button questions"
79
+ "@projectcaluma/ember-workflow must be installed to enable the usage of the action button questions",
73
80
  );
74
81
  }
75
82
  };
@@ -27,7 +27,7 @@ export default class CfFieldInputFilesComponent extends Component {
27
27
  variables: { id: this.args.field.answer.raw.id },
28
28
  fetchPolicy: "network-only",
29
29
  },
30
- "node.value"
30
+ "node.value",
31
31
  );
32
32
  const { downloadUrl } =
33
33
  answers.find((file) =>
@@ -35,7 +35,7 @@ export default class CfFieldInputFilesComponent extends Component {
35
35
  macroCondition(isTesting())
36
36
  ? file.id === fileId ||
37
37
  atob(file.id).substring(file.__typename.length + 1) === fileId
38
- : file.id === fileId
38
+ : file.id === fileId,
39
39
  ) ?? {};
40
40
  if (downloadUrl) {
41
41
  window.open(downloadUrl, "_blank");
@@ -60,7 +60,7 @@ export default class CfFieldInputFilesComponent extends Component {
60
60
  // trigger save action for file list of old and new files with
61
61
  // reduces properties to match gql format
62
62
  const { filesValue: savedAnswerValue } = await this.args.onSave(
63
- fileList.map(({ name, id }) => ({ name, id }))
63
+ fileList.map(({ name, id }) => ({ name, id })),
64
64
  );
65
65
 
66
66
  try {
@@ -69,7 +69,7 @@ export default class CfFieldInputFilesComponent extends Component {
69
69
  ...savedAnswerValue.find(
70
70
  (value) =>
71
71
  file.name === value.name &&
72
- !fileList.find((file) => file.id === value.id)
72
+ !fileList.find((file) => file.id === value.id),
73
73
  ),
74
74
  value: file.value,
75
75
  }));
@@ -22,7 +22,7 @@ export default class CfFieldInputPowerselectComponent extends Component {
22
22
  get selectComponent() {
23
23
  return ensureSafeComponent(
24
24
  this.multiple ? PowerSelectMultipleComponent : PowerSelectComponent,
25
- this
25
+ this,
26
26
  );
27
27
  }
28
28
 
@@ -28,7 +28,7 @@ export default class CfFieldInputTableComponent extends Component {
28
28
 
29
29
  get questions() {
30
30
  return this.args.field.question.raw.rowForm.questions.edges.map(
31
- (edge) => edge.node
31
+ (edge) => edge.node,
32
32
  );
33
33
  }
34
34
 
@@ -37,7 +37,7 @@ export default class CfFieldInputTableComponent extends Component {
37
37
 
38
38
  if (config?.length) {
39
39
  return this.questions.filter((question) =>
40
- config.includes(question.slug)
40
+ config.includes(question.slug),
41
41
  );
42
42
  }
43
43
 
@@ -53,7 +53,7 @@ export default class CfFieldInputTableComponent extends Component {
53
53
  input: { form: this.args.field.question.raw.rowForm.slug },
54
54
  },
55
55
  },
56
- "saveDocument.document"
56
+ "saveDocument.document",
57
57
  );
58
58
 
59
59
  const owner = getOwner(this);
@@ -75,7 +75,7 @@ export default class CfFieldInputTableComponent extends Component {
75
75
  }
76
76
 
77
77
  const remainingDocuments = this.args.field.answer.value.filter(
78
- (doc) => doc.pk !== document.pk
78
+ (doc) => doc.pk !== document.pk,
79
79
  );
80
80
 
81
81
  yield this.args.onSave(remainingDocuments);
@@ -104,7 +104,7 @@ export default class CfFieldInputTableComponent extends Component {
104
104
  yield this.args.onSave([...rows, newDocument]);
105
105
 
106
106
  this.notification.success(
107
- this.intl.t("caluma.form.notification.table.add.success")
107
+ this.intl.t("caluma.form.notification.table.add.success"),
108
108
  );
109
109
  }
110
110
 
@@ -113,7 +113,7 @@ export default class CfFieldInputTableComponent extends Component {
113
113
  yield this.close.perform();
114
114
  } catch (e) {
115
115
  this.notification.danger(
116
- this.intl.t("caluma.form.notification.table.add.error")
116
+ this.intl.t("caluma.form.notification.table.add.error"),
117
117
  );
118
118
  }
119
119
  }
@@ -15,7 +15,7 @@ export default class CfFieldValueComponent extends Component {
15
15
  variables: { id: this.args.field.answer.raw.id },
16
16
  fetchPolicy: "network-only",
17
17
  },
18
- "node.value"
18
+ "node.value",
19
19
  );
20
20
 
21
21
  const { downloadUrl } = files?.find((file) => file.id === id) ?? {};
@@ -51,7 +51,7 @@ export default class CfFieldComponent extends Component {
51
51
  this.args.field?.question,
52
52
  "action-button",
53
53
  "static",
54
- "form"
54
+ "form",
55
55
  );
56
56
  }
57
57
 
@@ -48,13 +48,13 @@ export default class GetWidgetHelper extends Helper {
48
48
  warn(
49
49
  `Widget override "${widget}" is not registered. Please register it by calling \`calumaOptions.registerComponentOverride\``,
50
50
  override,
51
- { id: "ember-caluma.unregistered-override" }
51
+ { id: "ember-caluma.unregistered-override" },
52
52
  );
53
53
 
54
54
  if (override) {
55
55
  return ensureSafeComponent(
56
56
  override.componentClass ?? override.component,
57
- this
57
+ this,
58
58
  );
59
59
  }
60
60
  }
@@ -20,7 +20,7 @@ class PowerSelectOverride {
20
20
 
21
21
  get label() {
22
22
  return this.intl.t(
23
- "caluma.form-builder.question.widgetOverrides.powerselect"
23
+ "caluma.form-builder.question.widgetOverrides.powerselect",
24
24
  );
25
25
  }
26
26
 
@@ -21,7 +21,7 @@ class DedupedTrackedObject {
21
21
  Object.defineProperty(
22
22
  this,
23
23
  key,
24
- dedupeTracked(this, key, { initializer: () => value })
24
+ dedupeTracked(this, key, { initializer: () => value }),
25
25
  );
26
26
  });
27
27
  }
@@ -38,7 +38,7 @@ export default class Answer extends Base {
38
38
 
39
39
  assert(
40
40
  "A graphql answer `raw` must be passed",
41
- /Answer$/.test(raw?.__typename)
41
+ /Answer$/.test(raw?.__typename),
42
42
  );
43
43
 
44
44
  super({ raw, ...args });
@@ -128,7 +128,7 @@ export default class Answer extends Base {
128
128
  if (document instanceof Document) return document;
129
129
 
130
130
  const existing = this.calumaStore.find(
131
- `Document:${decodeId(document.id)}`
131
+ `Document:${decodeId(document.id)}`,
132
132
  );
133
133
 
134
134
  return (
@@ -16,19 +16,19 @@ import { getAST, getTransforms } from "@projectcaluma/ember-core/utils/jexl";
16
16
  export function getDependenciesFromJexl(jexl, expression) {
17
17
  const allTransforms = getTransforms(getAST(jexl, expression));
18
18
  const answerTransforms = allTransforms.filter(
19
- (transform) => transform.name === "answer"
19
+ (transform) => transform.name === "answer",
20
20
  );
21
21
  const mapbyTransforms = allTransforms.filter(
22
22
  (transform) =>
23
23
  transform.name === "mapby" &&
24
24
  transform.args[0].type === "FunctionCall" &&
25
- transform.args[0].name === "answer"
25
+ transform.args[0].name === "answer",
26
26
  );
27
27
  const stringifyTransforms = allTransforms.filter(
28
28
  (transform) =>
29
29
  transform.name === "stringify" &&
30
30
  transform.args[0].type === "FunctionCall" &&
31
- transform.args[0].name === "answer"
31
+ transform.args[0].name === "answer",
32
32
  );
33
33
 
34
34
  return [
@@ -41,7 +41,7 @@ export function getDependenciesFromJexl(jexl, expression) {
41
41
  return childKeys.map((key) => `${parentKey}.${key}`);
42
42
  }),
43
43
  ...stringifyTransforms.map(
44
- (transform) => `${transform.args[0].args[0].value}.__all__`
44
+ (transform) => `${transform.args[0].args[0].value}.__all__`,
45
45
  ),
46
46
  ]),
47
47
  ];
@@ -25,7 +25,7 @@ export default class Document extends Base {
25
25
  constructor({ raw, parentDocument, dataSourceContext, ...args }) {
26
26
  assert(
27
27
  "A graphql document `raw` must be passed",
28
- raw?.__typename === "Document"
28
+ raw?.__typename === "Document",
29
29
  );
30
30
 
31
31
  super({ raw, ...args });
@@ -62,7 +62,7 @@ export default class Document extends Base {
62
62
  raw: { form, answers: this.raw.answers },
63
63
  document: this,
64
64
  owner,
65
- })
65
+ }),
66
66
  );
67
67
  });
68
68
  }
@@ -124,7 +124,7 @@ export default class Document extends Base {
124
124
  const rawId =
125
125
  this.raw.workItem?.id ||
126
126
  this.raw.case?.workItems.edges.find(
127
- (edge) => edge.node.task.__typename === "CompleteWorkflowFormTask"
127
+ (edge) => edge.node.task.__typename === "CompleteWorkflowFormTask",
128
128
  )?.node.id;
129
129
 
130
130
  return rawId ? decodeId(rawId) : null;
@@ -149,8 +149,11 @@ export default class Document extends Base {
149
149
  get jexl() {
150
150
  const documentJexl = new jexl.Jexl();
151
151
 
152
+ // WARNING: When adding a new transform or operator, make sure to add it in
153
+ // `packages/form-builder/addon/validators/jexl.js` as well for the
154
+ // validation in the form builder.
152
155
  documentJexl.addTransform("answer", (slug, defaultValue) =>
153
- this.findAnswer(slug, defaultValue)
156
+ this.findAnswer(slug, defaultValue),
154
157
  );
155
158
  documentJexl.addTransform("mapby", mapby);
156
159
  documentJexl.addBinaryOp("intersects", 20, intersects);
@@ -170,13 +173,13 @@ export default class Document extends Base {
170
173
  documentJexl.addTransform("round", (num, places = 0) =>
171
174
  !onlyNumbers([num]).length
172
175
  ? null
173
- : Math.round(num * Math.pow(10, places)) / Math.pow(10, places)
176
+ : Math.round(num * Math.pow(10, places)) / Math.pow(10, places),
174
177
  );
175
178
  documentJexl.addTransform("ceil", (num) =>
176
- !onlyNumbers([num]).length ? null : Math.ceil(num)
179
+ !onlyNumbers([num]).length ? null : Math.ceil(num),
177
180
  );
178
181
  documentJexl.addTransform("floor", (num) =>
179
- !onlyNumbers([num]).length ? null : Math.floor(num)
182
+ !onlyNumbers([num]).length ? null : Math.floor(num),
180
183
  );
181
184
  documentJexl.addTransform("sum", (arr) => sum(onlyNumbers(arr)));
182
185
  documentJexl.addTransform("avg", (arr) => {
@@ -234,7 +237,7 @@ export default class Document extends Base {
234
237
  ...answerMap,
235
238
  [field.question.slug]: field.value,
236
239
  }),
237
- {}
240
+ {},
238
241
  );
239
242
  }
240
243
 
@@ -269,7 +272,7 @@ export default class Document extends Base {
269
272
  ...obj,
270
273
  [tableField.question.slug]: tableField.value,
271
274
  };
272
- }, {})
275
+ }, {}),
273
276
  );
274
277
  }
275
278
 
@@ -284,7 +287,7 @@ export default class Document extends Base {
284
287
  */
285
288
  findField(slug) {
286
289
  return [...this.fields, ...(this.parentDocument?.fields ?? [])].find(
287
- (field) => field.question.slug === slug
290
+ (field) => field.question.slug === slug,
288
291
  );
289
292
  }
290
293
  }
@@ -283,7 +283,7 @@ export default class Field extends Base {
283
283
  try {
284
284
  return this.document.jexl.evalSync(
285
285
  this.question.raw.calcExpression,
286
- this.jexlContext
286
+ this.jexlContext,
287
287
  );
288
288
  } catch (error) {
289
289
  return null;
@@ -311,7 +311,7 @@ export default class Field extends Base {
311
311
  question: this.question.slug,
312
312
  },
313
313
  },
314
- "allUsedDynamicOptions.edges"
314
+ "allUsedDynamicOptions.edges",
315
315
  );
316
316
 
317
317
  return edges.map(({ node: { slug, label } }) => ({
@@ -352,11 +352,11 @@ export default class Field extends Base {
352
352
  (this.question.isMultipleChoice ? this.value : [this.value]) || [];
353
353
 
354
354
  const options = this.question.options.filter(
355
- (option) => !option.disabled || selected.includes(option.slug)
355
+ (option) => !option.disabled || selected.includes(option.slug),
356
356
  );
357
357
 
358
358
  const hasUnknownValue = !selected.every((slug) =>
359
- options.find((option) => option.slug === slug)
359
+ options.find((option) => option.slug === slug),
360
360
  );
361
361
 
362
362
  if (this.question.isDynamic && hasUnknownValue) {
@@ -399,7 +399,7 @@ export default class Field extends Base {
399
399
  const selected = this.options.filter(({ slug }) =>
400
400
  this.question.isMultipleChoice
401
401
  ? (this.value || []).includes(slug)
402
- : this.value === slug
402
+ : this.value === slug,
403
403
  );
404
404
 
405
405
  return this.question.isMultipleChoice ? selected : selected[0];
@@ -491,11 +491,11 @@ export default class Field extends Base {
491
491
  try {
492
492
  return this.document.jexl.evalSync(
493
493
  this.question.raw.isHidden,
494
- this.jexlContext
494
+ this.jexlContext,
495
495
  );
496
496
  } catch (error) {
497
497
  throw new Error(
498
- `Error while evaluating \`isHidden\` expression on field \`${this.pk}\`: ${error.message}`
498
+ `Error while evaluating \`isHidden\` expression on field \`${this.pk}\`: ${error.message}`,
499
499
  );
500
500
  }
501
501
  }
@@ -526,11 +526,11 @@ export default class Field extends Base {
526
526
  try {
527
527
  return !this.document.jexl.evalSync(
528
528
  this.question.raw.isRequired,
529
- this.jexlContext
529
+ this.jexlContext,
530
530
  );
531
531
  } catch (error) {
532
532
  throw new Error(
533
- `Error while evaluating \`isRequired\` expression on field \`${this.pk}\`: ${error.message}`
533
+ `Error while evaluating \`isRequired\` expression on field \`${this.pk}\`: ${error.message}`,
534
534
  );
535
535
  }
536
536
  }
@@ -569,7 +569,7 @@ export default class Field extends Base {
569
569
  mutation: MUTATION_MAP[type],
570
570
  variables: { input },
571
571
  },
572
- `saveDocument${type}.answer`
572
+ `saveDocument${type}.answer`,
573
573
  );
574
574
 
575
575
  const wasNew = this.isNew;
@@ -613,7 +613,7 @@ export default class Field extends Base {
613
613
 
614
614
  assert(
615
615
  `Missing validation function for ${this.questionType}`,
616
- specificValidation
616
+ specificValidation,
617
617
  );
618
618
 
619
619
  const validationFns = [
@@ -626,7 +626,7 @@ export default class Field extends Base {
626
626
  const res = await fn.call(this);
627
627
 
628
628
  return Array.isArray(res) ? res : [res];
629
- })
629
+ }),
630
630
  ))
631
631
  .reduce((arr, e) => [...arr, ...e], []) // flatten the array
632
632
  .filter((e) => typeof e === "object");
@@ -861,11 +861,11 @@ export default class Field extends Base {
861
861
  await field.validate.perform();
862
862
 
863
863
  return field.isValid;
864
- })
864
+ }),
865
865
  );
866
866
 
867
867
  return validFields.every(Boolean);
868
- })
868
+ }),
869
869
  );
870
870
 
871
871
  return (
@@ -16,11 +16,11 @@ export default class Fieldset extends Base {
16
16
 
17
17
  assert(
18
18
  "A graphql form `raw.form` must be passed",
19
- raw?.form?.__typename === "Form"
19
+ raw?.form?.__typename === "Form",
20
20
  );
21
21
  assert(
22
22
  "A collection of graphql answers `raw.answers` must be passed",
23
- raw?.answers?.every((answer) => /Answer$/.test(answer.__typename))
23
+ raw?.answers?.every((answer) => /Answer$/.test(answer.__typename)),
24
24
  );
25
25
 
26
26
  super({ raw, ...args });
@@ -53,18 +53,18 @@ export default class Fieldset extends Base {
53
53
  return associateDestroyableChild(
54
54
  this,
55
55
  this.calumaStore.find(
56
- `${this.document.pk}:Question:${question.slug}`
56
+ `${this.document.pk}:Question:${question.slug}`,
57
57
  ) ||
58
58
  new (owner.factoryFor("caluma-model:field").class)({
59
59
  raw: {
60
60
  question,
61
61
  answer: this.raw.answers.find(
62
- (answer) => answer?.question?.slug === question.slug
62
+ (answer) => answer?.question?.slug === question.slug,
63
63
  ),
64
64
  },
65
65
  fieldset: this,
66
66
  owner,
67
- })
67
+ }),
68
68
  );
69
69
  });
70
70
 
@@ -81,7 +81,7 @@ export class NavigationItem extends Base {
81
81
  @cached
82
82
  get children() {
83
83
  return this.navigation.items.filter(
84
- (item) => item._parentSlug === this.slug
84
+ (item) => item._parentSlug === this.slug,
85
85
  );
86
86
  }
87
87
 
@@ -162,7 +162,7 @@ export class NavigationItem extends Base {
162
162
  return (
163
163
  (this.fieldset.field === undefined || !this.fieldset.field.hidden) &&
164
164
  this.fieldset.fields.some(
165
- (field) => field.questionType !== "FormQuestion" && !field.hidden
165
+ (field) => field.questionType !== "FormQuestion" && !field.hidden,
166
166
  )
167
167
  );
168
168
  }
@@ -234,7 +234,7 @@ export class NavigationItem extends Base {
234
234
  return this.fieldset.fields.filter(
235
235
  (f) =>
236
236
  !["FormQuestion", "StaticQuestion"].includes(f.questionType) &&
237
- !f.hidden
237
+ !f.hidden,
238
238
  );
239
239
  }
240
240
 
@@ -343,7 +343,7 @@ export class Navigation extends Base {
343
343
  fieldset,
344
344
  navigation: this,
345
345
  owner,
346
- })
346
+ }),
347
347
  );
348
348
  });
349
349
 
@@ -3,7 +3,7 @@ import { assert } from "@ember/debug";
3
3
  export const parseDocument = (response) => {
4
4
  assert(
5
5
  "The passed document must be a GraphQL document",
6
- response.__typename === "Document"
6
+ response.__typename === "Document",
7
7
  );
8
8
  assert("The passed document must include a form", response.form);
9
9
  assert("The passed document must include answers", response.answers);
@@ -19,7 +19,7 @@ export const parseDocument = (response) => {
19
19
  export const parseForm = (response) => {
20
20
  assert(
21
21
  "The passed form must be a GraphQL form",
22
- response.__typename === "Form"
22
+ response.__typename === "Form",
23
23
  );
24
24
 
25
25
  return {
@@ -45,7 +45,7 @@ export const parseFormTree = (response) => {
45
45
  export const parseAnswer = (response) => {
46
46
  assert(
47
47
  "The passed answer must be a GraphQL answer",
48
- /Answer$/.test(response.__typename)
48
+ /Answer$/.test(response.__typename),
49
49
  );
50
50
 
51
51
  return { ...response };
@@ -54,7 +54,7 @@ export const parseAnswer = (response) => {
54
54
  export const parseQuestion = (response) => {
55
55
  assert(
56
56
  "The passed question must be a GraphQL question",
57
- /Question$/.test(response.__typename)
57
+ /Question$/.test(response.__typename),
58
58
  );
59
59
 
60
60
  return { ...response };
@@ -22,7 +22,7 @@ export default class Question extends Base {
22
22
  constructor({ raw, ...args }) {
23
23
  assert(
24
24
  "A graphql question `raw` must be passed",
25
- /Question$/.test(raw?.__typename)
25
+ /Question$/.test(raw?.__typename),
26
26
  );
27
27
 
28
28
  super({ raw, ...args });
@@ -64,7 +64,7 @@ export default class Question extends Base {
64
64
  : null,
65
65
  },
66
66
  },
67
- "allQuestions.edges"
67
+ "allQuestions.edges",
68
68
  );
69
69
 
70
70
  return (
@@ -153,7 +153,7 @@ export default class Question extends Base {
153
153
  @cached
154
154
  get defaultValue() {
155
155
  const key = camelize(
156
- this.raw.__typename.replace(/Question$/, "DefaultAnswer")
156
+ this.raw.__typename.replace(/Question$/, "DefaultAnswer"),
157
157
  );
158
158
 
159
159
  const value = this.raw[key]?.value;
@@ -167,7 +167,7 @@ export default class Question extends Base {
167
167
  [answer.question.slug]: getValue(answer),
168
168
  };
169
169
  },
170
- {}
170
+ {},
171
171
  );
172
172
  });
173
173
  }
@@ -12,14 +12,14 @@ export default class CalumaStoreService extends Service {
12
12
  push(obj) {
13
13
  assert(
14
14
  `Object must have an \`pk\` in order to be pushed into the store`,
15
- obj.pk
15
+ obj.pk,
16
16
  );
17
17
 
18
18
  const existing = this._store.get(obj.pk);
19
19
 
20
20
  if (existing) {
21
21
  debug(
22
- `Object with the pk \`${obj.pk}\` already exists in the store. It will be updated.`
22
+ `Object with the pk \`${obj.pk}\` already exists in the store. It will be updated.`,
23
23
  );
24
24
 
25
25
  set(existing, "raw", obj.raw);
@@ -17,7 +17,9 @@ $icon-size: 0.8rem !default;
17
17
  width: $icon-size;
18
18
  color: color.adjust($global-border, $lightness: -40%);
19
19
  border: 1px solid color.adjust($global-border, $lightness: -10%);
20
- transition: color 500ms ease, border 500ms ease;
20
+ transition:
21
+ color 500ms ease,
22
+ border 500ms ease;
21
23
 
22
24
  &::before {
23
25
  position: absolute;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectcaluma/ember-form",
3
- "version": "12.1.0",
3
+ "version": "12.3.0",
4
4
  "description": "Ember addon for rendering Caluma forms.",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -10,8 +10,8 @@
10
10
  "repository": "github:projectcaluma/ember-caluma",
11
11
  "dependencies": {
12
12
  "@ember/string": "^3.1.1",
13
- "@embroider/macros": "^1.11.1",
14
- "@embroider/util": "^1.11.1",
13
+ "@embroider/macros": "^1.13.0",
14
+ "@embroider/util": "^1.12.0",
15
15
  "@glimmer/component": "^1.1.2",
16
16
  "@glimmer/tracking": "^1.1.2",
17
17
  "ember-apollo-client": "~4.0.2",
@@ -19,16 +19,16 @@
19
19
  "ember-autoresize-modifier": "^0.7.0",
20
20
  "ember-cli-babel": "^7.26.11",
21
21
  "ember-cli-htmlbars": "^6.2.0",
22
- "ember-cli-showdown": "^6.0.1",
22
+ "ember-cli-showdown": "^7.0.0",
23
23
  "ember-composable-helpers": "^5.0.0",
24
- "ember-concurrency": "^2.3.7",
24
+ "ember-concurrency": "^3.0.0",
25
25
  "ember-fetch": "^8.1.2",
26
26
  "ember-flatpickr": "^4.0.0",
27
27
  "ember-in-viewport": "^4.1.0",
28
28
  "ember-intl": "^5.7.2",
29
29
  "ember-math-helpers": "^3.0.0",
30
- "ember-power-select": "^7.0.0",
31
- "ember-resources": "^5.6.4",
30
+ "ember-power-select": "^7.1.0",
31
+ "ember-resources": "^6.3.1",
32
32
  "ember-uikit": "^8.0.0",
33
33
  "ember-validators": "^4.1.2",
34
34
  "graphql": "^15.8.0",
@@ -36,11 +36,11 @@
36
36
  "lodash.isequal": "^4.5.0",
37
37
  "luxon": "^3.3.0",
38
38
  "tracked-toolbox": "^2.0.0",
39
- "@projectcaluma/ember-core": "^12.1.0"
39
+ "@projectcaluma/ember-core": "^12.3.0"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@ember/optional-features": "2.0.0",
43
- "@ember/test-helpers": "3.1.0",
43
+ "@ember/test-helpers": "3.2.0",
44
44
  "@embroider/test-setup": "3.0.1",
45
45
  "@faker-js/faker": "8.0.2",
46
46
  "broccoli-asset-rev": "3.0.0",
@@ -53,23 +53,23 @@
53
53
  "ember-cli-terser": "4.0.2",
54
54
  "ember-load-initializers": "2.1.2",
55
55
  "ember-qunit": "7.0.0",
56
- "ember-resolver": "10.1.1",
57
- "ember-source": "4.12.0",
56
+ "ember-resolver": "11.0.0",
57
+ "ember-source": "4.12.3",
58
58
  "ember-source-channel-url": "3.0.0",
59
59
  "ember-try": "2.0.0",
60
60
  "loader.js": "4.7.0",
61
61
  "miragejs": "0.1.47",
62
62
  "qunit": "2.19.4",
63
63
  "qunit-dom": "2.0.0",
64
- "uikit": "3.16.22",
64
+ "uikit": "3.16.23",
65
65
  "uuid": "9.0.0",
66
- "webpack": "5.87.0",
67
- "@projectcaluma/ember-testing": "12.1.0",
68
- "@projectcaluma/ember-workflow": "12.1.0"
66
+ "webpack": "5.88.2",
67
+ "@projectcaluma/ember-testing": "12.3.0",
68
+ "@projectcaluma/ember-workflow": "12.3.0"
69
69
  },
70
70
  "peerDependencies": {
71
71
  "ember-source": "^4.0.0",
72
- "@projectcaluma/ember-workflow": "^12.1.0"
72
+ "@projectcaluma/ember-workflow": "^12.3.0"
73
73
  },
74
74
  "peerDependenciesMeta": {
75
75
  "@projectcaluma/ember-workflow": {
@@ -51,3 +51,4 @@ caluma:
51
51
  uploadFailed: "Beim Hochladen ist ein Fehler aufgetreten."
52
52
  format: "{errorMsg}"
53
53
  table: "Mindestens eine Zeile der Tabelle wurde nicht korrekt ausgefüllt"
54
+ error: "Folgende Fragen sind noch nicht korrekt ausgefüllt:"
@@ -51,3 +51,4 @@ caluma:
51
51
  uploadFailed: "An error occured during upload."
52
52
  format: "{errorMsg}"
53
53
  table: "At least one row of the table was not filled in correctly"
54
+ error: "The following questions have not yet been filled in correctly:"
@@ -51,3 +51,4 @@ caluma:
51
51
  uploadFailed: "Une erreur s'est produite pendant le téléchargement."
52
52
  format: "{errorMsg}"
53
53
  table: "Au moins une ligne du tableau n'a pas été remplie correctement"
54
+ error: "Les questions suivantes n'ont pas encore été correctement remplies :"