@projectcaluma/ember-distribution 1.0.0-beta.3 → 1.0.0-beta.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.
Files changed (54) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/addon/abilities/distribution.js +29 -0
  3. package/addon/components/distribution-navigation/controls.hbs +14 -12
  4. package/addon/components/distribution-navigation/controls.js +0 -36
  5. package/addon/components/distribution-navigation/item.hbs +1 -1
  6. package/addon/components/distribution-navigation/item.js +1 -1
  7. package/addon/components/distribution-navigation/section.hbs +8 -6
  8. package/addon/components/distribution-navigation.hbs +1 -1
  9. package/addon/components/inquiry-answer-form.hbs +33 -31
  10. package/addon/components/inquiry-answer-form.js +1 -1
  11. package/addon/components/inquiry-dialog/inquiry-part.hbs +2 -8
  12. package/addon/components/inquiry-dialog.hbs +8 -6
  13. package/addon/components/inquiry-edit-form.hbs +21 -19
  14. package/addon/components/inquiry-edit-form.js +1 -1
  15. package/addon/components/inquiry-new-form.hbs +113 -101
  16. package/addon/components/inquiry-new-form.js +6 -16
  17. package/addon/components/notfound.hbs +12 -0
  18. package/addon/config.js +1 -0
  19. package/addon/controllers/application.js +7 -0
  20. package/addon/controllers/{distribution/new.js → new.js} +1 -1
  21. package/addon/gql/queries/control-work-items.graphql +18 -2
  22. package/addon/modifiers/pikaday.js +2 -0
  23. package/addon/routes/{distribution.js → application.js} +1 -1
  24. package/addon/routes/{distribution/index.js → index.js} +2 -2
  25. package/addon/routes/inquiry/detail/answer.js +7 -0
  26. package/addon/routes/inquiry/detail/index.js +7 -0
  27. package/addon/routes/{distribution/inquiry → inquiry}/detail.js +1 -1
  28. package/addon/routes/inquiry/index.js +10 -0
  29. package/addon/routes/{distribution/inquiry.js → inquiry.js} +1 -1
  30. package/addon/routes/new.js +7 -0
  31. package/addon/routes/notfound.js +3 -0
  32. package/addon/routes.js +5 -6
  33. package/addon/services/caluma-distribution-controls.js +37 -0
  34. package/addon/templates/application.hbs +8 -0
  35. package/addon/templates/index.hbs +8 -0
  36. package/addon/templates/{distribution/inquiry → inquiry}/detail/answer.hbs +0 -0
  37. package/addon/templates/{distribution/inquiry → inquiry}/detail/index.hbs +0 -0
  38. package/addon/templates/{distribution/inquiry → inquiry}/detail.hbs +0 -0
  39. package/addon/templates/{distribution/inquiry → inquiry}/index.hbs +0 -0
  40. package/addon/templates/{distribution/inquiry.hbs → inquiry.hbs} +0 -0
  41. package/addon/templates/{distribution/new.hbs → new.hbs} +0 -0
  42. package/addon/templates/notfound.hbs +1 -0
  43. package/app/abilities/distribution.js +1 -0
  44. package/app/components/notfound.js +1 -0
  45. package/app/services/caluma-distribution-controls.js +1 -0
  46. package/package.json +9 -7
  47. package/translations/de.yaml +9 -0
  48. package/translations/en.yaml +9 -0
  49. package/translations/fr.yaml +9 -0
  50. package/addon/routes/distribution/inquiry/detail/answer.js +0 -7
  51. package/addon/routes/distribution/inquiry/detail/index.js +0 -7
  52. package/addon/routes/distribution/inquiry/index.js +0 -10
  53. package/addon/routes/distribution/new.js +0 -7
  54. package/addon/templates/distribution.hbs +0 -8
