Skip to content

Instantly share code, notes, and snippets.

@sacarino
Last active August 22, 2017 12:36
Show Gist options
  • Save sacarino/4ce41fd16d94a84c70951e228abef9b7 to your computer and use it in GitHub Desktop.
Save sacarino/4ce41fd16d94a84c70951e228abef9b7 to your computer and use it in GitHub Desktop.
Notifications Signup Wizard v3
import Ember from 'ember';
export default Ember.Component.extend({
tagName: 'ul',
classNames: ['steps'],
currentPath: null, //passed in value, is current route
steps: null,
activeIndex: function(){
var currentPath = this.get('currentPath');
var steps = this.get('steps');
for(var i = 0; i < steps.length; i++){
if(steps[i].route === currentPath){
return i;
}
}
}.property('currentPath')
});
import Ember from 'ember';
export default Ember.Component.extend({
tagName: 'li',
attributeBindings: ['displayIndex:data-step'],
classNameBindings: ['isActive:active'],
index: null,
displayIndex: function(){
return this.get('index') + 1;
}.property('index'),
isActive: function(){
return this.get('activeIndex') === this.get('index');
}.property('activeIndex', 'index')
});
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Activity Streams Demo'
});
import Ember from 'ember';
export default Ember.Controller.extend({
selectedType: null,
selectedSubject: null,
selectedTarget: null,
selectedId: null,
sortedTypes: Ember.computed(function() {
var myType = this.store.createRecord('notification-type');
myType.set('id',1);
myType.set('label', 'wtf');
myType.set('order',1);
return myType; //this.store.peekAll('notification-type'); //[{"order": 1,"label":"test","id":1 }]
}),
sortedSubjects: Ember.computed(function() {
var _subjects = this.store.find('notification-subjects').sortBy('order');
return _subjects;
}),
actions: {
chooseType() {
console.log('selected');
}
}
});
import Ember from 'ember';
import CurrentRouteAware from '../mixins/current-route-aware';
var RouteVal = Ember.Object.extend({
route: null,
val: null
});
export default Ember.Controller.extend(CurrentRouteAware, {
routeValues: [
RouteVal.create({
route: 'wizard.index',
step: 'Activity streams',
next: 'Get started',
nextTransition: 'wizard.create',
prevTransition: '/',
showNext: true,
showPrev: false
}),
RouteVal.create({
route: 'wizard.create',
step: 'Tell me about...',
next: 'Next',
prev: 'Back',
nextTransition: 'wizard.when',
prevTransition: 'wizard.index',
showNext: true,
showPrev: true
}),
RouteVal.create({
route: 'wizard.when',
step: 'But only when...',
next: 'Next',
prev: 'Back',
nextTransition: 'wizard.review',
prevTransition: 'wizard.create',
showNext: true,
showPrev: true
}),
RouteVal.create({
route: 'wizard.review',
step: 'Review',
prev: 'Back',
prevTransition: 'wizard.when',
showNext: false,
showPrev: true
})
],
nextButton: routeVal('routeValues', 'next'),
prevButton: routeVal('routeValues', 'prev'),
nextTransition: routeVal('routeValues', 'nextTransition'),
showButtons: routeVal('routeValues', 'showButtons'),
prevTransition: routeVal('routeValues', 'prevTransition'),
showNext: routeVal('routeValues', 'showNext'),
showPrev: routeVal('routeValues', 'showPrev'),
actions: {
next: function(){
this.transitionToRoute(this.get('nextTransition'));
},
prev: function(){
this.transitionToRoute(this.get('prevTransition'));
}
}
});
function routeVal(routeVals, prop){
return Ember.computed('currentPath', function(){
var currentRoute = Ember.get(this, 'currentPath');
var routeValues = Ember.get(this, routeVals);
for (var i = 0; i < routeValues.length; i++) {
if (routeValues[i].route === currentRoute) {
return routeValues[i][prop];
}
}
});
}
import Ember from 'ember';
export default Ember.Mixin.create({
application: Ember.inject.controller(),
currentPath: Ember.computed.alias("application.currentPath")
});
import Model from "ember-data/model";
import attr from "ember-data/attr";
import { belongsTo, hasMany } from "ember-data/relationships";
let string = attr('string');
export default Model.extend({
order: string,
label: string
});
import Ember from 'ember';
import config from './config/environment';
const Router = Ember.Router.extend({
location: 'none',
rootURL: config.rootURL
});
Router.map(function() {
this.route('wizard', function(){
this.route('index');
this.route('create');
this.route('when');
this.route('review');
});
});
export default Router;
import Ember from 'ember';
export default Ember.Route.extend({
model: function() {
this.transitionTo('wizard');
}
});
@import url('https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.2.0/css/bootstrap.min.css');
@import url('https://cdnjs.cloudflare.com/ajax/libs/normalize/3.0.1/normalize.css');
@import url('https://www.fuelcdn.com/fuelux/3.13.0/css/fuelux.css');
@import url('https://fonts.googleapis.com/css?family=Exo:200|Oswald|Work+Sans');
html, body {
margin: 20px;
}
h4 {
margin: 20px;
}
.readable {
font-family: 'Work Sans', sans-serif;
line-height: 1.8;
font-size: larger;
margin-left: 50px;
}
<h1>{{appName}}</h1>
<br>
<br>
<div class="fuelux">
{{outlet}}
</div>
<br>
<br>
{{#each steps as |step|}}
{{wizard-step name=step.step activeIndex=activeIndex index=_view.contentIndex}}
{{/each}}
<!--span class="badge">
{{!displayIndex}}
</span-->
{{name}}
<span class="chevron"></span>
<div class="step-pane sample-pane alert active">
<div class="row">
<div class="col-xs-12">
<div class="col-xs-6">
I want updates on...
<select name="topic" class="form-control">
<option value="none">select a notification type</option>
<option value="fleet" selected>a fleet</option>
<option value="aircraft">an aircraft</option>
<option value="location">a location</option>
<option value="wo">a work order</option>
<option value="tc">a task card</option>
<option value="requisition">a requisition</option>
<option value="pn">a part number</option>
<option value="team">a team</option>
<option value="person">a person</option>
</select>
</div>
<div class="col-xs-6">
&nbsp;
<select name="topic" class="form-control">
<option value="none">select a notification type</option>
<option value="1" selected>Boeing 717-200</option>
<option value="2">Boeing 737 Classic</option>
<option value="3">Boeing 737-6/7/800</option>
<option value="4">Boeing 737-900</option>
<option value="5">Boeing 737 MAX 9</option>
<option value="6">Boeing 737 MAX 10</option>
</select>
</div>
</div>
</div>
<div class="row">&nbsp;</div>
<div class="col-xs-12">
via...
<select name="subject" class="form-control">
<option value="-1">select a notification method</option>
<option value="0">an in-app message</option>
<option value="1">an Email</option>
<option value="2" selected>a SMS</option>
<option value="3">a Slack message</option>
<option value="4">a Zapier push</option>
<option value="5">a webhook</option>
</select>
</div>
<div>&nbsp;</div>
<div class="col-xs-12">
when this kind of event happens...<br>
<select name="type" class="form-control">
<option value="1">select an event type</option>
<option value="2" selected>aircraft availability</option>
<option value="3">defect</option>
<option value="4">life-limited part</option>
<option value="5">flight log</option>
<option value="6">repair order</option>
<option value="7">requisition</option>
<option value="8">purchase order</option>
<option value="9">engineering order</option>
<option value="10">task card</option>
<option value="11">aircraft type master</option>
<option value="12">aircraft master</option>
<option value="13">defect master</option>
<option value="14">location master</option>
<option value="15">user master</option>
<option value="16">anything</option>
</select>
</div>
<div>&nbsp;</div>
<div class="col-xs-12">
and the update is...<br>
<select name="type" class="form-control">
<option value="1" selected>any change</option>
<option value="2">aircraft is grounded</option>
<option value="3">aircraft is returned to service</option>
</select>
</div>
</div>
<div class="wizard" data-initialize="wizard" id="myWizard">
<div class="steps-container">
{{form-wizard steps=routeValues currentPath=currentPath}}
</div>
<div class="actions">
{{#if showPrev}}
<button type="button" {{action 'prev'}}class="btn btn-default btn-prev">
<span class="glyphicon glyphicon-arrow-left"></span>{{prevButton}}
</button>
{{/if}}
{{#if showNext}}
<button {{action 'next'}}type="button" class="btn btn-default btn-next" >{{nextButton}}
<span class="glyphicon glyphicon-arrow-right"></span>
</button>
{{/if}}
</div>
<div class="step-content">
{{outlet}}
</div>
</div>
<div class="step-pane sample-pane alert active">
<h4>Activity Streams</h4>
<div>
Everything in SynapseMX has an Activity Stream, which is essentially an audit trail of changes or updates.
</div>
<div>&nbsp;</div>
<div>
You can "subscribe" to a Stream, which allows you to react to information in real-time about a particular thing.
</div>
<div>&nbsp;</div>
<div>
Streams can be as specific as a Part Number/Serial Number or as generic as a Tail Number
</div>
</div>
<div class="step-pane sample-pane alert active">
<div class="row">
<div class="col-xs-11 pad-bottom">
<h4>Making sure we've got it...</h4>
<div class="row">
<div class="readable well">
You want us to send you <u>a SMS</u>
when <u>a Boeing 717-200</u> has a <u>change in aircraft availability status</u>,
but only when the aircraft is <u>specifically located in BWI</u>.
</div>
</div>
<!--<div class="readable">
You want us to send you <b>a Skype message</b><br>
when <b>anyone</b> in <b>ATL</b><br>
<b>pulls a part for an open AOG order</b>
</div>-->
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="pull-right">
<div class="">
<button type="button" class="btn btn-success ">Looks good, save it!
</button>
</div>
</div>
</div>
</div>
</div>
<div class="step-pane sample-pane alert active">
<div class="col-xs-12">
<div class="col-xs-6">
But only when it's for...
<select name="topic" class="form-control">
<option value="none">select a filter (optional)</option>
<option value="ata-code">a specific ATA code</option>
<option value="ata-range">a range of ATA codes</option>
<option value="location" selected>a specific location</option>
<option value="pn">needs a specific part</option>
</select>
</div>
<div class="col-xs-6">
&nbsp;
<select name="subject" class="form-control">
<option value="0" selected>select an aircraft</option>
<option value="1">ATL</option>
<option value="2" selected>BWI</option>
<option value="3">DFW</option>
<option value="4">FLL</option>
<option value="5">MCO</option>
<option value="6">MKE</option>
</select>
</div>
</div>
</div>
{
"version": "0.2.7",
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"bootstrap-css": "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css",
"bootstrap-js": "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js",
"ember": "1.13.13",
"normalize-css": "https://cdnjs.cloudflare.com/ajax/libs/normalize/3.0.1/normalize.css",
"fuelux-css": "https://www.fuelcdn.com/fuelux/3.13.0/css/fuelux.css",
"fuel-js": "https://www.fuelcdn.com/fuelux/3.13.0/js/fuelux.js",
"ember-data": "1.13.15"
},
"addons": {
"ember-ted-select": "2.2.2"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment