@projectcaluma/ember-form 11.0.0-beta.8 → 11.0.0-beta.9

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ # [@projectcaluma/ember-form-v11.0.0-beta.9](https://github.com/projectcaluma/ember-caluma/compare/@projectcaluma/ember-form-v11.0.0-beta.8...@projectcaluma/ember-form-v11.0.0-beta.9) (2022-02-07)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **action-button:** only hide action button visually if disabled ([e292f09](https://github.com/projectcaluma/ember-caluma/commit/e292f093c33efd0b99a73674f8f83de5f496bf40))
7
+ * **deps:** remove moment altogether and update ember-pikday ([b2f7fa2](https://github.com/projectcaluma/ember-caluma/commit/b2f7fa28fa076897addd36e5964c926c671508ff))
8
+ * **form:** change file download actions to query and network-only ([aa4458e](https://github.com/projectcaluma/ember-caluma/commit/aa4458e944263f0f00ba1684a4f7bbfa83d2efea))
9
+
10
+
11
+ ### BREAKING CHANGES
12
+
13
+ * **deps:** The host app now needs to opt-in to use the default
14
+ pikaday styles: https://github.com/adopted-ember-addons/ember-pikaday#styles
15
+
1
16
  # [@projectcaluma/ember-form-v11.0.0-beta.8](https://github.com/projectcaluma/ember-caluma/compare/@projectcaluma/ember-form-v11.0.0-beta.7...@projectcaluma/ember-form-v11.0.0-beta.8) (2022-02-03)
2
17
 
3
18
 
@@ -1,19 +1,18 @@
1
- {{#unless @disabled}}
2
- <DocumentValidity
3
- @document={{@field.document}}
4
- @validateOnEnter={{this.validateOnEnter}}
5
- as |isValid validate|
6
- >
7
- <WorkItemButton
8
- @workItemId={{this.workItem}}
9
- @mutation={{this.action}}
10
- @label={{@field.question.raw.label}}
11
- @disabled={{and (not-eq isValid null) (not isValid)}}
12
- @color={{this.color}}
13
- @beforeMutate={{fn this.beforeMutate validate}}
14
- @onSuccess={{this.onSuccess}}
15
- @onError={{this.onError}}
16
- @type={{this.type}}
17
- />
18
- </DocumentValidity>
19
- {{/unless}}
1
+ <DocumentValidity
2
+ @document={{@field.document}}
3
+ @validateOnEnter={{this.validateOnEnter}}
4
+ as |isValid validate|
5
+ >
6
+ <WorkItemButton
7
+ @workItemId={{this.workItem}}
8
+ @mutation={{this.action}}
9
+ @label={{@field.question.raw.label}}
10
+ @disabled={{or (and (not-eq isValid null) (not isValid)) @disabled}}
11
+ @color={{this.color}}
12
+ @beforeMutate={{fn this.beforeMutate validate}}
13
+ @onSuccess={{this.onSuccess}}
14
+ @onError={{this.onError}}
15
+ @type={{this.type}}
16
+ class={{if @disabled "uk-hidden"}}
17
+ />
18
+ </DocumentValidity>
@@ -13,13 +13,16 @@
13
13
  readonly
14
14
  />
15
15
  {{else}}
16
- <PikadayInput
16
+ <input
17
17
  class="uk-input"
18
+ type="text"
18
19
  name={{@field.pk}}
19
20
  id={{@field.pk}}
20
- @format="L"
21
- @onSelection={{this.onChange}}
22
- @useUTC={{true}}
23
- @value={{@field.answer.value}}
21
+ {{pikaday
22
+ toString=this.formatDate
23
+ i18n=this.pikadayTranslations
24
+ value=@field.answer.value
25
+ onSelect=this.onChange
26
+ }}
24
27
  />
25
28
  {{/if}}
@@ -1,19 +1,37 @@
1
1
  import { action } from "@ember/object";
2
+ import { inject as service } from "@ember/service";
2
3
  import Component from "@glimmer/component";
3
- import moment from "moment";
4
+ import { DateTime, Info } from "luxon";
5
+ import { cached } from "tracked-toolbox";
4
6
 
5
7
  export default class CfFieldInputDateComponent extends Component {
8
+ @service intl;
9
+
6
10
  @action
7
11
  onChange(date) {
8
12
  // Change Javascript date to ISO string if not null.
9
- this.args.onSave(
10
- date
11
- ? moment({
12
- day: date.getUTCDate(),
13
- month: date.getUTCMonth(),
14
- year: date.getUTCFullYear(),
15
- }).format(moment.HTML5_FMT.DATE)
16
- : null
17
- );
13
+ this.args.onSave(date ? DateTime.fromJSDate(date).toISODate() : null);
14
+ }
15
+
16
+ @action
17
+ formatDate(date) {
18
+ return this.intl.formatDate(date, {
19
+ day: "2-digit",
20
+ month: "2-digit",
21
+ year: "numeric",
22
+ });
23
+ }
24
+
25
+ @cached
26
+ get pikadayTranslations() {
27
+ const locale = this.intl.primaryLocale;
28
+
29
+ return {
30
+ previousMonth: this.intl.t("caluma.form.pikaday.month-previous"),
31
+ nextMonth: this.intl.t("caluma.form.pikaday.month-next"),
32
+ months: Info.months("long", { locale }),
33
+ weekdays: Info.weekdays("long", { locale }),
34
+ weekdaysShort: Info.weekdays("short", { locale }),
35
+ };
18
36
  }
19
37
  }
@@ -22,11 +22,11 @@ export default class CfFieldInputFileComponent extends Component {
22
22
 
23
23
  @action
24
24
  async download() {
25
- const { downloadUrl } = await this.apollo.watchQuery(
25
+ const { downloadUrl } = await this.apollo.query(
26
26
  {
27
27
  query: getFileAnswerInfoQuery,
28
28
  variables: { id: this.args.field.answer.raw.id },
29
- fetchPolicy: "cache-and-network",
29
+ fetchPolicy: "network-only",
30
30
  },
31
31
  "node.fileValue"
32
32
  );
@@ -1,9 +1,24 @@
1
- {{#if this.value.fileAnswerId}}
2
- <UkButton
3
- @color="link"
4
- @label={{this.value.label}}
5
- @onClick={{fn this.download this.value.fileAnswerId}}
6
- />
1
+ {{#if (has-question-type @field.question "choice" "dynamic-choice")}}
2
+ {{@field.selected.label}}
3
+ {{else if (has-question-type
4
+ @field.question "multiple-choice" "multiple-dynamic-choice"
5
+ )}}
6
+ {{#each @field.selected as |opt i|}}{{if (gt i 0) ", "}}{{opt.label}}{{/each}}
7
+ {{else if (has-question-type @field.question "date")}}
8
+ {{format-date
9
+ @field.answer.value
10
+ day="2-digit"
11
+ month="2-digit"
12
+ year="numeric"
13
+ }}
14
+ {{else if (has-question-type @field.question "file")}}
15
+ {{#if @field.answer.value}}
16
+ <UkButton
17
+ @color="link"
18
+ @label={{@field.answer.value.name}}
19
+ @onClick={{fn this.download @field.answer.raw.id}}
20
+ />
21
+ {{/if}}
7
22
  {{else}}
8
- {{this.value.label}}
23
+ {{@field.answer.value}}
9
24
  {{/if}}
@@ -1,50 +1,25 @@
1
1
  import { action } from "@ember/object";
2
2
  import Component from "@glimmer/component";
3
3
  import { queryManager } from "ember-apollo-client";
4
- import moment from "moment";
5
4
 
6
5
  import getFileAnswerInfoQuery from "@projectcaluma/ember-form/gql/queries/fileanswer-info.graphql";
7
6
 
8
7
  export default class CfFieldValueComponent extends Component {
9
8
  @queryManager apollo;
10
9
 
11
- get value() {
12
- const field = this.args.field;
13
-
14
- switch (field.questionType) {
15
- case "ChoiceQuestion":
16
- case "DynamicChoiceQuestion": {
17
- return field.selected;
18
- }
19
- case "MultipleChoiceQuestion":
20
- case "DynamicMultipleChoiceQuestion": {
21
- return { label: field.selected.map(({ label }) => label).join(", ") };
22
- }
23
- case "FileQuestion": {
24
- const answerValue = field.answer.value;
25
- return {
26
- fileAnswerId: answerValue && field.answer.raw.id,
27
- label: answerValue?.name,
28
- };
29
- }
30
- case "DateQuestion": {
31
- return {
32
- label: field.answer.value && moment(field.answer.value).format("L"),
33
- };
34
- }
35
-
36
- default:
37
- return { label: field.answer.value };
38
- }
39
- }
40
-
41
10
  @action
42
11
  async download(id) {
43
12
  const { downloadUrl } = await this.apollo.query(
44
- { query: getFileAnswerInfoQuery, variables: { id } },
13
+ {
14
+ query: getFileAnswerInfoQuery,
15
+ variables: { id },
16
+ fetchPolicy: "network-only",
17
+ },
45
18
  "node.fileValue"
46
19
  );
47
20
 
48
- window.open(downloadUrl, "_blank");
21
+ if (downloadUrl) {
22
+ window.open(downloadUrl, "_blank");
23
+ }
49
24
  }
50
25
  }
@@ -1,6 +1,10 @@
1
1
  {{#if this.visible}}
2
2
  <div
3
- class="uk-margin"
3
+ class="uk-margin
4
+ {{if
5
+ (and @disabled (has-question-type @field.question 'action-button'))
6
+ 'uk-hidden'
7
+ }}"
4
8
  {{did-insert this.registerComponent}}
5
9
  {{will-destroy this.unregisterComponent}}
6
10
  >
@@ -31,11 +31,7 @@ export default class CfFieldComponent extends Component {
31
31
  get visible() {
32
32
  return (
33
33
  !this.args.field?.hidden &&
34
- !hasQuestionType(this.args.field?.question, "form") &&
35
- !(
36
- hasQuestionType(this.args.field?.question, "action-button") &&
37
- this.args.disabled
38
- )
34
+ !hasQuestionType(this.args.field?.question, "form")
39
35
  );
40
36
  }
41
37
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectcaluma/ember-form",
3
- "version": "11.0.0-beta.8",
3
+ "version": "11.0.0-beta.9",
4
4
  "description": "Ember addon for rendering Caluma forms.",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -16,7 +16,7 @@
16
16
  "dependencies": {
17
17
  "@glimmer/component": "^1.0.4",
18
18
  "@glimmer/tracking": "^1.0.4",
19
- "@projectcaluma/ember-core": "^11.0.0-beta.3",
19
+ "@projectcaluma/ember-core": "^11.0.0-beta.4",
20
20
  "ember-apollo-client": "^3.2.0",
21
21
  "ember-auto-import": "^2.4.0",
22
22
  "ember-autoresize-modifier": "^0.5.0",
@@ -29,15 +29,15 @@
29
29
  "ember-in-viewport": "^4.0.0",
30
30
  "ember-intl": "^5.7.2",
31
31
  "ember-math-helpers": "^2.18.1",
32
- "ember-pikaday": "^3.0.0",
32
+ "ember-pikaday": "^4.0.0",
33
33
  "ember-power-select": "^5.0.3",
34
- "ember-resources": "^4.2.0",
35
- "ember-uikit": "^5.0.0-beta.11",
34
+ "ember-resources": "^4.3.1",
35
+ "ember-uikit": "^5.0.0",
36
36
  "ember-validators": "^4.1.0",
37
37
  "graphql": "^15.8.0",
38
38
  "jexl": "^2.3.0",
39
39
  "lodash.isequal": "^4.5.0",
40
- "moment": "^2.29.1",
40
+ "luxon": "^2.3.0",
41
41
  "tracked-toolbox": "^1.2.3"
42
42
  },
43
43
  "devDependencies": {
@@ -45,7 +45,7 @@
45
45
  "@ember/test-helpers": "2.6.0",
46
46
  "@embroider/test-setup": "1.0.0",
47
47
  "@faker-js/faker": "6.0.0-alpha.5",
48
- "@projectcaluma/ember-testing": "11.0.0-beta.1",
48
+ "@projectcaluma/ember-testing": "11.0.0-beta.2",
49
49
  "@projectcaluma/ember-workflow": "11.0.0-beta.3",
50
50
  "broccoli-asset-rev": "3.0.0",
51
51
  "ember-cli": "3.28.5",
@@ -1,35 +0,0 @@
1
- import EmberObject from "@ember/object";
2
- import { inject as service } from "@ember/service";
3
- import moment from "moment";
4
-
5
- class Translations extends EmberObject {
6
- @service intl;
7
-
8
- get previousMonth() {
9
- return this.intl.t("caluma.form.pikaday.month-previous");
10
- }
11
-
12
- get nextMonth() {
13
- return this.intl.t("caluma.form.pikaday.month-next");
14
- }
15
-
16
- months = moment.localeData().months();
17
- weekdays = moment.localeData().weekdays();
18
- weekdaysShort = moment.localeData().weekdaysShort();
19
- }
20
-
21
- export function initialize(applicationInstance) {
22
- applicationInstance.register("pikaday-i18n:main", Translations, {
23
- singleton: true,
24
- });
25
- applicationInstance.inject(
26
- "component:pikaday-input",
27
- "i18n",
28
- "pikaday-i18n:main"
29
- );
30
- }
31
-
32
- export default {
33
- name: "setup-pikaday-i18n",
34
- initialize,
35
- };