@projectcaluma/ember-distribution 1.0.0-beta.10 → 1.0.0-beta.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/addon/components/cd-document-header.hbs +2 -5
  3. package/addon/components/cd-inquiry-answer-form.hbs +1 -1
  4. package/addon/components/cd-inquiry-answer-form.js +5 -1
  5. package/addon/components/cd-inquiry-dialog/inquiry-deadline.hbs +3 -5
  6. package/addon/components/cd-inquiry-dialog/inquiry-divider.hbs +1 -1
  7. package/addon/components/cd-inquiry-dialog/inquiry-part.hbs +11 -3
  8. package/addon/components/cd-inquiry-dialog/inquiry-part.js +3 -0
  9. package/addon/components/cd-inquiry-dialog.hbs +12 -6
  10. package/addon/components/cd-inquiry-dialog.js +1 -0
  11. package/addon/components/cd-inquiry-edit-form.hbs +4 -1
  12. package/addon/components/cd-inquiry-new-form.hbs +32 -30
  13. package/addon/components/cd-inquiry-new-form.js +1 -3
  14. package/addon/components/cd-navigation/controls.hbs +30 -21
  15. package/addon/components/cd-navigation/controls.js +1 -1
  16. package/addon/components/cd-navigation/item.hbs +14 -11
  17. package/addon/components/cd-navigation/section.hbs +4 -4
  18. package/addon/components/cd-navigation/status-indicator.hbs +10 -15
  19. package/addon/components/cd-navigation.hbs +11 -14
  20. package/addon/config.js +9 -6
  21. package/addon/gql/fragments/inquiry.graphql +20 -4
  22. package/addon/gql/mutations/complete-inquiry-work-item.graphql +1 -1
  23. package/addon/gql/queries/inquiry-answer.graphql +3 -12
  24. package/addon/gql/queries/inquiry-dialog.graphql +2 -1
  25. package/addon/utils/inquiry-answer-status.js +34 -0
  26. package/addon/utils/inquiry-deadline.js +4 -4
  27. package/addon/utils/inquiry-status.js +12 -7
  28. package/app/styles/@projectcaluma/ember-distribution.scss +1 -2
  29. package/app/styles/_group-list.scss +7 -0
  30. package/app/utils/inquiry-answer-status.js +1 -0
  31. package/index.js +1 -6
  32. package/package.json +12 -13
  33. package/translations/de.yaml +15 -4
  34. package/translations/en.yaml +15 -4
  35. package/translations/fr.yaml +15 -4
  36. package/addon/components/cd-icon-button.hbs +0 -27
  37. package/addon/components/cd-icon-button.js +0 -22
  38. package/app/components/cd-icon-button.js +0 -1
  39. package/app/styles/_icon-button.scss +0 -13
  40. package/app/styles/_status-indicator.scss +0 -31
