@projectcaluma/ember-form-builder 10.0.3 → 11.0.0-beta.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.
@@ -1,98 +1,91 @@
1
- <div
2
- {{did-insert (perform this.data)}}
3
- {{did-update (perform this.data) @slug}}
4
- >
5
- {{#if this.data.isRunning}}
6
- <div class="uk-flex uk-flex-center uk-flex-middle uk-height-small">
7
- <UkSpinner ratio="2" />
8
- </div>
9
- {{else}}
10
- {{#with this.data.lastSuccessful.value.firstObject.node as |model|}}
11
- <ValidatedForm
12
- @model={{changeset model this.Validations}}
13
- @on-submit={{perform this.submit}}
14
- as |f|
15
- >
16
- <f.input
17
- @type="text"
18
- @label={{t "caluma.form-builder.form.name"}}
19
- @name="name"
20
- @required={{true}}
21
- @on-update={{this.updateName}}
22
- />
1
+ {{#if this._data.isRunning}}
2
+ <div class="uk-flex uk-flex-center uk-flex-middle uk-height-small">
3
+ <UkSpinner ratio="2" />
4
+ </div>
5
+ {{else if this.data}}
6
+ <ValidatedForm
7
+ @model={{changeset this.data this.Validations}}
8
+ @on-submit={{perform this.submit}}
9
+ as |f|
10
+ >
11
+ <f.input
12
+ @type="text"
13
+ @label={{t "caluma.form-builder.form.name"}}
14
+ @name="name"
15
+ @required={{true}}
16
+ @on-update={{this.updateName}}
17
+ />
23
18
 
24
- {{#if (or @slug (not this.prefix))}}
19
+ {{#if (or @slug (not this.prefix))}}
20
+ <f.input
21
+ @type="text"
22
+ @name="slug"
23
+ @label={{t "caluma.form-builder.form.slug"}}
24
+ @required={{true}}
25
+ @disabled={{@slug}}
26
+ @on-update={{this.updateSlug}}
27
+ />
28
+ {{else}}
29
+ <f.input
30
+ @name="slug"
31
+ @required={{true}}
32
+ @disabled={{@slug}}
33
+ @label={{t "caluma.form-builder.question.slug"}}
34
+ @on-update={{this.updateSlug value="target.value"}}
35
+ as |fi|
36
+ >
37
+ <div class="cfb-prefixed">
38
+ <span class="cfb-prefixed-slug">{{this.prefix}}</span>
25
39
  <f.input
26
40
  @type="text"
27
- @name="slug"
28
- @label={{t "caluma.form-builder.form.slug"}}
29
- @required={{true}}
30
- @disabled={{@slug}}
31
- @on-update={{this.updateSlug}}
41
+ @model={{fi.model}}
42
+ @name={{fi.name}}
43
+ @value={{fi.value}}
44
+ @update={{fi.update}}
45
+ @setDirty={{fi.setDirty}}
46
+ @inputId={{fi.inputId}}
47
+ @isValid={{fi.isValid}}
48
+ @isInvalid={{fi.isInvalid}}
32
49
  />
33
- {{else}}
34
- <f.input
35
- @name="slug"
36
- @required={{true}}
37
- @disabled={{@slug}}
38
- @label={{t "caluma.form-builder.question.slug"}}
39
- @on-update={{this.updateSlug value="target.value"}}
40
- as |fi|
41
- >
42
- <div class="cfb-prefixed">
43
- <span class="cfb-prefixed-slug">{{this.prefix}}</span>
44
- <f.input
45
- @type="text"
46
- @model={{fi.model}}
47
- @name={{fi.name}}
48
- @value={{fi.value}}
49
- @update={{fi.update}}
50
- @setDirty={{fi.setDirty}}
51
- @inputId={{fi.inputId}}
52
- @isValid={{fi.isValid}}
53
- @isInvalid={{fi.isInvalid}}
54
- />
55
- </div>
56
- </f.input>
57
- {{/if}}
50
+ </div>
51
+ </f.input>
52
+ {{/if}}
58
53
 
59
- <f.input
60
- @name="description"
61
- @type="textarea"
62
- @label={{t "caluma.form-builder.form.description"}}
63
- @rows="4"
64
- />
54
+ <f.input
55
+ @name="description"
56
+ @type="textarea"
57
+ @label={{t "caluma.form-builder.form.description"}}
58
+ @rows="4"
59
+ />
65
60
 
66
- <f.input
67
- class="uk-flex uk-flex-between uk-flex-column"
68
- @name="isArchived"
69
- @label={{t "caluma.form-builder.form.isArchived"}}
70
- @required={{true}}
71
- @renderComponent={{component "cfb-toggle-switch" size="small"}}
72
- />
61
+ <f.input
62
+ class="uk-flex uk-flex-between uk-flex-column"
63
+ @name="isArchived"
64
+ @label={{t "caluma.form-builder.form.isArchived"}}
65
+ @required={{true}}
66
+ @renderComponent={{component "cfb-toggle-switch" size="small"}}
67
+ />
73
68
 
74
- <f.input
75
- class="uk-flex uk-flex-between uk-flex-column"
76
- @name="isPublished"
77
- @label={{t "caluma.form-builder.form.isPublished"}}
78
- @required={{true}}
79
- @renderComponent={{component "cfb-toggle-switch" size="small"}}
80
- />
69
+ <f.input
70
+ class="uk-flex uk-flex-between uk-flex-column"
71
+ @name="isPublished"
72
+ @label={{t "caluma.form-builder.form.isPublished"}}
73
+ @required={{true}}
74
+ @renderComponent={{component "cfb-toggle-switch" size="small"}}
75
+ />
81
76
 
82
- <div class="uk-text-right">
83
- <f.submit
84
- @disabled={{or f.loading f.model.isInvalid}}
85
- @label={{t "caluma.form-builder.global.save"}}
86
- />
87
- </div>
88
- </ValidatedForm>
89
- {{else}}
90
- <div
91
- class="uk-text-center uk-text-muted uk-padding uk-padding-remove-horizontal"
92
- >
93
- {{uk-icon "bolt" ratio=5}}
94
- <p>{{t "caluma.form-builder.form.not-found" slug=@slug}}</p>
95
- </div>
96
- {{/with}}
97
- {{/if}}
98
- </div>
77
+ <div class="uk-text-right">
78
+ <f.submit
79
+ @disabled={{or f.loading f.model.isInvalid}}
80
+ @label={{t "caluma.form-builder.global.save"}}
81
+ />
82
+ </div>
83
+ </ValidatedForm>
84
+ {{else}}
85
+ <div
86
+ class="uk-text-center uk-text-muted uk-padding uk-padding-remove-horizontal"
87
+ >
88
+ {{uk-icon "bolt" ratio=5}}
89
+ <p>{{t "caluma.form-builder.form.not-found" slug=@slug}}</p>
90
+ </div>
91
+ {{/if}}
@@ -1,11 +1,11 @@
1
1
  import { getOwner } from "@ember/application";
2
- import { A } from "@ember/array";
3
2
  import { action } from "@ember/object";
4
3
  import { inject as service } from "@ember/service";
5
4
  import Component from "@glimmer/component";
6
5
  import { queryManager } from "ember-apollo-client";
7
6
  import { optional } from "ember-composable-helpers/helpers/optional";
8
7
  import { timeout, restartableTask, dropTask } from "ember-concurrency";
8
+ import { useTask } from "ember-resources";
9
9
 
10
10
  import FormValidations from "../../validations/form";
11
11
 
@@ -22,10 +22,16 @@ export default class CfbFormEditorGeneral extends Component {
22
22
 
23
23
  Validations = FormValidations;
24
24
 
25
+ get data() {
26
+ return this._data.value?.[0]?.node;
27
+ }
28
+
29
+ _data = useTask(this, this.fetchData, () => [this.args.slug]);
30
+
25
31
  @restartableTask
26
- *data() {
32
+ *fetchData() {
27
33
  if (!this.args.slug) {
28
- return A([
34
+ return [
29
35
  {
30
36
  node: {
31
37
  name: "",
@@ -34,7 +40,7 @@ export default class CfbFormEditorGeneral extends Component {
34
40
  isPublished: true,
35
41
  },
36
42
  },
37
- ]);
43
+ ];
38
44
  }
39
45
 
40
46
  return yield this.apollo.watchQuery(
@@ -92,18 +92,17 @@ export default class CfbFormEditorQuestionDefault extends Component {
92
92
  : null,
93
93
  }));
94
94
  }
95
-
96
- const document = getOwner(this)
97
- .factoryFor("caluma-model:document")
98
- .create({
99
- raw: {
100
- id: btoa(`Document:dv-document-${this.args.model.slug}`),
101
- rootForm,
102
- forms: [rootForm],
103
- answers: [answer],
104
- __typename: "Document",
105
- },
106
- });
95
+ const owner = getOwner(this);
96
+ const document = new (owner.factoryFor("caluma-model:document").class)({
97
+ raw: {
98
+ id: btoa(`Document:dv-document-${this.args.model.slug}`),
99
+ rootForm,
100
+ forms: [rootForm],
101
+ answers: [answer],
102
+ __typename: "Document",
103
+ },
104
+ owner,
105
+ });
107
106
 
108
107
  return document.findField(this.question.slug);
109
108
  }
@@ -5,12 +5,12 @@ import Component from "@glimmer/component";
5
5
  import { tracked } from "@glimmer/tracking";
6
6
  import { queryManager } from "ember-apollo-client";
7
7
  import { optional } from "ember-composable-helpers/helpers/optional";
8
- import { timeout } from "ember-concurrency";
9
8
  import {
9
+ timeout,
10
10
  enqueueTask,
11
11
  lastValue,
12
12
  restartableTask,
13
- } from "ember-concurrency-decorators";
13
+ } from "ember-concurrency";
14
14
  import UIkit from "uikit";
15
15
 
16
16
  import addFormQuestionMutation from "@projectcaluma/ember-form-builder/gql/mutations/add-form-question.graphql";
@@ -11,7 +11,6 @@
11
11
  >
12
12
  {{#if (and f.model.isDirty @slug)}}
13
13
  <div class="uk-alert-warning uk-animation-fade" uk-alert>
14
- <a href="#" class="uk-alert-close" uk-close></a>
15
14
  <div uk-grid class="uk-grid-small">
16
15
  <div class="uk-width-auto uk-flex uk-flex-middle">
17
16
  <UkIcon @icon="warning" @ratio={{1.2}} />
@@ -1,76 +1,73 @@
1
- <div
2
- ...attributes
3
- {{did-insert (perform this.fetchForms)}}
4
- {{did-update (perform this.fetchForms)}}
5
- >
6
- <div class="uk-flex uk-flex-between">
7
- <div class="uk-button-group">
8
- {{#each (array "active" "archived" "all") as |category|}}
9
- <UkButton
10
- data-test-filter={{category}}
11
- @on-click={{fn this.setFilter "category" category}}
12
- @label={{t (concat "caluma.form-builder.form." category)}}
13
- @class={{if (eq this.category category) "uk-button-primary" ""}}
14
- />
15
- {{/each}}
16
- </div>
17
- <div>
1
+ <div class="uk-flex uk-flex-between">
2
+ <div class="uk-button-group">
3
+ {{#each (array "active" "archived" "all") as |category|}}
18
4
  <UkButton
19
- data-test-new-form
20
- @on-click={{optional @on-new-form}}
21
- @label={{t "caluma.form-builder.form.new"}}
5
+ data-test-filter={{category}}
6
+ @on-click={{fn (perform this.setFilter) "category" category}}
7
+ @label={{t (concat "caluma.form-builder.form." category)}}
8
+ @class={{if (eq this.category category) "uk-button-primary" ""}}
22
9
  />
23
- </div>
10
+ {{/each}}
24
11
  </div>
25
- <form
26
- class="uk-search uk-search-default uk-width-1-1 uk-margin-small-top"
27
- {{on "submit" this.submit}}
28
- >
29
- <span class="uk-search-icon-flip" uk-search-icon></span>
30
- <input
31
- data-test-form-search-input
32
- class="uk-search-input"
33
- type="search"
34
- placeholder="{{t 'caluma.form-builder.global.search'}}..."
35
- aria-label="{{t 'caluma.form-builder.global.search'}}"
36
- value={{this.search}}
37
- {{on "input" (fn this.setFilter "search")}}
12
+ <div>
13
+ <UkButton
14
+ data-test-new-form
15
+ @on-click={{optional @on-new-form}}
16
+ @label={{t "caluma.form-builder.form.new"}}
38
17
  />
39
- </form>
40
- {{#if this.formsQuery.isLoading}}
41
- <div class="uk-height-small uk-flex uk-flex-center uk-flex-middle">
42
- <UkSpinner ratio="2" />
43
- </div>
44
- {{else if this.formsQuery.value.length}}
45
- <ul data-test-form-list class="uk-list uk-list-divider uk-list-large">
46
- {{#each this.formsQuery.value key="id" as |item|}}
47
- <CfbFormList::Item
48
- data-test-form-list-item={{item.slug}}
49
- @item={{item}}
50
- @on-edit-form={{@on-edit-form}}
51
- />
52
- {{/each}}
53
- {{#if this.formsQuery.hasNextPage}}
54
- <li class="uk-text-center cfb-pointer">
55
- <a
56
- data-test-form-loader-button
57
- href="#"
58
- {{on "click" this.loadMoreForms}}
59
- >
60
- {{t "caluma.form-builder.form.loadMore"}}
61
- </a>
62
- </li>
63
- {{/if}}
64
- </ul>
65
- {{else}}
66
- <div
67
- data-test-form-list-empty
68
- class="uk-padding-large uk-padding-remove-horizontal uk-text-center"
69
- >
70
- <UkIcon @icon="search" @ratio={{10}} />
71
- <p class="uk-text-muted">
72
- {{t "caluma.form-builder.form.empty"}}
73
- </p>
74
- </div>
75
- {{/if}}
76
- </div>
18
+ </div>
19
+ </div>
20
+
21
+ <div class="uk-search uk-search-default uk-width-1-1 uk-margin-top">
22
+ <span class="uk-search-icon-flip" uk-search-icon></span>
23
+ <input
24
+ data-test-form-search-input
25
+ class="uk-search-input"
26
+ type="search"
27
+ placeholder="{{t 'caluma.form-builder.global.search'}}..."
28
+ aria-label="{{t 'caluma.form-builder.global.search'}}"
29
+ value={{this.search}}
30
+ {{on "input" (fn (perform this.setFilter) "search")}}
31
+ />
32
+ </div>
33
+
34
+ {{#if this.formsQuery.value.length}}
35
+ <ul data-test-form-list class="uk-list uk-list-divider uk-list-large">
36
+ {{#each this.formsQuery.value key="id" as |item|}}
37
+ <CfbFormList::Item
38
+ data-test-form-list-item={{item.slug}}
39
+ @item={{item}}
40
+ @on-edit-form={{@on-edit-form}}
41
+ />
42
+ {{/each}}
43
+ {{#if this.formsQuery.isLoading}}
44
+ <li class="uk-text-center">
45
+ <UkSpinner />
46
+ </li>
47
+ {{else if this.formsQuery.hasNextPage}}
48
+ <li class="uk-text-center cfb-pointer">
49
+ <a
50
+ data-test-form-loader-button
51
+ href="#"
52
+ {{on "click" this.formsQuery.fetchMore}}
53
+ >
54
+ {{t "caluma.form-builder.form.loadMore"}}
55
+ </a>
56
+ </li>
57
+ {{/if}}
58
+ </ul>
59
+ {{else if this.formsQuery.isLoading}}
60
+ <div class="uk-height-small uk-flex uk-flex-center uk-flex-middle">
61
+ <UkSpinner @ratio={{2}} />
62
+ </div>
63
+ {{else}}
64
+ <div
65
+ data-test-form-list-empty
66
+ class="uk-padding-large uk-padding-remove-horizontal uk-text-center"
67
+ >
68
+ <UkIcon @icon="search" @ratio={{10}} />
69
+ <p class="uk-text-muted">
70
+ {{t "caluma.form-builder.form.empty"}}
71
+ </p>
72
+ </div>
73
+ {{/if}}
@@ -1,17 +1,16 @@
1
- import { action } from "@ember/object";
2
1
  import Component from "@glimmer/component";
3
2
  import { tracked } from "@glimmer/tracking";
4
- import { queryManager } from "ember-apollo-client";
5
- import { timeout } from "ember-concurrency";
6
- import { restartableTask } from "ember-concurrency-decorators";
3
+ import { timeout, restartableTask } from "ember-concurrency";
7
4
 
8
- import calumaQuery from "@projectcaluma/ember-core/caluma-query";
5
+ import { useCalumaQuery } from "@projectcaluma/ember-core/caluma-query";
9
6
  import { allForms } from "@projectcaluma/ember-core/caluma-query/queries";
10
7
 
11
8
  export default class ComponentsCfbFormListComponent extends Component {
12
- @queryManager apollo;
13
-
14
- @calumaQuery({ query: allForms, options: { pageSize: 20 } }) formsQuery;
9
+ formsQuery = useCalumaQuery(this, allForms, () => ({
10
+ options: { pageSize: 20 },
11
+ filter: this.filter,
12
+ order: [{ attribute: "NAME", direction: "ASC" }],
13
+ }));
15
14
 
16
15
  @tracked category = "active";
17
16
  @tracked search = "";
@@ -29,33 +28,11 @@ export default class ComponentsCfbFormListComponent extends Component {
29
28
  return [isArchived, search].filter(Boolean) || null;
30
29
  }
31
30
 
32
- @action
33
- setFilter(name, eventOrValue) {
34
- this[name] =
35
- eventOrValue instanceof Event ? eventOrValue.target.value : eventOrValue;
36
-
37
- this.fetchForms.perform();
38
- }
39
-
40
- @action
41
- submit(event) {
42
- event.preventDefault();
43
- }
44
-
45
- @action
46
- loadMoreForms(e) {
47
- e.preventDefault();
48
-
49
- this.formsQuery.fetchMore();
50
- }
51
-
52
31
  @restartableTask
53
- *fetchForms() {
32
+ *setFilter(name, eventOrValue) {
54
33
  yield timeout(500);
55
34
 
56
- yield this.formsQuery.fetch({
57
- filter: this.filter,
58
- order: [{ attribute: "NAME", direction: "ASC" }],
59
- });
35
+ this[name] =
36
+ eventOrValue instanceof Event ? eventOrValue.target.value : eventOrValue;
60
37
  }
61
38
  }
@@ -1,7 +1,7 @@
1
1
  import Route from "@ember/routing/route";
2
2
  import { inject as service } from "@ember/service";
3
3
  import { queryManager } from "ember-apollo-client";
4
- import { lastValue, dropTask } from "ember-concurrency-decorators";
4
+ import { lastValue, dropTask } from "ember-concurrency";
5
5
  import { gql } from "graphql-tag";
6
6
 
7
7
  import { navigationTitle } from "@projectcaluma/ember-form-builder/decorators";
@@ -1,7 +1,7 @@
1
1
  import Route from "@ember/routing/route";
2
2
  import { inject as service } from "@ember/service";
3
3
  import { queryManager } from "ember-apollo-client";
4
- import { lastValue, dropTask } from "ember-concurrency-decorators";
4
+ import { lastValue, dropTask } from "ember-concurrency";
5
5
  import { gql } from "graphql-tag";
6
6
 
7
7
  import { navigationTitle } from "@projectcaluma/ember-form-builder/decorators";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectcaluma/ember-form-builder",
3
- "version": "10.0.3",
3
+ "version": "11.0.0-beta.1",
4
4
  "description": "Ember engine for building Caluma forms.",
5
5
  "keywords": [
6
6
  "ember-addon",
@@ -18,46 +18,46 @@
18
18
  "@ember/render-modifiers": "^2.0.2",
19
19
  "@glimmer/component": "^1.0.4",
20
20
  "@glimmer/tracking": "^1.0.4",
21
- "@projectcaluma/ember-core": "^10.1.0",
22
- "@projectcaluma/ember-form": "^10.0.3",
21
+ "@projectcaluma/ember-core": "^11.0.0-beta.1",
22
+ "@projectcaluma/ember-form": "^11.0.0-beta.1",
23
23
  "codejar": "^3.5.0",
24
24
  "ember-apollo-client": "^3.2.0",
25
25
  "ember-auto-import": "^2.2.3",
26
26
  "ember-changeset": "^3.15.0",
27
27
  "ember-changeset-validations": "^3.16.0",
28
- "ember-cli-babel": "^7.26.6",
28
+ "ember-cli-babel": "^7.26.11",
29
29
  "ember-cli-htmlbars": "^6.0.1",
30
- "ember-composable-helpers": "^4.5.0",
30
+ "ember-composable-helpers": "^5.0.0",
31
31
  "ember-concurrency": "^2.2.0",
32
- "ember-concurrency-decorators": "^2.0.3",
33
32
  "ember-engines-router-service": "^0.3.0",
34
33
  "ember-fetch": "^8.0.4",
35
34
  "ember-math-helpers": "^2.18.0",
36
35
  "ember-pikaday": "^3.0.0",
37
36
  "ember-power-select": "^5.0.3",
37
+ "ember-resources": "^4.1.3",
38
38
  "ember-test-selectors": "^6.0.0",
39
39
  "ember-uikit": "^4.0.0",
40
- "ember-validated-form": "^5.0.0",
41
- "graphql": "^15.6.1",
40
+ "ember-validated-form": "^5.1.1",
41
+ "graphql": "^15.8.0",
42
42
  "graphql-tag": "^2.12.6",
43
43
  "jexl": "^2.3.0",
44
44
  "moment": "^2.29.1",
45
- "prismjs": "^1.25.0"
45
+ "prismjs": "^1.26.0"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@ember/optional-features": "2.0.0",
49
49
  "@ember/test-helpers": "2.6.0",
50
- "@embroider/test-setup": "0.48.1",
51
- "@projectcaluma/ember-testing": "10.0.0",
50
+ "@embroider/test-setup": "0.49.0",
51
+ "@projectcaluma/ember-testing": "10.1.0",
52
52
  "broccoli-asset-rev": "3.0.0",
53
- "ember-cli": "3.28.4",
53
+ "ember-cli": "3.28.5",
54
54
  "ember-cli-code-coverage": "1.0.3",
55
55
  "ember-cli-dependency-checker": "3.2.0",
56
56
  "ember-cli-inject-live-reload": "2.1.0",
57
57
  "ember-cli-mirage": "2.2.0",
58
58
  "ember-cli-sri": "2.1.1",
59
59
  "ember-cli-terser": "4.0.2",
60
- "ember-data": "3.28.4",
60
+ "ember-data": "3.28.7",
61
61
  "ember-disable-prototype-extensions": "1.1.3",
62
62
  "ember-engines": "0.8.20",
63
63
  "ember-export-application-global": "2.0.1",