@projectcaluma/ember-form 11.0.0-beta.9 → 11.0.1

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.
Files changed (59) hide show
  1. package/CHANGELOG.md +147 -0
  2. package/addon/components/cf-content.hbs +38 -37
  3. package/addon/components/cf-content.js +7 -3
  4. package/addon/components/cf-field/hint.hbs +5 -0
  5. package/addon/components/cf-field/input/action-button.hbs +23 -18
  6. package/addon/components/cf-field/input/action-button.js +60 -59
  7. package/addon/components/cf-field/input/checkbox.hbs +2 -3
  8. package/addon/components/cf-field/input/date.hbs +22 -25
  9. package/addon/components/cf-field/input/date.js +37 -22
  10. package/addon/components/cf-field/input/files.hbs +38 -0
  11. package/addon/components/cf-field/input/files.js +113 -0
  12. package/addon/components/cf-field/input/powerselect.hbs +27 -29
  13. package/addon/components/cf-field/input/powerselect.js +8 -2
  14. package/addon/components/cf-field/input/radio.hbs +2 -2
  15. package/addon/components/cf-field/input/table.hbs +3 -2
  16. package/addon/components/cf-field/input/table.js +1 -11
  17. package/addon/components/cf-field/input.hbs +8 -21
  18. package/addon/components/cf-field/input.js +32 -14
  19. package/addon/components/cf-field/label.hbs +4 -2
  20. package/addon/components/cf-field-value.hbs +10 -8
  21. package/addon/components/cf-field-value.js +6 -5
  22. package/addon/components/cf-field.hbs +30 -5
  23. package/addon/components/cf-field.js +24 -15
  24. package/addon/components/cf-form-wrapper.hbs +4 -1
  25. package/addon/components/cf-form.hbs +6 -1
  26. package/addon/gql/fragments/field.graphql +14 -7
  27. package/addon/gql/mutations/save-document-files-answer.graphql +9 -0
  28. package/addon/gql/queries/document-forms.graphql +1 -1
  29. package/addon/gql/queries/dynamic-options.graphql +4 -4
  30. package/addon/gql/queries/{fileanswer-info.graphql → filesanswer-info.graphql} +4 -4
  31. package/addon/helpers/format-graphql-error.js +21 -0
  32. package/addon/helpers/get-widget.js +16 -2
  33. package/addon/instance-initializers/form-widget-overrides.js +52 -0
  34. package/addon/lib/document.js +9 -1
  35. package/addon/lib/field.js +49 -46
  36. package/addon/lib/navigation.js +3 -1
  37. package/addon/lib/question.js +18 -5
  38. package/addon/modifiers/autoresize.js +14 -0
  39. package/addon/services/caluma-store.js +2 -0
  40. package/app/components/cf-field/{input/file.js → hint.js} +1 -1
  41. package/app/components/cf-field/input/files.js +1 -0
  42. package/app/helpers/format-graphql-error.js +1 -0
  43. package/app/helpers/get-widget.js +1 -4
  44. package/app/instance-initializers/form-widget-overrides.js +4 -0
  45. package/app/modifiers/autoresize.js +1 -0
  46. package/app/styles/@projectcaluma/ember-form.scss +5 -15
  47. package/app/styles/_flatpickr.scss +47 -0
  48. package/blueprints/@projectcaluma/ember-form/index.js +1 -1
  49. package/index.js +12 -0
  50. package/package.json +49 -40
  51. package/translations/de.yaml +6 -6
  52. package/translations/en.yaml +6 -6
  53. package/translations/fr.yaml +6 -6
  54. package/addon/components/cf-field/input/file.hbs +0 -32
  55. package/addon/components/cf-field/input/file.js +0 -89
  56. package/addon/components/cf-field/label.js +0 -11
  57. package/addon/gql/mutations/remove-answer.graphql +0 -7
  58. package/addon/gql/mutations/save-document-file-answer.graphql +0 -9
  59. package/config/environment.js +0 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectcaluma/ember-form",
3
- "version": "11.0.0-beta.9",
3
+ "version": "11.0.1",
4
4
  "description": "Ember addon for rendering Caluma forms.",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -9,71 +9,80 @@
9
9
  "homepage": "https://docs.caluma.io/ember-caluma",
10
10
  "repository": "github:projectcaluma/ember-caluma",
11
11
  "scripts": {
12
- "test": "npm-run-all test:*",
12
+ "test": "concurrently \"npm:lint\" \"npm:test:*\" --names \"lint,test:\"",
13
13
  "test:ember": "ember test",
14
14
  "test:ember-compatibility": "ember try:each"
15
15
  },
16
16
  "dependencies": {
17
- "@glimmer/component": "^1.0.4",
18
- "@glimmer/tracking": "^1.0.4",
19
- "@projectcaluma/ember-core": "^11.0.0-beta.4",
20
- "ember-apollo-client": "^3.2.0",
21
- "ember-auto-import": "^2.4.0",
22
- "ember-autoresize-modifier": "^0.5.0",
17
+ "@ember/string": "^3.0.1",
18
+ "@embroider/macros": "^1.10.0",
19
+ "@embroider/util": "^1.9.0",
20
+ "@glimmer/component": "^1.1.2",
21
+ "@glimmer/tracking": "^1.1.2",
22
+ "@projectcaluma/ember-core": "^11.0.1",
23
+ "ember-apollo-client": "~4.0.2",
24
+ "ember-auto-import": "^2.6.0",
25
+ "ember-autoresize-modifier": "^0.7.0",
23
26
  "ember-cli-babel": "^7.26.11",
24
- "ember-cli-htmlbars": "^6.0.1",
27
+ "ember-cli-htmlbars": "^6.2.0",
25
28
  "ember-cli-showdown": "^6.0.1",
26
29
  "ember-composable-helpers": "^5.0.0",
27
- "ember-concurrency": "^2.2.0",
28
- "ember-fetch": "^8.1.1",
29
- "ember-in-viewport": "^4.0.0",
30
+ "ember-concurrency": "^2.3.7",
31
+ "ember-fetch": "^8.1.2",
32
+ "ember-flatpickr": "^3.2.3",
33
+ "ember-in-viewport": "^4.1.0",
30
34
  "ember-intl": "^5.7.2",
31
- "ember-math-helpers": "^2.18.1",
32
- "ember-pikaday": "^4.0.0",
33
- "ember-power-select": "^5.0.3",
34
- "ember-resources": "^4.3.1",
35
- "ember-uikit": "^5.0.0",
36
- "ember-validators": "^4.1.0",
35
+ "ember-math-helpers": "^3.0.0",
36
+ "ember-power-select": "^6.0.1",
37
+ "ember-resources": "^5.6.2",
38
+ "ember-uikit": "^6.1.1",
39
+ "ember-validators": "^4.1.2",
37
40
  "graphql": "^15.8.0",
38
41
  "jexl": "^2.3.0",
39
42
  "lodash.isequal": "^4.5.0",
40
- "luxon": "^2.3.0",
43
+ "luxon": "^3.2.1",
41
44
  "tracked-toolbox": "^1.2.3"
42
45
  },
