Skip to content

Instantly share code, notes, and snippets.

@jgwhite
Last active October 17, 2018 14:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jgwhite/d55468ecac4e9a5e09f8b7e18b155de2 to your computer and use it in GitHub Desktop.
Save jgwhite/d55468ecac4e9a5e09f8b7e18b155de2 to your computer and use it in GitHub Desktop.
Confirms and Prompts with Tasks
import Ember from 'ember';
import { task, waitForProperty, timeout } from 'ember-concurrency';
const promptTask = task({
answer: undefined,
* perform() {
yield waitForProperty(this, 'answer', a => a !== undefined);
return this.answer;
}
});
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
main: task(function * () {
let confirmed = yield this.confirm.perform();
if (!confirmed) {
return;
}
let name = yield this.promptForName.perform();
yield this.work.perform(name);
}),
confirm: promptTask,
promptForName: promptTask,
work: task({
name: null,
* perform(name) {
this.set('name', name);
yield timeout(3000);
}
})
});
@keyframes fade {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
.pulse {
animation: 0.5s infinite alternate fade;
}
{{#unless main.isRunning}}
<button onclick={{perform main}}>Work</button>
{{/unless}}
{{#if confirm.isRunning}}
Are you sure?
<button onclick={{action (mut confirm.last.answer) true}}>Yes</button>
<button onclick={{action (mut confirm.last.answer) false}}>No</button>
{{/if}}
{{#if promptForName.isRunning}}
<form onsubmit={{action (mut promptForName.last.answer) value="target.name.value"}}>
<input type="text" placeholder="What shall I work on? (e.g. homework)" id="name" name="name" size=42>
<button type="submit">Start</button>
</form>
{{/if}}
{{#if work.isRunning}}
<div class="pulse">Working on {{work.last.name}}…</div>
{{/if}}
{
"version": "0.15.1",
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js",
"ember": "3.4.3",
"ember-template-compiler": "3.4.3",
"ember-testing": "3.4.3"
},
"addons": {
"ember-data": "3.4.2",
"ember-concurrency": "0.8.19"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment