@projectcaluma/ember-distribution 1.0.0-beta.3 → 1.0.0-beta.6

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 (69) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/addon/abilities/distribution.js +31 -0
  3. package/addon/components/distribution-navigation/controls.hbs +17 -12
  4. package/addon/components/distribution-navigation/controls.js +32 -26
  5. package/addon/components/distribution-navigation/item.hbs +3 -3
  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/distribution-navigation.js +28 -56
  10. package/addon/components/icon-button.hbs +16 -9
  11. package/addon/components/inquiry-answer-form.hbs +33 -31
  12. package/addon/components/inquiry-answer-form.js +1 -1
  13. package/addon/components/inquiry-dialog/inquiry-deadline.hbs +27 -6
  14. package/addon/components/inquiry-dialog/inquiry-deadline.js +4 -0
  15. package/addon/components/inquiry-dialog/inquiry-divider.hbs +2 -1
  16. package/addon/components/inquiry-dialog/inquiry-part.hbs +18 -10
  17. package/addon/components/inquiry-dialog/inquiry-part.js +39 -0
  18. package/addon/components/inquiry-dialog/inquiry.hbs +4 -1
  19. package/addon/components/inquiry-dialog/inquiry.js +4 -0
  20. package/addon/components/inquiry-dialog.hbs +8 -6
  21. package/addon/components/inquiry-dialog.js +25 -2
  22. package/addon/components/inquiry-edit-form.hbs +21 -19
  23. package/addon/components/inquiry-edit-form.js +2 -1
  24. package/addon/components/inquiry-new-form.hbs +113 -101
  25. package/addon/components/inquiry-new-form.js +22 -40
  26. package/addon/components/notfound.hbs +12 -0
  27. package/addon/config.js +1 -0
  28. package/addon/controllers/application.js +7 -0
  29. package/addon/controllers/{distribution/new.js → new.js} +1 -1
  30. package/addon/gql/mutations/withdraw-inquiry.graphql +8 -0
  31. package/addon/gql/queries/control-work-items.graphql +18 -2
  32. package/addon/gql/queries/inquiry-navigation.graphql +2 -0
  33. package/addon/modifiers/pikaday.js +2 -0
  34. package/addon/routes/{distribution.js → application.js} +1 -1
  35. package/addon/routes/{distribution/index.js → index.js} +2 -2
  36. package/addon/routes/inquiry/detail/answer.js +7 -0
  37. package/addon/routes/inquiry/detail/index.js +7 -0
  38. package/addon/routes/{distribution/inquiry → inquiry}/detail.js +1 -1
  39. package/addon/routes/inquiry/index.js +10 -0
  40. package/addon/routes/{distribution/inquiry.js → inquiry.js} +1 -1
  41. package/addon/routes/new.js +7 -0
  42. package/addon/routes/notfound.js +3 -0
  43. package/addon/routes.js +5 -6
  44. package/addon/services/distribution.js +82 -0
  45. package/addon/templates/application.hbs +8 -0
  46. package/addon/templates/index.hbs +11 -0
  47. package/addon/templates/{distribution/inquiry → inquiry}/detail/answer.hbs +0 -0
  48. package/addon/templates/{distribution/inquiry → inquiry}/detail/index.hbs +0 -0
  49. package/addon/templates/{distribution/inquiry → inquiry}/detail.hbs +0 -0
  50. package/addon/templates/{distribution/inquiry → inquiry}/index.hbs +0 -0
  51. package/addon/templates/{distribution/inquiry.hbs → inquiry.hbs} +0 -0
  52. package/addon/templates/{distribution/new.hbs → new.hbs} +0 -0
  53. package/addon/templates/notfound.hbs +1 -0
  54. package/addon/utils/unique-by-groups.js +1 -0
  55. package/app/abilities/distribution.js +1 -0
  56. package/app/components/notfound.js +1 -0
  57. package/app/services/distribution.js +1 -0
  58. package/app/styles/_inquiry-divider.scss +22 -0
  59. package/index.js +14 -13
  60. package/package.json +21 -16
  61. package/public/assets/distribution.svg +1 -0
  62. package/translations/de.yaml +18 -0
  63. package/translations/en.yaml +18 -0
  64. package/translations/fr.yaml +18 -0
  65. package/addon/routes/distribution/inquiry/detail/answer.js +0 -7
  66. package/addon/routes/distribution/inquiry/detail/index.js +0 -7
  67. package/addon/routes/distribution/inquiry/index.js +0 -10
  68. package/addon/routes/distribution/new.js +0 -7
  69. package/addon/templates/distribution.hbs +0 -8
