@projectcaluma/ember-form 9.1.1 → 10.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/addon/components/cf-field/input/action-button.hbs +19 -0
  3. package/addon/components/cf-field/input/action-button.js +75 -0
  4. package/addon/components/cf-field/input/file.hbs +24 -13
  5. package/addon/components/cf-field/input/file.js +19 -9
  6. package/addon/components/cf-field/input/table.hbs +94 -95
  7. package/addon/components/cf-field/input/table.js +97 -80
  8. package/addon/components/cf-field/input.hbs +1 -0
  9. package/addon/components/cf-field/input.js +2 -1
  10. package/addon/components/cf-field-value.hbs +2 -2
  11. package/addon/components/cf-field.hbs +14 -12
  12. package/addon/components/cf-field.js +9 -1
  13. package/addon/components/document-validity.js +11 -5
  14. package/addon/gql/fragments/{field-question.graphql → field.graphql} +61 -0
  15. package/addon/gql/mutations/remove-answer.graphql +7 -0
  16. package/addon/gql/mutations/save-document-date-answer.graphql +2 -2
  17. package/addon/gql/mutations/save-document-file-answer.graphql +2 -2
  18. package/addon/gql/mutations/save-document-float-answer.graphql +2 -2
  19. package/addon/gql/mutations/save-document-integer-answer.graphql +2 -2
  20. package/addon/gql/mutations/save-document-list-answer.graphql +2 -2
  21. package/addon/gql/mutations/save-document-string-answer.graphql +2 -2
  22. package/addon/gql/mutations/save-document-table-answer.graphql +2 -2
  23. package/addon/gql/mutations/save-document.graphql +2 -2
  24. package/addon/gql/queries/get-document-answers.graphql +18 -2
  25. package/addon/gql/queries/get-document-forms.graphql +2 -2
  26. package/addon/gql/queries/get-dynamic-options.graphql +1 -1
  27. package/addon/gql/queries/get-fileanswer-info.graphql +1 -1
  28. package/addon/lib/document.js +17 -1
  29. package/addon/lib/field.js +17 -2
  30. package/app/components/cf-field/input/action-button.js +1 -0
  31. package/package.json +18 -17
  32. package/translations/de.yaml +3 -15
  33. package/translations/en.yaml +3 -15
  34. package/translations/fr.yaml +3 -16
  35. package/addon/gql/fragments/field-answer.graphql +0 -57
@@ -1,3 +1,4 @@
1
+ import { dasherize } from "@ember/string";
1
2
  import Component from "@glimmer/component";
2
3
 
3
4
  const mapping = {
@@ -25,7 +26,7 @@ export default class CfFieldInputComponent extends Component {
25
26
 
26
27
  return (
27
28
  typename &&
28
- (mapping[typename] || typename.replace(/Question$/, "").toLowerCase())
29
+ (mapping[typename] || dasherize(typename.replace(/Question$/, "")))
29
30
  );
30
31
  }
31
32
  }
@@ -2,8 +2,8 @@
2
2
  <UkButton
3
3
  @color="link"
4
4
  @label={{this.value.label}}
5
- @on-click={{fn this.download value.fileAnswerId}}
5
+ @on-click={{fn this.download this.value.fileAnswerId}}
6
6
  />
7
7
  {{else}}
8
- {{value.label}}
8
+ {{this.value.label}}
9
9
  {{/if}}
@@ -16,21 +16,23 @@
16
16
  {{/let}}
17
17
  </div>
18
18
 