package/CHANGELOG.md CHANGED
@@ -1,3 +1,36 @@
1
+ # [@projectcaluma/ember-distribution-v1.0.0-beta.13](https://github.com/projectcaluma/ember-caluma/compare/@projectcaluma/ember-distribution-v1.0.0-beta.12...@projectcaluma/ember-distribution-v1.0.0-beta.13) (2022-06-09)
2
+
3
+
4
+ ### Features
5
+
6
+ * **caluma:** use new filter syntax of caluma ([7a00c03](https://github.com/projectcaluma/ember-caluma/commit/7a00c03a103933d9e48dd88adb7382441a298742))
7
+
8
+
9
+ ### BREAKING CHANGES
10
+
11
+ * **caluma:** `ember-caluma` now requires Caluma version >=
12
+ 8.0.0-beta.6
13
+
14
+ # [@projectcaluma/ember-distribution-v1.0.0-beta.12](https://github.com/projectcaluma/ember-caluma/compare/@projectcaluma/ember-distribution-v1.0.0-beta.11...@projectcaluma/ember-distribution-v1.0.0-beta.12) (2022-06-09)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **distribution:** fix selection of groups with the checkbox ([9f028dc](https://github.com/projectcaluma/ember-caluma/commit/9f028dc6ec16214249f43e519280397131006e7c))
20
+ * **distribution:** refetch inquiry answer after work-item completion ([60cfaca](https://github.com/projectcaluma/ember-caluma/commit/60cfaca04d94a44efc4950eeb1aecee767b4eeb5))
21
+
22
+
23
+ ### Features
24
+
25
+ * **distribution:** add configurable status for unanswered inquiries ([e08247f](https://github.com/projectcaluma/ember-caluma/commit/e08247f6e2b73f859011f4eac7ffff71f101f546))
26
+
27
+ # [@projectcaluma/ember-distribution-v1.0.0-beta.11](https://github.com/projectcaluma/ember-caluma/compare/@projectcaluma/ember-distribution-v1.0.0-beta.10...@projectcaluma/ember-distribution-v1.0.0-beta.11) (2022-05-13)
28
+
29
+
30
+ ### Features
31
+
32
+ * **distribution:** add status for skipped inquiries ([1f93c92](https://github.com/projectcaluma/ember-caluma/commit/1f93c92d76b697954ec54aefa12348c84cd0abf9))
33
+
1
34
  # [@projectcaluma/ember-distribution-v1.0.0-beta.10](https://github.com/projectcaluma/ember-caluma/compare/@projectcaluma/ember-distribution-v1.0.0-beta.9...@projectcaluma/ember-distribution-v1.0.0-beta.10) (2022-05-11)
2
35
 
3
36
 
@@ -1,10 +1,7 @@
1
1
  <p class="uk-text-large uk-margin-remove">
2
2
  {{@name}}
3
- {{#if @isDraft}}
4
- <UkLabel
5
- @label={{t "caluma.distribution.status.draft"}}
6
- class="uk-margin-left"
7
- />
3
+ {{#if @status}}
4
+ <UkLabel @label={{@status}} class="uk-margin-left" />
8
5
  {{/if}}
9
6
  </p>
10
7
 
@@ -8,7 +8,7 @@
8
8
  <div class="uk-position-relative">
9
9
  <CdDocumentHeader
10
10
  @name={{content.document.rootForm.raw.name}}
11
- @isDraft={{eq this.inquiry.status "READY"}}
11
+ @status={{if (eq this.inquiry.status "READY") this.answerStatus}}
12
12
  @modifiedAt={{this.inquiry.childCase.document.modifiedContentAt}}
13
13
  @modifiedBy={{this.inquiry.childCase.document.modifiedContentByUser}}
14
14
  />
@@ -1,6 +1,6 @@
1
1
  import { inject as service } from "@ember/service";
2
2
  import Component from "@glimmer/component";
3
- import { queryManager } from "ember-apollo-client";
3
+ import { queryManager, getObservable } from "ember-apollo-client";
4
4
  import { dropTask } from "ember-concurrency";
5
5
  import { trackedTask } from "ember-resources/util/ember-concurrency";
6
6
 
@@ -8,6 +8,7 @@ import { decodeId } from "@projectcaluma/ember-core/helpers/decode-id";
8
8
  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
+ import inquiryAnswerStatus from "@projectcaluma/ember-distribution/utils/inquiry-answer-status";
11
12
 
12
13
  export default class CdInquiryAnswerFormComponent extends Component {
13
14
  @service intl;
@@ -19,6 +20,8 @@ export default class CdInquiryAnswerFormComponent extends Component {
19
20
 
20
21
  @queryManager apollo;
21
22
 
23
+ @inquiryAnswerStatus({ inquiryProperty: "inquiry" }) answerStatus;
24
+
22
25
  _inquiry = trackedTask(this, this.fetchInquiryAnswer, () => [
23
26
  this.args.inquiry,
24
27
  ]);
@@ -79,6 +82,7 @@ export default class CdInquiryAnswerFormComponent extends Component {
79
82
  },
80
83
  });
81
84
 
85
+ yield getObservable(this._inquiry.value)?.refetch();
82
86
  yield this.router.transitionTo("inquiry.index");
83
87
  } catch (error) {
84
88
  this.notification.danger(
@@ -14,12 +14,10 @@
14
14
  uk-flex-inline uk-flex-middle"
15
15
  ...attributes
16
16
  >
17
- {{svg-jar
18
- (if this.isWithdrawn "ban-outline" "alarm-outline")
19
- height=26
20
- width=26
17
+ <UkIcon
18
+ @icon={{if this.isWithdrawn "ban" "clock"}}
21
19
  class="uk-margin-small-right"
22
- }}
20
+ />
23
21
  {{#if this.isWithdrawn}}
24
22
  {{t "caluma.distribution.withdraw.status"}}
25
23
  {{else}}
@@ -3,6 +3,6 @@
3
3
  {{if this.config.ui.small 'inquiry-divider--small' 'uk-margin'}}"
4
4
  >
5
5
  <div class="inquiry-divider__icon uk-flex uk-flex-center uk-flex-middle">
6
- {{svg-jar this.status.icon title=this.status.label}}
6
+ <UkIcon @icon={{this.status.icon}} title={{this.status.label}} />
7
7
  </div>
8
8
  </div>
@@ -1,10 +1,18 @@
1
1
  <div class="uk-margin-remove-last-child">
2
- <p class="uk-flex uk-flex-middle uk-text-large uk-margin-remove">
2
+ <p
3
+ class="uk-flex uk-flex-middle uk-text-large uk-margin-remove"
4
+ data-test-title
5
+ >
3
6
  {{#if (eq @type "request")}}
4
- {{svg-jar "arrow-redo-outline" height=24 class="uk-margin-small-right"}}
7
+ <UkIcon @icon="forward" class="uk-margin-small-right" />
5
8
  {{group-name @inquiry.controllingGroups}}
9
+ {{#if
10
+ (and (can "answer inquiry" @inquiry) (not @disabled) this.answerStatus)
11
+ }}
12
+ <UkLabel @label={{this.answerStatus}} class="uk-margin-left" />
13
+ {{/if}}
6
14
  {{else if (eq @type "answer")}}
7
- {{svg-jar "arrow-undo-outline" height=24 class="uk-margin-small-right"}}
15
+ <UkIcon @icon="reply" class="uk-margin-small-right" />
8
16
  {{group-name @inquiry.addressedGroups}}
9
17
  {{/if}}
10
18
  </p>
@@ -8,6 +8,7 @@ import { confirm } from "ember-uikit";
8
8
  import { decodeId } from "@projectcaluma/ember-core/helpers/decode-id";
9
9
  import config from "@projectcaluma/ember-distribution/config";
10
10
  import withdrawInquiryMutation from "@projectcaluma/ember-distribution/gql/mutations/withdraw-inquiry.graphql";
11
+ import inquiryAnswerStatus from "@projectcaluma/ember-distribution/utils/inquiry-answer-status";
11
12
 
12
13
  export default class CdInquiryDialogInquiryPartComponent extends Component {
13
14
  @service notification;
@@ -18,6 +19,8 @@ export default class CdInquiryDialogInquiryPartComponent extends Component {
18
19
 
19
20
  @config config;
20
21
 
22
+ @inquiryAnswerStatus answerStatus;
23
+
21
24
  get date() {
22
25
  const key = this.args.type === "request" ? "createdAt" : "closedAt";
23
26
 
@@ -5,13 +5,19 @@
5
5
  (and (can "create inquiry of distribution") this.currentGroupIsCreator)
6
6
  }}
7
7
  <div class="uk-text-center uk-margin">
8
- <CdIconButton
9
- @title={{t "caluma.distribution.new.title"}}
10
- @icon="plus"
11
- @loading={{this.createInquiry.isRunning}}
12
- @onClick={{perform this.createInquiry}}
8
+ <button
9
+ type="button"
10
+ class="uk-icon-button"
11
+ title={{t "caluma.distribution.new.title"}}
13
12
  data-test-new-inquiry
14
- />
13
+ {{on "click" (perform this.createInquiry)}}
14
+ >
15
+ {{#if this.createInquiry.isRunning}}
16
+ <UkSpinner @ratio={{0.6}} />
17
+ {{else}}
18
+ <UkIcon @icon="plus" />
19
+ {{/if}}
20
+ </button>
15
21
  </div>
16
22
  {{/if}}
17
23
  <section>
@@ -47,6 +47,7 @@ export default class CdInquiryDialogComponent extends Component {
47
47
  deadlineQuestion: this.config.inquiry.deadlineQuestion,
48
48
  statusQuestion: this.config.inquiry.answer.statusQuestion,
49
49
  answerInfoQuestions: this.config.inquiry.answer.infoQuestions,
50
+ buttonTasks: Object.keys(this.config.inquiry.answer.buttons),
50
51
  includeNavigationData: true,
51
52
  },
52
53
  });
@@ -6,7 +6,10 @@
6
6
  <:default as |content|>
7
7
  <CdDocumentHeader
8
8
  @name={{content.document.rootForm.raw.name}}
9
- @isDraft={{eq this.inquiry.status "SUSPENDED"}}
9
+ @status={{if
10
+ (eq this.inquiry.status "SUSPENDED")
11
+ (t "caluma.distribution.status.draft")
12
+ }}
10
13
  @modifiedAt={{this.inquiry.document.modifiedContentAt}}
11
14
  @modifiedBy={{this.inquiry.document.modifiedContentByUser}}
12
15
  />
@@ -80,36 +80,38 @@
80
80
  <UkSpinner @ratio={{2}} />
81
81
  </div>
82
82
  {{else if this.groups.value.length}}
83
- <ul class="uk-list uk-list-striped">
84
- {{#each this.groups.value as |group|}}
85
- {{! template-lint-disable require-presentational-children }}
86
- <li
87
- role="checkbox"
88
- class="uk-flex uk-flex-between uk-flex-middle"
89
- data-test-group={{group.identifier}}
90
- {{on "click" (fn this.updateSelectedGroups group.identifier)}}
91
- >
92
- {{! template-lint-disable no-nested-interactive }}
93
- <label for="group-{{group.identifier}}">
94
- <input
95
- type="checkbox"
96
- class="uk-checkbox uk-margin-small-right"
97
- checked={{includes group.identifier this.selectedGroups}}
98
- id="group-{{group.identifier}}"
99
- />
100
- {{group-name group.identifier}}
101
- </label>
102
- {{#if group.config.icon}}
103
- {{svg-jar
104
- group.config.icon
105
- width="20"
106
- height="20"
107
- class=(concat "uk-text-" group.config.iconColor)
108
- }}
109
- {{/if}}
110
- </li>
111
- {{/each}}
112
- </ul>
83
+ <table
84
+ class="uk-table uk-table-striped uk-table-hover uk-table-small uk-table-middle group-list"
85
+ >
86
+ <tbody>
87
+ {{#each this.groups.value as |group|}}
88
+ {{! template-lint-disable require-presentational-children }}
89
+ <tr
90
+ role="checkbox"
91
+ data-test-group={{group.identifier}}
92
+ {{on "click" (fn this.updateSelectedGroups group.identifier)}}
93
+ >
94
+ <td class="uk-padding-remove-right">
95
+ {{! template-lint-disable require-input-label no-nested-interactive }}
96
+ <input
97
+ type="checkbox"
98
+ class="uk-checkbox"
99
+ checked={{includes group.identifier this.selectedGroups}}
100
+ />
101
+ </td>
102
+ <td class="uk-width-expand">{{group-name group.identifier}}</td>
103
+ <td class="uk-text-right">
104
+ {{#if group.config.icon}}
105
+ <UkIcon
106
+ @icon={{group.config.icon}}
107
+ class="uk-display-block uk-text-{{group.config.iconColor}}"
108
+ />
109
+ {{/if}}
110
+ </td>
111
+ </tr>
112
+ {{/each}}
113
+ </tbody>
114
+ </table>
113
115
  {{else}}
114
116
  <div class="uk-text-center">
115
117
  <UkIcon @icon="search" @ratio={{10}} class="uk-margin-top" />
@@ -44,9 +44,7 @@ export default class CdInquiryNewFormComponent extends Component {
44
44
  }
45
45
 
46
46
  @action
47
- updateSelectedGroups(identifier, e) {
48
- e.preventDefault();
49
-
47
+ updateSelectedGroups(identifier) {
50
48
  this.selectedGroups = toggle(identifier, this.selectedGroups);
51
49
  }
52
50
 
@@ -1,32 +1,41 @@
1
1
  <div class="uk-text-center uk-margin-small-top">
2
2
  {{#if (can "create inquiry of distribution")}}
3
- <CdIconButton
4
- @title={{t "caluma.distribution.new.title"}}
5
- @icon="plus"
3
+ <LinkTo
6
4
  @route="new"
7
- />
5
+ class="uk-icon-button"
6
+ title={{t "caluma.distribution.new.title"}}
7
+ >
8
+ <UkIcon @icon="plus" />
9
+ </LinkTo>
8
10
  {{/if}}
9
11
  {{#if (can "send inquiries of distribution")}}
10
- <CdIconButton
11
- @title={{t "caluma.distribution.send"}}
12
- @icon="paper-plane-outline"
13
- @fromSvgJar={{true}}
14
- @gutterTop={{4}}
15
- @gutterRight={{6}}
16
- @gutterLeft={{4}}
17
- @gutterBottom={{4}}
18
- @onClick={{perform this.sendInquiries}}
19
- @loading={{this.sendInquiries.isRunning}}
12
+ <button
13
+ type="button"
14
+ class="uk-icon-button"
15
+ title={{t "caluma.distribution.send"}}
20
16
  data-test-send-pending-inquiries
21
- />
17
+ {{on "click" (perform this.sendInquiries)}}
18
+ >
19
+ {{#if this.sendInquiries.isRunning}}
20
+ <UkSpinner @ratio={{0.6}} />
21
+ {{else}}
22
+ <UkIcon @icon="comment" />
23
+ {{/if}}
24
+ </button>
22
25
  {{/if}}
23
26
  {{#if (can "complete distribution")}}
24
- <CdIconButton
25
- @icon="lock-closed-outline"
26
- @fromSvgJar={{true}}
27
- @onClick={{perform this.completeDistribution}}
28
- @loading={{this.completeDistribution.isRunning}}
27
+ <button
28
+ type="button"
29
+ class="uk-icon-button"
30
+ title={{t "caluma.distribution.complete"}}
29
31
  data-test-complete-distribution
30
- />
32
+ {{on "click" (perform this.completeDistribution)}}
33
+ >
34
+ {{#if this.completeDistribution.isRunning}}
35
+ <UkSpinner @ratio={{0.6}} />
36
+ {{else}}
37
+ <UkIcon @icon="lock" />
38
+ {{/if}}
39
+ </button>
31
40
  {{/if}}
32
41
  </div>
@@ -26,7 +26,7 @@ export default class CdNavigationControlsComponent extends Component {
26
26
  {
27
27
  query: incompleteInquiriesQuery,
28
28
  variables: {
29
- caseId: this.args.caseId,
29
+ caseId: this.distribution.caseId,
30
30
  task: this.config.inquiry.task,
31
31
  },
32
32
  },
@@ -1,15 +1,18 @@
1
- <li class={{if this.isActive "uk-active"}}>
1
+ <li class="uk-width-auto {{if this.isActive 'uk-active'}}">
2
2
  <LinkTo @route="inquiry" @model={{this.model}}>
3
- <div class="uk-flex uk-flex-middle uk-width-1-1">
4
- <div class="uk-width-expand uk-text-truncate">
5
- {{#if (eq @type "addressed")}}
6
- {{@inquiry.controllingGroupName}}
7
- {{else}}
8
- {{@inquiry.addressedGroupName}}
9
- {{/if}}
10
- </div>
3
+ {{#let
4
+ (if
5
+ (eq @type "addressed")
6
+ @inquiry.controllingGroupName
7
+ @inquiry.addressedGroupName
8
+ )
9
+ as |name|
10
+ }}
11
+ <span class="uk-width-expand uk-text-truncate" title={{name}}>
12
+ {{name}}
13
+ </span>
14
+ {{/let}}
11
15
 
12
- <CdNavigation::StatusIndicator @inquiry={{@inquiry}} @type={{@type}} />
13
- </div>
16
+ <CdNavigation::StatusIndicator @inquiry={{@inquiry}} @type={{@type}} />
14
17
  </LinkTo>
15
18
  </li>
@@ -1,5 +1,5 @@
1
- <li class="uk-margin-small-bottom">
2
- <a href="" class="uk-margin-small-bottom" {{on "click" this.toggle}}>
1
+ <li class="uk-margin-small-bottom uk-width-auto">
2
+ <a href="" {{on "click" this.toggle}}>
3
3
  <span class="uk-width-expand">
4
4
  {{t (concat "caluma.distribution.types." @type)}}
5
5
  </span>
@@ -12,7 +12,7 @@
12
12
 
13
13
  {{#if this.expanded}}
14
14
  {{#if @inquiries.length}}
15
- <ul class="uk-tab uk-tab-left uk-margin-left">
15
+ <ul class="uk-tab uk-tab-left uk-margin-left uk-width-auto">
16
16
  {{#each this.inquiries as |inquiry|}}
17
17
  <CdNavigation::Item @inquiry={{inquiry}} @type={{@type}} />
18
18
  {{/each}}
@@ -20,7 +20,7 @@
20
20
  {{/if}}
21
21
 
22
22
  {{#if (eq @type "controlling")}}
23
- <CdNavigation::Controls @caseId={{@caseId}} />
23
+ <CdNavigation::Controls />
24
24
  {{/if}}
25
25
  {{/if}}
26
26
  </li>
@@ -1,18 +1,13 @@
1
1
  {{#if this.showDeadlineIndicator}}
2
- <div
3
- class="deadline-indicator uk-flex uk-flex-middle uk-flex-center uk-margin-small-left uk-text-{{this.deadline.color}}"
4
- >
5
- {{svg-jar
6
- "notifications-outline"
7
- height=16
8
- width=16
9
- title=(format-date this.deadline.value)
10
- }}
11
- </div>
2
+ <UkIcon
3
+ @icon="clock"
4
+ class="uk-margin-small-right uk-text-{{this.deadline.color}}"
5
+ title={{format-date this.deadline.value}}
6
+ />
12
7
  {{/if}}
13
8
 
14
- <div
15
- class="status-indicator uk-flex uk-flex-middle uk-flex-center uk-margin-small-left uk-text-{{this.status.color}}"
16
- >
17
- {{svg-jar this.status.icon title=this.status.label}}
18
- </div>
9
+ <UkIcon
10
+ @icon={{this.status.icon}}
11
+ class="uk-text-{{this.status.color}}"
12
+ title={{this.status.label}}
13
+ />
@@ -1,14 +1,11 @@
1
- <aside>
2
- <ul class="uk-tab uk-tab-left uk-margin-remove-bottom">
3
- <CdNavigation::Section
4
- @type="controlling"
5
- @inquiries={{this.inquiries.controlling}}
6
- @caseId={{@caseId}}
7
- />
8
- <CdNavigation::Section
9
- @type="addressed"
10
- @inquiries={{this.inquiries.addressed}}
11
- />
12
- <CdNavigation::Section @type="more" @inquiries={{this.inquiries.more}} />
13
- </ul>
14
- </aside>
1
+ <ul class="uk-tab uk-tab-left uk-margin-remove-bottom uk-width-auto">
2
+ <CdNavigation::Section
3
+ @type="controlling"
4
+ @inquiries={{this.inquiries.controlling}}
5
+ />
6
+ <CdNavigation::Section
7
+ @type="addressed"
8
+ @inquiries={{this.inquiries.addressed}}
9
+ />
10
+ <CdNavigation::Section @type="more" @inquiries={{this.inquiries.more}} />
11
+ </ul>
package/addon/config.js CHANGED
@@ -4,6 +4,7 @@ import { cached } from "tracked-toolbox";
4
4
 
5
5
  export const INQUIRY_STATUS = {
6
6
  DRAFT: "draft",
7
+ SKIPPED: "skipped",
7
8
  SENT: "sent",
8
9
  POSITIVE: "positive",
9
10
  NEGATIVE: "negative",
@@ -37,20 +38,22 @@ export default function config(target, property) {
37
38
  buttons: {
38
39
  "compose-inquiry-answer": {
39
40
  color: "primary",
40
- label: "caluma.distribution.answer.release-for-review",
41
+ label: "caluma.distribution.answer.buttons.compose.label",
42
+ status: "caluma.distribution.answer.buttons.compose.status",
41
43
  },
42
44
  "confirm-inquiry-answer": {
43
45
  color: "primary",
44
- label: "caluma.distribution.answer.confirm",
46
+ label: "caluma.distribution.answer.buttons.confirm.label",
47
+ status: "caluma.distribution.answer.buttons.confirm.status",
45
48
  },
46
49
  "revise-inquiry-answer": {
47
50
  color: "default",
48
- label: "caluma.distribution.answer.revise",
51
+ label: "caluma.distribution.answer.buttons.revise.label",
49
52
  },
50
53
  "adjust-inquiry-answer": {
51
54
  color: "primary",
52
- label:
53
- "caluma.distribution.answer.release-adjustment-for-review",
55
+ label: "caluma.distribution.answer.buttons.adjust.label",
56
+ status: "caluma.distribution.answer.buttons.adjust.status",
54
57
  },
55
58
  },
56
59
  },
@@ -60,7 +63,7 @@ export default function config(target, property) {
60
63
  types: {
61
64
  suggestions: {
62
65
  label: "caluma.distribution.new.suggestions",
63
- icon: "bulb-outline",
66
+ icon: "star",
64
67
  iconColor: "warning",
65
68
  },
66
69
  },
@@ -1,6 +1,21 @@
1
+ fragment InquiryAnswerButtons on Case {
2
+ workItems(filter: [{ tasks: $buttonTasks }, { status: READY }]) {
3
+ edges {
4
+ node {
5
+ id
6
+ status
7
+ task {
8
+ id
9
+ slug
10
+ }
11
+ }
12
+ }
13
+ }
14
+ }
15
+
1
16
  fragment InquiryDeadlineDocument on Document {
2
17
  id
3
- deadline: answers(question: $deadlineQuestion) {
18
+ deadline: answers(filter: [{ question: $deadlineQuestion }]) {
4
19
  edges {
5
20
  node {
6
21
  id
@@ -14,7 +29,7 @@ fragment InquiryDeadlineDocument on Document {
14
29
 
15
30
  fragment InquiryStatusDocument on Document {
16
31
  id
17
- status: answers(question: $statusQuestion) {
32
+ status: answers(filter: [{ question: $statusQuestion }]) {
18
33
  edges {
19
34
  node {
20
35
  id
@@ -33,7 +48,7 @@ fragment InquiryStatusDocument on Document {
33
48
  fragment InquiryRequest on Document {
34
49
  id
35
50
  ...InquiryDeadlineDocument
36
- info: answers(question: $infoQuestion) {
51
+ info: answers(filter: [{ question: $infoQuestion }]) {
37
52
  edges {
38
53
  node {
39
54
  id
@@ -61,9 +76,10 @@ fragment InquiryDialog on WorkItem {
61
76
  }
62
77
  childCase {
63
78
  id
79
+ ...InquiryAnswerButtons
64
80
  document {
65
81
  ...InquiryStatusDocument
66
- info: answers(questions: $answerInfoQuestions) {
82
+ info: answers(filter: [{ questions: $answerInfoQuestions }]) {
67
83
  edges {
68
84
  node {
69
85
  id
@@ -15,7 +15,7 @@ mutation CompleteInquiryWorkItem(
15
15
  id
16
16
  ...InquiryStatusDocument
17
17
  }
18
- workItems(tasks: $buttonTasks, status: READY) {
18
+ workItems(filter: [{ tasks: $buttonTasks }, { status: READY }]) {
19
19
  edges {
20
20
  node {
21
21
  id
@@ -1,4 +1,4 @@
1
- #import InquiryDeadlineDocument, InquiryRequest from '../fragments/inquiry.graphql'
1
+ #import InquiryAnswerButtons, InquiryDeadlineDocument, InquiryRequest from '../fragments/inquiry.graphql'
2
2
 
3
3
  query InquiryAnswer(
4
4
  $inquiry: ID!
@@ -14,6 +14,7 @@ query InquiryAnswer(
14
14
  addressedGroups
15
15
  controllingGroups
16
16
  createdAt
17
+ closedAt
17
18
  task {
18
19
  id
19
20
  slug
@@ -29,17 +30,7 @@ query InquiryAnswer(
29
30
  modifiedContentAt
30
31
  modifiedContentByUser
31
32
  }
32
- workItems(tasks: $buttonTasks, status: READY) {
33
- edges {
34
- node {
35
- id
36
- task {
37
- id
38
- slug
39
- }
40
- }
41
- }
42
- }
33
+ ...InquiryAnswerButtons
43
34
  }
44
35
  }
45
36
  }
@@ -1,7 +1,8 @@
1
- #import InquiryDialog, InquiryDeadlineDocument, InquiryStatusDocument, InquiryRequest from '../fragments/inquiry.graphql'
1
+ #import InquiryAnswerButtons, InquiryDialog, InquiryDeadlineDocument, InquiryStatusDocument, InquiryRequest from '../fragments/inquiry.graphql'
2
2
 
3
3
  query InquiryDialog(
4
4
  $task: ID!
5
+ $buttonTasks: [String]!
5
6
  $statusQuestion: ID!
6
7
  $deadlineQuestion: ID!
7
8
  $infoQuestion: ID!
@@ -0,0 +1,34 @@
1
+ import { assert } from "@ember/debug";
2
+ import { get } from "@ember/object";
3
+
4
+ import { createDecorator } from "@projectcaluma/ember-distribution/-private/decorator";
5
+
6
+ function decorator(
7
+ target,
8
+ key,
9
+ desc,
10
+ { inquiryProperty = "args.inquiry" } = {}
11
+ ) {
12
+ assert(
13
+ `The @projectcaluma/ember-distribution config must be injected in order to use @inquiryAnswerStatus: \`@config config\``,
14
+ Object.prototype.hasOwnProperty.call(target, "config")
15
+ );
16
+
17
+ return {
18
+ get() {
19
+ const inquiry = get(this, inquiryProperty);
20
+ const readyWorkItems =
21
+ inquiry.childCase?.workItems.edges
22
+ .filter((edge) => edge.node.status === "READY")
23
+ .map((edge) => edge.node.task.slug) ?? [];
24
+
25
+ const buttonConfig = Object.entries(
26
+ this.config.inquiry.answer.buttons
27
+ ).find(([task]) => readyWorkItems.includes(task))?.[1];
28
+
29
+ return buttonConfig?.status ? this.intl.t(buttonConfig.status) : null;
30
+ },
31
+ };
32
+ }
33
+
34
+ export default createDecorator(decorator);
@@ -19,18 +19,18 @@ function decorator(
19
19
  get() {
20
20
  const inquiry = get(this, inquiryProperty);
21
21
  const value = inquiry.document?.deadline.edges[0]?.node.value;
22
- const isAnswered = inquiry.status === "COMPLETED";
22
+ const isDone = ["COMPLETED", "SKIPPED"].includes(inquiry.status);
23
23
 
24
24
  const { days: diff } = DateTime.fromISO(value).diffNow("days").toObject();
25
25
 
26
- const isOverdue = !isAnswered && diff <= 0;
27
- const isWarning = !isAnswered && diff <= this.config.warningPeriod;
26
+ const isOverdue = !isDone && diff <= 0;
27
+ const isWarning = !isDone && diff <= this.config.warningPeriod;
28
28
 
29
29
  return {
30
30
  value,
31
31
  isOverdue,
32
32
  isWarning,
33
- color: isAnswered
33
+ color: isDone
34
34
  ? "muted"
35
35
  : isOverdue
36
36
  ? "danger"
@@ -5,15 +5,17 @@ import { createDecorator } from "@projectcaluma/ember-distribution/-private/deco
5
5
  import { INQUIRY_STATUS } from "@projectcaluma/ember-distribution/config";
6
6
 
7
7
  export const ICON_MAP = {
8
- [INQUIRY_STATUS.DRAFT]: "pencil-outline",
9
- [INQUIRY_STATUS.SENT]: "paper-plane-outline",
10
- [INQUIRY_STATUS.POSITIVE]: "checkmark-outline",
11
- [INQUIRY_STATUS.NEGATIVE]: "close-outline",
12
- [INQUIRY_STATUS.NEEDS_INTERACTION]: "repeat-outline",
8
+ [INQUIRY_STATUS.DRAFT]: "commenting",
9
+ [INQUIRY_STATUS.SKIPPED]: "lock",
10
+ [INQUIRY_STATUS.SENT]: "comment",
11
+ [INQUIRY_STATUS.POSITIVE]: "check",
12
+ [INQUIRY_STATUS.NEGATIVE]: "close",
13
+ [INQUIRY_STATUS.NEEDS_INTERACTION]: "refresh",
13
14
  };
14
15
 
15
16
  export const COLOR_MAP = {
16
17
  [INQUIRY_STATUS.DRAFT]: "muted",
18
+ [INQUIRY_STATUS.SKIPPED]: "muted",
17
19
  [INQUIRY_STATUS.SENT]: "emphasis",
18
20
  [INQUIRY_STATUS.POSITIVE]: "success",
19
21
  [INQUIRY_STATUS.NEGATIVE]: "danger",
@@ -44,9 +46,12 @@ function decorator(
44
46
  ? inquiry.status === "READY"
45
47
  : inquiry.status === "SUSPENDED";
46
48
  const isSent = !isAddressed && inquiry.status === "READY";
49
+ const isSkipped = inquiry.status === "SKIPPED";
47
50
 
48
51
  const answer = inquiry.childCase?.document.status.edges[0]?.node;
49
- const slug = isDraft
52
+ const slug = isSkipped
53
+ ? INQUIRY_STATUS.SKIPPED
54
+ : isDraft
50
55
  ? INQUIRY_STATUS.DRAFT
51
56
  : isSent
52
57
  ? INQUIRY_STATUS.SENT
@@ -55,7 +60,7 @@ function decorator(
55
60
  return {
56
61
  slug,
57
62
  label:
58
- !isDraft && !isSent
63
+ !isSkipped && !isDraft && !isSent
59
64
  ? answer?.selectedOption.label
60
65
  : this.intl.t(`caluma.distribution.status.${slug}`),
61
66
  color: COLOR_MAP[slug],
@@ -1,5 +1,4 @@
1
1
  @import "../answer-form";
2
- @import "../icon-button";
2
+ @import "../group-list";
3
3
  @import "../inquiry-divider";
4
- @import "../status-indicator";
5
4
  @import "../truncated";
@@ -0,0 +1,7 @@
1
+ .group-list tr {
2
+ cursor: pointer;
3
+
4
+ > td:last-of-type svg {
5
+ min-width: 20px;
6
+ }
7
+ }
@@ -0,0 +1 @@
1
+ export { default } from "@projectcaluma/ember-distribution/utils/inquiry-answer-status";
package/index.js CHANGED
@@ -5,11 +5,6 @@ const { buildEngine } = require("ember-engines/lib/engine-addon");
5
5
 
6
6
  const name = require("./package").name;
7
7
 
8
- const ioniconAssets = [
9
- ...require.resolve("ionicons").split("/").slice(0, -1),
10
- "svg",
11
- ].join("/");
12
-
13
8
  const publicAssets = [
14
9
  ...require.resolve(name).split("/").slice(0, -1),
15
10
  "public",
@@ -19,5 +14,5 @@ const publicAssets = [
19
14
  module.exports = buildEngine({
20
15
  name,
21
16
  lazyLoading: { enabled: false },
22
- svgJar: { sourceDirs: [ioniconAssets, publicAssets] },
17
+ svgJar: { sourceDirs: [publicAssets] },
23
18
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectcaluma/ember-distribution",
3
- "version": "1.0.0-beta.10",
3
+ "version": "1.0.0-beta.13",
4
4
  "description": "Ember engine for the Caluma distribution module.",
5
5
  "keywords": [
6
6
  "ember-addon",
@@ -19,14 +19,14 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "@ember/string": "^3.0.0",
22
- "@embroider/macros": "^1.6.0",
22
+ "@embroider/macros": "^1.7.1",
23
23
  "@glimmer/component": "^1.1.2",
24
24
  "@glimmer/tracking": "^1.1.2",
25
25
  "@projectcaluma/ember-core": "^11.0.0-beta.7",
26
- "@projectcaluma/ember-form": "^11.0.0-beta.19",
26
+ "@projectcaluma/ember-form": "^11.0.0-beta.21",
27
27
  "@projectcaluma/ember-workflow": "^11.0.0-beta.7",
28
28
  "ember-apollo-client": "^4.0.2",
29
- "ember-auto-import": "^2.4.1",
29
+ "ember-auto-import": "^2.4.2",
30
30
  "ember-can": "^4.2.0",
31
31
  "ember-cli-babel": "^7.26.11",
32
32
  "ember-cli-htmlbars": "^6.0.1",
@@ -35,23 +35,22 @@
35
35
  "ember-fetch": "^8.1.1",
36
36
  "ember-intl": "^5.7.2",
37
37
  "ember-pikaday": "^4.0.0",
38
- "ember-resources": "^4.7.1",
38
+ "ember-resources": "^4.8.2",
39
39
  "ember-svg-jar": "^2.3.4",
40
40
  "ember-test-selectors": "^6.0.0",
41
41
  "ember-uikit": "^5.1.3",
42
42
  "graphql": "^15.8.0",
43
43
  "graphql-tag": "^2.12.6",
44
- "ionicons": "^6.0.1",
45
44
  "lodash.merge": "^4.6.2",
46
45
  "luxon": "^2.4.0",
47
46
  "tracked-toolbox": "^1.2.3"
48
47
  },
49
48
  "devDependencies": {
50
49
  "@ember/optional-features": "2.0.0",
51
- "@ember/test-helpers": "2.7.0",
52
- "@embroider/test-setup": "1.6.0",
53
- "@faker-js/faker": "6.3.1",
54
- "@projectcaluma/ember-testing": "11.0.0-beta.7",
50
+ "@ember/test-helpers": "2.8.1",
51
+ "@embroider/test-setup": "1.7.1",
52
+ "@faker-js/faker": "7.2.0",
53
+ "@projectcaluma/ember-testing": "11.0.0-beta.9",
55
54
  "broccoli-asset-rev": "3.0.0",
56
55
  "ember-cli": "3.28.5",
57
56
  "ember-cli-code-coverage": "1.0.3",
@@ -72,12 +71,12 @@
72
71
  "ember-source-channel-url": "3.0.0",
73
72
  "ember-try": "2.0.0",
74
73
  "loader.js": "4.7.0",
75
- "miragejs": "0.1.43",
74
+ "miragejs": "0.1.45",
76
75
  "npm-run-all": "4.1.5",
77
76
  "qunit": "2.19.1",
78
77
  "qunit-dom": "2.0.0",
79
- "sass": "1.51.0",
80
- "webpack": "5.72.0"
78
+ "sass": "1.52.3",
79
+ "webpack": "5.73.0"
81
80
  },
82
81
  "engines": {
83
82
  "node": "12.* || 14.* || >= 16"
@@ -3,6 +3,7 @@ caluma:
3
3
  empty: "Es wurden noch keine Anfragen erstellt."
4
4
  start: "Starten"
5
5
  send: "Offene Anfragen versenden"
6
+ complete: "Zirkulation abschliessen"
6
7
  send-confirm: "Wollen Sie wirklich alle offenen Anfragen versenden?"
7
8
  complete-confirm:
8
9
  "Es gibt noch <b>{count} offene {count, plural, =1 {Anfrage} other {Anfragen}}</b>
@@ -28,14 +29,23 @@ caluma:
28
29
 
29
30
  answer:
30
31
  link: "Beantworten"
31
- release-for-review: "Zur Kontrolle freigeben"
32
- release-adjustment-for-review: "Anpassung zur Kontrolle freigeben"
33
- confirm: "Bestätigen"
34
- revise: "Überarbeiten"
35
32
 
36
33
  complete-error: "Fehler beim Abschliessen der Aufgabe"
37
34
  complete-not-allowed: "Sie sind nicht berechtigt diese Antwort zu versenden."
38
35
 
36
+ buttons:
37
+ compose:
38
+ label: "Zur Kontrolle freigeben"
39
+ status: "In Bearbeitung"
40
+ adjust:
41
+ label: "Anpassung zur Kontrolle freigeben"
42
+ status: "In Überarbeitung"
43
+ confirm:
44
+ label: "Bestätigen"
45
+ status: "In Prüfung"
46
+ revise:
47
+ label: "Überarbeiten"
48
+
39
49
  new:
40
50
  title: "Neue Anfrage"
41
51
  search: "Suchen..."
@@ -54,6 +64,7 @@ caluma:
54
64
 
55
65
  status:
56
66
  draft: "Entwurf"
67
+ skipped: "Vorzeitig beendet"
57
68
  sent: "Versendet"
58
69
  positive: "Positiv"
59
70
  negative: "Negativ"
@@ -3,6 +3,7 @@ caluma:
3
3
  empty: "No inquiries have been created yet."
4
4
  start: "Start"
5
5
  send: "Send pending inquiries"
6
+ complete: "Complete circulation"
6
7
  send-confirm: "Do you really want to send all pending inquiries?"
7
8
  complete-confirm:
8
9
  "There {count, plural, =1 {is} other {are}} <b>{count} pending
@@ -29,14 +30,23 @@ caluma:
29
30
 
30
31
  answer:
31
32
  link: "Answer"
32
- release-for-review: "Release for review"
33
- release-adjustment-for-review: "Release adjustment for review"
34
- confirm: "Confirm"
35
- revise: "Revise"
36
33
 
37
34
  complete-error: "Error while completing the work item"
38
35
  complete-not-allowed: "You are not allowed to send this inquiry answer."
39
36
 
37
+ buttons:
38
+ compose:
39
+ label: "Release for review"
40
+ status: "In progress"
41
+ adjust:
42
+ label: "Release adjustment for review"
43
+ status: "In revision"
44
+ confirm:
45
+ label: "Confirm"
46
+ status: "In review"
47
+ revise:
48
+ label: "Revise"
49
+
40
50
  new:
41
51
  title: "New inquiry"
42
52
  search: "Search..."
@@ -55,6 +65,7 @@ caluma:
55
65
 
56
66
  status:
57
67
  draft: "Draft"
68
+ skipped: "Aborted"
58
69
  sent: "Sent"
59
70
  positive: "Positive"
60
71
  negative: "Negative"
@@ -3,6 +3,7 @@ caluma:
3
3
  empty: "Aucune demande n'a encore été créée."
4
4
  start: "Lancer"
5
5
  send: "Envoyer les demandes ouvertes"
6
+ complete: "Terminer la circulation"
6
7
  send-confirm: "Voulez-vous vraiment envoyer toutes les demandes ouvertes ?"
7
8
  complete-confirm:
8
9
  "Il y a <b>{count} {count, plural, =1 {demande} other {demandes}} en
@@ -28,14 +29,23 @@ caluma:
28
29
 
29
30
  answer:
30
31
  link: "Répondre"
31
- release-for-review: "Valider pour vérification"
32
- release-adjustment-for-review: "Valider la révision pour vérification"
33
- confirm: "Confirmer"
34
- revise: "Réviser"
35
32
 
36
33
  complete-error: "Erreur lors de la clôture de la tâche"
37
34
  complete-not-allowed: "Vous n'êtes pas autorisé à envoyer cette réponse."
38
35
 
36
+ buttons:
37
+ compose:
38
+ label: "Valider pour vérification"
39
+ status: "En cours"
40
+ adjust:
41
+ label: "Valider la révision pour vérification"
42
+ status: "En révision"
43
+ confirm:
44
+ label: "Confirmer"
45
+ status: "En examen"
46
+ revise:
47
+ label: "Réviser"
48
+
39
49
  new:
40
50
  title: "Nouvelle demande"
41
51
  search: "Chercher..."
@@ -54,6 +64,7 @@ caluma:
54
64
 
55
65
  status:
56
66
  draft: "Brouillon"
67
+ skipped: "Terminé prématurément"
57
68
  sent: "Envoyé"
58
69
  positive: "Positif"
59
70
  negative: "Negatif"
@@ -1,27 +0,0 @@
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,22 +0,0 @@
1
- import { dasherize } from "@ember/string";
2
- import Component from "@glimmer/component";
3
-
4
- export default class CdIconButtonComponent extends Component {
5
- get class() {
6
- const gutters = [
7
- "gutter",
8
- "gutterTop",
9
- "gutterRight",
10
- "gutterBottom",
11
- "gutterLeft",
12
- ]
13
- .map((arg) =>
14
- this.args[arg]
15
- ? `uk-icon-button--${dasherize(arg)}-${this.args[arg]}`
16
- : null
17
- )
18
- .filter(Boolean);
19
-
20
- return ["uk-icon-button", ...gutters].join(" ");
21
- }
22
- }
@@ -1 +0,0 @@
1
- export { default } from "@projectcaluma/ember-distribution/components/cd-icon-button";
@@ -1,13 +0,0 @@
1
- @import "ember-uikit/variables-theme";
2
-
3
- @for $i from 1 through 8 {
4
- @each $side in "top", "right", "bottom", "left" {
5
- .uk-icon-button--gutter-#{$side}-#{$i} > svg {
6
- margin-#{$side}: #{$i}px !important;
7
- }
8
- }
9
-
10
- .uk-icon-button--gutter-#{$i} > svg {
11
- margin: #{$i}px;
12
- }
13
- }
@@ -1,31 +0,0 @@
1
- @import "ember-uikit/variables-theme";
2
-
3
- $size: $global-small-font-size * 1.2;
4
- $iconSize: $global-small-font-size * 0.9;
5
-
6
- $colors: (
7
- muted: $text-muted-color,
8
- emphasis: $text-emphasis-color,
9
- success: $text-success-color,
10
- danger: $text-danger-color,
11
- warning: $text-warning-color,
12
- );
13
-
14
- .status-indicator {
15
- width: $size;
16
- height: $size;
17
- border-width: 1px;
18
- border-style: solid;
19
-
20
- > svg {
21
- width: $iconSize;
22
- height: $iconSize;
23
- }
24
-
25
- @each $colorName, $color in $colors {
26
- &.uk-text-#{$colorName} {
27
- color: darken($color, 20%);
28
- border-color: $color;
29
- }
30
- }
31
- }