Skip to content

Instantly share code, notes, and snippets.

@A6Brgeuka
Last active January 30, 2019 13:48
Show Gist options
  • Save A6Brgeuka/c92e2ff39890d5117746316070f27dec to your computer and use it in GitHub Desktop.
Save A6Brgeuka/c92e2ff39890d5117746316070f27dec to your computer and use it in GitHub Desktop.
subscribe
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
currentUser: Ember.computed(function () {
return this.store.createRecord('user', {name:'current'})
}),
users: Ember.computed(function() {
return [
this.store.createRecord('user', {name:'one'}),
this.store.createRecord('user', {name:'two'}),
this.store.createRecord('user', {name:'three'}),
this.store.createRecord('user', {name:'four'}),
this.store.createRecord('user', {name:'five'})
]
}),
actions: {
subscribe(user) {
if (user.followers.mapBy('following.id').includes(this.currentUser.id)) {
return
}
const subscribe = this.store.createRecord('subscribe', {
follower: this.currentUser,
following: user
})
},
subscribeToCurrentUser(user) {
if (this.currentUser.followers.mapBy('follower.id').includes(user.id)) {
return
}
const subscribe = this.store.createRecord('subscribe', {
follower: user,
following: this.currentUser
})
}
}
});
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo, hasMany } from 'ember-data/relationships';
export default Model.extend({
follower: belongsTo('user', { inverse: 'followings' }),
following: belongsTo('user', { inverse: 'followers' })
});
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo, hasMany } from 'ember-data/relationships';
export default Model.extend({
name: attr('string', { defaultValue() { return "asd" } }),
followers: hasMany('subscribe', { inverse: 'following' }),
followings: hasMany('subscribe', { inverse: 'follower' })
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
{{outlet}}
current user name: {{currentUser.name}}
{{log currentUser.followers}}
<p>followers: {{currentUser.followers.length}}</p>
<p>followings: {{currentUser.followings.length}}</p>
<hr />
<p>users list</p>
{{#each users as |user|}}
<div style="border: 1px solid #ddd; margin-bottom: 10px">
<p>name: {{user.name}}</p>
<p>followers: {{user.followers.length}}</p>
<p>followings: {{user.followings.length}}</p>
<p {{action "subscribe" user}}>subscribe</p>
<p {{action "subscribeToCurrentUser" user}}>subscribe to current user</p>
</div>
{{/each}}
<br>
<br>
{
"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"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment