Skip to content

Commit

Permalink
Converted ma-create-media to async/await
Browse files Browse the repository at this point in the history
  • Loading branch information
0xadada committed Feb 18, 2018
1 parent 9dc7103 commit 2048f9c
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 107 deletions.
6 changes: 3 additions & 3 deletions app/adapters/application.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import DS from 'ember-data';
import JSONAPIAdapter from 'ember-data/adapters/json-api';
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin';
import config from 'mir/config/environment';

export default DS.JSONAPIAdapter.extend(DataAdapterMixin, {
export default JSONAPIAdapter.extend(DataAdapterMixin, {
/* Ember */
host: config.DS.host,
namespace: config.DS.namespace,

/* ember-simple-auth */
/* DataAdapterMixin */
authorizer: 'authorizer:oauth2'
});
49 changes: 16 additions & 33 deletions app/components/ma-create-media.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Component from '@ember/component';
import { computed, get, getProperties, set } from '@ember/object';
import { computed, get, set } from '@ember/object';
import { alias, or } from '@ember/object/computed';
import { inject as service } from '@ember/service';
import Changeset from 'ember-changeset';
Expand All @@ -16,7 +16,6 @@ export default Component.extend({
isLoading: false,
tagName: 'form',

hasCompleted: false,
media: null,

errors: alias('errorMessageKeys'),
Expand All @@ -37,14 +36,6 @@ export default Component.extend({
onFailure: () => {}, // noOp callback if caller doesn't pass onFailure in.
onSuccess: () => {}, // noOp callback if caller doesn't pass onSuccess in.

didDestroyElement() {
let { hasCompleted, media } = getProperties(this, 'hasCompleted', 'media');
if (!hasCompleted) {
// `media` creation was not completed, so cleanup the bare `media` model.
if (media !== null) media.destroyRecord();
}
},

init() {
this._super(...arguments);
set(this, 'errorMessageKeys', []);
Expand All @@ -67,28 +58,19 @@ export default Component.extend({
changeset.validate();
},

_createMedia(changeset) {
async _createMedia(changeset) {
set(this, 'isLoading', true);
return changeset
.save()
.then((/* data */) => {
set(this, 'isLoading', false);
// set hasCompleted to prevent `didDestroyElement` from deleting model
set(this, 'hasCompleted', true);
let onSuccess = get(this, 'onSuccess');
if (typeof onSuccess === 'function') onSuccess();
return;
})
.catch(error => {
set(this, 'isLoading', false);
// set hasCompleted to prevent `didDestroyElement` from deleting model
set(this, 'hasCompleted', false);
this._handleError(error);
let onFailure = get(this, 'onFailure');
if (typeof onFailure === 'function') onFailure();
return;
});
// 🤞
try {
await changeset.save();
set(this, 'isLoading', false);
let onSuccess = get(this, 'onSuccess');
if (typeof onSuccess === 'function') onSuccess();
} catch (error) {
this._handleError(error);
set(this, 'isLoading', false);
let onFailure = get(this, 'onFailure');
if (typeof onFailure === 'function') onFailure();
}
},

_handleError(error) {
Expand All @@ -99,8 +81,9 @@ export default Component.extend({
},

actions: {
add(changeset) {
this._createMedia(changeset);
async add(changeset) {
let isDisabled = get(this, 'isDisabled');
if (!isDisabled) await this._createMedia(changeset);
}
}
});
22 changes: 7 additions & 15 deletions app/routes/media/new.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
import { get, getProperties, set } from '@ember/object';
import { get, set } from '@ember/object';
import Changeset from 'ember-changeset';
import lookupValidator from 'ember-changeset-validations';
import MediaValidations from 'mir/validations/media';

export default Route.extend(AuthenticatedRouteMixin, {
hasCompleted: false,
media: null,

model() {
Expand All @@ -20,25 +19,18 @@ export default Route.extend(AuthenticatedRouteMixin, {
},

deactivate() {
// `model()` creates a stub media model and sets it to the changeset, this
let media = get(this, 'media');
// `model()` creates an empty media model and sets it to the changeset, this
// creates an Ember Data model that'll be listed on the index route if the
// user aborts adding a new one, so we use hasCompleted to determine if it
// was created, and clean it up if not created.
let { hasCompleted, media } = getProperties(this, 'hasCompleted', 'media');
if (!hasCompleted) {
// `media` creation was not completed, cleanup the bare `media` model.
try {
media.destroyRecord();
} catch (error) {
/* Ignore: Only occurs in testing */
}
}
// user aborts adding a new one, so we call rollbackAttributes to cleanup
// any unsaved models.
// `media` was never saved, cleanup empty `media` model.
media.rollbackAttributes();
},

actions: {
onCreated() {
// set hasCompleted to prevent `deactivate` from deleting new model
set(this, 'hasCompleted', true);
return this.transitionTo('index');
}
}
Expand Down
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"ember-cli-one-script": "^0.0.1",
"ember-cli-qunit": "4.3.2",
"ember-cli-release": "^1.0.0-beta.2",
"ember-cli-sass": "^7.1.4",
"ember-cli-sass": "^7.1.5",
"ember-cli-shims": "^1.1.0",
"ember-cli-sri": "^2.1.1",
"ember-cli-template-lint": "^0.7.5",
Expand All @@ -57,16 +57,16 @@
"ember-export-application-global": "^2.0.0",
"ember-fetch": "^3.4.4",
"ember-i18n": "^5.1.0",
"ember-i18n-changeset-validations": "^1.0.0",
"ember-i18n-changeset-validations": "^1.1.0",
"ember-load-initializers": "^1.0.0",
"ember-page-title": "^4.0.3",
"ember-resolver": "^4.5.0",
"ember-route-action-helper": "^2.0.6",
"ember-simple-auth": "^1.4.2",
"ember-simple-auth": "^1.5.0",
"ember-source": "~3.0.0",
"ember-svg-jar": "^0.12.0",
"ember-test-component": "^0.2.1",
"eslint": "^4.17.0",
"eslint": "^4.18.0",
"eslint-config-prettier": "^2.9.0",
"eslint-plugin-ember": "^5.0.0",
"eslint-plugin-prettier": "^2.6.0",
Expand Down
4 changes: 2 additions & 2 deletions tests/integration/components/ma-create-media-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { setupRenderingTest } from 'ember-qunit';
import { click, fillIn, render } from '@ember/test-helpers';
import { setOwner } from '@ember/application';
import EmberObject from '@ember/object';
import { resolve, reject } from 'rsvp';
import { resolve } from 'rsvp';
import hbs from 'htmlbars-inline-precompile';
import {
registerTestComponent,
Expand Down Expand Up @@ -110,7 +110,7 @@ module('Integration | Component | ma create media', function(hooks) {
let changeset = EmberObject.create({
validate() {},
save() {
return reject({ message: 'the adapter operation was aborted' });
throw { message: 'this is a test error promise rejection' };
}
});
this.set('changeset', changeset);
Expand Down
108 changes: 58 additions & 50 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3201,9 +3201,9 @@ ember-cli-release@^1.0.0-beta.2:
semver "^4.3.1"
silent-error "^1.0.0"

ember-cli-sass@^7.1.4:
version "7.1.4"
resolved "https://registry.yarnpkg.com/ember-cli-sass/-/ember-cli-sass-7.1.4.tgz#cbe823b5bd7d686b11ab61169fda4f3e993456fd"
ember-cli-sass@^7.1.5:
version "7.1.5"
resolved "https://registry.yarnpkg.com/ember-cli-sass/-/ember-cli-sass-7.1.5.tgz#2e9d800d9dda299fbb4649576375447209469717"
dependencies:
broccoli-funnel "^1.0.0"
broccoli-merge-trees "^1.1.0"
Expand Down Expand Up @@ -3383,48 +3383,14 @@ ember-cli@~3.0.0:
watch-detector "^0.1.0"
yam "0.0.22"

ember-cookies@^0.1.0:
version "0.1.3"
resolved "https://registry.yarnpkg.com/ember-cookies/-/ember-cookies-0.1.3.tgz#de4fc36752a0b0d8a17ef4644a3e03a10a6d1f05"
"ember-cookies@^0.1.0 || ^0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/ember-cookies/-/ember-cookies-0.2.0.tgz#81195a31a36447240fb97af47d01ad582f747d47"
dependencies:
ember-cli-babel "^6.8.2"
ember-getowner-polyfill "^1.1.0 || ^2.0.0"

ember-data@^2.18.0:
version "2.18.0"
resolved "https://registry.yarnpkg.com/ember-data/-/ember-data-2.18.0.tgz#8e374e540ea7c3b101983eb51cd0beedaa4d230d"
dependencies:
amd-name-resolver "0.0.7"
babel-plugin-ember-modules-api-polyfill "^1.4.2"
babel-plugin-feature-flags "^0.3.1"
babel-plugin-filter-imports "^0.3.1"
babel-plugin-transform-es2015-block-scoping "^6.24.1"
babel6-plugin-strip-class-callcheck "^6.0.0"
babel6-plugin-strip-heimdall "^6.0.1"
broccoli-babel-transpiler "^6.0.0"
broccoli-debug "^0.6.2"
broccoli-file-creator "^1.0.0"
broccoli-funnel "^1.2.0"
broccoli-merge-trees "^2.0.0"
broccoli-rollup "^1.2.0"
calculate-cache-key-for-tree "^1.1.0"
chalk "^1.1.1"
ember-cli-babel "^6.8.2"
ember-cli-path-utils "^1.0.0"
ember-cli-string-utils "^1.0.0"
ember-cli-test-info "^1.0.0"
ember-cli-version-checker "^2.1.0"
ember-inflector "^2.0.0"
ember-runtime-enumerable-includes-polyfill "^2.0.0"
exists-sync "0.0.3"
git-repo-info "^1.1.2"
heimdalljs "^0.3.0"
inflection "^1.8.0"
npm-git-info "^1.0.0"
semver "^5.1.0"
silent-error "^1.0.0"

ember-data@~3.0.1:
ember-data@^3.0.0, ember-data@~3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/ember-data/-/ember-data-3.0.1.tgz#555bddde064c72ff9dde4ae4c8c635afe8158b8b"
dependencies:
Expand Down Expand Up @@ -3505,13 +3471,13 @@ ember-get-config@^0.2.2, ember-get-config@^0.2.4:
ember-cli-version-checker "^2.1.0"
ember-factory-for-polyfill "^1.3.1"

ember-i18n-changeset-validations@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/ember-i18n-changeset-validations/-/ember-i18n-changeset-validations-1.0.0.tgz#454fc712d96fffb1951618b3bd1dea36a652791a"
ember-i18n-changeset-validations@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/ember-i18n-changeset-validations/-/ember-i18n-changeset-validations-1.1.0.tgz#ab74e01e5067d62966ef68de5e011e2d9e11fe15"
dependencies:
ember-changeset-validations "^1.2.10"
ember-cli-babel "^6.6.0"
ember-data "^2.18.0"
ember-data "^3.0.0"
ember-i18n "^5.1.0"

ember-i18n@^5.1.0:
Expand Down Expand Up @@ -3622,17 +3588,17 @@ ember-runtime-enumerable-includes-polyfill@^2.0.0:
ember-cli-babel "^6.9.0"
ember-cli-version-checker "^2.1.0"

ember-simple-auth@^1.4.2:
version "1.4.2"
resolved "https://codeload.github.com/0xadada/ember-simple-auth/tar.gz/872d97cd3f7b8d3b6a18c5f0607b2758b6a08cc0"
ember-simple-auth@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/ember-simple-auth/-/ember-simple-auth-1.5.0.tgz#9492f5af0ea5de09dcf3c967f7ad93bf15ef79a0"
dependencies:
base-64 "^0.1.0"
broccoli-file-creator "^1.1.1"
broccoli-funnel "^1.2.0 || ^2.0.0"
broccoli-merge-trees "^2.0.0"
ember-cli-babel "^6.8.2"
ember-cli-is-package-missing "^1.0.0"
ember-cookies "^0.1.0"
ember-cookies "^0.1.0 || ^0.2.0"
ember-fetch "^2.1.0 || ^3.0.0"
ember-getowner-polyfill "^1.1.0 || ^2.0.0"
silent-error "^1.0.0"
Expand Down Expand Up @@ -3870,7 +3836,7 @@ eslint-visitor-keys@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"

eslint@^4.0.0, eslint@^4.17.0:
eslint@^4.0.0:
version "4.17.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.17.0.tgz#dc24bb51ede48df629be7031c71d9dc0ee4f3ddf"
dependencies:
Expand Down Expand Up @@ -3912,6 +3878,48 @@ eslint@^4.0.0, eslint@^4.17.0:
table "^4.0.1"
text-table "~0.2.0"

eslint@^4.18.0:
version "4.18.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.0.tgz#ebd0ba795af6dc59aa5cee17938160af5950e051"
dependencies:
ajv "^5.3.0"
babel-code-frame "^6.22.0"
chalk "^2.1.0"
concat-stream "^1.6.0"
cross-spawn "^5.1.0"
debug "^3.1.0"
doctrine "^2.1.0"
eslint-scope "^3.7.1"
eslint-visitor-keys "^1.0.0"
espree "^3.5.2"
esquery "^1.0.0"
esutils "^2.0.2"
file-entry-cache "^2.0.0"
functional-red-black-tree "^1.0.1"
glob "^7.1.2"
globals "^11.0.1"
ignore "^3.3.3"
imurmurhash "^0.1.4"
inquirer "^3.0.6"
is-resolvable "^1.0.0"
js-yaml "^3.9.1"
json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.3.0"
lodash "^4.17.4"
minimatch "^3.0.2"
mkdirp "^0.5.1"
natural-compare "^1.4.0"
optionator "^0.8.2"
path-is-inside "^1.0.2"
pluralize "^7.0.0"
progress "^2.0.0"
require-uncached "^1.0.3"
semver "^5.3.0"
strip-ansi "^4.0.0"
strip-json-comments "~2.0.1"
table "^4.0.1"
text-table "~0.2.0"

espree@^3.5.2:
version "3.5.3"
resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6"
Expand Down

0 comments on commit 2048f9c

Please sign in to comment.