19
- {{#if @field.question.infoText}}
19
+ {{#if (and @field.question.infoText this.infoTextVisible)}}
20
20
  <CfField::info @text={{@field.question.infoText}} />
21
21
  {{/if}}
22
22
 
23
- <div
24
- class="cf-field__icon uk-padding-remove-vertical uk-flex uk-flex-middle uk-flex-center"
25
- >
26
- {{#if @field.save.isRunning}}
27
- <UkSpinner class="uk-animation-fade" />
28
- {{else if (or field.save.last.isError field.isInvalid)}}
29
- <UkIcon @icon="warning" class="uk-animation-fade uk-text-danger" />
30
- {{else if @field.save.last.isSuccessful}}
31
- <UkIcon @icon="check" class="uk-animation-fade uk-text-success" />
32
- {{/if}}
33
- </div>
23
+ {{#if this.saveIndicatorVisible}}
24
+ <div
25
+ class="cf-field__icon uk-padding-remove-vertical uk-flex uk-flex-middle uk-flex-center"
26
+ >
27
+ {{#if @field.save.isRunning}}
28
+ <UkSpinner class="uk-animation-fade" />
29
+ {{else if (or @field.save.last.isError @field.isInvalid)}}
30
+ <UkIcon @icon="warning" class="uk-animation-fade uk-text-danger" />
31
+ {{else if @field.save.last.isSuccessful}}
32
+ <UkIcon @icon="check" class="uk-animation-fade uk-text-success" />
33
+ {{/if}}
34
+ </div>
35
+ {{/if}}
34
36
  </div>
35
37
 
36
38
  {{#if @field.errors.length}}
@@ -29,10 +29,18 @@ export default class CfFieldComponent extends Component {
29
29
  get labelVisible() {
30
30
  return (
31
31
  !this.args.field?.question.meta.hideLabel &&
32
- !hasQuestionType(this.args.field?.question, "static")
32
+ !hasQuestionType(this.args.field?.question, "static", "action-button")
33
33
  );
34
34
  }
35
35
 
36
+ get infoTextVisible() {
37
+ return !hasQuestionType(this.args.field?.question, "action-button");
38
+ }
39
+
40
+ get saveIndicatorVisible() {
41
+ return !hasQuestionType(this.args.field?.question, "action-button");
42
+ }
43
+
36
44
  /**
37
45
  * Task to save a field. This will set the passed value to the answer and
38
46
  * save the field to the API after a timeout off 500 milliseconds.
@@ -1,5 +1,6 @@
1
1
  import { action } from "@ember/object";
2
2
  import Component from "@glimmer/component";
3
+ import { restartableTask } from "ember-concurrency-decorators";
3
4
 
4
5
  /**
5
6
  * Component to check the validity of a document
@@ -34,11 +35,11 @@ export default class DocumentValidity extends Component {
34
35
  return this.args.document.fields.every((f) => f.isValid);
35
36
  }
36
37
 
37
- @action
38
- async validate() {
39
- await Promise.all(
40
- this.args.document.fields.map((field) => field.validate.perform())
41
- );
38
+ @restartableTask
39
+ *_validate() {
40
+ for (const field of this.args.document.fields) {
41
+ yield field.validate.linked().perform();
42
+ }
42
43
 
43
44
  if (this.isValid) {
44
45
  this.args.onValid?.();
@@ -48,4 +49,9 @@ export default class DocumentValidity extends Component {
48
49
 
49
50
  return this.isValid;
50
51
  }
52
+
53
+ @action
54
+ validate() {
55
+ return this._validate.perform();
56
+ }
51
57
  }
@@ -76,6 +76,11 @@ fragment SimpleQuestion on Question {
76
76
  ... on CalculatedFloatQuestion {
77
77
  calcExpression
78
78
  }
79
+ ... on ActionButtonQuestion {
80
+ action
81
+ color
82
+ validateOnEnter
83
+ }
79
84
  }
80
85
 
81
86
  fragment FieldTableQuestion on Question {
@@ -157,3 +162,59 @@ fragment FieldQuestion on Question {
157
162
  }
158
163
  }
159
164
  }
165
+
166
+ fragment SimpleAnswer on Answer {
167
+ id
168
+ question {
169
+ slug
170
+ }
171
+ ... on StringAnswer {
172
+ stringValue: value
173
+ }
174
+ ... on IntegerAnswer {
175
+ integerValue: value
176
+ }
177
+ ... on FloatAnswer {
178
+ floatValue: value
179
+ }
180
+ ... on ListAnswer {
181
+ listValue: value
182
+ }
183
+ ... on FileAnswer {
184
+ fileValue: value {
185
+ uploadUrl
186
+ downloadUrl
187
+ metadata
188
+ name
189
+ }
190
+ }
191
+ ... on DateAnswer {
192
+ dateValue: value
193
+ }
194
+ }
195
+
196
+ fragment FieldAnswer on Answer {
197
+ ...SimpleAnswer
198
+ ... on TableAnswer {
199
+ tableValue: value {
200
+ id
201
+ form {
202
+ slug
203
+ questions {
204
+ edges {
205
+ node {
206
+ ...FieldQuestion
207
+ }
208
+ }
209
+ }
210
+ }
211
+ answers {
212
+ edges {
213
+ node {
214
+ ...SimpleAnswer
215
+ }
216
+ }
217
+ }
218
+ }
219
+ }
220
+ }
@@ -0,0 +1,7 @@
1
+ mutation RemoveAnswer($input: RemoveAnswerInput!) {
2
+ removeAnswer(input: $input) {
3
+ answer {
4
+ id
5
+ }
6
+ }
7
+ }
@@ -1,6 +1,6 @@
1
- # import * from '@projectcaluma/ember-form/gql/fragments/field-answer.graphql'
1
+ #import * from '../fragments/field.graphql'
2
2
 
3
- mutation ($input: SaveDocumentDateAnswerInput!) {
3
+ mutation SaveDocumentDateAnswer($input: SaveDocumentDateAnswerInput!) {
4
4
  saveDocumentDateAnswer(input: $input) {
5
5
  answer {
6
6
  ...FieldAnswer
@@ -1,6 +1,6 @@
1
- # import * from '@projectcaluma/ember-form/gql/fragments/field-answer.graphql'
1
+ #import * from '../fragments/field.graphql'
2
2
 
3
- mutation ($input: SaveDocumentFileAnswerInput!) {
3
+ mutation SaveDocumentFileAnswer($input: SaveDocumentFileAnswerInput!) {
4
4
  saveDocumentFileAnswer(input: $input) {
5
5
  answer {
6
6
  ...FieldAnswer
@@ -1,6 +1,6 @@
1
- # import * from '@projectcaluma/ember-form/gql/fragments/field-answer.graphql'
1
+ #import * from '../fragments/field.graphql'
2
2
 
3
- mutation ($input: SaveDocumentFloatAnswerInput!) {
3
+ mutation SaveDocumentFloatAnswer($input: SaveDocumentFloatAnswerInput!) {
4
4
  saveDocumentFloatAnswer(input: $input) {
5
5
  answer {
6
6
  ...FieldAnswer
@@ -1,6 +1,6 @@
1
- # import * from '@projectcaluma/ember-form/gql/fragments/field-answer.graphql'
1
+ #import * from '../fragments/field.graphql'
2
2
 
3
- mutation ($input: SaveDocumentIntegerAnswerInput!) {
3
+ mutation SaveDocumentIntegerAnswer($input: SaveDocumentIntegerAnswerInput!) {
4
4
  saveDocumentIntegerAnswer(input: $input) {
5
5
  answer {
6
6
  ...FieldAnswer
@@ -1,6 +1,6 @@
1
- # import * from '@projectcaluma/ember-form/gql/fragments/field-answer.graphql'
1
+ #import * from '../fragments/field.graphql'
2
2
 
3
- mutation ($input: SaveDocumentListAnswerInput!) {
3
+ mutation SaveDocumentListAnswer($input: SaveDocumentListAnswerInput!) {
4
4
  saveDocumentListAnswer(input: $input) {
5
5
  answer {
6
6
  ...FieldAnswer
@@ -1,6 +1,6 @@
1
- # import * from '@projectcaluma/ember-form/gql/fragments/field-answer.graphql'
1
+ #import * from '../fragments/field.graphql'
2
2
 
3
- mutation ($input: SaveDocumentStringAnswerInput!) {
3
+ mutation SaveDocumentStringAnswer($input: SaveDocumentStringAnswerInput!) {
4
4
  saveDocumentStringAnswer(input: $input) {
5
5
  answer {
6
6
  ...FieldAnswer
@@ -1,6 +1,6 @@
1
- # import * from '@projectcaluma/ember-form/gql/fragments/field-answer.graphql'
1
+ #import * from '../fragments/field.graphql'
2
2
 
3
- mutation ($input: SaveDocumentTableAnswerInput!) {
3
+ mutation saveDocumentTableAnswer($input: SaveDocumentTableAnswerInput!) {
4
4
  saveDocumentTableAnswer(input: $input) {
5
5
  answer {
6
6
  ...FieldAnswer
@@ -1,6 +1,6 @@
1
- # import * from '@projectcaluma/ember-form/gql/fragments/field-answer.graphql'
1
+ #import * from '../fragments/field.graphql'
2
2
 
3
- mutation ($input: SaveDocumentInput!) {
3
+ mutation SaveDocument($input: SaveDocumentInput!) {
4
4
  saveDocument(input: $input) {
5
5
  document {
6
6
  id
@@ -1,6 +1,6 @@
1
- # import * from '@projectcaluma/ember-form/gql/fragments/field-answer.graphql'
1
+ #import * from '../fragments/field.graphql'
2
2
 
3
- query ($id: ID!) {
3
+ query GetDocumentAnswers($id: ID!) {
4
4
  allDocuments(filter: [{ id: $id }]) {
5
5
  edges {
6
6
  node {
@@ -8,6 +8,22 @@ query ($id: ID!) {
8
8
  form {
9
9
  slug
10
10
  }
11
+ workItem {
12
+ id
13
+ }
14
+ case {
15
+ id
16
+ workItems {
17
+ edges {
18
+ node {
19
+ id
20
+ task {
21
+ id
22
+ }
23
+ }
24
+ }
25
+ }
26
+ }
11
27
  answers {
12
28
  edges {
13
29
  node {
@@ -1,6 +1,6 @@
1
- # import * from '@projectcaluma/ember-form/gql/fragments/field-question.graphql'
1
+ #import FieldQuestion, FieldTableQuestion, SimpleQuestion from '../fragments/field.graphql'
2
2
 
3
- query ($slug: String!) {
3
+ query GetDocumentForms($slug: String!) {
4
4
  allForms(filter: [{ slug: $slug }]) {
5
5
  edges {
6
6
  node {
@@ -1,4 +1,4 @@
1
- query ($question: String!) {
1
+ query GetDynamicOptions($question: String!) {
2
2
  allQuestions(filter: [{ slug: $question }], first: 1) {
3
3
  edges {
4
4
  node {
@@ -1,4 +1,4 @@
1
- query getFileAnswerInfo($id: ID!) {
1
+ query GetFileAnswerInfo($id: ID!) {
2
2
  node(id: $id) {
3
3
  id
4
4
  ... on FileAnswer {
@@ -83,6 +83,22 @@ export default Base.extend({
83
83
  return decodeId(this.raw.id);
84
84
  }),
85
85
 
86
+ workItemUuid: computed(
87
+ "raw.{workItem.id,case.workItems.edges.[]}",
88
+ function () {
89
+ // The document is either directly attached to a work item (via
90
+ // CompleteTaskFormTask) or it's the case document and therefore
91
+ // indirectly attached to a work item (via CompleteWorkflowFormTask)
92
+ const rawId =
93
+ this.raw.workItem?.id ||
94
+ this.raw.case?.workItems.edges.find(
95
+ (edge) => edge.node.task.__typename === "CompleteWorkflowFormTask"
96
+ )?.node.id;
97
+
98
+ return rawId ? decodeId(rawId) : null;
99
+ }
100
+ ),
101
+
86
102
  /**
87
103
  * The root form of this document
88
104
  *
@@ -230,7 +246,7 @@ export default Base.extend({
230
246
  }
231
247
 
232
248
  if (field.hidden || [undefined, null].includes(field.value)) {
233
- return field.question.isMultipleChoice ? [] : null;
249
+ return defaultValue ?? field.question.isMultipleChoice ? [] : null;
234
250
  }
235
251
 
236
252
  if (field.question.__typename === "TableQuestion") {
@@ -553,8 +553,9 @@ export default Base.extend({
553
553
  *
554
554
  * The field is optional if:
555
555
  * - The form question field of the fieldset is hidden
556
- * - All depending field (used in the expression) are hidden
556
+ * - All depending fields (used in the expression) are hidden
557
557
  * - The evaluated `question.isRequired` expression returns `false`
558
+ * - The question type is FormQuestion or CalculatedFloatQuestion
558
559
  *
559
560
  * @property {Boolean} optional
560
561
  */
@@ -563,11 +564,14 @@ export default Base.extend({
563
564
  "fieldset.field.hidden",
564
565
  "jexlContext",
565
566
  "optionalDependencies.@each.{hidden,value}",
566
- "question.isRequired",
567
+ "question.{__typename,isRequired}",
567
568
  "pk",
568
569
  function () {
569
570
  if (
570
571
  this.fieldset.field?.hidden ||
572
+ ["FormQuestion", "CalculatedFloatQuestion"].includes(
573
+ this.question.__typename
574
+ ) ||
571
575
  (this.optionalDependencies.length &&
572
576
  this.optionalDependencies.every(fieldIsHidden))
573
577
  ) {
@@ -932,4 +936,15 @@ export default Base.extend({
932
936
  _validateCalculatedFloatQuestion() {
933
937
  return resolve(true);
934
938
  },
939
+
940
+ /**
941
+ * Dummy method for the validation of work item button fields
942
+ *
943
+ * @method _validateActionButtonQuestion
944
+ * @return {RSVP.Promise}
945
+ * @private
946
+ */
947
+ _validateActionButtonQuestion() {
948
+ return resolve(true);
949
+ },
935
950
  });
@@ -0,0 +1 @@
1
+ export { default } from "@projectcaluma/ember-form/components/cf-field/input/action-button";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectcaluma/ember-form",
3
- "version": "9.1.1",
3
+ "version": "10.0.0",
4
4
  "description": "Ember addon for rendering Caluma forms.",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -16,21 +16,21 @@
16
16
  "dependencies": {
17
17
  "@glimmer/component": "^1.0.4",
18
18
  "@glimmer/tracking": "^1.0.4",
19
- "@projectcaluma/ember-core": "9.0.3",
19
+ "@projectcaluma/ember-core": "^10.0.0",
20
20
  "ember-apollo-client": "^3.2.0",
21
- "ember-auto-import": "^2.2.0",
21
+ "ember-auto-import": "^2.2.3",
22
22
  "ember-cli-babel": "^7.26.6",
23
- "ember-cli-htmlbars": "^5.7.1",
23
+ "ember-cli-htmlbars": "^6.0.0",
24
24
  "ember-cli-showdown": "^6.0.0",
25
25
  "ember-composable-helpers": "^4.5.0",
26
26
  "ember-fetch": "^8.0.4",
27
- "ember-in-viewport": "^3.10.2",
27
+ "ember-in-viewport": "^3.10.3",
28
28
  "ember-intl": "^5.7.0",
29
- "ember-math-helpers": "^2.17.3",
29
+ "ember-math-helpers": "^2.18.0",
30
30
  "ember-pikaday": "^3.0.0",
31
- "ember-power-select": "^4.1.6",
31
+ "ember-power-select": "^4.1.7",
32
32
  "ember-uikit": "^4.0.0",
33
- "graphql": "^15.6.0",
33
+ "graphql": "^15.6.1",
34
34
  "jexl": "^2.3.0",
35
35
  "lodash.clonedeep": "^4.5.0",
36
36
  "lodash.isequal": "^4.5.0",
@@ -38,11 +38,12 @@
38
38
  },
39
39
  "devDependencies": {
40
40
  "@ember/optional-features": "2.0.0",
41
- "@ember/test-helpers": "2.5.0",
42
- "@embroider/test-setup": "0.45.0",
43
- "@projectcaluma/ember-testing": "9.0.0",
41
+ "@ember/test-helpers": "2.6.0",
42
+ "@embroider/test-setup": "0.47.2",
43
+ "@projectcaluma/ember-testing": "9.1.0",
44
+ "@projectcaluma/ember-workflow": "9.0.3",
44
45
  "broccoli-asset-rev": "3.0.0",
45
- "ember-cli": "3.28.1",
46
+ "ember-cli": "3.28.4",
46
47
  "ember-cli-code-coverage": "1.0.3",
47
48
  "ember-cli-dependency-checker": "3.2.0",
48
49
  "ember-cli-inject-live-reload": "2.1.0",
@@ -53,21 +54,21 @@
53
54
  "ember-export-application-global": "2.0.1",
54
55
  "ember-load-initializers": "2.1.2",
55
56
  "ember-maybe-import-regenerator": "1.0.0",
56
- "ember-qunit": "5.1.4",
57
+ "ember-qunit": "5.1.5",
57
58
  "ember-resolver": "8.0.3",
58
- "ember-source": "3.28.1",
59
+ "ember-source": "3.28.6",
59
60
  "ember-source-channel-url": "3.0.0",
60
- "ember-try": "1.4.0",
61
+ "ember-try": "2.0.0",
61
62
  "faker": "5.5.3",
62
63
  "loader.js": "4.7.0",
63
64
  "npm-run-all": "4.1.5",
64
65
  "qunit": "2.17.2",
65
66
  "qunit-dom": "2.0.0",
66
67
  "uuid": "8.3.2",
67
- "webpack": "5.58.0"
68
+ "webpack": "5.64.1"
68
69
  },
69
70
  "engines": {
70
- "node": "10.* || >= 12"
71
+ "node": "12.* || 14.* || >= 16"
71
72
  },
72
73
  "ember": {
73
74
  "edition": "octane"
@@ -1,24 +1,12 @@
1
1
  caluma:
2
- caluma-query:
3
- work-item:
4
- status:
5
- READY: "Offen"
6
- COMPLETED: "Erledigt"
7
- CANCELED: "Abgebrochen"
8
- SKIPPED: "Übersprungen"
9
-
10
- case:
11
- status:
12
- RUNNING: "In Bearbeitung"
13
- COMPLETED: "Abgeschlossen"
14
- CANCELED: "Abgebrochen"
15
2
  form:
16
3
  optional: "Optional"
17
4
  save: "Speichern"
18
5
  delete: "Löschen"
19
6
  edit: "Bearbeiten"
20
- selectFile: "Klicken um Datei hochzuladen"
21
- changeFile: "Klicken um andere Datei hochzuladen"
7
+ cancel: "Abbrechen"
8
+ close: "Schliessen"
9
+ selectFile: "Durchsuchen..."
22
10
  deleteRow: "Möchten Sie diese Zeile wirklich löschen?"
23
11
  addRow: "Zeile hinzufügen"
24
12
  optionNotAvailable: "Diese Option ist nicht mehr verfügbar"
@@ -1,24 +1,12 @@
1
1
  caluma:
2
- caluma-query:
3
- work-item:
4
- status:
5
- READY: "Pending"
6
- COMPLETED: "Completed"
7
- CANCELED: "Canceled"
8
- SKIPPED: "Skipped"
9
- case:
10
- status:
11
- RUNNING: "Pending"
12
- COMPLETED: "Completed"
13
- CANCELED: "Canceled"
14
-
15
2
  form:
16
3
  optional: "Optional"
17
4
  save: "Save"
18
5
  delete: "Delete"
19
6
  edit: "Edit"
20
- selectFile: "Click to upload a file"
21
- changeFile: "Click to upload a different file"
7
+ cancel: "Cancel"
8
+ close: "Close"
9
+ selectFile: "Browse..."
22
10
  deleteRow: "Do you really want to delete this row?"
23
11
  addRow: "Add row"
24
12
  optionNotAvailable: "This option is not available anymore"
@@ -1,25 +1,12 @@
1
1
  caluma:
2
- caluma-query:
3
- work-item:
4
- status:
5
- READY: "En attente"
6
- COMPLETED: "Terminé"
7
- CANCELED: "Annulé"
8
- SKIPPED: "Sauté"
9
-
10
- case:
11
- status:
12
- RUNNING: "En cours"
13
- COMPLETED: "Terminé"
14
- CANCELED: "Annulé"
15
-
16
2
  form:
17
3
  optional: "optional"
18
4
  save: "sauvegarder"
19
5
  delete: "supprimer"
20
6
  edit: "modifier"
21
- selectFile: "cliquez pour télécharger le ficher"
22
- changeFile: "cliquez pour télécharger un autre fichier"
7
+ cancel: "annuler"
8
+ close: "fermer"
9
+ selectFile: "Sélectionner..."
23
10
  deleteRow: "Voulez-vous supprimer cette ligne?"
24
11
  addRow: "Ajouter une ligne"
25
12
  optionNotAvailable: "Cette option n'est plus disponible"
@@ -1,57 +0,0 @@
1
- # import * from '@projectcaluma/ember-form/gql/fragments/field-question.graphql'
2
-
3
- fragment SimpleAnswer on Answer {
4
- id
5
- question {
6
- slug
7
- }
8
- ... on StringAnswer {
9
- stringValue: value
10
- }
11
- ... on IntegerAnswer {
12
- integerValue: value
13
- }
14
- ... on FloatAnswer {
15
- floatValue: value
16
- }
17
- ... on ListAnswer {
18
- listValue: value
19
- }
20
- ... on FileAnswer {
21
- fileValue: value {
22
- uploadUrl
23
- downloadUrl
24
- metadata
25
- name
26
- }
27
- }
28
- ... on DateAnswer {
29
- dateValue: value
30
- }
31
- }
32
-
33
- fragment FieldAnswer on Answer {
34
- ...SimpleAnswer
35
- ... on TableAnswer {
36
- tableValue: value {
37
- id
38
- form {
39
- slug
40
- questions {
41
- edges {
42
- node {
43
- ...FieldQuestion
44
- }
45
- }
46
- }
47
- }
48
- answers {
49
- edges {
50
- node {
51
- ...SimpleAnswer
52
- }
53
- }
54
- }
55
- }
56
- }
57
- }