package/CHANGELOG.md CHANGED
@@ -1,3 +1,40 @@
1
+ # [@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)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **embroider:** add missing dependency on @ember/string ([3a6e6bb](https://github.com/projectcaluma/ember-caluma/commit/3a6e6bb39a8c1a40a2ae00b3d4ea00606a755e25))
7
+
8
+
9
+ ### Features
10
+
11
+ * **distribution:** add functionality to send all pending inquiries ([d769953](https://github.com/projectcaluma/ember-caluma/commit/d769953d5a0ea196943426c8499ba87b77a42e61))
12
+ * **distribution:** add functionality to withdraw an inquiry ([c278895](https://github.com/projectcaluma/ember-caluma/commit/c2788957c0fb228c167ca9236fda4850717f5817))
13
+
14
+ # [@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)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **distribution:** fix sorting after group names in navigation ([2299d3b](https://github.com/projectcaluma/ember-caluma/commit/2299d3b0e265204ab6747dbdc6a8b64fc22f247f))
20
+ * **distribution:** redirect to edit form after inquiry creation ([0a2c404](https://github.com/projectcaluma/ember-caluma/commit/0a2c40404fdb1258fb8d51a2809a03b335c7c78a))
21
+
22
+ # [@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)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * **distribution:** show controls if no inquiries exist yet ([5c73b6d](https://github.com/projectcaluma/ember-caluma/commit/5c73b6d0a870fd0e34d96af3fa34095733fe9fd9))
28
+ * **pikaday:** add pikaday modifier reexport in engines ([c13d302](https://github.com/projectcaluma/ember-caluma/commit/c13d3021bb8fe82e1245a60182af01287c507697))
29
+
30
+
31
+ ### Features
32
+
33
+ * **distribution:** add config variable to stack the UI ([2ad285a](https://github.com/projectcaluma/ember-caluma/commit/2ad285a24bf5fb45d15fe237e3f420dd1f1d94f2))
34
+ * **distribution:** add index page when no inquiries exist ([689089c](https://github.com/projectcaluma/ember-caluma/commit/689089c8f28146a33346f382fe69e7ca1b588d97))
35
+ * **distribution:** add proper 404 handling ([73e62e6](https://github.com/projectcaluma/ember-caluma/commit/73e62e671a9425fc549d7057dd653d1dc59883aa))
36
+ * **distribution:** remove distribution top level route ([6f396da](https://github.com/projectcaluma/ember-caluma/commit/6f396daf2881f07cdddaac6c7ca784db2b8777d3))
37
+
1
38
  # [@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
39
 
3
40
 
@@ -0,0 +1,31 @@
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 distribution;
8
+
9
+ get canSendInquiries() {
10
+ return (
11
+ this.distribution.controls.value?.send.edges.filter(
12
+ hasStatus("SUSPENDED")
13
+ ).length > 0
14
+ );
15
+ }
16
+
17
+ get canCreateInquiry() {
18
+ return (
19
+ this.distribution.controls.value?.create.edges.filter(hasStatus("READY"))
20
+ .length > 0
21
+ );
22
+ }
23
+
24
+ get canComplete() {
25
+ return (
26
+ this.distribution.controls.value?.complete.edges.filter(
27
+ hasStatus("READY")
28
+ ).length > 0
29
+ );
30
+ }
31
+ }
@@ -1,17 +1,22 @@
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
+ @title={{t "caluma.distribution.send"}}
8
+ @icon="paper-plane-outline"
9
+ @fromSvgJar={{true}}
10
+ @gutterTop={{4}}
11
+ @gutterRight={{6}}
12
+ @gutterLeft={{4}}
13
+ @gutterBottom={{4}}
14
+ @onClick={{perform this.sendInquiries}}
15
+ @loading={{this.sendInquiries.isRunning}}
16
+ data-test-send-pending-inquiries
17
+ />
18
+ {{/if}}
19
+ {{#if (can "complete distribution")}}
15
20
  <IconButton
16
21
  @icon="lock-closed-outline"
17
22
  @fromSvgJar={{true}}
@@ -3,43 +3,49 @@ import { inject as service } from "@ember/service";
3
3
  import Component from "@glimmer/component";
4
4
  import { queryManager } from "ember-apollo-client";
5
5
  import { dropTask } from "ember-concurrency";
6
- import { useTask } from "ember-resources";
6
+ import { confirm } from "ember-uikit";
7
+ import { gql } from "graphql-tag";
7
8
 
8
- import config from "@projectcaluma/ember-distribution/config";
9
- import controlWorkItemsQuery from "@projectcaluma/ember-distribution/gql/queries/control-work-items.graphql";
9
+ import { decodeId } from "@projectcaluma/ember-core/helpers/decode-id";
10
10
 
11
11
  export default class DistributionNavigationControlsComponent extends Component {
12
- @service calumaOptions;
12
+ @service distribution;
13
+ @service intl;
13
14
 
14
15
  @queryManager apollo;
15
16
 
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
17
  @action
29
18
  noop(e) {
30
19
  e.preventDefault();
31
20
  }
32
21
 
33
22
  @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
- });
23
+ *sendInquiries() {
24
+ if (!(yield confirm(this.intl.t("caluma.distribution.send-confirm")))) {
25
+ return;
26
+ }
27
+
28
+ try {
29
+ const ids = this.distribution.controls.value.send.edges.map((edge) =>
30
+ decodeId(edge.node.id)
31
+ );
32
+
33
+ const mutations = ids.map(
34
+ (id, index) => `
35
+ sendInquiry${index}: resumeWorkItem(input: { id: "${id}" }) {
36
+ workItem {
37
+ id
38
+ status
39
+ }
40
+ }
41
+ `
42
+ );
43
+
44
+ const mutation = gql`mutation SendInquiries {${mutations.join("\n")}}`;
45
+
46
+ yield this.apollo.mutate({ mutation });
47
+ } catch (e) {
48
+ this.notification.danger(this.intl.t("caluma.distribution.send-error"));
49
+ }
44
50
  }
45
51
  }
@@ -1,11 +1,11 @@
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")}}
6
- {{group-name @inquiry.controllingGroups}}
6
+ {{@inquiry.controllingGroupName}}
7
7
  {{else}}
8
- {{group-name @inquiry.addressedGroups}}
8
+ {{@inquiry.addressedGroupName}}
9
9
  {{/if}}
10
10
  </div>
11
11
 
@@ -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}}
@@ -1,81 +1,53 @@
1
1
  import { inject as service } from "@ember/service";
2
2
  import Component from "@glimmer/component";
3
- import { tracked } from "@glimmer/tracking";
4
3
  import { queryManager } from "ember-apollo-client";
5
- import { restartableTask } from "ember-concurrency";
6
- import { useTask } from "ember-resources";
7
4
 
8
5
  import config from "@projectcaluma/ember-distribution/config";
9
- import inquiryNavigationQuery from "@projectcaluma/ember-distribution/gql/queries/inquiry-navigation.graphql";
10
6
  import uniqueByGroups from "@projectcaluma/ember-distribution/utils/unique-by-groups";
11
7
 
12
8
  export default class DistributionNavigationComponent extends Component {
13
- @service calumaOptions;
14
9
  @service("-scheduler") scheduler;
10
+ @service calumaOptions;
11
+ @service distribution;
15
12
 
16
13
  @config config;
17
14
 
18
15
  @queryManager apollo;
19
16
 
20
- @tracked groups = [];
21
-
22
17
  get inquiries() {
23
- const findGroupName = (ids) =>
24
- this.groups.find((g) =>
25
- ids.includes(g[this.calumaOptions.groupIdentifierProperty])
26
- )?.[this.calumaOptions.groupNameProperty];
18
+ const findGroupName = (identifiers) => {
19
+ const group = this.scheduler.groupCache.find((group) =>
20
+ identifiers
21
+ .map(String)
22
+ .includes(String(group[this.calumaOptions.groupIdentifierProperty]))
23
+ );
27
24
 
28
- return Object.entries(this._inquiries.value || []).reduce(
25
+ return group?.[this.calumaOptions.groupNameProperty] ?? "";
26
+ };
27
+
28
+ return Object.entries(this.distribution.navigation.value ?? {}).reduce(
29
29
  (inquiries, [key, objects]) => {
30
30
  return {
31
31
  ...inquiries,
32
- [key]: uniqueByGroups(
33
- objects.edges.map((edge) => ({
34
- ...edge.node,
35
- addressedGroupName: findGroupName(edge.node.addressedGroups),
36
- controllingGroupName: findGroupName(edge.node.controllingGroups),
37
- }))
38
- ),
32
+ // Don't return any data until the internal scheduler has cached
33
+ // groups since we don't want to render empty navigation items
34
+ [key]: this.scheduler.groupCache.length
35
+ ? uniqueByGroups(
36
+ objects.edges.map((edge) => ({
37
+ ...edge.node,
38
+ // Populate the work item with the names of the involved
39
+ // groups so the <DistributionNavigation::Section /> component
40
+ // can sort by them
41
+ addressedGroupName: findGroupName(edge.node.addressedGroups),
42
+ controllingGroupName: findGroupName(
43
+ edge.node.controllingGroups
44
+ ),
45
+ }))
46
+ )
47
+ : [],
39
48
  };
40
49
  },
41
50
  {}
42
51
  );
43
52
  }
44
-
45
- _inquiries = useTask(this, this.fetchInquiries, () => [
46
- this.args.caseId,
47
- this.config,
48
- ]);
49
-
50
- @restartableTask
51
- *fetchInquiries() {
52
- const response = yield this.apollo.watchQuery({
53
- query: inquiryNavigationQuery,
54
- variables: {
55
- caseId: this.args.caseId,
56
- task: this.config.inquiry.task,
57
- currentGroup: String(this.calumaOptions.currentGroupId),
58
- statusQuestion: this.config.inquiry.answer.statusQuestion,
59
- deadlineQuestion: this.config.inquiry.deadlineQuestion,
60
- includeNavigationData: true,
61
- },
62
- });
63
-
64
- const groupIds = [
65
- ...new Set(
66
- Object.values(response)
67
- .map((inquiries) => {
68
- return inquiries.edges.map((edge) => [
69
- ...edge.node.addressedGroups,
70
- ...edge.node.controllingGroups,
71
- ]);
72
- })
73
- .flat(2)
74
- ),
75
- ];
76
-
77
- this.groups = yield this.scheduler.resolve(groupIds, "group");
78
-
79
- return response;
80
- }
81
53
  }
@@ -1,20 +1,27 @@
1
1
  {{#if @route}}
2
- <LinkTo
3
- @route={{@route}}
4
- class={{this.class}}
5
- uk-icon={{unless @fromSvgJar @icon}}
6
- ...attributes
7
- >
8
- {{#if @fromSvgJar}}{{svg-jar @icon width="20" height="20"}}{{/if}}
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}}
9
10
  </LinkTo>
10
11
  {{else}}
11
12
  <button
12
13
  type="button"
13
14
  class={{this.class}}
14
- uk-icon={{unless @fromSvgJar @icon}}
15
+ title={{@title}}
15
16
  ...attributes
16
17
  {{on "click" @onClick}}
17
18
  >
18
- {{#if @fromSvgJar}}{{svg-jar @icon width="20" height="20"}}{{/if}}
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}}
19
26
  </button>
20
27
  {{/if}}
@@ -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")
@@ -1,6 +1,27 @@
1
- <div
2
- class="uk-position-top-right uk-margin-medium-top uk-margin-medium-right uk-flex-inline uk-flex-middle uk-text-{{this.deadline.color}}"
3
- >
4
- {{svg-jar "alarm-outline" height=26 class="uk-margin-small-right"}}
5
- {{format-date this.deadline.value}}
6
- </div>
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
+ class="uk-margin-small-right"
20
+ }}
21
+ {{#if this.isWithdrawn}}
22
+ {{t "caluma.distribution.withdraw.status"}}
23
+ {{else}}
24
+ {{format-date this.deadline.value}}
25
+ {{/if}}
26
+ </div>
27
+ {{/if}}
@@ -7,4 +7,8 @@ export default class InquiryDialogInquiryDeadlineComponent 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}}
@@ -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}}
@@ -17,24 +24,25 @@
17
24
  </li>
18
25
  {{#if (can "edit inquiry" @inquiry)}}
19
26
  <li>
20
- <LinkTo
21
- @route="distribution.inquiry.detail.index"
22
- @model={{decode-id @inquiry.id}}
23
- >
27
+ <LinkTo @route="inquiry.detail.index" @model={{decode-id @inquiry.id}}>
24
28
  {{t "caluma.distribution.edit.link"}}
25
29
  </LinkTo>
26
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>
27
36
  {{/if}}
28
37
  {{#if (can "answer inquiry" @inquiry)}}
29
38
  <li>
30
- <LinkTo
31
- @route="distribution.inquiry.detail.answer"
32
- @model={{decode-id @inquiry.id}}
33
- >
39
+ <LinkTo @route="inquiry.detail.answer" @model={{decode-id @inquiry.id}}>
34
40
  {{t "caluma.distribution.answer.link"}}
35
41
  </LinkTo>
36
42
  </li>
37
43
  {{/if}}
38
44
  </ul>
39
45
 
40
- <p class="uk-margin-remove-bottom">{{this.info}}</p>
46
+ {{#if this.info}}
47
+ <p class="uk-margin-remove">{{this.info}}</p>
48
+ {{/if}}
@@ -1,6 +1,22 @@
1
+ import { inject as service } from "@ember/service";
1
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";
2
10
 
3
11
  export default class InquiryDialogInquiryPartComponent extends Component {
12
+ @service notification;
13
+ @service router;
14
+ @service intl;
15
+
16
+ @queryManager apollo;
17
+
18
+ @config config;
19
+
4
20
  get date() {
5
21
  const key = this.args.type === "request" ? "createdAt" : "closedAt";
6
22
 
@@ -17,4 +33,27 @@ export default class InquiryDialogInquiryPartComponent extends Component {
17
33
 
18
34
  return document.info.edges[0]?.node.value;
19
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
+ }
20
59
  }
@@ -1,4 +1,7 @@
1
- <article class="uk-card uk-card-default uk-margin">
1
+ <article
2
+ class="uk-card uk-card-default uk-margin
3
+ {{if this.config.ui.small 'uk-card-small'}}"
4
+ >
2
5
  <div class="uk-card-body">
3
6
  <InquiryDialog::InquiryDeadline @inquiry={{@inquiry}} />
4
7
 
@@ -1,6 +1,10 @@
1
1
  import Component from "@glimmer/component";
2
2
 
3
+ import config from "@projectcaluma/ember-distribution/config";
4
+
3
5
  export default class InquiryDialogInquiryComponent extends Component {
6
+ @config config;
7
+
4
8
  get hasAnswer() {
5
9
  return this.args.inquiry.status === "COMPLETED";
6
10
  }