From 4a951c0253adf87595e557b37c413f8ede5a1986 Mon Sep 17 00:00:00 2001 From: Anthony Pessy Date: Mon, 2 Oct 2017 09:39:55 +0200 Subject: [PATCH] paper-toaster: make duration and position configurable application wide --- addon/services/paper-toaster.js | 28 ++++++++++++++----- tests/dummy/app/templates/demo/toast.hbs | 6 ++++ .../dummy/snippets/paper-toaster-defaults.js | 6 ++++ 3 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 tests/dummy/snippets/paper-toaster-defaults.js diff --git a/addon/services/paper-toaster.js b/addon/services/paper-toaster.js index 41be88496..d46c98d8e 100644 --- a/addon/services/paper-toaster.js +++ b/addon/services/paper-toaster.js @@ -1,16 +1,30 @@ import Ember from 'ember'; -const { computed, assign, run, A, Service, tryInvoke, Object: EObject } = Ember; - -const DEFAULT_PROPS = { - duration: 3000, - position: 'bottom left' -}; +const { computed, assign, run, A, Service, tryInvoke, Object: EObject, getOwner } = Ember; export default Service.extend({ queue: A(), activeToast: computed.reads('queue.firstObject'), + defaultsOptions: { + duration: 3000, + position: 'bottom left' + }, + + init() { + this._super(...arguments); + let ENV = getOwner(this).factoryFor('config:environment').class; + if (ENV['ember-paper'] && ENV['ember-paper']['paper-toaster']) { + let defaultsAppOptions = ENV['ember-paper']['paper-toaster']; + ['duration', 'position'].forEach((optKey) => { + let value = defaultsAppOptions[optKey]; + if (value) { + this.set(`defaultsOptions.${optKey}`, value); + } + }); + } + }, + show(text, options) { let t = EObject.create(assign({ text, show: true }, this.buildOptions(options))); this.get('queue').pushObject(t); @@ -38,6 +52,6 @@ export default Service.extend({ }, buildOptions(options) { - return assign({}, DEFAULT_PROPS, options); + return assign({}, this.get('defaultsOptions'), options); } }); diff --git a/tests/dummy/app/templates/demo/toast.hbs b/tests/dummy/app/templates/demo/toast.hbs index c0440230a..e9963170c 100644 --- a/tests/dummy/app/templates/demo/toast.hbs +++ b/tests/dummy/app/templates/demo/toast.hbs @@ -168,6 +168,12 @@ ) }} +

Application defaults

+ +

You can define a default duration and position for your application by adding in your config/environment.js file:

+ + {{code-snippet name="paper-toaster-defaults.js"}} + {{/paper-card-content}} diff --git a/tests/dummy/snippets/paper-toaster-defaults.js b/tests/dummy/snippets/paper-toaster-defaults.js new file mode 100644 index 000000000..3f839de9e --- /dev/null +++ b/tests/dummy/snippets/paper-toaster-defaults.js @@ -0,0 +1,6 @@ +ENV['ember-paper'] = { + 'paper-toaster': { + position: 'bottom right', + duration: 5000 + } +};