43
46
  "devDependencies": {
44
47
  "@ember/optional-features": "2.0.0",
45
- "@ember/test-helpers": "2.6.0",
46
- "@embroider/test-setup": "1.0.0",
47
- "@faker-js/faker": "6.0.0-alpha.5",
48
- "@projectcaluma/ember-testing": "11.0.0-beta.2",
49
- "@projectcaluma/ember-workflow": "11.0.0-beta.3",
48
+ "@ember/test-helpers": "2.7.0",
49
+ "@embroider/test-setup": "2.1.1",
50
+ "@faker-js/faker": "7.6.0",
51
+ "@projectcaluma/ember-testing": "11.0.1",
52
+ "@projectcaluma/ember-workflow": "^11.0.1",
50
53
  "broccoli-asset-rev": "3.0.0",
51
- "ember-cli": "3.28.5",
52
- "ember-cli-code-coverage": "1.0.3",
53
- "ember-cli-dependency-checker": "3.2.0",
54
+ "concurrently": "7.6.0",
55
+ "ember-cli": "4.9.2",
56
+ "ember-cli-code-coverage": "2.0.0",
57
+ "ember-cli-dependency-checker": "3.3.1",
54
58
  "ember-cli-inject-live-reload": "2.1.0",
55
- "ember-cli-mirage": "2.4.0",
59
+ "ember-cli-mirage": "3.0.0-alpha.3",
56
60
  "ember-cli-sri": "2.1.1",
57
61
  "ember-cli-terser": "4.0.2",
58
- "ember-disable-prototype-extensions": "1.1.3",
59
- "ember-export-application-global": "2.0.1",
60
62
  "ember-load-initializers": "2.1.2",
61
- "ember-maybe-import-regenerator": "1.0.0",
62
- "ember-qunit": "5.1.5",
63
- "ember-resolver": "8.0.3",
64
- "ember-source": "3.28.8",
63
+ "ember-qunit": "6.1.1",
64
+ "ember-resolver": "8.1.0",
65
+ "ember-source": "4.10.0",
65
66
  "ember-source-channel-url": "3.0.0",
66
67
  "ember-try": "2.0.0",
67
68
  "loader.js": "4.7.0",
68
- "miragejs": "0.1.43",
69
- "npm-run-all": "4.1.5",
70
- "qunit": "2.17.2",
69
+ "miragejs": "0.1.47",
70
+ "qunit": "2.19.4",
71
71
  "qunit-dom": "2.0.0",
72
- "uuid": "8.3.2",
73
- "webpack": "5.68.0"
72
+ "uuid": "9.0.0",
73
+ "webpack": "5.75.0"
74
+ },
75
+ "peerDependencies": {
76
+ "@projectcaluma/ember-workflow": "^11.0.1",
77
+ "ember-source": "^3.28.0 || ^4.0.0"
78
+ },
79
+ "peerDependenciesMeta": {
80
+ "@projectcaluma/ember-workflow": {
81
+ "optional": true
82
+ }
74
83
  },
75
84
  "engines": {
76
- "node": "12.* || 14.* || >= 16"
85
+ "node": "14.* || 16.* || >= 18"
77
86
  },
