@projectcaluma/ember-distribution 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/addon/-private/decorator.js +24 -0
  3. package/addon/abilities/inquiry.js +39 -0
  4. package/addon/components/distribution-navigation/controls.hbs +21 -0
  5. package/addon/components/distribution-navigation/controls.js +45 -0
  6. package/addon/components/distribution-navigation/item.hbs +18 -0
  7. package/addon/components/distribution-navigation/item.js +17 -0
  8. package/addon/components/distribution-navigation/section.hbs +24 -0
  9. package/addon/components/distribution-navigation/section.js +25 -0
  10. package/addon/components/distribution-navigation/status-indicator.hbs +17 -0
  11. package/addon/components/distribution-navigation/status-indicator.js +19 -0
  12. package/addon/components/distribution-navigation.hbs +17 -0
  13. package/addon/components/distribution-navigation.js +81 -0
  14. package/addon/components/icon-button.hbs +20 -0
  15. package/addon/components/icon-button.js +22 -0
  16. package/addon/components/inquiry-answer-form.hbs +46 -0
  17. package/addon/components/inquiry-answer-form.js +75 -0
  18. package/addon/components/inquiry-dialog/inquiry-deadline.hbs +6 -0
  19. package/addon/components/inquiry-dialog/inquiry-deadline.js +10 -0
  20. package/addon/components/inquiry-dialog/inquiry-divider.hbs +7 -0
  21. package/addon/components/inquiry-dialog/inquiry-divider.js +13 -0
  22. package/addon/components/inquiry-dialog/inquiry-part.hbs +40 -0
  23. package/addon/components/inquiry-dialog/inquiry-part.js +20 -0
  24. package/addon/components/inquiry-dialog/inquiry.hbs +13 -0
  25. package/addon/components/inquiry-dialog/inquiry.js +7 -0
  26. package/addon/components/inquiry-dialog.hbs +9 -0
  27. package/addon/components/inquiry-dialog.js +42 -0
  28. package/addon/components/inquiry-edit-form.hbs +27 -0
  29. package/addon/components/inquiry-edit-form.js +53 -0
  30. package/addon/components/inquiry-new-form.hbs +110 -0
  31. package/addon/components/inquiry-new-form.js +154 -0
  32. package/addon/config.js +72 -0
  33. package/addon/controllers/distribution/new.js +22 -0
  34. package/addon/engine.js +18 -0
  35. package/addon/gql/fragments/inquiry.graphql +89 -0
  36. package/addon/gql/mutations/complete-inquiry-work-item.graphql +36 -0
  37. package/addon/gql/mutations/create-inquiry.graphql +5 -0
  38. package/addon/gql/mutations/resume-work-item.graphql +8 -0
  39. package/addon/gql/queries/control-work-items.graphql +37 -0
  40. package/addon/gql/queries/inquiry-answer.graphql +33 -0
  41. package/addon/gql/queries/inquiry-dialog.graphql +28 -0
  42. package/addon/gql/queries/inquiry-edit.graphql +18 -0
  43. package/addon/gql/queries/inquiry-navigation.graphql +56 -0
  44. package/addon/routes/distribution/index.js +41 -0
  45. package/addon/routes/distribution/inquiry/detail/answer.js +7 -0
  46. package/addon/routes/distribution/inquiry/detail/index.js +7 -0
  47. package/addon/routes/distribution/inquiry/detail.js +7 -0
  48. package/addon/routes/distribution/inquiry/index.js +10 -0
  49. package/addon/routes/distribution/inquiry.js +7 -0
  50. package/addon/routes/distribution/new.js +7 -0
  51. package/addon/routes/distribution.js +7 -0
  52. package/addon/routes.js +12 -0
  53. package/addon/templates/distribution/inquiry/detail/answer.hbs +1 -0
  54. package/addon/templates/distribution/inquiry/detail/index.hbs +1 -0
  55. package/addon/templates/distribution/inquiry/detail.hbs +1 -0
  56. package/addon/templates/distribution/inquiry/index.hbs +5 -0
  57. package/addon/templates/distribution/inquiry.hbs +1 -0
  58. package/addon/templates/distribution/new.hbs +7 -0
  59. package/addon/templates/distribution.hbs +8 -0
  60. package/addon/utils/inquiry-deadline.js +48 -0
  61. package/addon/utils/inquiry-status.js +68 -0
  62. package/addon/utils/unique-by-groups.js +17 -0
  63. package/app/abilities/inquiry.js +1 -0
  64. package/app/components/distribution-navigation/controls.js +1 -0
  65. package/app/components/distribution-navigation/item.js +1 -0
  66. package/app/components/distribution-navigation/section.js +1 -0
  67. package/app/components/distribution-navigation/status-indicator.js +1 -0
  68. package/app/components/distribution-navigation.js +1 -0
  69. package/app/components/icon-button.js +1 -0
  70. package/app/components/inquiry-answer-form.js +1 -0
  71. package/app/components/inquiry-dialog/inquiry-deadline.js +1 -0
  72. package/app/components/inquiry-dialog/inquiry-divider.js +1 -0
  73. package/app/components/inquiry-dialog/inquiry-part.js +1 -0
  74. package/app/components/inquiry-dialog/inquiry.js +1 -0
  75. package/app/components/inquiry-dialog.js +1 -0
  76. package/app/components/inquiry-edit-form.js +1 -0
  77. package/app/components/inquiry-new-form.js +1 -0
  78. package/app/styles/@projectcaluma/ember-distribution.scss +3 -0
  79. package/app/styles/_icon-button.scss +13 -0
  80. package/app/styles/_inquiry-divider.scss +49 -0
  81. package/app/styles/_status-indicator.scss +31 -0
  82. package/app/styles/app.scss +1 -0
  83. package/app/utils/inquiry-deadline.js +1 -0
  84. package/app/utils/inquiry-status.js +1 -0
  85. package/app/utils/unique-by-groups.js +1 -0
  86. package/config/environment.js +10 -0
  87. package/index.js +22 -0
  88. package/package.json +86 -0
  89. package/translations/de.yaml +42 -0
  90. package/translations/en.yaml +42 -0
  91. package/translations/fr.yaml +42 -0
@@ -0,0 +1,13 @@
1
+ <article class="uk-card uk-card-default uk-margin">
2
+ <div class="uk-card-body">
3
+ <InquiryDialog::InquiryDeadline @inquiry={{@inquiry}} />
4
+
5
+ {{#if this.hasAnswer}}
6
+ <InquiryDialog::InquiryPart @inquiry={{@inquiry}} @type="answer" />
7
+
8
+ <InquiryDialog::InquiryDivider @inquiry={{@inquiry}} />
9
+ {{/if}}
10
+
11
+ <InquiryDialog::InquiryPart @inquiry={{@inquiry}} @type="request" />
12
+ </div>
13
+ </article>
@@ -0,0 +1,7 @@
1
+ import Component from "@glimmer/component";
2
+
3
+ export default class InquiryDialogInquiryComponent extends Component {
4
+ get hasAnswer() {
5
+ return this.args.inquiry.status === "COMPLETED";
6
+ }
7
+ }
@@ -0,0 +1,9 @@
1
+ <section>
2
+ {{#if this._inquiries.isRunning}}
3
+ <div class="uk-text-center"><UkSpinner @ratio={{2}} /></div>
4
+ {{else}}
5
+ {{#each this.inquiries as |inquiry|}}
6
+ <InquiryDialog::Inquiry @inquiry={{inquiry}} />
7
+ {{/each}}
8
+ {{/if}}
9
+ </section>
@@ -0,0 +1,42 @@
1
+ import Component from "@glimmer/component";
2
+ import { queryManager } from "ember-apollo-client";
3
+ import { dropTask } from "ember-concurrency";
4
+ import { useTask } from "ember-resources";
5
+
6
+ import config from "@projectcaluma/ember-distribution/config";
7
+ import inquiryDialogQuery from "@projectcaluma/ember-distribution/gql/queries/inquiry-dialog.graphql";
8
+
9
+ export default class InquiryDialogComponent extends Component {
10
+ @config config;
11
+
12
+ @queryManager apollo;
13
+
14
+ get inquiries() {
15
+ return this._inquiries.value?.allWorkItems.edges.map((edge) => edge.node);
16
+ }
17
+
18
+ _inquiries = useTask(this, this.fetchDialog, () => [
19
+ this.args.from,
20
+ this.args.to,
21
+ this.args.caseId,
22
+ this.config,
23
+ ]);
24
+
25
+ @dropTask
26
+ *fetchDialog() {
27
+ return yield this.apollo.watchQuery({
28
+ query: inquiryDialogQuery,
29
+ variables: {
30
+ from: this.args.from,
31
+ to: this.args.to,
32
+ caseId: this.args.caseId,
33
+ task: this.config.inquiry.task,
34
+ infoQuestion: this.config.inquiry.infoQuestion,
35
+ deadlineQuestion: this.config.inquiry.deadlineQuestion,
36
+ statusQuestion: this.config.inquiry.answer.statusQuestion,
37
+ answerInfoQuestion: this.config.inquiry.answer.infoQuestion,
38
+ includeNavigationData: true,
39
+ },
40
+ });
41
+ }
42
+ }
@@ -0,0 +1,27 @@
1
+ <CfContent
2
+ @documentId={{decode-id this.inquiry.document.id}}
3
+ @disabled={{cannot "edit inquiry" this.inquiry}}
4
+ @loading={{this._inquiry.isRunning}}
5
+ as |content|
6
+ >
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
+
17
+ <content.form />
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
+ @on-click={{perform this.send validate}}
25
+ >{{t "caluma.distribution.edit.send"}}</UkButton>
26
+ </DocumentValidity>
27
+ </CfContent>
@@ -0,0 +1,53 @@
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 { useTask } from "ember-resources";
6
+
7
+ import config from "@projectcaluma/ember-distribution/config";
8
+ import resumeWorkItemMutation from "@projectcaluma/ember-distribution/gql/mutations/resume-work-item.graphql";
9
+ import inquiryEditQuery from "@projectcaluma/ember-distribution/gql/queries/inquiry-edit.graphql";
10
+
11
+ export default class InquiryEditFormComponent extends Component {
12
+ @service notification;
13
+ @service router;
14
+
15
+ @config config;
16
+
17
+ @queryManager apollo;
18
+
19
+ _inquiry = useTask(this, this.fetchInquiry, () => [this.args.inquiry]);
20
+
21
+ get inquiry() {
22
+ return this._inquiry.value?.[0]?.node;
23
+ }
24
+
25
+ @dropTask
26
+ *fetchInquiry() {
27
+ return yield this.apollo.watchQuery(
28
+ {
29
+ query: inquiryEditQuery,
30
+ variables: { inquiry: this.args.inquiry },
31
+ },
32
+ "allWorkItems.edges"
33
+ );
34
+ }
35
+
36
+ @dropTask
37
+ *send(validate) {
38
+ try {
39
+ if (!(yield validate())) return;
40
+
41
+ yield this.apollo.mutate({
42
+ mutation: resumeWorkItemMutation,
43
+ variables: { workItem: this.args.inquiry },
44
+ });
45
+
46
+ yield this.router.transitionTo("distribution.inquiry.index");
47
+ } catch (error) {
48
+ this.notification.danger(
49
+ this.intl.t("caluma.distribution.edit.send-error")
50
+ );
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,110 @@
1
+ <h1>{{t "caluma.distribution.new.title"}}</h1>
2
+
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>
18
+ </div>
19
+ {{t "caluma.distribution.new.selected" count=this.selectedGroups.length}}
20
+ </div>
21
+ <div>
22
+ <UkButton
23
+ @color="default"
24
+ @label={{t "caluma.distribution.new.reset"}}
25
+ @on-click={{this.clearSelectedGroups}}
26
+ data-test-reset
27
+ />
28
+ <UkButton
29
+ @color="primary"
30
+ @label={{t "caluma.distribution.new.create-draft"}}
31
+ @type="submit"
32
+ @loading={{this.submit.isRunning}}
33
+ @disabled={{this.submit.isRunning}}
34
+ @on-click={{perform this.submit}}
35
+ data-test-submit
36
+ />
37
+ </div>
38
+ </div>
39
+ <hr />
40
+ {{/if}}
41
+
42
+ <div class="uk-margin-bottom uk-button-group">
43
+ {{#each-in this.config.new.types as |slug config|}}
44
+ {{#unless config.disabled}}
45
+ <UkButton
46
+ data-test-type={{slug}}
47
+ @label={{t config.label}}
48
+ @color={{if (includes slug @selectedTypes) "primary" "default"}}
49
+ @on-click={{fn this.updateSelectedTypes slug}}
50
+ />
51
+ {{/unless}}
52
+ {{/each-in}}
53
+ </div>
54
+
55
+ <div class="uk-search uk-search-default uk-width-1-1">
56
+ <span class="uk-search-icon-flip" uk-search-icon></span>
57
+ <input
58
+ placeholder={{t "caluma.distribution.new.search"}}
59
+ aria-label={{t "caluma.distribution.new.search"}}
60
+ class="uk-search-input"
61
+ type="search"
62
+ value={{@search}}
63
+ data-test-search
64
+ {{on "input" (perform this.updateSearch)}}
65
+ />
66
+ </div>
67
+
68
+ {{#if this.groups.isRunning}}
69
+ <div class="uk-text-center uk-margin">
70
+ <UkSpinner @ratio={{2}} />
71
+ </div>
72
+ {{else if this.groups.value.length}}
73
+ <ul class="uk-list uk-list-striped">
74
+ {{#each this.groups.value as |group|}}
75
+ {{! template-lint-disable require-presentational-children }}
76
+ <li
77
+ role="checkbox"
78
+ class="uk-flex uk-flex-between uk-flex-middle"
79
+ data-test-group={{group.identifier}}
80
+ {{on "click" (fn this.updateSelectedGroups group.identifier)}}
81
+ >
82
+ {{! template-lint-disable no-nested-interactive }}
83
+ <label for="group-{{group.identifier}}">
84
+ <input
85
+ type="checkbox"
86
+ class="uk-checkbox uk-margin-small-right"
87
+ checked={{includes group.identifier this.selectedGroups}}
88
+ id="group-{{group.identifier}}"
89
+ />
90
+ {{group-name group.identifier}}
91
+ </label>
92
+ {{#if group.config.icon}}
93
+ {{svg-jar
94
+ group.config.icon
95
+ width="20"
96
+ height="20"
97
+ class=(concat "uk-text-" group.config.iconColor)
98
+ }}
99
+ {{/if}}
100
+ </li>
101
+ {{/each}}
102
+ </ul>
103
+ {{else}}
104
+ <div class="uk-text-center">
105
+ <UkIcon @icon="search" @ratio={{10}} class="uk-margin-top" />
106
+ <p class="uk-text-muted">
107
+ {{t "caluma.distribution.new.empty"}}
108
+ </p>
109
+ </div>
110
+ {{/if}}
@@ -0,0 +1,154 @@
1
+ import { action } from "@ember/object";
2
+ import { inject as service } from "@ember/service";
3
+ import Component from "@glimmer/component";
4
+ import { tracked } from "@glimmer/tracking";
5
+ import { queryManager } from "ember-apollo-client";
6
+ import { timeout, restartableTask, dropTask, task } from "ember-concurrency";
7
+ import { useTask } from "ember-resources";
8
+
9
+ import { decodeId } from "@projectcaluma/ember-core/helpers/decode-id";
10
+ import config from "@projectcaluma/ember-distribution/config";
11
+ import createInquiryMutation from "@projectcaluma/ember-distribution/gql/mutations/create-inquiry.graphql";
12
+ import controlWorkItemsQuery from "@projectcaluma/ember-distribution/gql/queries/control-work-items.graphql";
13
+ import inquiryNavigationQuery from "@projectcaluma/ember-distribution/gql/queries/inquiry-navigation.graphql";
14
+
15
+ const toggle = (value, array) => {
16
+ const set = new Set(array);
17
+
18
+ set.delete(value) || set.add(value);
19
+
20
+ return [...set];
21
+ };
22
+
23
+ export default class InquiryNewFormComponent extends Component {
24
+ @service calumaOptions;
25
+ @service notification;
26
+ @service intl;
27
+ @service router;
28
+
29
+ @queryManager apollo;
30
+
31
+ @config config;
32
+
33
+ @tracked selectedGroups = [];
34
+
35
+ groups = useTask(this, this.fetchGroups, () => [
36
+ this.args.selectedTypes,
37
+ this.args.search,
38
+ ]);
39
+
40
+ @action
41
+ updateSelectedTypes(type, e) {
42
+ e.preventDefault();
43
+
44
+ this.args.onChangeSelectedTypes(toggle(type, this.args.selectedTypes));
45
+ }
46
+
47
+ @action
48
+ updateSelectedGroups(identifier, e) {
49
+ e.preventDefault();
50
+
51
+ this.selectedGroups = toggle(identifier, this.selectedGroups);
52
+ }
53
+
54
+ @action
55
+ clearSelectedGroups(e) {
56
+ e.preventDefault();
57
+
58
+ this.selectedGroups = [];
59
+ }
60
+
61
+ @restartableTask
62
+ *updateSearch(e) {
63
+ e.preventDefault();
64
+
65
+ yield timeout(500);
66
+
67
+ this.args.onChangeSearch(e.target.value);
68
+ }
69
+
70
+ @dropTask
71
+ *submit(e) {
72
+ e.preventDefault();
73
+
74
+ if (!this.selectedGroups.length) return;
75
+
76
+ try {
77
+ // get create inquiry work item to complete, this will not trigger a
78
+ // network request since it's already fetch in the controls
79
+ const controlsData = yield this.apollo.watchQuery(
80
+ {
81
+ query: controlWorkItemsQuery,
82
+ variables: {
83
+ caseId: this.args.caseId,
84
+ currentGroup: String(this.calumaOptions.currentGroupId),
85
+ createTask: this.config.controls.createTask,
86
+ completeTask: this.config.controls.completeTask,
87
+ },
88
+ },
89
+ "create.edges"
90
+ );
91
+
92
+ // create new inquiries
93
+ yield this.apollo.mutate({
94
+ mutation: createInquiryMutation,
95
+ variables: {
96
+ id: decodeId(controlsData[0].node.id),
97
+ context: JSON.stringify({
98
+ addressed_groups: this.selectedGroups.map(String),
99
+ }),
100
+ },
101
+ });
102
+
103
+ // refetch navigation data
104
+ const navigationData = yield this.apollo.query(
105
+ {
106
+ query: inquiryNavigationQuery,
107
+ fetchPolicy: "network-only",
108
+ variables: {
109
+ caseId: this.args.caseId,
110
+ task: this.config.inquiry.task,
111
+ currentGroup: String(this.calumaOptions.currentGroupId),
112
+ statusQuestion: this.config.inquiry.answer.statusQuestion,
113
+ deadlineQuestion: this.config.inquiry.deadlineQuestion,
114
+ includeNavigationData: true,
115
+ },
116
+ },
117
+ "controlling.edges"
118
+ );
119
+
120
+ // transition to last added inquiry
121
+ this.router.transitionTo("distribution.inquiry", {
122
+ from: navigationData[0].node.controllingGroups[0],
123
+ to: navigationData[0].node.addressedGroups[0],
124
+ });
125
+ } catch (e) {
126
+ this.notification.danger(
127
+ this.intl.t("caluma.distribution.new.error", {
128
+ count: this.selectedGroups.length,
129
+ })
130
+ );
131
+ }
132
+ }
133
+
134
+ @task
135
+ *fetchGroups(types, search) {
136
+ // https://github.com/ember-cli/eslint-plugin-ember/issues/1413
137
+ yield Promise.resolve();
138
+
139
+ const typedGroups = yield this.calumaOptions.fetchTypedGroups(
140
+ types,
141
+ search
142
+ );
143
+
144
+ return Object.entries(typedGroups)
145
+ .flatMap(([type, groups]) => {
146
+ return groups.map((group) => ({
147
+ identifier: group[this.calumaOptions.groupIdentifierProperty],
148
+ name: group[this.calumaOptions.groupNameProperty],
149
+ config: this.config.new.types[type],
150
+ }));
151
+ })
152
+ .sort((a, b) => a.name.localeCompare(b.name));
153
+ }
154
+ }
@@ -0,0 +1,72 @@
1
+ import { getOwner } from "@ember/application";
2
+ import merge from "lodash.merge";
3
+ import { cached } from "tracked-toolbox";
4
+
5
+ export const INQUIRY_STATUS = {
6
+ DRAFT: "draft",
7
+ SENT: "sent",
8
+ POSITIVE: "positive",
9
+ NEGATIVE: "negative",
10
+ NEEDS_INTERACTION: "needs-interaction",
11
+ };
12
+
13
+ export default function config(target, property) {
14
+ return cached(target, property, {
15
+ get() {
16
+ return merge(
17
+ {
18
+ controls: {
19
+ createTask: "create-inquiry",
20
+ completeTask: "complete-distribution",
21
+ },
22
+ warningPeriod: 3,
23
+ inquiry: {
24
+ task: "inquiry",
25
+ deadlineQuestion: "inquiry-deadline",
26
+ infoQuestion: "inquiry-remark",
27
+ answer: {
28
+ statusQuestion: "inquiry-answer-status",
29
+ infoQuestion: "inquiry-answer-reason",
30
+ statusMapping: {
31
+ "inquiry-answer-status-positive": INQUIRY_STATUS.POSITIVE,
32
+ "inquiry-answer-status-negative": INQUIRY_STATUS.NEGATIVE,
33
+ "inquiry-answer-status-needs-interaction":
34
+ INQUIRY_STATUS.NEEDS_INTERACTION,
35
+ },
36
+ buttons: {
37
+ "compose-inquiry-answer": {
38
+ color: "primary",
39
+ label: "caluma.distribution.answer.release-for-review",
40
+ },
41
+ "confirm-inquiry-answer": {
42
+ color: "primary",
43
+ label: "caluma.distribution.answer.confirm",
44
+ },
45
+ "revise-inquiry-answer": {
46
+ color: "default",
47
+ label: "caluma.distribution.answer.revise",
48
+ },
49
+ "adjust-inquiry-answer": {
50
+ color: "primary",
51
+ label:
52
+ "caluma.distribution.answer.release-adjustment-for-review",
53
+ },
54
+ },
55
+ },
56
+ },
57
+ new: {
58
+ defaultTypes: ["suggestions"],
59
+ types: {
60
+ suggestions: {
61
+ label: "caluma.distribution.new.suggestions",
62
+ icon: "bulb-outline",
63
+ iconColor: "warning",
64
+ },
65
+ },
66
+ },
67
+ },
68
+ getOwner(this).lookup("service:calumaOptions")?.distribution ?? {}
69
+ );
70
+ },
71
+ });
72
+ }
@@ -0,0 +1,22 @@
1
+ import Controller from "@ember/controller";
2
+ import { dedupeTracked, cached } from "tracked-toolbox";
3
+
4
+ import config from "@projectcaluma/ember-distribution/config";
5
+
6
+ export default class DistributionNewController extends Controller {
7
+ @config config;
8
+
9
+ queryParams = ["types", "search"];
10
+
11
+ @dedupeTracked types = String(this.config.new.defaultTypes);
12
+ @dedupeTracked search = "";
13
+
14
+ @cached
15
+ get selectedTypes() {
16
+ return this.types.split(",");
17
+ }
18
+
19
+ set selectedTypes(value) {
20
+ this.types = String(value);
21
+ }
22
+ }
@@ -0,0 +1,18 @@
1
+ import Engine from "ember-engines/engine";
2
+ import loadInitializers from "ember-load-initializers";
3
+ import Resolver from "ember-resolver";
4
+
5
+ import config from "./config/environment";
6
+
7
+ const { modulePrefix } = config;
8
+
9
+ export default class DistributionEngine extends Engine {
10
+ modulePrefix = modulePrefix;
11
+ Resolver = Resolver;
12
+
13
+ dependencies = {
14
+ services: ["apollo", "notification", "intl", "caluma-options"],
15
+ };
16
+ }
17
+
18
+ loadInitializers(DistributionEngine, modulePrefix);
@@ -0,0 +1,89 @@
1
+ fragment InquiryDeadlineDocument on Document {
2
+ id
3
+ deadline: answers(question: $deadlineQuestion) {
4
+ edges {
5
+ node {
6
+ id
7
+ ... on DateAnswer {
8
+ value
9
+ }
10
+ }
11
+ }
12
+ }
13
+ }
14
+
15
+ fragment InquiryStatusDocument on Document {
16
+ id
17
+ status: answers(question: $statusQuestion) {
18
+ edges {
19
+ node {
20
+ id
21
+ ... on StringAnswer {
22
+ value
23
+ selectedOption {
24
+ slug
25
+ label
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
31
+ }
32
+
33
+ fragment InquiryDialog on WorkItem {
34
+ id
35
+ addressedGroups
36
+ controllingGroups
37
+ createdAt
38
+ closedAt
39
+ status
40
+ task {
41
+ id
42
+ slug
43
+ }
44
+ document {
45
+ ...InquiryDeadlineDocument
46
+ info: answers(question: $infoQuestion) {
47
+ edges {
48
+ node {
49
+ id
50
+ ... on StringAnswer {
51
+ value
52
+ }
53
+ }
54
+ }
55
+ }
56
+ }
57
+ childCase {
58
+ id
59
+ document {
60
+ ...InquiryStatusDocument
61
+ info: answers(question: $answerInfoQuestion) {
62
+ edges {
63
+ node {
64
+ id
65
+ ... on StringAnswer {
66
+ value
67
+ }
68
+ }
69
+ }
70
+ }
71
+ }
72
+ }
73
+ }
74
+
75
+ fragment Inquiry on WorkItem {
76
+ id
77
+ status
78
+ addressedGroups
79
+ controllingGroups
80
+ document @include(if: $includeNavigationData) {
81
+ ...InquiryDeadlineDocument
82
+ }
83
+ childCase @include(if: $includeNavigationData) {
84
+ id
85
+ document {
86
+ ...InquiryStatusDocument
87
+ }
88
+ }
89
+ }
@@ -0,0 +1,36 @@
1
+ #import InquiryStatusDocument from '../fragments/inquiry.graphql'
2
+
3
+ mutation CompleteInquiryWorkItem(
4
+ $workItem: ID!
5
+ $statusQuestion: ID!
6
+ $buttonTasks: [String]!
7
+ ) {
8
+ completeWorkItem(input: { id: $workItem }) {
9
+ workItem {
10
+ id
11
+ status
12
+ case {
13
+ id
14
+ document {
15
+ id
16
+ ...InquiryStatusDocument
17
+ }
18
+ workItems(tasks: $buttonTasks, status: READY) {
19
+ edges {
20
+ node {
21
+ id
22
+ task {
23
+ id
24
+ slug
25
+ }
26
+ }
27
+ }
28
+ }
29
+ parentWorkItem {
30
+ id
31
+ status
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,5 @@
1
+ mutation CreateInquiry($id: ID!, $context: JSONString!) {
2
+ completeWorkItem(input: { id: $id, context: $context }) {
3
+ clientMutationId
4
+ }
5
+ }
@@ -0,0 +1,8 @@
1
+ mutation ResumeWorkItem($workItem: ID!) {
2
+ resumeWorkItem(input: { id: $workItem }) {
3
+ workItem {
4
+ id
5
+ status
6
+ }
7
+ }
8
+ }