@projectcaluma/ember-core 10.1.0 → 11.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.
@@ -1,4 +1,14 @@
1
1
  import { getOwner, setOwner } from "@ember/application";
2
+ import { useResource } from "ember-resources";
3
+
4
+ import CalumaQueryResource from "@projectcaluma/ember-core/caluma-query/resource";
5
+
6
+ export function useCalumaQuery(destroyable, query, thunk) {
7
+ return useResource(destroyable, CalumaQueryResource, () => ({
8
+ query,
9
+ ...thunk(),
10
+ }));
11
+ }
2
12
 
3
13
  export default function calumaQuery({ query, options = {} }) {
4
14
  return function (_, name) {
@@ -7,7 +7,7 @@ import {
7
7
  lastValue,
8
8
  restartableTask,
9
9
  task,
10
- } from "ember-concurrency-decorators";
10
+ } from "ember-concurrency";
11
11
  import { gql } from "graphql-tag";
12
12
 
13
13
  export default class BaseQuery {
@@ -0,0 +1,71 @@
1
+ import { getOwner, setOwner } from "@ember/application";
2
+ import { destroy } from "@ember/destroyable";
3
+ import { action } from "@ember/object";
4
+ import { tracked } from "@glimmer/tracking";
5
+ import { LifecycleResource } from "ember-resources";
6
+
7
+ export default class CalumaQueryResource extends LifecycleResource {
8
+ @tracked query;
9
+
10
+ setup() {
11
+ const { query, options, queryArgs } = this._parsedArgs;
12
+
13
+ this.query = query(options);
14
+ setOwner(this.query, getOwner(this));
15
+
16
+ this.query.fetch(queryArgs);
17
+ }
18
+
19
+ update() {
20
+ this._updateOptions();
21
+
22
+ this.query.fetch(this._parsedArgs.queryArgs);
23
+ }
24
+
25
+ teardown() {
26
+ destroy(this.query);
27
+ }
28
+
29
+ get _parsedArgs() {
30
+ const { query, options = {}, ...queryArgs } = this.args.named;
31
+
32
+ return { query, options, queryArgs };
33
+ }
34
+
35
+ _updateOptions() {
36
+ ["pageSize", "processAll", "processNew", "queryOptions"].forEach(
37
+ (optionKey) => {
38
+ const option = this._parsedArgs.options[optionKey];
39
+
40
+ if (option !== undefined && option !== this.query[optionKey]) {
41
+ this.query[optionKey] = option;
42
+ }
43
+ }
44
+ );
45
+ }
46
+
47
+ @action
48
+ fetchMore(event) {
49
+ if (event instanceof Event) {
50
+ event.preventDefault();
51
+ }
52
+
53
+ this.query.fetchMore();
54
+ }
55
+
56
+ get value() {
57
+ return this.query.value;
58
+ }
59
+
60
+ get hasNextPage() {
61
+ return this.query.hasNextPage;
62
+ }
63
+
64
+ get totalCount() {
65
+ return this.query.totalCount;
66
+ }
67
+
68
+ get isLoading() {
69
+ return this.query.isLoading;
70
+ }
71
+ }
@@ -7,7 +7,9 @@ import { dasherize } from "@ember/string";
7
7
  const parse = (raw) => dasherize(raw.replace("Question", ""));
8
8
 
9
9
  export function hasQuestionType(obj, ...expected) {
10
- return expected.map(parse).includes(parse(obj?.__typename || ""));
10
+ return expected
11
+ .map(parse)
12
+ .includes(parse((obj?.raw?.__typename ?? obj?.__typename) || ""));
11
13
  }
12
14
 
13
15
  export default helper(([obj, ...expected]) =>
@@ -1,12 +1,12 @@
1
1
  import { InMemoryCache, defaultDataIdFromObject } from "@apollo/client/cache";
2
2
  import { setContext } from "@apollo/client/link/context";
3
- import Mixin from "@ember/object/mixin";
4
3
  import { inject as service } from "@ember/service";
4
+ import ApolloService from "ember-apollo-client/services/apollo";
5
5
 
6
6
  import possibleTypes from "@projectcaluma/ember-core/-private/possible-types";
7
7
 
8
- export default Mixin.create({
9
- intl: service(),
8
+ export default class CalumaApolloService extends ApolloService {
9
+ @service intl;
10
10
 
11
11
  cache() {
12
12
  return new InMemoryCache({
@@ -17,10 +17,10 @@ export default Mixin.create({
17
17
  _id: obj.slug || obj._id,
18
18
  }),
19
19
  });
20
- },
20
+ }
21
21
 
22
- link(...args) {
23
- const httpLink = this._super(...args);
22
+ link() {
23
+ const httpLink = super.link();
24
24
 
25
25
  const localeLink = setContext((request, context) => ({
26
26
  ...context,
@@ -32,5 +32,5 @@ export default Mixin.create({
32
32
  }));
33
33
 
34
34
  return localeLink.concat(httpLink);
35
- },
36
- });
35
+ }
36
+ }
@@ -2,7 +2,7 @@ import { assert } from "@ember/debug";
2
2
  import Service from "@ember/service";
3
3
  import { isEmpty } from "@ember/utils";
4
4
  import { queryManager } from "ember-apollo-client";
5
- import { enqueueTask } from "ember-concurrency-decorators";
5
+ import { enqueueTask } from "ember-concurrency";
6
6
 
7
7
  import allFormatValidatorsQuery from "@projectcaluma/ember-core/gql/queries/all-format-validators.graphql";
8
8
 
@@ -0,0 +1 @@
1
+ export { default } from "@projectcaluma/ember-core/services/apollo";
package/index.js CHANGED
@@ -1,30 +1,5 @@
1
1
  "use strict";
2
2
 
3
- const DEFAULT_OPTIONS = {
4
- includeProxyPolyfill: true,
5
- includeIntersectionObserverPolyfill: true,
6
- };
7
-
8
3
  module.exports = {
9
4
  name: require("./package").name,
10
-
11
- _getOptions() {
12
- const app = this._findHost();
13
-
14
- return Object.assign({}, DEFAULT_OPTIONS, app.options["ember-caluma"]);
15
- },
16
-
17
- included(...args) {
18
- this._super.included.apply(this, args);
19
-
20
- if (this._getOptions().includeProxyPolyfill) {
21
- this.import("node_modules/proxy-polyfill/proxy.min.js");
22
- }
23
-
24
- if (this._getOptions().includeIntersectionObserverPolyfill) {
25
- this.import(
26
- "node_modules/intersection-observer/intersection-observer.js"
27
- );
28
- }
29
- },
30
5
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectcaluma/ember-core",
3
- "version": "10.1.0",
3
+ "version": "11.0.0-beta.1",
4
4
  "description": "Ember core addon for working with Caluma.",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -19,31 +19,29 @@
19
19
  "ember-apollo-client": "^3.2.0",
20
20
  "ember-auto-import": "^2.2.3",
21
21
  "ember-changeset-validations": "^3.16.0",
22
- "ember-cli-babel": "^7.26.6",
22
+ "ember-cli-babel": "^7.26.11",
23
23
  "ember-cli-htmlbars": "^6.0.1",
24
24
  "ember-concurrency": "^2.2.0",
25
- "ember-concurrency-decorators": "^2.0.3",
26
25
  "ember-fetch": "^8.0.4",
27
26
  "ember-inflector": "^4.0.2",
28
- "ember-intl": "^5.7.0",
29
- "graphql": "^15.6.1",
27
+ "ember-intl": "^5.7.2",
28
+ "ember-resources": "^4.1.3",
29
+ "graphql": "^15.8.0",
30
30
  "graphql-tag": "^2.12.6",
31
- "intersection-observer": "^0.12.0",
32
31
  "jexl": "^2.3.0",
33
32
  "lodash.clonedeep": "^4.5.0",
34
33
  "moment": "^2.29.1",
35
- "proxy-polyfill": "^0.3.2",
36
- "slugify": "^1.6.3"
34
+ "slugify": "^1.6.5"
37
35
  },
38
36
  "devDependencies": {
39
37
  "@ember/optional-features": "2.0.0",
40
38
  "@ember/render-modifiers": "2.0.2",
41
39
  "@ember/test-helpers": "2.6.0",
42
- "@embroider/test-setup": "0.48.1",
40
+ "@embroider/test-setup": "0.49.0",
43
41
  "@glimmer/component": "1.0.4",
44
- "@projectcaluma/ember-testing": "10.0.0",
42
+ "@projectcaluma/ember-testing": "10.1.0",
45
43
  "broccoli-asset-rev": "3.0.0",
46
- "ember-cli": "3.28.4",
44
+ "ember-cli": "3.28.5",
47
45
  "ember-cli-code-coverage": "1.0.3",
48
46
  "ember-cli-dependency-checker": "3.2.0",
49
47
  "ember-cli-inject-live-reload": "2.1.0",
@@ -73,6 +71,7 @@
73
71
  "edition": "octane"
74
72
  },
75
73
  "ember-addon": {
76
- "configPath": "tests/dummy/config"
74
+ "configPath": "tests/dummy/config",
75
+ "after": "ember-apollo-client"
77
76
  }
78
77
  }
@@ -1,50 +0,0 @@
1
- import Helper from "@ember/component/helper";
2
- import { warn } from "@ember/debug";
3
- import { inject as service } from "@ember/service";
4
-
5
- /**
6
- * Helper for getting the right widget.
7
- *
8
- * This helper expects n objects as positional parameters. It checks if the
9
- * object has a widget override in it's metadata. If one exists it checks if
10
- * said widget was registered in the caluma options service and then returns
11
- * the widget name. If it doesn't have a valid widget, the next object will be
12
- * checked. If no object returns a valid widget, the passed default widget will
13
- * be used.
14
- *
15
- * ```hbs
16
- * {{component (get-widget field.question someobject default="cf-form") foo=bar}}
17
- * ```
18
- *
19
- * @function getWidget
20
- * @param {Array} params
21
- * @param {Object} [options]
22
- * @param {String} [options.default]
23
- */
24
- export default class GetWidgetHelper extends Helper {
25
- @service calumaOptions;
26
-
27
- compute(params, { default: defaultWidget = "cf-field/input" }) {
28
- for (const obj of params) {
29
- const widget = obj?.meta?.widgetOverride;
30
- if (!widget) {
31
- continue;
32
- }
33
- const override =
34
- widget &&
35
- this.calumaOptions
36
- .getComponentOverrides()
37
- .find(({ component }) => component === widget);
38
-
39
- warn(
40
- `Widget override "${widget}" is not registered. Please register it by calling \`calumaOptions.registerComponentOverride\``,
41
- override,
42
- { id: "ember-caluma.unregistered-override" }
43
- );
44
-
45
- if (override) return widget;
46
- }
47
-
48
- return defaultWidget;
49
- }
50
- }
@@ -1,4 +0,0 @@
1
- export {
2
- default,
3
- getWidget,
4
- } from "@projectcaluma/ember-core/helpers/get-widget";