78
87
  "ember": {
79
88
  "edition": "octane"
@@ -12,6 +12,10 @@ caluma:
12
12
  optionNotAvailable: "Diese Option ist nicht mehr verfügbar"
13
13
  info: "Mehr Informationen"
14
14
 
15
+ error:
16
+ intro: "Oh nein, auf unserer Seite ist etwas schief gelaufen. Ihre Antwort konnte nicht gespeichert werden."
17
+ details: "Technische Details:"
18
+
15
19
  navigation:
16
20
  next: "Weiter"
17
21
  previous: "Zurück"
@@ -34,7 +38,6 @@ caluma:
34
38
  options-empty: "Keine Optionen vorhanden"
35
39
  search-placeholder: "Hier tippen um zu suchen"
36
40
  search-empty: "Keine Optionen gefunden"
37
- null: "Keine Auswahl"
38
41
 
39
42
  validation:
40
43
  blank: "Dieses Feld darf nicht leer gelassen werden"
@@ -43,11 +46,8 @@ caluma:
43
46
  greaterThanOrEqualTo: "Die Eingabe in diesem Feld darf nicht kleiner als {gte} sein"
44
47
  lessThanOrEqualTo: "Die Eingabe in diesem Feld darf nicht grösser als {lte} sein"
45
48
  notAnInteger: "Bitte geben Sie eine ganze Zahl ein"
46
- inclusion: "'{value}' ist kein gültiger Wert für dieses Feld"
49
+ inclusion: '"{label}" ist kein gültiger Wert für dieses Feld'
50
+ deleteFailed: "Beim Löschen ist ein Fehler aufgetreten."
47
51
  uploadFailed: "Beim Hochladen ist ein Fehler aufgetreten."
48
52
  format: "{errorMsg}"
49
53
  table: "Mindestens eine Zeile der Tabelle wurde nicht korrekt ausgefüllt"
50
-
51
- pikaday:
52
- month-previous: "Vorheriger Monat"
53
- month-next: "Nächster Monat"
@@ -12,6 +12,10 @@ caluma:
12
12
  optionNotAvailable: "This option is not available anymore"
13
13
  info: "More information"
14
14
 
15
+ error:
16
+ intro: "Oh no, something went wrong on our side. Your answer could not be saved."
17
+ details: "Technical details:"
18
+
15
19
  navigation:
16
20
  next: "Next"
17
21
  previous: "Previous"
@@ -34,7 +38,6 @@ caluma:
34
38
  options-empty: "No options available"
35
39
  search-placeholder: "Type here to search options"
36
40
  search-empty: "Search didn't match any options"
37
- null: "No selection"
38
41
 
39
42
  validation:
40
43
  blank: "This field can't be blank"
@@ -43,11 +46,8 @@ caluma:
43
46
  greaterThanOrEqualTo: "The value of this field must be greater than or equal to {gte}"
44
47
  lessThanOrEqualTo: "The value of this field must be less than or equal to {lte}"
45
48
  notAnInteger: "The value of this field must be an integer"
46
- inclusion: "'{value}' is not a valid value for this field"
49
+ inclusion: '"{label}" is not a valid value for this field'
50
+ deleteFailed: "An error occured during deletion."
47
51
  uploadFailed: "An error occured during upload."
48
52
  format: "{errorMsg}"
49
53
  table: "At least one row of the table was not filled in correctly"
50
-
51
- pikaday:
52
- month-previous: "Previous month"
53
- month-next: "Next month"
@@ -12,6 +12,10 @@ caluma:
12
12
  optionNotAvailable: "Cette option n'est plus disponible"
13
13
  info: "Plus d'informations"
14
14
 
15
+ error:
16
+ intro: "Oh non, quelque chose a mal tourné de notre côté. Votre réponse n'a pas pu être sauvegardée."
17
+ details: "Détails techniques :"
18
+
15
19
  navigation:
16
20
  next: "suivante"
17
21
  previous: "précédente"
@@ -34,7 +38,6 @@ caluma:
34
38
  options-empty: "Pas d'options disponibles"
35
39
  search-placeholder: "Tapez ici pour rechercher"
36
40
  search-empty: "Pas d'options trouvées"
37
- null: "Aucune sélection"
38
41
 
39
42
  validation:
40
43
  blank: "Ce champ ne doit pas être laissé vide"
@@ -43,11 +46,8 @@ caluma:
43
46
  greaterThanOrEqualTo: "La valeur indiquée dans ce champ ne doit pas être inférieure à {gte} "
44
47
  lessThanOrEqualTo: "L'entrée dans ce champ ne doit pas être supérieure à {lte} "
45
48
  notAnInteger: "Veuillez entrer un nombre entier"
46
- inclusion: "'{value}' n'est pas une valeur valide pour ce champ"
49
+ inclusion: '"{label}" n''est pas une valeur valide pour ce champ'
50
+ deleteFailed: "Une erreur est survenue lors de la suppression."
47
51
  uploadFailed: "Une erreur s'est produite pendant le téléchargement."
48
52
  format: "{errorMsg}"
49
53
  table: "Au moins une ligne du tableau n'a pas été remplie correctement"
50
-
51
- pikaday:
52
- month-previous: "Mois précédent"
53
- month-next: "Mois suivant"
@@ -1,32 +0,0 @@
1
- <div class="uk-flex-middle uk-grid-divider uk-grid-column-small" uk-grid>
2
- <div uk-form-custom="target: true">
3
-
4
- <input
5
- type="file"
6
- name={{@field.pk}}
7
- id={{@field.pk}}
8
- disabled={{@disabled}}
9
- {{on "change" this.save}}
10
- />
11
- <UkButton disabled={{@disabled}}>
12
- {{t "caluma.form.selectFile"}}
13
- </UkButton>
14
- </div>
15
- {{#if (and this.downloadUrl this.downloadName)}}
16
- <div>
17
- <UkButton
18
- data-test-download-link
19
- @color="link"
20
- @onClick={{this.download}}
21
- >
22
- {{this.downloadName}}
23
- </UkButton>
24
- <UkIcon
25
- class="uk-icon-button uk-margin-small-left"
26
- role="button"
27
- @icon="trash"
28
- {{on "click" this.delete}}
29
- />
30
- </div>
31
- {{/if}}
32
- </div>
@@ -1,89 +0,0 @@
1
- import { action } from "@ember/object";
2
- import { inject as service } from "@ember/service";
3
- import Component from "@glimmer/component";
4
- import { queryManager } from "ember-apollo-client";
5
- import fetch from "fetch";
6
-
7
- import removeAnswerMutation from "@projectcaluma/ember-form/gql/mutations/remove-answer.graphql";
8
- import getFileAnswerInfoQuery from "@projectcaluma/ember-form/gql/queries/fileanswer-info.graphql";
9
-
10
- export default class CfFieldInputFileComponent extends Component {
11
- @service intl;
12
-
13
- @queryManager apollo;
14
-
15
- get downloadUrl() {
16
- return this.args.field?.answer?.value?.downloadUrl;
17
- }
18
-
19
- get downloadName() {
20
- return this.args.field?.answer?.value?.name;
21
- }
22
-
23
- @action
24
- async download() {
25
- const { downloadUrl } = await this.apollo.query(
26
- {
27
- query: getFileAnswerInfoQuery,
28
- variables: { id: this.args.field.answer.raw.id },
29
- fetchPolicy: "network-only",
30
- },
31
- "node.fileValue"
32
- );
33
-
34
- if (downloadUrl) {
35
- window.open(downloadUrl, "_blank");
36
- }
37
- }
38
-
39
- @action
40
- async save({ target }) {
41
- const file = target.files[0];
42
-
43
- if (!file) {
44
- return;
45
- }
46
-
47
- const { fileValue } = await this.args.onSave(file.name);
48
-
49
- try {
50
- const response = await fetch(fileValue.uploadUrl, {
51
- method: "PUT",
52
- body: file,
53
- });
54
-
55
- if (!response.ok) {
56
- throw new Error();
57
- }
58
-
59
- this.args.field.answer.value = {
60
- name: file.name,
61
- downloadUrl: fileValue.downloadUrl,
62
- };
63
- } catch (error) {
64
- await this.args.onSave(null);
65
- this.args.field._errors = [{ type: "uploadFailed" }];
66
- } finally {
67
- // eslint-disable-next-line require-atomic-updates
68
- target.value = "";
69
- }
70
- }
71
-
72
- @action
73
- async delete() {
74
- try {
75
- await this.apollo.mutate({
76
- mutation: removeAnswerMutation,
77
- variables: {
78
- input: {
79
- answer: this.args.field.answer.uuid,
80
- },
81
- },
82
- });
83
-
84
- await this.args.onSave(null);
85
- } catch (error) {
86
- this.args.field._errors = [{ type: "deleteFailed" }];
87
- }
88
- }
89
- }
@@ -1,11 +0,0 @@
1
- import Component from "@glimmer/component";
2
-
3
- export default class CfFieldLabelComponent extends Component {
4
- get optional() {
5
- if (this.args.field?.question.isCalculated) {
6
- return false;
7
- }
8
-
9
- return this.args.field?.optional;
10
- }
11
- }
@@ -1,7 +0,0 @@
1
- mutation RemoveAnswer($input: RemoveAnswerInput!) {
2
- removeAnswer(input: $input) {
3
- answer {
4
- id
5
- }
6
- }
7
- }
@@ -1,9 +0,0 @@
1
- #import * from '../fragments/field.graphql'
2
-
3
- mutation SaveDocumentFileAnswer($input: SaveDocumentFileAnswerInput!) {
4
- saveDocumentFileAnswer(input: $input) {
5
- answer {
6
- ...FieldAnswer
7
- }
8
- }
9
- }
@@ -1,5 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = function (/* environment, appConfig */) {
4
- return {};
5
- };