@projectcaluma/ember-distribution 1.0.0-beta.4 → 1.0.0-beta.7

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 (80) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/addon/abilities/distribution.js +8 -6
  3. package/addon/components/cd-icon-button.hbs +27 -0
  4. package/addon/components/{icon-button.js → cd-icon-button.js} +1 -1
  5. package/addon/components/{inquiry-answer-form.hbs → cd-inquiry-answer-form.hbs} +1 -1
  6. package/addon/components/{inquiry-answer-form.js → cd-inquiry-answer-form.js} +1 -1
  7. package/addon/components/cd-inquiry-dialog/inquiry-deadline.hbs +28 -0
  8. package/addon/components/{inquiry-dialog → cd-inquiry-dialog}/inquiry-deadline.js +5 -1
  9. package/addon/components/{inquiry-dialog → cd-inquiry-dialog}/inquiry-divider.hbs +2 -1
  10. package/addon/components/{inquiry-dialog → cd-inquiry-dialog}/inquiry-divider.js +1 -1
  11. package/addon/components/{inquiry-dialog → cd-inquiry-dialog}/inquiry-part.hbs +16 -2
  12. package/addon/components/cd-inquiry-dialog/inquiry-part.js +59 -0
  13. package/addon/components/cd-inquiry-dialog/inquiry.hbs +16 -0
  14. package/addon/components/cd-inquiry-dialog/inquiry.js +11 -0
  15. package/addon/components/{inquiry-dialog.hbs → cd-inquiry-dialog.hbs} +2 -2
  16. package/addon/components/cd-inquiry-dialog.js +65 -0
  17. package/addon/components/{inquiry-edit-form.hbs → cd-inquiry-edit-form.hbs} +1 -1
  18. package/addon/components/{inquiry-edit-form.js → cd-inquiry-edit-form.js} +2 -1
  19. package/addon/components/{inquiry-new-form.hbs → cd-inquiry-new-form.hbs} +3 -3
  20. package/addon/components/{inquiry-new-form.js → cd-inquiry-new-form.js} +20 -28
  21. package/addon/components/{distribution-navigation → cd-navigation}/controls.hbs +10 -5
  22. package/addon/components/cd-navigation/controls.js +95 -0
  23. package/addon/components/{distribution-navigation → cd-navigation}/item.hbs +3 -6
  24. package/addon/components/{distribution-navigation → cd-navigation}/item.js +1 -1
  25. package/addon/components/{distribution-navigation → cd-navigation}/section.hbs +2 -2
  26. package/addon/components/{distribution-navigation → cd-navigation}/section.js +1 -1
  27. package/addon/components/{distribution-navigation → cd-navigation}/status-indicator.hbs +2 -1
  28. package/addon/components/{distribution-navigation → cd-navigation}/status-indicator.js +1 -1
  29. package/addon/components/{distribution-navigation.hbs → cd-navigation.hbs} +3 -6
  30. package/addon/components/cd-navigation.js +53 -0
  31. package/addon/components/{notfound.hbs → cd-notfound.hbs} +0 -0
  32. package/addon/config.js +1 -1
  33. package/addon/gql/mutations/complete-work-item.graphql +8 -0
  34. package/addon/gql/mutations/withdraw-inquiry.graphql +8 -0
  35. package/addon/gql/queries/incomplete-inquiries.graphql +13 -0
  36. package/addon/gql/queries/inquiry-navigation.graphql +2 -0
  37. package/addon/services/distribution.js +82 -0
  38. package/addon/templates/application.hbs +1 -1
  39. package/addon/templates/index.hbs +7 -4
  40. package/addon/templates/inquiry/detail/answer.hbs +1 -1
  41. package/addon/templates/inquiry/detail/index.hbs +1 -1
  42. package/addon/templates/inquiry/index.hbs +1 -1
  43. package/addon/templates/new.hbs +1 -1
  44. package/addon/templates/notfound.hbs +1 -1
  45. package/addon/utils/unique-by-groups.js +1 -0
  46. package/app/components/{inquiry-dialog.js → cd-icon-button.js} +1 -1
  47. package/app/components/{inquiry-dialog/inquiry.js → cd-inquiry-answer-form.js} +1 -1
  48. package/app/components/{inquiry-dialog → cd-inquiry-dialog}/inquiry-deadline.js +1 -1
  49. package/app/components/{inquiry-dialog → cd-inquiry-dialog}/inquiry-divider.js +1 -1
  50. package/app/components/{inquiry-dialog → cd-inquiry-dialog}/inquiry-part.js +1 -1
  51. package/app/components/{distribution-navigation.js → cd-inquiry-dialog/inquiry.js} +1 -1
  52. package/app/components/{inquiry-edit-form.js → cd-inquiry-dialog.js} +1 -1
  53. package/app/components/cd-inquiry-edit-form.js +1 -0
  54. package/app/components/{inquiry-answer-form.js → cd-inquiry-new-form.js} +1 -1
  55. package/app/components/cd-navigation/controls.js +1 -0
  56. package/app/components/{inquiry-new-form.js → cd-navigation/item.js} +1 -1
  57. package/app/components/cd-navigation/section.js +1 -0
  58. package/app/components/{distribution-navigation/item.js → cd-navigation/status-indicator.js} +1 -1
  59. package/app/components/{icon-button.js → cd-navigation.js} +1 -1
  60. package/app/components/{notfound.js → cd-notfound.js} +1 -1
  61. package/app/services/{caluma-distribution-controls.js → distribution.js} +1 -1
  62. package/app/styles/_inquiry-divider.scss +22 -0
  63. package/index.js +14 -13
  64. package/package.json +23 -20
  65. package/public/assets/distribution.svg +1 -0
  66. package/translations/de.yaml +16 -2
  67. package/translations/en.yaml +17 -2
  68. package/translations/fr.yaml +16 -2
  69. package/addon/components/distribution-navigation/controls.js +0 -9
  70. package/addon/components/distribution-navigation.js +0 -81
  71. package/addon/components/icon-button.hbs +0 -20
  72. package/addon/components/inquiry-dialog/inquiry-deadline.hbs +0 -6
  73. package/addon/components/inquiry-dialog/inquiry-part.js +0 -20
  74. package/addon/components/inquiry-dialog/inquiry.hbs +0 -13
  75. package/addon/components/inquiry-dialog/inquiry.js +0 -7
  76. package/addon/components/inquiry-dialog.js +0 -42
  77. package/addon/services/caluma-distribution-controls.js +0 -37
  78. package/app/components/distribution-navigation/controls.js +0 -1
  79. package/app/components/distribution-navigation/section.js +0 -1
  80. package/app/components/distribution-navigation/status-indicator.js +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,37 @@