package/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ # [@projectcaluma/ember-distribution-v1.0.0-beta.4](https://github.com/projectcaluma/ember-caluma/compare/@projectcaluma/ember-distribution-v1.0.0-beta.3...@projectcaluma/ember-distribution-v1.0.0-beta.4) (2022-02-16)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **distribution:** show controls if no inquiries exist yet ([5c73b6d](https://github.com/projectcaluma/ember-caluma/commit/5c73b6d0a870fd0e34d96af3fa34095733fe9fd9))
7
+ * **pikaday:** add pikaday modifier reexport in engines ([c13d302](https://github.com/projectcaluma/ember-caluma/commit/c13d3021bb8fe82e1245a60182af01287c507697))
8
+
9
+
10
+ ### Features
11
+
12
+ * **distribution:** add config variable to stack the UI ([2ad285a](https://github.com/projectcaluma/ember-caluma/commit/2ad285a24bf5fb45d15fe237e3f420dd1f1d94f2))
13
+ * **distribution:** add index page when no inquiries exist ([689089c](https://github.com/projectcaluma/ember-caluma/commit/689089c8f28146a33346f382fe69e7ca1b588d97))
14
+ * **distribution:** add proper 404 handling ([73e62e6](https://github.com/projectcaluma/ember-caluma/commit/73e62e671a9425fc549d7057dd653d1dc59883aa))
15
+ * **distribution:** remove distribution top level route ([6f396da](https://github.com/projectcaluma/ember-caluma/commit/6f396daf2881f07cdddaac6c7ca784db2b8777d3))
16
+
1
17
  # [@projectcaluma/ember-distribution-v1.0.0-beta.3](https://github.com/projectcaluma/ember-caluma/compare/@projectcaluma/ember-distribution-v1.0.0-beta.2...@projectcaluma/ember-distribution-v1.0.0-beta.3) (2022-02-07)
2
18
 
3
19
 
@@ -0,0 +1,29 @@
1
+ import { inject as service } from "@ember/service";
2
+ import { Ability } from "ember-can";
3
+
4
+ const hasStatus = (status) => (edge) => edge.node.status === status;
5
+
6
+ export default class DistributionAbility extends Ability {
7
+ @service("caluma-distribution-controls") controls;
8
+
9
+ get canSendInquiries() {
10
+ return (
11
+ this.controls.workItems.value?.send.edges.filter(hasStatus("SUSPENDED"))
12
+ .length > 0
13
+ );
14
+ }
15
+
16
+ get canCreateInquiry() {
17
+ return (
18
+ this.controls.workItems.value?.create.edges.filter(hasStatus("READY"))
19
+ .length > 0
20
+ );
21
+ }
22
+
23
+ get canComplete() {
24
+ return (
25
+ this.controls.workItems.value?.complete.edges.filter(hasStatus("READY"))
26
+ .length > 0
27
+ );
28
+ }
29
+ }
@@ -1,17 +1,19 @@
1
1
  <div class="uk-text-center uk-margin-small-top">
2
- {{#if this.canCreate}}
3
- <IconButton @route="distribution.new" @icon="plus" />
2
+ {{#if (can "create inquiry of distribution")}}
3
+ <IconButton @route="new" @icon="plus" />
4
4
  {{/if}}
5
- <IconButton
6
- @icon="paper-plane-outline"
7
- @fromSvgJar={{true}}
8
- @gutterTop={{4}}
9
- @gutterRight={{6}}
10
- @gutterLeft={{4}}
11
- @gutterBottom={{4}}
12
- @onClick={{this.noop}}
13
- />
14
- {{#if this.canComplete}}
5
+ {{#if (can "send inquiries of distribution")}}
6
+ <IconButton
7
+ @icon="paper-plane-outline"
8
+ @fromSvgJar={{true}}
9
+ @gutterTop={{4}}
10
+ @gutterRight={{6}}
11
+ @gutterLeft={{4}}
12
+ @gutterBottom={{4}}
13
+ @onClick={{this.noop}}
14
+ />
15
+ {{/if}}
16
+ {{#if (can "complete distribution")}}
15
17
  <IconButton
16
18
  @icon="lock-closed-outline"
17
19
  @fromSvgJar={{true}}
@@ -1,45 +1,9 @@
1
1
  import { action } from "@ember/object";
2
- import { inject as service } from "@ember/service";
3
2
  import Component from "@glimmer/component";
4
- import { queryManager } from "ember-apollo-client";
5
- import { dropTask } from "ember-concurrency";
6
- import { useTask } from "ember-resources";
7
-
8
- import config from "@projectcaluma/ember-distribution/config";
9
- import controlWorkItemsQuery from "@projectcaluma/ember-distribution/gql/queries/control-work-items.graphql";
10
3
 
11
4
  export default class DistributionNavigationControlsComponent extends Component {
12
- @service calumaOptions;
13
-
14
- @queryManager apollo;
15
-
16
- @config config;
17
-
18
- workItems = useTask(this, this.fetchWorkItems, () => []);
19
-
20
- get canCreate() {
21
- return this.workItems.value?.create.edges.length > 0;
22
- }
23
-
24
- get canComplete() {
25
- return this.workItems.value?.complete.edges.length > 0;
26
- }
27
-
28
5
  @action
29
6
  noop(e) {
30
7
  e.preventDefault();
31
8
  }
32
-
33
- @dropTask
34
- *fetchWorkItems() {
35
- return yield this.apollo.watchQuery({
36
- query: controlWorkItemsQuery,
37
- variables: {
38
- caseId: this.args.caseId,
39
- currentGroup: String(this.calumaOptions.currentGroupId),
40
- createTask: this.config.controls.createTask,
41
- completeTask: this.config.controls.completeTask,
42
- },
43
- });
44
- }
45
9
  }
@@ -1,5 +1,5 @@
1
1
  <li class={{if this.isActive "uk-active"}}>
2
- <LinkTo @route="distribution.inquiry" @model={{this.model}}>
2
+ <LinkTo @route="inquiry" @model={{this.model}}>
3
3
  <div class="uk-flex uk-flex-middle uk-width-1-1">
4
4
  <div class="uk-width-expand uk-text-truncate">
5
5
  {{#if (eq @type "addressed")}}
@@ -12,6 +12,6 @@ export default class DistributionNavigationItemComponent extends Component {
12
12
  }
13
13
 
14
14
  get isActive() {
15
- return this.router.isActive("distribution.inquiry", this.model);
15
+ return this.router.isActive("inquiry", this.model);
16
16
  }
17
17
  }
@@ -10,12 +10,14 @@
10
10
  {{/if}}
11
11
  </a>
12
12
 
13
- {{#if (and @inquiries.length this.expanded)}}
14
- <ul class="uk-tab uk-tab-left uk-margin-left">
15
- {{#each this.inquiries as |inquiry|}}
16
- <DistributionNavigation::Item @inquiry={{inquiry}} @type={{@type}} />
17
- {{/each}}
18
- </ul>
13
+ {{#if this.expanded}}
14
+ {{#if @inquiries.length}}
15
+ <ul class="uk-tab uk-tab-left uk-margin-left">
16
+ {{#each this.inquiries as |inquiry|}}
17
+ <DistributionNavigation::Item @inquiry={{inquiry}} @type={{@type}} />
18
+ {{/each}}
19
+ </ul>
20
+ {{/if}}
19
21
 
20
22
  {{#if (eq @type "controlling")}}
21
23
  <DistributionNavigation::Controls @caseId={{@caseId}} />
@@ -1,5 +1,5 @@
1
1
  <aside>
2
- <ul class="uk-tab uk-tab-left">
2
+ <ul class="uk-tab uk-tab-left uk-margin-remove-bottom">
3
3
  <DistributionNavigation::Section
4
4
  @type="controlling"
5
5
  @inquiries={{this.inquiries.controlling}}
@@ -2,45 +2,47 @@
2
2
  @documentId={{decode-id this.inquiry.childCase.document.id}}
3
3
  @disabled={{cannot "edit answer form of inquiry" this.inquiry}}
4
4
  @loading={{this._inquiry.isRunning}}
5
- as |content|
6
5
  >
7
- <h1 class="uk-flex uk-flex-middle">
8
- {{t "caluma.distribution.answer.title"}}
9
- {{#if (eq this.inquiry.status "RUNNING")}}
10
- <UkLabel
11
- class="uk-margin-left"
12
- @label={{t "caluma.distribution.status.draft"}}
13
- />
14
- {{/if}}
15
- </h1>
6
+ <:default as |content|>
7
+ <h1 class="uk-flex uk-flex-middle">
8
+ {{t "caluma.distribution.answer.title"}}
9
+ {{#if (eq this.inquiry.status "RUNNING")}}
10
+ <UkLabel
11
+ class="uk-margin-left"
12
+ @label={{t "caluma.distribution.status.draft"}}
13
+ />
14
+ {{/if}}
15
+ </h1>
16
16
 
17
- <content.form />
17
+ <content.form />
18
18
 
19
- {{#each this.buttons as |buttonConfig|}}
20
- {{#if buttonConfig.isFormButton}}
21
- <DocumentValidity @document={{content.document}} as |isValid validate|>
19
+ {{#each this.buttons as |buttonConfig|}}
20
+ {{#if buttonConfig.isFormButton}}
21
+ <DocumentValidity @document={{content.document}} as |isValid validate|>
22
+ <UkButton
23
+ @type="submit"
24
+ @color={{buttonConfig.color}}
25
+ @disabled={{or (not isValid) this.completeWorkItem.isRunning}}
26
+ @onClick={{fn
27
+ (perform this.completeWorkItem)
28
+ buttonConfig.workItemId
29
+ validate
30
+ }}
31
+ >{{buttonConfig.label}}</UkButton>
32
+ </DocumentValidity>
33
+ {{else}}
22
34
  <UkButton
23
- @type="submit"
35
+ @type="button"
24
36
  @color={{buttonConfig.color}}
25
- @disabled={{or (not isValid) this.completeWorkItem.isRunning}}
37
+ @disabled={{this.completeWorkItem.isRunning}}
26
38
  @onClick={{fn
27
39
  (perform this.completeWorkItem)
28
40
  buttonConfig.workItemId
29
- validate
41
+ null
30
42
  }}
31
43
  >{{buttonConfig.label}}</UkButton>
32
- </DocumentValidity>
33
- {{else}}
34
- <UkButton
35
- @type="button"
36
- @color={{buttonConfig.color}}
37
- @disabled={{this.completeWorkItem.isRunning}}
38
- @onClick={{fn
39
- (perform this.completeWorkItem)
40
- buttonConfig.workItemId
41
- null
42
- }}
43
- >{{buttonConfig.label}}</UkButton>
44
- {{/if}}
45
- {{/each}}
44
+ {{/if}}
45
+ {{/each}}
46
+ </:default>
47
+ <:notfound><Notfound /></:notfound>
46
48
  </CfContent>
@@ -65,7 +65,7 @@ export default class InquiryAnswerFormComponent extends Component {
65
65
  },
66
66
  });
67
67
 
68
- yield this.router.transitionTo("distribution.inquiry.index");
68
+ yield this.router.transitionTo("inquiry.index");
69
69
  } catch (error) {
70
70
  this.notification.danger(
71
71
  this.intl.t("caluma.distribution.answer.complete-error")
@@ -17,20 +17,14 @@
17
17
  </li>
18
18
  {{#if (can "edit inquiry" @inquiry)}}
19
19
  <li>
20
- <LinkTo
21
- @route="distribution.inquiry.detail.index"
22
- @model={{decode-id @inquiry.id}}
23
- >
20
+ <LinkTo @route="inquiry.detail.index" @model={{decode-id @inquiry.id}}>
24
21
  {{t "caluma.distribution.edit.link"}}
25
22
  </LinkTo>
26
23
  </li>
27
24
  {{/if}}
28
25
  {{#if (can "answer inquiry" @inquiry)}}
29
26
  <li>
30
- <LinkTo
31
- @route="distribution.inquiry.detail.answer"
32
- @model={{decode-id @inquiry.id}}
33
- >
27
+ <LinkTo @route="inquiry.detail.answer" @model={{decode-id @inquiry.id}}>
34
28
  {{t "caluma.distribution.answer.link"}}
35
29
  </LinkTo>
36
30
  </li>
@@ -1,9 +1,11 @@
1
- <section>
2
- {{#if this._inquiries.isRunning}}
3
- <div class="uk-text-center"><UkSpinner @ratio={{2}} /></div>
4
- {{else}}
1
+ {{#if this._inquiries.isRunning}}
2
+ <div class="uk-text-center"><UkSpinner @ratio={{2}} /></div>
3
+ {{else if this.inquiries.length}}
4
+ <section>
5
5
  {{#each this.inquiries as |inquiry|}}
6
6
  <InquiryDialog::Inquiry @inquiry={{inquiry}} />
7
7
  {{/each}}
8
- {{/if}}
9
- </section>
8
+ </section>
9
+ {{else}}
10
+ <Notfound />
11
+ {{/if}}
@@ -2,26 +2,28 @@
2
2
  @documentId={{decode-id this.inquiry.document.id}}
3
3
  @disabled={{cannot "edit inquiry" this.inquiry}}
4
4
  @loading={{this._inquiry.isRunning}}
5
- as |content|
6
5
  >
7
- <h1 class="uk-flex uk-flex-middle">
8
- {{t "caluma.distribution.edit.title"}}
9
- {{#if (eq this.inquiry.status "RUNNING")}}
10
- <UkLabel
11
- class="uk-margin-left"
12
- @label={{t "caluma.distribution.status.draft"}}
13
- />
14
- {{/if}}
15
- </h1>
6
+ <:default as |content|>
7
+ <h1 class="uk-flex uk-flex-middle">
8
+ {{t "caluma.distribution.edit.title"}}
9
+ {{#if (eq this.inquiry.status "RUNNING")}}
10
+ <UkLabel
11
+ class="uk-margin-left"
12
+ @label={{t "caluma.distribution.status.draft"}}
13
+ />
14
+ {{/if}}
15
+ </h1>
16
16
 
17
- <content.form />
17
+ <content.form />
18
18
 
19
- <DocumentValidity @document={{content.document}} as |isValid validate|>
20
- <UkButton
21
- @type="submit"
22
- @color="primary"
23
- @disabled={{or (not isValid) this.send.isRunning}}
24
- @onClick={{perform this.send validate}}
25
- >{{t "caluma.distribution.edit.send"}}</UkButton>
26
- </DocumentValidity>
19
+ <DocumentValidity @document={{content.document}} as |isValid validate|>
20
+ <UkButton
21
+ @type="submit"
22
+ @color="primary"
23
+ @disabled={{or (not isValid) this.send.isRunning}}
24
+ @onClick={{perform this.send validate}}
25
+ >{{t "caluma.distribution.edit.send"}}</UkButton>
26
+ </DocumentValidity>
27
+ </:default>
28
+ <:notfound><Notfound /></:notfound>
27
29
  </CfContent>
@@ -43,7 +43,7 @@ export default class InquiryEditFormComponent extends Component {
43
43
  variables: { workItem: this.args.inquiry },
44
44
  });
45
45
 
46
- yield this.router.transitionTo("distribution.inquiry.index");
46
+ yield this.router.transitionTo("inquiry.index");
47
47
  } catch (error) {
48
48
  this.notification.danger(
49
49
  this.intl.t("caluma.distribution.edit.send-error")
@@ -1,109 +1,121 @@
1
- <h1>{{t "caluma.distribution.new.title"}}</h1>
1
+ {{#if this.controls.workItems.isRunning}}
2
+ <div class="uk-text-center"><UkSpinner @ratio={{2}} /></div>
3
+ {{else if (can "create inquiry of distribution")}}
4
+ <h1>{{t "caluma.distribution.new.title"}}</h1>
2
5
 
3
- {{#if this.selectedGroups.length}}
4
- <div class="uk-flex uk-flex-middle">
5
- <div class="uk-width-expand">
6
- <button type="button" class="uk-link uk-text-light">
7
- {{t "caluma.distribution.new.groups" count=this.selectedGroups.length}}
8
- </button>
9
- <div uk-dropdown class="uk-width-auto">
10
- <ul
11
- class="uk-list uk-list-bullet uk-margin-remove uk-padding-remove"
12
- data-test-selected-groups
13
- >
14
- {{#each this.selectedGroups as |identifier|}}
15
- <li class="uk-text-nowrap">{{group-name identifier}}</li>
16
- {{/each}}
17
- </ul>
6
+ {{#if this.selectedGroups.length}}
7
+ <div class="uk-flex uk-flex-middle">
8
+ <div class="uk-width-expand">
9
+ <button type="button" class="uk-link uk-text-light">
10
+ {{t
11
+ "caluma.distribution.new.groups"
12
+ count=this.selectedGroups.length
13
+ }}
14
+ </button>
15
+ <div uk-dropdown class="uk-width-auto">
16
+ <ul
17
+ class="uk-list uk-list-bullet uk-margin-remove uk-padding-remove"
18
+ data-test-selected-groups
19
+ >
20
+ {{#each this.selectedGroups as |identifier|}}
21
+ <li class="uk-text-nowrap">{{group-name identifier}}</li>
22
+ {{/each}}
23
+ </ul>
24
+ </div>
25
+ {{t
26
+ "caluma.distribution.new.selected"
27
+ count=this.selectedGroups.length
28
+ }}
29
+ </div>
30
+ <div>
31
+ <UkButton
32
+ @label={{t "caluma.distribution.new.reset"}}
33
+ @onClick={{this.clearSelectedGroups}}
34
+ data-test-reset
35
+ />
36
+ <UkButton
37
+ @color="primary"
38
+ @label={{t "caluma.distribution.new.create-draft"}}
39
+ @type="submit"
40
+ @loading={{this.submit.isRunning}}
41
+ @disabled={{this.submit.isRunning}}
42
+ @onClick={{perform this.submit}}
43
+ data-test-submit
44
+ />
18
45
  </div>
19
- {{t "caluma.distribution.new.selected" count=this.selectedGroups.length}}
20
- </div>
21
- <div>
22
- <UkButton
23
- @label={{t "caluma.distribution.new.reset"}}
24
- @onClick={{this.clearSelectedGroups}}
25
- data-test-reset
26
- />
27
- <UkButton
28
- @color="primary"
29
- @label={{t "caluma.distribution.new.create-draft"}}
30
- @type="submit"
31
- @loading={{this.submit.isRunning}}
32
- @disabled={{this.submit.isRunning}}
33
- @onClick={{perform this.submit}}
34
- data-test-submit
35
- />
36
46
  </div>
37
- </div>
38
- <hr />
39
- {{/if}}
40
-
41
- <div class="uk-margin-bottom uk-button-group">
42
- {{#each-in this.config.new.types as |slug config|}}
43
- {{#unless config.disabled}}
44
- <UkButton
45
- data-test-type={{slug}}
46
- @label={{t config.label}}
47
- @color={{if (includes slug @selectedTypes) "primary" "default"}}
48
- @onClick={{fn this.updateSelectedTypes slug}}
49
- />
50
- {{/unless}}
51
- {{/each-in}}
52
- </div>
47
+ <hr />
48
+ {{/if}}
53
49
 
54
- <div class="uk-search uk-search-default uk-width-1-1">
55
- <span class="uk-search-icon-flip" uk-search-icon></span>
56
- <input
57
- placeholder={{t "caluma.distribution.new.search"}}
58
- aria-label={{t "caluma.distribution.new.search"}}
59
- class="uk-search-input"
60
- type="search"
61
- value={{@search}}
62
- data-test-search
63
- {{on "input" (perform this.updateSearch)}}
64
- />
65
- </div>
50
+ <div class="uk-margin-bottom uk-button-group">
51
+ {{#each-in this.config.new.types as |slug config|}}
52
+ {{#unless config.disabled}}
53
+ <UkButton
54
+ data-test-type={{slug}}
55
+ @label={{t config.label}}
56
+ @color={{if (includes slug @selectedTypes) "primary" "default"}}
57
+ @onClick={{fn this.updateSelectedTypes slug}}
58
+ />
59
+ {{/unless}}
60
+ {{/each-in}}
61
+ </div>
66
62
 
67
- {{#if this.groups.isRunning}}
68
- <div class="uk-text-center uk-margin">
69
- <UkSpinner @ratio={{2}} />
63
+ <div class="uk-search uk-search-default uk-width-1-1">
64
+ <span class="uk-search-icon-flip" uk-search-icon></span>
65
+ <input
66
+ placeholder={{t "caluma.distribution.new.search"}}
67
+ aria-label={{t "caluma.distribution.new.search"}}
68
+ class="uk-search-input"
69
+ type="search"
70
+ value={{@search}}
71
+ data-test-search
72
+ {{on "input" (perform this.updateSearch)}}
73
+ />
70
74
  </div>
71
- {{else if this.groups.value.length}}
72
- <ul class="uk-list uk-list-striped">
73
- {{#each this.groups.value as |group|}}
74
- {{! template-lint-disable require-presentational-children }}
75
- <li
76
- role="checkbox"
77
- class="uk-flex uk-flex-between uk-flex-middle"
78
- data-test-group={{group.identifier}}
79
- {{on "click" (fn this.updateSelectedGroups group.identifier)}}
80
- >
81
- {{! template-lint-disable no-nested-interactive }}
82
- <label for="group-{{group.identifier}}">
83
- <input
84
- type="checkbox"
85
- class="uk-checkbox uk-margin-small-right"
86
- checked={{includes group.identifier this.selectedGroups}}
87
- id="group-{{group.identifier}}"
88
- />
89
- {{group-name group.identifier}}
90
- </label>
91
- {{#if group.config.icon}}
92
- {{svg-jar
93
- group.config.icon
94
- width="20"
95
- height="20"
96
- class=(concat "uk-text-" group.config.iconColor)
97
- }}
98
- {{/if}}
99
- </li>
100
- {{/each}}
101
- </ul>
75
+
76
+ {{#if this.groups.isRunning}}
77
+ <div class="uk-text-center uk-margin">
78
+ <UkSpinner @ratio={{2}} />
79
+ </div>
80
+ {{else if this.groups.value.length}}
81
+ <ul class="uk-list uk-list-striped">
82
+ {{#each this.groups.value as |group|}}
83
+ {{! template-lint-disable require-presentational-children }}
84
+ <li
85
+ role="checkbox"
86
+ class="uk-flex uk-flex-between uk-flex-middle"
87
+ data-test-group={{group.identifier}}
88
+ {{on "click" (fn this.updateSelectedGroups group.identifier)}}
89
+ >
90
+ {{! template-lint-disable no-nested-interactive }}
91
+ <label for="group-{{group.identifier}}">
92
+ <input
93
+ type="checkbox"
94
+ class="uk-checkbox uk-margin-small-right"
95
+ checked={{includes group.identifier this.selectedGroups}}
96
+ id="group-{{group.identifier}}"
97
+ />
98
+ {{group-name group.identifier}}
99
+ </label>
100
+ {{#if group.config.icon}}
101
+ {{svg-jar
102
+ group.config.icon
103
+ width="20"
104
+ height="20"
105
+ class=(concat "uk-text-" group.config.iconColor)
106
+ }}
107
+ {{/if}}
108
+ </li>
109
+ {{/each}}
110
+ </ul>
111
+ {{else}}
112
+ <div class="uk-text-center">
113
+ <UkIcon @icon="search" @ratio={{10}} class="uk-margin-top" />
114
+ <p class="uk-text-muted">
115
+ {{t "caluma.distribution.new.empty"}}
116
+ </p>
117
+ </div>
118
+ {{/if}}
102
119
  {{else}}
103
- <div class="uk-text-center">
104
- <UkIcon @icon="search" @ratio={{10}} class="uk-margin-top" />
105
- <p class="uk-text-muted">
106
- {{t "caluma.distribution.new.empty"}}
107
- </p>
108
- </div>
120
+ <Notfound />
109
121
  {{/if}}
@@ -10,7 +10,6 @@ import { useTask } from "ember-resources";
10
10
  import { decodeId } from "@projectcaluma/ember-core/helpers/decode-id";
11
11
  import config from "@projectcaluma/ember-distribution/config";
12
12
  import createInquiryMutation from "@projectcaluma/ember-distribution/gql/mutations/create-inquiry.graphql";
13
- import controlWorkItemsQuery from "@projectcaluma/ember-distribution/gql/queries/control-work-items.graphql";
14
13
  import inquiryNavigationQuery from "@projectcaluma/ember-distribution/gql/queries/inquiry-navigation.graphql";
15
14
 
16
15
  const toggle = (value, array) => {
@@ -26,6 +25,7 @@ export default class InquiryNewFormComponent extends Component {
26
25
  @service notification;
27
26
  @service intl;
28
27
  @service router;
28
+ @service("caluma-distribution-controls") controls;
29
29
 
30
30
  @queryManager apollo;
31
31
 
@@ -80,26 +80,16 @@ export default class InquiryNewFormComponent extends Component {
80
80
  if (!this.selectedGroups.length) return;
81
81
 
82
82
  try {
83
- // get create inquiry work item to complete, this will not trigger a
84
- // network request since it's already fetch in the controls
85
- const controlsData = yield this.apollo.watchQuery(
86
- {
87
- query: controlWorkItemsQuery,
88
- variables: {
89
- caseId: this.args.caseId,
90
- currentGroup: String(this.calumaOptions.currentGroupId),
91
- createTask: this.config.controls.createTask,
92
- completeTask: this.config.controls.completeTask,
93
- },
94
- },
95
- "create.edges"
83
+ // get create inquiry work item to complete
84
+ const createId = decodeId(
85
+ this.controls.workItems.value?.create.edges[0].node.id
96
86
  );
97
87
 
98
88
  // create new inquiries
99
89
  yield this.apollo.mutate({
100
90
  mutation: createInquiryMutation,
101
91
  variables: {
102
- id: decodeId(controlsData[0].node.id),
92
+ id: createId,
103
93
  context: JSON.stringify({
104
94
  addressed_groups: this.selectedGroups.map(String),
105
95
  }),
@@ -124,7 +114,7 @@ export default class InquiryNewFormComponent extends Component {
124
114
  );
125
115
 
126
116
  // transition to last added inquiry
127
- this.router.transitionTo("distribution.inquiry", {
117
+ this.router.transitionTo("inquiry", {
128
118
  from: navigationData[0].node.controllingGroups[0],
129
119
  to: navigationData[0].node.addressedGroups[0],
130
120
  });
@@ -0,0 +1,12 @@
1
+ <div class="uk-text-center">
2
+ <h1 class="uk-heading-xlarge">
3
+ {{t "caluma.distribution.notfound.title"}}
4
+ </h1>
5
+ <h2 class="uk-heading-small uk-margin-remove-top uk-text-muted">
6
+ {{t "caluma.distribution.notfound.subtitle"}}
7
+ </h2>
8
+ <p class="uk-text-muted">
9
+ {{t "caluma.distribution.notfound.back"}}
10
+ <LinkTo @route="index">{{t "caluma.distribution.notfound.link"}}</LinkTo>
11
+ </p>
12
+ </div>
package/addon/config.js CHANGED
@@ -15,6 +15,7 @@ export default function config(target, property) {
15
15
  get() {
16
16
  return merge(
17
17
  {
18
+ ui: { stack: false },
18
19
  controls: {
19
20
  createTask: "create-inquiry",
20
21
  completeTask: "complete-distribution",
@@ -0,0 +1,7 @@
1
+ import Controller from "@ember/controller";
2
+
3
+ import config from "@projectcaluma/ember-distribution/config";
4
+
5
+ export default class ApplicationController extends Controller {
6
+ @config config;
7
+ }
@@ -3,7 +3,7 @@ import { dedupeTracked, cached } from "tracked-toolbox";
3
3
 
4
4
  import config from "@projectcaluma/ember-distribution/config";
5
5
 
6
- export default class DistributionNewController extends Controller {
6
+ export default class NewController extends Controller {
7
7
  @config config;
8
8
 
9
9
  queryParams = ["types", "search"];
@@ -1,6 +1,7 @@
1
1
  query ControlWorkItems(
2
2
  $createTask: ID!
3
3
  $completeTask: ID!
4
+ $inquiryTask: ID!
4
5
  $caseId: ID!
5
6
  $currentGroup: String!
6
7
  ) {
@@ -11,11 +12,11 @@ query ControlWorkItems(
11
12
  { status: READY }
12
13
  { addressedGroups: [$currentGroup] }
13
14
  ]
14
- first: 1
15
15
  ) {
16
16
  edges {
17
17
  node {
18
18
  id
19
+ status
19
20
  }
20
21
  }
21
22
  }
@@ -26,11 +27,26 @@ query ControlWorkItems(
26
27
  { status: READY }
27
28
  { addressedGroups: [$currentGroup] }
28
29
  ]
29
- first: 1
30
30
  ) {
31
31
  edges {
32
32
  node {
33
33
  id
34
+ status
35
+ }
36
+ }
37
+ }
38
+ send: allWorkItems(
39
+ filter: [
40
+ { case: $caseId }
41
+ { task: $inquiryTask }
42
+ { status: SUSPENDED }
43
+ { controllingGroups: [$currentGroup] }
44
+ ]
45
+ ) {
46
+ edges {
47
+ node {
48
+ id
49
+ status
34
50
  }
35
51
  }
36
52
  }
@@ -0,0 +1,2 @@
1
+ import "ember-pikaday/pikaday.css";
2
+ export { default } from "ember-pikaday/modifiers/pikaday";
@@ -1,6 +1,6 @@
1
1
  import Route from "@ember/routing/route";
2
2
 
3
- export default class DistributionRoute extends Route {
3
+ export default class ApplicationRoute extends Route {
4
4
  model(params) {
5
5
  return params.case;
6
6
  }
@@ -6,7 +6,7 @@ import config from "@projectcaluma/ember-distribution/config";
6
6
  import inquiryNavigationQuery from "@projectcaluma/ember-distribution/gql/queries/inquiry-navigation.graphql";
7
7
  import uniqueByGroups from "@projectcaluma/ember-distribution/utils/unique-by-groups";
8
8
 
9
- export default class DistributionIndexRoute extends Route {
9
+ export default class IndexRoute extends Route {
10
10
  @service router;
11
11
  @service calumaOptions;
12
12
 
@@ -35,7 +35,7 @@ export default class DistributionIndexRoute extends Route {
35
35
  }, {});
36
36
 
37
37
  if (models.length) {
38
- return this.router.replaceWith("distribution.inquiry", models[0]);
38
+ return this.router.replaceWith("inquiry", models[0]);
39
39
  }
40
40
  }
41
41
  }
@@ -0,0 +1,7 @@
1
+ import Route from "@ember/routing/route";
2
+
3
+ export default class InquiryDetailAnswerRoute extends Route {
4
+ model() {
5
+ return this.modelFor("inquiry.detail");
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ import Route from "@ember/routing/route";
2
+
3
+ export default class InquiryDetailIndexRoute extends Route {
4
+ model() {
5
+ return this.modelFor("inquiry.detail");
6
+ }
7
+ }
@@ -1,6 +1,6 @@
1
1
  import Route from "@ember/routing/route";
2
2
 
3
- export default class DistributionInquiryDetailRoute extends Route {
3
+ export default class InquiryDetailRoute extends Route {
4
4
  model({ inquiry }) {
5
5
  return inquiry;
6
6
  }
@@ -0,0 +1,10 @@
1
+ import Route from "@ember/routing/route";
2
+
3
+ export default class InquiryIndexRoute extends Route {
4
+ model() {
5
+ return {
6
+ ...this.modelFor("inquiry"),
7
+ case: this.modelFor("application"),
8
+ };
9
+ }
10
+ }
@@ -1,6 +1,6 @@
1
1
  import Route from "@ember/routing/route";
2
2
 
3
- export default class DistributionInquiryRoute extends Route {
3
+ export default class InquiryRoute extends Route {
4
4
  model({ from, to }) {
5
5
  return { from, to };
6
6
  }
@@ -0,0 +1,7 @@
1
+ import Route from "@ember/routing/route";
2
+
3
+ export default class NewRoute extends Route {
4
+ model() {
5
+ return this.modelFor("application");
6
+ }
7
+ }
@@ -0,0 +1,3 @@
1
+ import Route from "@ember/routing/route";
2
+
3
+ export default class NotfoundRoute extends Route {}
package/addon/routes.js CHANGED
@@ -1,12 +1,11 @@
1
1
  import buildRoutes from "ember-engines/routes";
2
2
 
3
3
  export default buildRoutes(function () {
4
- this.route("distribution", { path: "/case/:case" }, function () {
5
- this.route("new");
6
- this.route("inquiry", { path: "/from/:from/to/:to" }, function () {
7
- this.route("detail", { path: "/detail/:inquiry" }, function () {
8
- this.route("answer");
9
- });
4
+ this.route("new");
5
+ this.route("inquiry", { path: "/from/:from/to/:to" }, function () {
6
+ this.route("detail", { path: "/:inquiry" }, function () {
7
+ this.route("answer");
10
8
  });
11
9
  });
10
+ this.route("notfound", { path: "/*path" });
12
11
  });
@@ -0,0 +1,37 @@
1
+ import { getOwner } from "@ember/application";
2
+ import Service, { inject as service } from "@ember/service";
3
+ import { queryManager } from "ember-apollo-client";
4
+ import { dropTask } from "ember-concurrency";
5
+ import { useTask } from "ember-resources";
6
+
7
+ import config from "@projectcaluma/ember-distribution/config";
8
+ import controlWorkItemsQuery from "@projectcaluma/ember-distribution/gql/queries/control-work-items.graphql";
9
+
10
+ export default class CalumaDistributionControlsService extends Service {
11
+ @service calumaOptions;
12
+ @service router;
13
+
14
+ @queryManager apollo;
15
+
16
+ @config config;
17
+
18
+ get caseId() {
19
+ return getOwner(this).lookup("route:application").currentModel;
20
+ }
21
+
22
+ workItems = useTask(this, this.fetchWorkItems, () => [this.caseId]);
23
+
24
+ @dropTask
25
+ *fetchWorkItems(caseId) {
26
+ return yield this.apollo.watchQuery({
27
+ query: controlWorkItemsQuery,
28
+ variables: {
29
+ caseId,
30
+ currentGroup: String(this.calumaOptions.currentGroupId),
31
+ createTask: this.config.controls.createTask,
32
+ completeTask: this.config.controls.completeTask,
33
+ inquiryTask: this.config.inquiry.task,
34
+ },
35
+ });
36
+ }
37
+ }
@@ -0,0 +1,8 @@
1
+ <div uk-grid class={{if this.config.ui.stack "uk-grid-small"}}>
2
+ <div class={{if this.config.ui.stack "uk-width-1-1" "uk-width-1-3"}}>
3
+ <DistributionNavigation @caseId={{@model}} />
4
+ </div>
5
+ <div class={{if this.config.ui.stack "uk-width-1-1" "uk-width-2-3"}}>
6
+ {{outlet}}
7
+ </div>
8
+ </div>
@@ -0,0 +1,8 @@
1
+ <div class="uk-text-center">
2
+ <p class="uk-text-muted">{{t "caluma.distribution.empty"}}</p>
3
+ {{#if (can "create inquiry of distribution")}}
4
+ <LinkTo @route="new" class="uk-margin-top">
5
+ {{t "caluma.distribution.create"}}
6
+ </LinkTo>
7
+ {{/if}}
8
+ </div>
@@ -0,0 +1 @@
1
+ <Notfound />
@@ -0,0 +1 @@
1
+ export { default } from "@projectcaluma/ember-distribution/abilities/distribution";
@@ -0,0 +1 @@
1
+ export { default } from "@projectcaluma/ember-distribution/components/notfound";
@@ -0,0 +1 @@
1
+ export { default } from "@projectcaluma/ember-distribution/services/caluma-distribution-controls";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectcaluma/ember-distribution",
3
- "version": "1.0.0-beta.3",
3
+ "version": "1.0.0-beta.4",
4
4
  "description": "Ember engine for the Caluma distribution module.",
5
5
  "keywords": [
6
6
  "ember-addon",
@@ -21,17 +21,18 @@
21
21
  "@glimmer/component": "^1.0.4",
22
22
  "@glimmer/tracking": "^1.0.4",
23
23
  "@projectcaluma/ember-core": "^11.0.0-beta.4",
24
- "@projectcaluma/ember-form": "^11.0.0-beta.9",
24
+ "@projectcaluma/ember-form": "^11.0.0-beta.11",
25
25
  "@projectcaluma/ember-workflow": "^11.0.0-beta.4",
26
26
  "ember-apollo-client": "^3.2.0",
27
27
  "ember-auto-import": "^2.4.0",
28
28
  "ember-can": "^4.1.0",
29
29
  "ember-cli-babel": "^7.26.11",
30
30
  "ember-cli-htmlbars": "^6.0.1",
31
- "ember-concurrency": "^2.2.0",
31
+ "ember-concurrency": "^2.2.1",
32
32
  "ember-engines-router-service": "^0.3.0",
33
33
  "ember-fetch": "^8.1.1",
34
34
  "ember-intl": "^5.7.2",
35
+ "ember-pikaday": "^4.0.0",
35
36
  "ember-resources": "^4.3.1",
36
37
  "ember-svg-jar": "^2.3.4",
37
38
  "ember-test-selectors": "^6.0.0",
@@ -45,11 +46,12 @@
45
46
  "devDependencies": {
46
47
  "@ember/optional-features": "2.0.0",
47
48
  "@ember/test-helpers": "2.6.0",
48
- "@embroider/test-setup": "1.0.0",
49
- "@faker-js/faker": "6.0.0-alpha.5",
50
- "@projectcaluma/ember-testing": "11.0.0-beta.2",
49
+ "@embroider/test-setup": "1.2.0",
50
+ "@faker-js/faker": "6.0.0-alpha.6",
51
+ "@projectcaluma/ember-testing": "11.0.0-beta.3",
51
52
  "broccoli-asset-rev": "3.0.0",
52
53
  "ember-cli": "3.28.5",
54
+ "ember-cli-code-coverage": "1.0.3",
53
55
  "ember-cli-dependency-checker": "3.2.0",
54
56
  "ember-cli-inject-live-reload": "2.1.0",
55
57
  "ember-cli-mirage": "2.4.0",
@@ -72,7 +74,7 @@
72
74
  "qunit": "2.17.2",
73
75
  "qunit-dom": "2.0.0",
74
76
  "sass": "1.49.7",
75
- "webpack": "5.68.0"
77
+ "webpack": "5.69.0"
76
78
  },
77
79
  "engines": {
78
80
  "node": "12.* || 14.* || >= 16"
@@ -1,5 +1,8 @@
1
1
  caluma:
2
2
  distribution:
3
+ empty: "Es gibt noch keine Anfragen."
4
+ create: "Erstellen Sie die Erste jetzt!"
5
+
3
6
  edit:
4
7
  title: "Anfrage bearbeiten"
5
8
  link: "Bearbeiten"
@@ -40,3 +43,9 @@ caluma:
40
43
  positive: "Positiv"
41
44
  negative: "Negativ"
42
45
  needs-interaction: "Aktion erforderlich"
46
+
47
+ notfound:
48
+ title: "404"
49
+ subtitle: "Seite nicht gefunden!"
50
+ back: "Zurück zur"
51
+ link: "Startseite"
@@ -1,5 +1,8 @@
1
1
  caluma:
2
2
  distribution:
3
+ empty: "There are no inquiries yet."
4
+ create: "Create the first one now!"
5
+
3
6
  edit:
4
7
  title: "Edit inquiry"
5
8
  link: "Edit"
@@ -40,3 +43,9 @@ caluma:
40
43
  positive: "Positive"
41
44
  negative: "Negative"
42
45
  needs-interaction: "Needs interaction"
46
+
47
+ notfound:
48
+ title: "404"
49
+ subtitle: "Page not found!"
50
+ back: "Go back to the"
51
+ link: "landing page"
@@ -1,5 +1,8 @@
1
1
  caluma:
2
2
  distribution:
3
+ empty: "Il n'y a pas encore de demande."
4
+ create: "Créez la première maintenant !"
5
+
3
6
  edit:
4
7
  title: "Modifier la demande"
5
8
  link: "Modifier"
@@ -40,3 +43,9 @@ caluma:
40
43
  positive: "Positif"
41
44
  negative: "Negatif"
42
45
  needs-interaction: "Action nécessaire"
46
+
47
+ notfound:
48
+ title: "404"
49
+ subtitle: "Page non trouvée !"
50
+ back: "Retour à"
51
+ link: "la page d'accueil"
@@ -1,7 +0,0 @@
1
- import Route from "@ember/routing/route";
2
-
3
- export default class DistributionInquiryDetailAnswerRoute extends Route {
4
- model() {
5
- return this.modelFor("distribution.inquiry.detail");
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- import Route from "@ember/routing/route";
2
-
3
- export default class DistributionInquiryDetailIndexRoute extends Route {
4
- model() {
5
- return this.modelFor("distribution.inquiry.detail");
6
- }
7
- }
@@ -1,10 +0,0 @@
1
- import Route from "@ember/routing/route";
2
-
3
- export default class DistributionInquiryIndexRoute extends Route {
4
- model() {
5
- return {
6
- ...this.modelFor("distribution.inquiry"),
7
- case: this.modelFor("distribution"),
8
- };
9
- }
10
- }
@@ -1,7 +0,0 @@
1
- import Route from "@ember/routing/route";
2
-
3
- export default class DistributionNewRoute extends Route {
4
- model() {
5
- return this.modelFor("distribution");
6
- }
7
- }
@@ -1,8 +0,0 @@
1
- <div uk-grid>
2
- <div class="uk-width-1-3">
3
- <DistributionNavigation @caseId={{@model}} />
4
- </div>
5
- <div class="uk-width-2-3">
6
- {{outlet}}
7
- </div>
8
- </div>