├── app ├── .gitkeep └── services │ └── apollo.js ├── addon ├── .gitkeep ├── index.js ├── utils │ └── inject.js ├── -private │ └── apollo │ │ ├── setup-hooks.js │ │ └── query-manager.js └── services │ └── apollo.js ├── vendor └── .gitkeep ├── tests ├── unit │ ├── .gitkeep │ ├── build │ │ ├── test-fragment.graphql │ │ ├── test-subscription.graphql │ │ ├── test-query.graphql │ │ ├── test-fragment-with-fragment.graphql │ │ ├── test-mutation.graphql │ │ ├── test-query-with-nested-fragment.graphql │ │ └── graphql-filter-test.js │ ├── -private │ │ ├── query-manager-macro-decorator-test.js │ │ ├── query-manager-hooks-object-test.js │ │ ├── query-manager-hooks-component-test.js │ │ └── query-manager-hooks-route-test.js │ └── services │ │ └── apollo-test.js ├── integration │ └── .gitkeep ├── dummy │ ├── app │ │ ├── helpers │ │ │ └── .gitkeep │ │ ├── routes │ │ │ ├── .gitkeep │ │ │ ├── new-review.js │ │ │ ├── index.js │ │ │ └── movie.js │ │ ├── components │ │ │ ├── .gitkeep │ │ │ ├── movie-card.js │ │ │ ├── movie-detail.js │ │ │ └── create-review.js │ │ ├── controllers │ │ │ ├── .gitkeep │ │ │ ├── index.js │ │ │ └── movie.js │ │ ├── templates │ │ │ ├── application.hbs │ │ │ ├── new-review.hbs │ │ │ ├── index.hbs │ │ │ ├── components │ │ │ │ ├── movie-detail.hbs │ │ │ │ ├── create-review.hbs │ │ │ │ └── movie-card.hbs │ │ │ └── movie.hbs │ │ ├── gql │ │ │ ├── fragments │ │ │ │ └── review-fragment.graphql │ │ │ ├── mutations │ │ │ │ ├── change-movie-title.graphql │ │ │ │ └── create-review.graphql │ │ │ └── queries │ │ │ │ ├── movies.graphql │ │ │ │ └── movie.graphql │ │ ├── router.js │ │ ├── app.js │ │ ├── index.html │ │ ├── schema.graphql │ │ ├── utils │ │ │ └── graphql-type-query.js │ │ ├── styles │ │ │ └── app.css │ │ └── instance-initializers │ │ │ └── mock-graphql.js │ ├── public │ │ └── robots.txt │ └── config │ │ ├── optional-features.json │ │ ├── targets.js │ │ ├── ember-cli-update.json │ │ └── environment.js ├── test-helper.js ├── helpers │ ├── setup.js │ ├── index.js │ └── start-pretender.js ├── index.html └── acceptance │ ├── computed-with-watch-query-test.js │ ├── mutations-test.js │ ├── array-watch-query-test.js │ ├── query-and-unsubscribe-test.js │ └── watch-query-test.js ├── .watchmanconfig ├── .prettierrc.js ├── config ├── environment.js └── ember-try.js ├── .template-lintrc.js ├── blueprints └── ember-apollo-client │ └── index.js ├── .github ├── workflows │ ├── release-drafter.yml │ └── ci.yml └── release-drafter.yml ├── .editorconfig ├── .eslintignore ├── .prettierignore ├── .ember-cli ├── .gitignore ├── testem.js ├── CONTRIBUTING.md ├── .npmignore ├── ember-cli-build.js ├── LICENSE.md ├── .gqlconfig ├── .eslintrc.js ├── index.js ├── package.json ├── CHANGELOG.md └── README.md /app/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /addon/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vendor/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/unit/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/integration/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/dummy/app/helpers/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/dummy/app/routes/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/dummy/app/components/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/dummy/app/controllers/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/dummy/app/templates/application.hbs: -------------------------------------------------------------------------------- 1 | {{outlet}} 2 | -------------------------------------------------------------------------------- /.watchmanconfig: -------------------------------------------------------------------------------- 1 | { 2 | "ignore_dirs": ["tmp", "dist"] 3 | } 4 | -------------------------------------------------------------------------------- /app/services/apollo.js: -------------------------------------------------------------------------------- 1 | export { default } from 'ember-apollo-client/services/apollo'; 2 | -------------------------------------------------------------------------------- /tests/dummy/public/robots.txt: -------------------------------------------------------------------------------- 1 | # http://www.robotstxt.org 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /tests/unit/build/test-fragment.graphql: -------------------------------------------------------------------------------- 1 | fragment testFragment on Object { 2 | name 3 | } 4 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | singleQuote: true, 3 | trailingComma: 'es5', 4 | }; 5 | -------------------------------------------------------------------------------- /tests/unit/build/test-subscription.graphql: -------------------------------------------------------------------------------- 1 | subscription TestSubscription { 2 | subject { 3 | name 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /tests/dummy/app/gql/fragments/review-fragment.graphql: -------------------------------------------------------------------------------- 1 | fragment ReviewFragment on Review { 2 | stars 3 | commentary 4 | } 5 | -------------------------------------------------------------------------------- /tests/dummy/app/routes/new-review.js: -------------------------------------------------------------------------------- 1 | import Route from '@ember/routing/route'; 2 | 3 | export default Route.extend({}); 4 | -------------------------------------------------------------------------------- /config/environment.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function (/* environment, appConfig */) { 4 | return {}; 5 | }; 6 | -------------------------------------------------------------------------------- /tests/dummy/app/templates/new-review.hbs: -------------------------------------------------------------------------------- 1 |