1
+ # [@projectcaluma/ember-distribution-v1.0.0-beta.7](https://github.com/projectcaluma/ember-caluma/compare/@projectcaluma/ember-distribution-v1.0.0-beta.6...@projectcaluma/ember-distribution-v1.0.0-beta.7) (2022-04-07)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **distribution:** fix status indicator and deadline styling for firefox ([358acb1](https://github.com/projectcaluma/ember-caluma/commit/358acb1f8e23b425bd6e223dc5873e516710ef12))
7
+ * **distribution:** make sure distribution components are prefixed ([d7d98ec](https://github.com/projectcaluma/ember-caluma/commit/d7d98ec291f937f384e2521d4d89c363d8e34f02))
8
+
9
+
10
+ ### Features
11
+
12
+ * **distribution:** enable completing the distribution ([beabe61](https://github.com/projectcaluma/ember-caluma/commit/beabe61bd34025c4785c1e1ba60c59babb3eb6ab))
13
+
14
+ # [@projectcaluma/ember-distribution-v1.0.0-beta.6](https://github.com/projectcaluma/ember-caluma/compare/@projectcaluma/ember-distribution-v1.0.0-beta.5...@projectcaluma/ember-distribution-v1.0.0-beta.6) (2022-03-24)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **embroider:** add missing dependency on @ember/string ([3a6e6bb](https://github.com/projectcaluma/ember-caluma/commit/3a6e6bb39a8c1a40a2ae00b3d4ea00606a755e25))
20
+
21
+
22
+ ### Features
23
+
24
+ * **distribution:** add functionality to send all pending inquiries ([d769953](https://github.com/projectcaluma/ember-caluma/commit/d769953d5a0ea196943426c8499ba87b77a42e61))
25
+ * **distribution:** add functionality to withdraw an inquiry ([c278895](https://github.com/projectcaluma/ember-caluma/commit/c2788957c0fb228c167ca9236fda4850717f5817))
26
+
27
+ # [@projectcaluma/ember-distribution-v1.0.0-beta.5](https://github.com/projectcaluma/ember-caluma/compare/@projectcaluma/ember-distribution-v1.0.0-beta.4...@projectcaluma/ember-distribution-v1.0.0-beta.5) (2022-03-11)
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * **distribution:** fix sorting after group names in navigation ([2299d3b](https://github.com/projectcaluma/ember-caluma/commit/2299d3b0e265204ab6747dbdc6a8b64fc22f247f))
33
+ * **distribution:** redirect to edit form after inquiry creation ([0a2c404](https://github.com/projectcaluma/ember-caluma/commit/0a2c40404fdb1258fb8d51a2809a03b335c7c78a))
34
+
1
35
  # [@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
36
 
3
37
 
@@ -4,26 +4,28 @@ import { Ability } from "ember-can";
4
4
  const hasStatus = (status) => (edge) => edge.node.status === status;
5
5
 
6
6
  export default class DistributionAbility extends Ability {
7
- @service("caluma-distribution-controls") controls;
7
+ @service distribution;
8
8
 
9
9
  get canSendInquiries() {
10
10
  return (
11
- this.controls.workItems.value?.send.edges.filter(hasStatus("SUSPENDED"))
12
- .length > 0
11
+ this.distribution.controls.value?.send.edges.filter(
12
+ hasStatus("SUSPENDED")
13
+ ).length > 0
13
14
  );
14
15
  }
15
16
 
16
17
  get canCreateInquiry() {
17
18
  return (
18
- this.controls.workItems.value?.create.edges.filter(hasStatus("READY"))
19
+ this.distribution.controls.value?.create.edges.filter(hasStatus("READY"))
19
20
  .length > 0
20
21
  );
21
22
  }
22
23
 
23
24
  get canComplete() {
24
25
  return (
25
- this.controls.workItems.value?.complete.edges.filter(hasStatus("READY"))
26
- .length > 0
26
+ this.distribution.controls.value?.complete.edges.filter(
27
+ hasStatus("READY")
28
+ ).length > 0
27
29
  );
28
30
  }
29
31
  }
@@ -0,0 +1,27 @@
1
+ {{#if @route}}
2
+ <LinkTo @route={{@route}} class={{this.class}} title={{@title}} ...attributes>
3
+ {{#if @loading}}
4
+ <UkSpinner @ratio={{0.6}} />
5
+ {{else if @fromSvgJar}}
6
+ {{svg-jar @icon title=@title width="20" height="20"}}
7
+ {{else}}
8
+ <UkIcon @icon={{@icon}} />
9
+ {{/if}}
10
+ </LinkTo>
11
+ {{else}}
12
+ <button
13
+ type="button"
14
+ class={{this.class}}
15
+ title={{@title}}
16
+ ...attributes
17
+ {{on "click" @onClick}}
18
+ >
19
+ {{#if @loading}}
20
+ <UkSpinner @ratio={{0.6}} />
21
+ {{else if @fromSvgJar}}
22
+ {{svg-jar @icon title=@title width="20" height="20"}}
23
+ {{else}}
24
+ <UkIcon @icon={{@icon}} />
25
+ {{/if}}
26
+ </button>
27
+ {{/if}}
@@ -1,7 +1,7 @@
1
1
  import { dasherize } from "@ember/string";
2
2
  import Component from "@glimmer/component";
3
3
 
4
- export default class IconButtonComponent extends Component {
4
+ export default class CdIconButtonComponent extends Component {
5
5
  get class() {
6
6
  const gutters = [
7
7
  "gutter",
@@ -44,5 +44,5 @@
44
44
  {{/if}}
45
45
  {{/each}}
46
46
  </:default>
47
- <:notfound><Notfound /></:notfound>
47
+ <:notfound><CdNotfound /></:notfound>
48
48
  </CfContent>
@@ -9,7 +9,7 @@ import config from "@projectcaluma/ember-distribution/config";
9
9
  import completeInquiryWorkItemMutation from "@projectcaluma/ember-distribution/gql/mutations/complete-inquiry-work-item.graphql";
10
10
  import inquiryAnswerQuery from "@projectcaluma/ember-distribution/gql/queries/inquiry-answer.graphql";
11
11
 
12
- export default class InquiryAnswerFormComponent extends Component {
12
+ export default class CdInquiryAnswerFormComponent extends Component {
13
13
  @service intl;
14
14
  @service router;
15
15
  @service notification;
@@ -0,0 +1,28 @@
1
+ {{#if this.deadline.value}}
2
+ <div
3
+ class="uk-position-top-right
4
+ {{if
5
+ this.config.ui.small
6
+ 'uk-margin-top uk-margin-right'
7
+ 'uk-margin-medium-top uk-margin-medium-right'
8
+ }}
9
+ {{if
10
+ this.isWithdrawn
11
+ 'uk-text-muted'
12
+ (concat 'uk-text-' this.deadline.color)
13
+ }}
14
+ uk-flex-inline uk-flex-middle"
15
+ >
16
+ {{svg-jar
17
+ (if this.isWithdrawn "ban-outline" "alarm-outline")
18
+ height=26
19
+ width=26
20
+ class="uk-margin-small-right"
21
+ }}
22
+ {{#if this.isWithdrawn}}
23
+ {{t "caluma.distribution.withdraw.status"}}
24
+ {{else}}
25
+ {{format-date this.deadline.value}}
26
+ {{/if}}
27
+ </div>
28
+ {{/if}}
@@ -3,8 +3,12 @@ import Component from "@glimmer/component";
3
3
  import config from "@projectcaluma/ember-distribution/config";
4
4
  import inquiryDeadline from "@projectcaluma/ember-distribution/utils/inquiry-deadline";
5
5
 
6
- export default class InquiryDialogInquiryDeadlineComponent extends Component {
6
+ export default class CdInquiryDialogInquiryDeadlineComponent extends Component {
7
7
  @config config;
8
8
 
9
9
  @inquiryDeadline deadline;
10
+
11
+ get isWithdrawn() {
12
+ return this.args.inquiry.status === "CANCELED";
13
+ }
10
14
  }
@@ -1,5 +1,6 @@
1
1
  <div
2
- class="inquiry-divider uk-flex uk-flex-center uk-flex-middle uk-flex-between uk-margin uk-text-{{this.status.color}}"
2
+ class="inquiry-divider uk-flex uk-flex-center uk-flex-middle uk-flex-between uk-text-{{this.status.color}}
3
+ {{if this.config.ui.small 'inquiry-divider--small' 'uk-margin'}}"
3
4
  >
4
5
  <div class="inquiry-divider__icon uk-flex uk-flex-center uk-flex-middle">
5
6
  {{svg-jar this.status.icon title=this.status.label}}
@@ -4,7 +4,7 @@ import Component from "@glimmer/component";
4
4
  import config from "@projectcaluma/ember-distribution/config";
5
5
  import inquiryStatus from "@projectcaluma/ember-distribution/utils/inquiry-status";
6
6
 
7
- export default class InquiryDialogInquiryDividerComponent extends Component {
7
+ export default class CdInquiryDialogInquiryDividerComponent extends Component {
8
8
  @service intl;
9
9
 
10
10
  @config config;
@@ -8,7 +8,14 @@
8
8
  {{/if}}
9
9
  </p>
10
10
 
11
- <ul class="uk-subnav uk-subnav-divider uk-margin-small-top">
11
+ <ul
12
+ class="uk-subnav uk-subnav-divider
13
+ {{if
14
+ this.config.ui.small
15
+ 'uk-margin-remove-top uk-margin-small-bottom'
16
+ 'uk-margin-small-top'
17
+ }}"
18
+ >
12
19
  <li>
13
20
  <span>
14
21
  {{format-date this.date}}
@@ -21,6 +28,11 @@
21
28
  {{t "caluma.distribution.edit.link"}}
22
29
  </LinkTo>
23
30
  </li>
31
+ <li>
32
+ <a href="" {{on "click" (perform this.withdraw)}} data-test-withdraw>
33
+ {{t "caluma.distribution.withdraw.link"}}
34
+ </a>
35
+ </li>
24
36
  {{/if}}
25
37
  {{#if (can "answer inquiry" @inquiry)}}
26
38
  <li>
@@ -31,4 +43,6 @@
31
43
  {{/if}}
32
44
  </ul>
33
45
 
34
- <p class="uk-margin-remove-bottom">{{this.info}}</p>
46
+ {{#if this.info}}
47
+ <p class="uk-margin-remove">{{this.info}}</p>
48
+ {{/if}}
@@ -0,0 +1,59 @@
1
+ import { inject as service } from "@ember/service";
2
+ import Component from "@glimmer/component";
3
+ import { queryManager } from "ember-apollo-client";
4
+ import { dropTask } from "ember-concurrency";
5
+ import { confirm } from "ember-uikit";
6
+
7
+ import { decodeId } from "@projectcaluma/ember-core/helpers/decode-id";
8
+ import config from "@projectcaluma/ember-distribution/config";
9
+ import withdrawInquiryMutation from "@projectcaluma/ember-distribution/gql/mutations/withdraw-inquiry.graphql";
10
+
11
+ export default class CdInquiryDialogInquiryPartComponent extends Component {
12
+ @service notification;
13
+ @service router;
14
+ @service intl;
15
+
16
+ @queryManager apollo;
17
+
18
+ @config config;
19
+
20
+ get date() {
21
+ const key = this.args.type === "request" ? "createdAt" : "closedAt";
22
+
23
+ return this.args.inquiry[key];
24
+ }
25
+
26
+ get info() {
27
+ const document =
28
+ this.args.type === "request"
29
+ ? this.args.inquiry.document
30
+ : this.args.type === "answer"
31
+ ? this.args.inquiry.childCase.document
32
+ : null;
33
+
34
+ return document.info.edges[0]?.node.value;
35
+ }
36
+
37
+ @dropTask
38
+ *withdraw(e) {
39
+ e.preventDefault();
40
+
41
+ /* istanbul ignore next */
42
+ if (!(yield confirm(this.intl.t("caluma.distribution.withdraw.confirm")))) {
43
+ return;
44
+ }
45
+
46
+ try {
47
+ yield this.apollo.mutate({
48
+ mutation: withdrawInquiryMutation,
49
+ variables: {
50
+ workItem: decodeId(this.args.inquiry.id),
51
+ },
52
+ });
53
+ } catch (error) {
54
+ this.notification.danger(
55
+ this.intl.t("caluma.distribution.withdraw.error")
56
+ );
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,16 @@
1
+ <article
2
+ class="uk-card uk-card-default uk-margin
3
+ {{if this.config.ui.small 'uk-card-small'}}"
4
+ >
5
+ <div class="uk-card-body">
6
+ <CdInquiryDialog::InquiryDeadline @inquiry={{@inquiry}} />
7
+
8
+ {{#if this.hasAnswer}}
9
+ <CdInquiryDialog::InquiryPart @inquiry={{@inquiry}} @type="answer" />
10
+
11
+ <CdInquiryDialog::InquiryDivider @inquiry={{@inquiry}} />
12
+ {{/if}}
13
+
14
+ <CdInquiryDialog::InquiryPart @inquiry={{@inquiry}} @type="request" />
15
+ </div>
16
+ </article>
@@ -0,0 +1,11 @@
1
+ import Component from "@glimmer/component";
2
+
3
+ import config from "@projectcaluma/ember-distribution/config";
4
+
5
+ export default class CdInquiryDialogInquiryComponent extends Component {
6
+ @config config;
7
+
8
+ get hasAnswer() {
9
+ return this.args.inquiry.status === "COMPLETED";
10
+ }
11
+ }
@@ -3,9 +3,9 @@
3
3
  {{else if this.inquiries.length}}
4
4
  <section>
5
5
  {{#each this.inquiries as |inquiry|}}
6
- <InquiryDialog::Inquiry @inquiry={{inquiry}} />
6
+ <CdInquiryDialog::Inquiry @inquiry={{inquiry}} />
7
7
  {{/each}}
8
8
  </section>
9
9
  {{else}}
10
- <Notfound />
10
+ <CdNotfound />
11
11
  {{/if}}
@@ -0,0 +1,65 @@
1
+ import { inject as service } from "@ember/service";
2
+ import Component from "@glimmer/component";
3
+ import { queryManager, getObservable } 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 inquiryDialogQuery from "@projectcaluma/ember-distribution/gql/queries/inquiry-dialog.graphql";
9
+
10
+ export default class CdInquiryDialogComponent extends Component {
11
+ @service router;
12
+
13
+ @config config;
14
+
15
+ @queryManager apollo;
16
+
17
+ get inquiries() {
18
+ return this._inquiries.value?.allWorkItems.edges.map((edge) => edge.node);
19
+ }
20
+
21
+ _inquiries = useTask(this, this.fetchDialog, () => [
22
+ this.args.from,
23
+ this.args.to,
24
+ this.args.caseId,
25
+ this.config,
26
+ ]);
27
+
28
+ @dropTask
29
+ *fetchDialog() {
30
+ const response = yield this.apollo.watchQuery({
31
+ query: inquiryDialogQuery,
32
+ variables: {
33
+ from: this.args.from,
34
+ to: this.args.to,
35
+ caseId: this.args.caseId,
36
+ task: this.config.inquiry.task,
37
+ infoQuestion: this.config.inquiry.infoQuestion,
38
+ deadlineQuestion: this.config.inquiry.deadlineQuestion,
39
+ statusQuestion: this.config.inquiry.answer.statusQuestion,
40
+ answerInfoQuestion: this.config.inquiry.answer.infoQuestion,
41
+ includeNavigationData: true,
42
+ },
43
+ });
44
+
45
+ /**
46
+ * Sadly this is necessary to handle what happens after the withdraw task in
47
+ * the inquiry part component because the mutation triggers a refresh of the
48
+ * query above in the same runloop instead of the next one. This causes
49
+ * `this.inquiries` to be recomputed which then triggers a rerender of the
50
+ * component and therefore cancels the withdraw task before we can do a
51
+ * transition.
52
+ *
53
+ * TODO: If https://github.com/ember-graphql/ember-apollo-client/pull/421 is
54
+ * merged and released, we can rewrite this into an action that is triggered
55
+ * in the withdraw task of the child component.
56
+ */
57
+ getObservable(response).subscribe(({ data: { allWorkItems } }) => {
58
+ if (allWorkItems.edges.every((edge) => edge.node.status === "CANCELED")) {
59
+ this.router.transitionTo("index");
60
+ }
61
+ });
62
+
63
+ return response;
64
+ }
65
+ }
@@ -25,5 +25,5 @@
25
25
  >{{t "caluma.distribution.edit.send"}}</UkButton>
26
26
  </DocumentValidity>
27
27
  </:default>
28
- <:notfound><Notfound /></:notfound>
28
+ <:notfound><CdNotfound /></:notfound>
29
29
  </CfContent>
@@ -8,9 +8,10 @@ import config from "@projectcaluma/ember-distribution/config";
8
8
  import resumeWorkItemMutation from "@projectcaluma/ember-distribution/gql/mutations/resume-work-item.graphql";
9
9
  import inquiryEditQuery from "@projectcaluma/ember-distribution/gql/queries/inquiry-edit.graphql";
10
10
 
11
- export default class InquiryEditFormComponent extends Component {
11
+ export default class CdInquiryEditFormComponent extends Component {
12
12
  @service notification;
13
13
  @service router;
14
+ @service intl;
14
15
 
15
16
  @config config;
16
17
 
@@ -6,12 +6,12 @@
6
6
  {{#if this.selectedGroups.length}}
7
7
  <div class="uk-flex uk-flex-middle">
8
8
  <div class="uk-width-expand">
9
- <button type="button" class="uk-link uk-text-light">
9
+ <a href="">
10
10
  {{t
11
11
  "caluma.distribution.new.groups"
12
12
  count=this.selectedGroups.length
13
13
  }}
14
- </button>
14
+ </a>
15
15
  <div uk-dropdown class="uk-width-auto">
16
16
  <ul
17
17
  class="uk-list uk-list-bullet uk-margin-remove uk-padding-remove"
@@ -117,5 +117,5 @@
117
117
  </div>
118
118
  {{/if}}
119
119
  {{else}}
120
- <Notfound />
120
+ <CdNotfound />
121
121
  {{/if}}
@@ -1,6 +1,6 @@
1
- import { getOwner } from "@ember/application";
2
1
  import { action } from "@ember/object";
3
2
  import { inject as service } from "@ember/service";
3
+ import { macroCondition, isTesting } from "@embroider/macros";
4
4
  import Component from "@glimmer/component";
5
5
  import { tracked } from "@glimmer/tracking";
6
6
  import { queryManager } from "ember-apollo-client";
@@ -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 inquiryNavigationQuery from "@projectcaluma/ember-distribution/gql/queries/inquiry-navigation.graphql";
14
13
 
15
14
  const toggle = (value, array) => {
16
15
  const set = new Set(array);
@@ -20,12 +19,12 @@ const toggle = (value, array) => {
20
19
  return [...set];
21
20
  };
22
21
 
23
- export default class InquiryNewFormComponent extends Component {
22
+ export default class CdInquiryNewFormComponent extends Component {
24
23
  @service calumaOptions;
25
24
  @service notification;
26
25
  @service intl;
27
26
  @service router;
28
- @service("caluma-distribution-controls") controls;
27
+ @service distribution;
29
28
 
30
29
  @queryManager apollo;
31
30
 
@@ -63,10 +62,10 @@ export default class InquiryNewFormComponent extends Component {
63
62
  *updateSearch(e) {
64
63
  e.preventDefault();
65
64
 
66
- const { environment } =
67
- getOwner(this).resolveRegistration("config:environment");
68
-
69
- if (environment !== "test") {
65
+ /* istanbul ignore next */
66
+ if (macroCondition(isTesting())) {
67
+ // no timeout
68
+ } else {
70
69
  yield timeout(500);
71
70
  }
72
71
 
@@ -82,7 +81,7 @@ export default class InquiryNewFormComponent extends Component {
82
81
  try {
83
82
  // get create inquiry work item to complete
84
83
  const createId = decodeId(
85
- this.controls.workItems.value?.create.edges[0].node.id
84
+ this.distribution.controls.value?.create.edges[0].node.id
86
85
  );
87
86
 
88
87
  // create new inquiries
@@ -96,28 +95,21 @@ export default class InquiryNewFormComponent extends Component {
96
95
  },
97
96
  });
98
97
 
99
- // refetch navigation data
100
- const navigationData = yield this.apollo.query(
98
+ // refetch navigation and controls data
99
+ yield this.distribution.refetch();
100
+
101
+ const lastControlling =
102
+ this.distribution.navigation.value.controlling.edges[0].node;
103
+
104
+ // transition to last added inquiry
105
+ this.router.transitionTo(
106
+ "inquiry.detail.index",
101
107
  {
102
- query: inquiryNavigationQuery,
103
- fetchPolicy: "network-only",
104
- variables: {
105
- caseId: this.args.caseId,
106
- task: this.config.inquiry.task,
107
- currentGroup: String(this.calumaOptions.currentGroupId),
108
- statusQuestion: this.config.inquiry.answer.statusQuestion,
109
- deadlineQuestion: this.config.inquiry.deadlineQuestion,
110
- includeNavigationData: true,
111
- },
108
+ from: lastControlling.controllingGroups[0],
109
+ to: lastControlling.addressedGroups[0],
112
110
  },
113
- "controlling.edges"
111
+ decodeId(lastControlling.id)
114
112
  );
115
-
116
- // transition to last added inquiry
117
- this.router.transitionTo("inquiry", {
118
- from: navigationData[0].node.controllingGroups[0],
119
- to: navigationData[0].node.addressedGroups[0],
120
- });
121
113
  } catch (e) {
122
114
  this.notification.danger(
123
115
  this.intl.t("caluma.distribution.new.error", {
@@ -1,23 +1,28 @@
1
1
  <div class="uk-text-center uk-margin-small-top">
2
2
  {{#if (can "create inquiry of distribution")}}
3
- <IconButton @route="new" @icon="plus" />
3
+ <CdIconButton @route="new" @icon="plus" />
4
4
  {{/if}}
5
5
  {{#if (can "send inquiries of distribution")}}
6
- <IconButton
6
+ <CdIconButton
7
+ @title={{t "caluma.distribution.send"}}
7
8
  @icon="paper-plane-outline"
8
9
  @fromSvgJar={{true}}
9
10
  @gutterTop={{4}}
10
11
  @gutterRight={{6}}
11
12
  @gutterLeft={{4}}
12
13
  @gutterBottom={{4}}
13
- @onClick={{this.noop}}
14
+ @onClick={{perform this.sendInquiries}}
15
+ @loading={{this.sendInquiries.isRunning}}
16
+ data-test-send-pending-inquiries
14
17
  />
15
18
  {{/if}}
16
19
  {{#if (can "complete distribution")}}
17
- <IconButton
20
+ <CdIconButton
18
21
  @icon="lock-closed-outline"
19
22
  @fromSvgJar={{true}}
20
- @onClick={{this.noop}}
23
+ @onClick={{perform this.completeDistribution}}
24
+ @loading={{this.completeDistribution.isRunning}}
25
+ data-test-complete-distribution
21
26
  />
22
27
  {{/if}}
23
28
  </div>
@@ -0,0 +1,95 @@
1
+ import { inject as service } from "@ember/service";
2
+ import Component from "@glimmer/component";
3
+ import { queryManager } from "ember-apollo-client";
4
+ import { dropTask } from "ember-concurrency";
5
+ import { confirm } from "ember-uikit";
6
+ import { gql } from "graphql-tag";
7
+
8
+ import { decodeId } from "@projectcaluma/ember-core/helpers/decode-id";
9
+ import config from "@projectcaluma/ember-distribution/config";
10
+ import completeWorkItemMutation from "@projectcaluma/ember-distribution/gql/mutations/complete-work-item.graphql";
11
+ import incompleteInquiriesQuery from "@projectcaluma/ember-distribution/gql/queries/incomplete-inquiries.graphql";
12
+
13
+ export default class CdNavigationControlsComponent extends Component {
14
+ @service distribution;
15
+ @service intl;
16
+ @service notification;
17
+ @service router;
18
+
19
+ @queryManager apollo;
20
+ @config config;
21
+
22
+ @dropTask
23
+ *completeDistribution() {
24
+ try {
25
+ const incompleteInquiries = yield this.apollo.query(
26
+ {
27
+ query: incompleteInquiriesQuery,
28
+ variables: {
29
+ caseId: this.args.caseId,
30
+ task: this.config.inquiry.task,
31
+ },
32
+ },
33
+ "allWorkItems.totalCount"
34
+ );
35
+
36
+ if (
37
+ incompleteInquiries > 0 &&
38
+ !(yield confirm(
39
+ this.intl.t("caluma.distribution.complete-confirm", {
40
+ count: incompleteInquiries,
41
+ })
42
+ ))
43
+ ) {
44
+ return;
45
+ }
46
+
47
+ const completeDistributionWorkItem =
48
+ this.distribution.controls.value.complete.edges?.[0]?.node.id;
49
+
50
+ yield this.apollo.mutate({
51
+ mutation: completeWorkItemMutation,
52
+ variables: {
53
+ workItem: completeDistributionWorkItem,
54
+ },
55
+ });
56
+
57
+ yield this.distribution.refetch();
58
+ this.router.transitionTo("index");
59
+ } catch (e) {
60
+ this.notification.danger(
61
+ this.intl.t("caluma.distribution.complete-error")
62
+ );
63
+ }
64
+ }
65
+
66
+ @dropTask
67
+ *sendInquiries() {
68
+ if (!(yield confirm(this.intl.t("caluma.distribution.send-confirm")))) {
69
+ return;
70
+ }
71
+
72
+ try {
73
+ const ids = this.distribution.controls.value.send.edges.map((edge) =>
74
+ decodeId(edge.node.id)
75
+ );
76
+
77
+ const mutations = ids.map(
78
+ (id, index) => `
79
+ sendInquiry${index}: resumeWorkItem(input: { id: "${id}" }) {
80
+ workItem {
81
+ id
82
+ status
83
+ }
84
+ }
85
+ `
86
+ );
87
+
88
+ const mutation = gql`mutation SendInquiries {${mutations.join("\n")}}`;
89
+
90
+ yield this.apollo.mutate({ mutation });
91
+ } catch (e) {
92
+ this.notification.danger(this.intl.t("caluma.distribution.send-error"));
93
+ }
94
+ }
95
+ }