New Review

2 | 3 | 4 | Back 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.template-lintrc.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | extends: 'recommended', 5 | rules: { 6 | 'no-action': false, 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /tests/unit/build/test-query.graphql: -------------------------------------------------------------------------------- 1 | #import testFragment from './test-fragment' 2 | 3 | query TestQuery { 4 | subject { 5 | ...testFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /tests/unit/build/test-fragment-with-fragment.graphql: -------------------------------------------------------------------------------- 1 | #import testFragment from './test-fragment' 2 | 3 | fragment testFragmentWithFragment on Object { 4 | ...testFragment 5 | } 6 | -------------------------------------------------------------------------------- /addon/index.js: -------------------------------------------------------------------------------- 1 | export { 2 | default as QueryManager, 3 | queryManager, 4 | } from './-private/apollo/query-manager'; 5 | export { getObservable, unsubscribe } from './services/apollo'; 6 | -------------------------------------------------------------------------------- /tests/dummy/app/controllers/index.js: -------------------------------------------------------------------------------- 1 | import Controller from '@ember/controller'; 2 | 3 | export default Controller.extend({ 4 | queryParams: ['topRated'], 5 | topRated: false, 6 | }); 7 | -------------------------------------------------------------------------------- /tests/dummy/app/gql/mutations/change-movie-title.graphql: -------------------------------------------------------------------------------- 1 | mutation ChangeMovieTitle($id: ID!, $title: String!) { 2 | changeMovieTitle(id: $id, title: $title) { 3 | id 4 | title 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /tests/unit/build/test-mutation.graphql: -------------------------------------------------------------------------------- 1 | #import testFragment from './test-fragment' 2 | 3 | mutation TestMutation($id: ID!) { 4 | subject_update(id: $id) { 5 | ...testFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /tests/dummy/config/optional-features.json: -------------------------------------------------------------------------------- 1 | { 2 | "application-template-wrapper": false, 3 | "default-async-observers": true, 4 | "jquery-integration": false, 5 | "template-only-glimmer-components": true 6 | } 7 | -------------------------------------------------------------------------------- /tests/dummy/config/targets.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const browsers = [ 4 | 'last 1 Chrome versions', 5 | 'last 1 Firefox versions', 6 | 'last 1 Safari versions', 7 | ]; 8 | 9 | module.exports = { 10 | browsers, 11 | }; 12 | -------------------------------------------------------------------------------- /addon/utils/inject.js: -------------------------------------------------------------------------------- 1 | export default function (registry, factoryNameOrType, property, injectionName) { 2 | const inject = registry.inject || registry.injection; 3 | inject.call(registry, factoryNameOrType, property, injectionName); 4 | } 5 | -------------------------------------------------------------------------------- /tests/dummy/app/gql/queries/movies.graphql: -------------------------------------------------------------------------------- 1 | query GetMovies($topRated: Boolean) { 2 | movies(topRated: $topRated) { 3 | id 4 | title 5 | overview 6 | voteAverage 7 | posterPath 8 | releaseDate 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tests/dummy/app/gql/mutations/create-review.graphql: -------------------------------------------------------------------------------- 1 | #import ReviewFragment from 'dummy/gql/fragments/review-fragment' 2 | 3 | mutation createReview($movieId: ID!, $review: ReviewInput!) { 4 | createReview(movieId: $movieId, review: $review) { 5 | ...ReviewFragment 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /tests/dummy/app/controllers/movie.js: -------------------------------------------------------------------------------- 1 | import Controller from '@ember/controller'; 2 | 3 | export default class MovieController extends Controller { 4 | get reviews() { 5 | return this.model.movie.reviews.edges.map((edge) => { 6 | return edge.node; 7 | }); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /tests/unit/build/test-query-with-nested-fragment.graphql: -------------------------------------------------------------------------------- 1 | #import testFragment from './test-fragment' 2 | #import testFragmentWithFragment from './test-fragment-with-fragment' 3 | 4 | query TestQueryWithNestedFragment { 5 | subject { 6 | ...testFragmentWithFragment 7 | ...testFragment 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /tests/dummy/app/gql/queries/movie.graphql: -------------------------------------------------------------------------------- 1 | query GetMovie($id: ID!) { 2 | movie(id: $id) { 3 | id 4 | title 5 | overview 6 | voteAverage 7 | posterPath 8 | releaseDate 9 | reviews { 10 | edges { 11 | node { 12 | stars 13 | } 14 | } 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tests/test-helper.js: -------------------------------------------------------------------------------- 1 | import Application from 'dummy/app'; 2 | import config from 'dummy/config/environment'; 3 | import * as QUnit from 'qunit'; 4 | import { setApplication } from '@ember/test-helpers'; 5 | import { setup } from 'qunit-dom'; 6 | import { start } from 'ember-qunit'; 7 | 8 | setApplication(Application.create(config.APP)); 9 | 10 | setup(QUnit.assert); 11 | 12 | start(); 13 | -------------------------------------------------------------------------------- /tests/dummy/app/router.js: -------------------------------------------------------------------------------- 1 | import EmberRouter from '@ember/routing/router'; 2 | import config from 'dummy/config/environment'; 3 | 4 | const Router = EmberRouter.extend({ 5 | location: config.locationType, 6 | rootURL: config.rootURL, 7 | }); 8 | 9 | Router.map(function () { 10 | this.route('new-review'); 11 | this.route('movie', { path: '/movie/:id' }); 12 | }); 13 | 14 | export default Router; 15 | -------------------------------------------------------------------------------- /blueprints/ember-apollo-client/index.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | module.exports = { 3 | description: 'Add ember-fetch in the consumer app', 4 | 5 | normalizeEntityName() {}, 6 | 7 | /* 8 | * This is necessary until this is fixed 9 | * https://github.com/ember-cli/ember-fetch/issues/98 10 | */ 11 | afterInstall() { 12 | return this.addPackagesToProject([{ name: 'graphql', target: '^16.0.0' }]); 13 | }, 14 | }; 15 | -------------------------------------------------------------------------------- /.github/workflows/release-drafter.yml: -------------------------------------------------------------------------------- 1 | name: Release Drafter 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | draftRelease: 10 | runs-on: ubuntu-latest 11 | 12 | name: Draft Release 13 | steps: 14 | - uses: actions/checkout@master 15 | - name: Draft Release 16 | uses: toolmantim/release-drafter@v5.2.0 17 | env: 18 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 19 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | [*] 8 | end_of_line = lf 9 | charset = utf-8 10 | trim_trailing_whitespace = true 11 | insert_final_newline = true 12 | indent_style = space 13 | indent_size = 2 14 | 15 | [*.hbs] 16 | insert_final_newline = false 17 | 18 | [*.{diff,md}] 19 | trim_trailing_whitespace = false 20 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | # unconventional js 2 | /blueprints/*/files/ 3 | /vendor/ 4 | 5 | # compiled output 6 | /dist/ 7 | /tmp/ 8 | 9 | # dependencies 10 | /bower_components/ 11 | /node_modules/ 12 | 13 | # misc 14 | /coverage/ 15 | !.* 16 | .*/ 17 | .eslintcache 18 | 19 | # ember-try 20 | /.node_modules.ember-try/ 21 | /bower.json.ember-try 22 | /npm-shrinkwrap.json.ember-try 23 | /package.json.ember-try 24 | /package-lock.json.ember-try 25 | /yarn.lock.ember-try 26 | -------------------------------------------------------------------------------- /tests/dummy/app/app.js: -------------------------------------------------------------------------------- 1 | import Application from '@ember/application'; 2 | import Resolver from 'ember-resolver'; 3 | import loadInitializers from 'ember-load-initializers'; 4 | import config from 'dummy/config/environment'; 5 | 6 | const App = Application.extend({ 7 | modulePrefix: config.modulePrefix, 8 | podModulePrefix: config.podModulePrefix, 9 | Resolver, 10 | }); 11 | 12 | loadInitializers(App, config.modulePrefix); 13 | 14 | export default App; 15 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # unconventional js 2 | /blueprints/*/files/ 3 | /vendor/ 4 | 5 | # compiled output 6 | /dist/ 7 | /tmp/ 8 | 9 | # dependencies 10 | /bower_components/ 11 | /node_modules/ 12 | 13 | # misc 14 | /coverage/ 15 | !.* 16 | .eslintcache 17 | .lint-todo/ 18 | 19 | # ember-try 20 | /.node_modules.ember-try/ 21 | /bower.json.ember-try 22 | /npm-shrinkwrap.json.ember-try 23 | /package.json.ember-try 24 | /package-lock.json.ember-try 25 | /yarn.lock.ember-try 26 | -------------------------------------------------------------------------------- /tests/helpers/setup.js: -------------------------------------------------------------------------------- 1 | import { setupApplicationTest as defaultSetup } from 'ember-qunit'; 2 | import startPretender from '../helpers/start-pretender'; 3 | 4 | function setupPretender(hooks) { 5 | hooks.beforeEach(function () { 6 | this.pretender = startPretender(); 7 | }); 8 | 9 | hooks.afterEach(function () { 10 | this.pretender.shutdown(); 11 | }); 12 | } 13 | 14 | export function setupApplicationTest(hooks) { 15 | defaultSetup(hooks); 16 | setupPretender(hooks); 17 | } 18 | -------------------------------------------------------------------------------- /tests/dummy/app/components/movie-card.js: -------------------------------------------------------------------------------- 1 | import Component from '@ember/component'; 2 | import layout from '../templates/components/movie-card'; 3 | import { computed } from '@ember/object'; 4 | 5 | export default Component.extend({ 6 | layout, 7 | 8 | formattedReleaseDate: computed('movie.releaseDate', function () { 9 | if (this.movie.releaseDate) { 10 | return new Intl.DateTimeFormat('en-US', { dateStyle: 'long' }).format( 11 | new Date(this.movie.releaseDate + ' 00:00:00') 12 | ); 13 | } 14 | 15 | return ''; 16 | }), 17 | }); 18 | -------------------------------------------------------------------------------- /tests/dummy/config/ember-cli-update.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": "1.0.0", 3 | "packages": [ 4 | { 5 | "name": "ember-cli", 6 | "version": "4.8.1", 7 | "blueprints": [ 8 | { 9 | "name": "addon", 10 | "outputRepo": "https://github.com/ember-cli/ember-addon-output", 11 | "codemodsSource": "ember-addon-codemods-manifest@1", 12 | "isBaseBlueprint": true, 13 | "options": [ 14 | "--yarn", 15 | "--no-welcome" 16 | ] 17 | } 18 | ] 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /.ember-cli: -------------------------------------------------------------------------------- 1 | { 2 | /** 3 | Ember CLI sends analytics information by default. The data is completely 4 | anonymous, but there are times when you might want to disable this behavior. 5 | 6 | Setting `disableAnalytics` to true will prevent any data from being sent. 7 | */ 8 | "disableAnalytics": false, 9 | 10 | /** 11 | Setting `isTypeScriptProject` to true will force the blueprint generators to generate TypeScript 12 | rather than JavaScript by default, when a TypeScript version of a given blueprint is available. 13 | */ 14 | "isTypeScriptProject": false 15 | } 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist/ 5 | /tmp/ 6 | 7 | # dependencies 8 | /bower_components/ 9 | /node_modules/ 10 | 11 | # misc 12 | /.env* 13 | /.pnp* 14 | /.sass-cache 15 | /.eslintcache 16 | /connect.lock 17 | /coverage/ 18 | /libpeerconnection.log 19 | /npm-debug.log* 20 | /testem.log 21 | /yarn-error.log 22 | jsconfig.json 23 | 24 | # ember-try 25 | /.node_modules.ember-try/ 26 | /bower.json.ember-try 27 | /npm-shrinkwrap.json.ember-try 28 | /package.json.ember-try 29 | /package-lock.json.ember-try 30 | /yarn.lock.ember-try 31 | 32 | # broccoli-debug 33 | /DEBUG/ 34 | -------------------------------------------------------------------------------- /tests/dummy/app/routes/index.js: -------------------------------------------------------------------------------- 1 | import Route from '@ember/routing/route'; 2 | import { queryManager, getObservable } from 'ember-apollo-client'; 3 | import query from 'dummy/gql/queries/movies'; 4 | 5 | export default Route.extend({ 6 | apollo: queryManager(), 7 | 8 | queryParams: { 9 | topRated: { 10 | refreshModel: true, 11 | }, 12 | }, 13 | 14 | model({ topRated }) { 15 | return this.apollo.watchQuery({ 16 | query, 17 | variables: { 18 | topRated, 19 | }, 20 | }); 21 | }, 22 | 23 | actions: { 24 | refetchData(model) { 25 | const observable = getObservable(model); 26 | observable.refetch(); 27 | }, 28 | }, 29 | }); 30 | -------------------------------------------------------------------------------- /testem.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | test_page: 'tests/index.html?hidepassed', 5 | framework: 'qunit', 6 | disable_watching: true, 7 | client_decycle_depth: 10, 8 | launch_in_ci: ['Chrome'], 9 | launch_in_dev: ['Chrome'], 10 | browser_start_timeout: 120, 11 | browser_args: { 12 | Chrome: { 13 | ci: [ 14 | // --no-sandbox is needed when running Chrome inside a container 15 | process.env.CI ? '--no-sandbox' : null, 16 | '--headless', 17 | '--disable-dev-shm-usage', 18 | '--disable-software-rasterizer', 19 | '--mute-audio', 20 | '--remote-debugging-port=0', 21 | '--window-size=1440,900', 22 | ].filter(Boolean), 23 | }, 24 | }, 25 | }; 26 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How To Contribute 2 | 3 | ## Installation 4 | 5 | * `git clone ` 6 | * `cd my-addon` 7 | * `npm install` 8 | 9 | ## Linting 10 | 11 | * `npm run lint:hbs` 12 | * `npm run lint:js` 13 | * `npm run lint:js -- --fix` 14 | 15 | ## Running tests 16 | 17 | * `ember test` – Runs the test suite on the current Ember version 18 | * `ember test --server` – Runs the test suite in "watch mode" 19 | * `ember try:each` – Runs the test suite against multiple Ember versions 20 | 21 | ## Running the dummy application 22 | 23 | * `ember serve` 24 | * Visit the dummy application at [http://localhost:4200](http://localhost:4200). 25 | 26 | For more information on using ember-cli, visit [https://ember-cli.com/](https://ember-cli.com/). 27 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # compiled output 2 | /dist/ 3 | /tmp/ 4 | 5 | # dependencies 6 | /bower_components/ 7 | 8 | # misc 9 | /.bowerrc 10 | /.editorconfig 11 | /.ember-cli 12 | /.env* 13 | /.eslintcache 14 | /.eslintignore 15 | /.eslintrc.js 16 | /.git/ 17 | /.github/ 18 | /.gitignore 19 | /.prettierignore 20 | /.prettierrc.js 21 | /.template-lintrc.js 22 | /.travis.yml 23 | /.watchmanconfig 24 | /bower.json 25 | /config/ember-try.js 26 | /CONTRIBUTING.md 27 | /ember-cli-build.js 28 | /testem.js 29 | /tests/ 30 | /yarn-error.log 31 | /yarn.lock 32 | .gitkeep 33 | /.github 34 | .gqlconfig 35 | .prettierrc.js 36 | jsconfig.json 37 | 38 | # ember-try 39 | /.node_modules.ember-try/ 40 | /bower.json.ember-try 41 | /npm-shrinkwrap.json.ember-try 42 | /package.json.ember-try 43 | /package-lock.json.ember-try 44 | /yarn.lock.ember-try 45 | -------------------------------------------------------------------------------- /tests/dummy/app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Ember Apollo Client Test App 7 | 8 | 9 | 10 | {{content-for "head"}} 11 | 12 | 13 | 14 | 15 | {{content-for "head-footer"}} 16 | 17 | 18 | {{content-for "body"}} 19 | 20 | 21 | 22 | 23 | {{content-for "body-footer"}} 24 | 25 | 26 | -------------------------------------------------------------------------------- /tests/dummy/app/templates/index.hbs: -------------------------------------------------------------------------------- 1 |

My movie list

2 | 3 |
4 | {{#if this.topRated}} 5 | 6 | Show all 7 | 8 | {{else}} 9 | 10 | Show Top Rated 11 | 12 | {{/if}} 13 | 14 | 15 | Add movie 16 | 17 | 18 | 25 |
26 | 27 | 28 |
29 | {{#each this.model.movies as |movie|}} 30 | 31 | {{/each}} 32 |
33 | -------------------------------------------------------------------------------- /ember-cli-build.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const EmberAddon = require('ember-cli/lib/broccoli/ember-addon'); 4 | 5 | module.exports = function (defaults) { 6 | let app = new EmberAddon(defaults, { 7 | pretender: { 8 | enabled: true, 9 | }, 10 | emberApolloClient: { 11 | keepGraphqlFileExtension: false, 12 | }, 13 | }); 14 | 15 | /* 16 | This build file specifies the options for the dummy test app of this 17 | addon, located in `/tests/dummy` 18 | This build file does *not* influence how the addon or the app using it 19 | behave. You most likely want to be modifying `./index.js` or app's build file 20 | */ 21 | 22 | const { maybeEmbroider } = require('@embroider/test-setup'); 23 | return maybeEmbroider(app, { 24 | skipBabel: [ 25 | { 26 | package: 'qunit', 27 | }, 28 | ], 29 | }); 30 | }; 31 | -------------------------------------------------------------------------------- /tests/dummy/app/components/movie-detail.js: -------------------------------------------------------------------------------- 1 | import Component from '@ember/component'; 2 | import layout from '../templates/components/movie-detail'; 3 | import { computed } from '@ember/object'; 4 | 5 | export default Component.extend({ 6 | layout, 7 | 8 | formattedReleaseDate: computed('movie.releaseDate', function () { 9 | if (this.movie.releaseDate) { 10 | return new Intl.DateTimeFormat('en-US', { dateStyle: 'long' }).format( 11 | new Date(this.movie.releaseDate + ' 00:00:00') 12 | ); 13 | } 14 | 15 | return ''; 16 | }), 17 | 18 | releaseYear: computed('movie.releaseDate', function () { 19 | if (this.movie.releaseDate) { 20 | return new Intl.DateTimeFormat('en-US', { year: 'numeric' }).format( 21 | new Date(this.movie.releaseDate + ' 00:00:00') 22 | ); 23 | } 24 | 25 | return ''; 26 | }), 27 | }); 28 | -------------------------------------------------------------------------------- /tests/dummy/app/templates/components/movie-detail.hbs: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{#if @movie.posterPath}} 4 | {{@movie.title}} 5 | {{else}} 6 | {{@movie.title}} 7 | {{/if}} 8 |
9 |
10 |
11 | 12 | {{@movie.title}} 13 | 14 | 15 | {{#if this.releaseYear}} 16 | ({{this.releaseYear}}) 17 | {{/if}} 18 | 19 |
20 |

21 | {{@movie.overview}} 22 |

23 | 24 |
25 | User Rating: {{@movie.voteAverage}} 26 |
27 |
28 |
29 | -------------------------------------------------------------------------------- /tests/dummy/app/components/create-review.js: -------------------------------------------------------------------------------- 1 | import Component from '@ember/component'; 2 | import layout from '../templates/components/create-review'; 3 | import mutation from 'dummy/gql/mutations/create-review'; 4 | import { inject as service } from '@ember/service'; 5 | 6 | export default Component.extend({ 7 | layout, 8 | 9 | init() { 10 | this._super(...arguments); 11 | 12 | this.review = {}; 13 | this.response = null; 14 | }, 15 | 16 | apollo: service(), 17 | 18 | actions: { 19 | createReview(movieId, stars, commentary) { 20 | let variables = { 21 | movieId, 22 | review: { 23 | stars: parseInt(stars), 24 | commentary, 25 | }, 26 | }; 27 | 28 | return this.apollo.mutate({ mutation, variables }).then((response) => { 29 | this.set('response', JSON.stringify(response)); 30 | }); 31 | }, 32 | }, 33 | }); 34 | -------------------------------------------------------------------------------- /tests/dummy/app/routes/movie.js: -------------------------------------------------------------------------------- 1 | import Route from '@ember/routing/route'; 2 | import { queryManager, getObservable } from 'ember-apollo-client'; 3 | import query from 'dummy/gql/queries/movie'; 4 | import mutation from 'dummy/gql/mutations/change-movie-title'; 5 | 6 | export default Route.extend({ 7 | apollo: queryManager(), 8 | 9 | model({ id }) { 10 | return this.apollo.watchQuery({ 11 | query, 12 | variables: { 13 | id, 14 | }, 15 | fetchPolicy: 'network-only', 16 | }); 17 | }, 18 | 19 | actions: { 20 | refreshUsingRoute() { 21 | this.refresh(); 22 | }, 23 | 24 | refetchUsingObservable(model) { 25 | const observable = getObservable(model); 26 | observable.refetch(); 27 | }, 28 | 29 | changeTitle(id, title) { 30 | return this.apollo.mutate({ 31 | mutation, 32 | variables: { id, title }, 33 | }); 34 | }, 35 | }, 36 | }); 37 | -------------------------------------------------------------------------------- /tests/dummy/app/templates/components/create-review.hbs: -------------------------------------------------------------------------------- 1 |
2 | 6 | 7 |
8 | 12 | 13 |
14 |