Browse Source

split ember's user model into model and profile model, always trigger user profile model load on link-to click

Rafał Pitoń 10 years ago
parent
commit
586b03d7db

+ 7 - 0
misago/emberapp/app/adapters/user-profile.js

@@ -0,0 +1,7 @@
+import MisagoAdapter from 'misago/adapters/application';
+
+export default MisagoAdapter.extend({
+  pathForType: function(type) {
+    return 'users';
+  }
+});

+ 2 - 3
misago/emberapp/app/components/last-username-changes.js

@@ -23,8 +23,7 @@ export default Ember.Component.extend({
   }.on('didInsertElement'),
 
   unloadNamechanges: function() {
-    this.get('_modelUnsorted').forEach(function(item) {
-      item.unloadRecord();
-    });
+    this.store.unloadAll('username-change');
+    this.store.unloadAll('user');
   }.on('willDestroyElement')
 });

+ 2 - 10
misago/emberapp/app/mixins/model-url-name.js

@@ -28,18 +28,10 @@ export default Ember.Mixin.create({
 
   afterModel: function(model, transition) {
     if (this.get('usingUrlName')) {
-      var userUrlName = transition.params[transition.targetName].url_name;
-      if (this.serialize(model) !== userUrlName) {
+      var urlName = transition.params[transition.targetName].url_name;
+      if (model.url_name !== urlName) {
         return this.transitionTo(transition.targetName, model);
       }
     }
-  },
-
-  serialize: function(model, params) {
-    if (this.get('usingUrlName')) {
-      return { url_name: model.get('slug') + '-' + model.get('id') };
-    } else {
-      return this._super(model, params);
-    }
   }
 });

+ 12 - 0
misago/emberapp/app/mixins/shared-user-attrs.js

@@ -0,0 +1,12 @@
+import DS from 'ember-data';
+import WithUrlName from 'misago/mixins/with-url-name';
+
+export default Ember.Mixin.create(WithUrlName, {
+  username: DS.attr('string'),
+  slug: DS.attr('string'),
+  avatar_hash: DS.attr('string'),
+  title: DS.attr('string'),
+  rank: DS.attr('ember-object'),
+  state: DS.attr('string'),
+  signature: DS.attr('ember-object')
+});

+ 7 - 0
misago/emberapp/app/mixins/with-url-name.js

@@ -0,0 +1,7 @@
+import Ember from 'ember';
+
+export default Ember.Mixin.create({
+  url_name: function() {
+    return this.get('slug') + '-' + this.get('id');
+  }.property('id', 'slug')
+});

+ 6 - 0
misago/emberapp/app/models/user-profile.js

@@ -0,0 +1,6 @@
+import DS from 'ember-data';
+import SharedUserAttrs from 'misago/mixins/shared-user-attrs';
+
+export default DS.Model.extend(SharedUserAttrs, {
+  acl: DS.attr('ember-object')
+});

+ 2 - 6
misago/emberapp/app/models/user.js

@@ -1,7 +1,3 @@
-import DS from 'ember-data';
+import SharedUserAttrs from 'misago/mixins/shared-user-attrs';
 
-export default DS.Model.extend({
-  username: DS.attr('string'),
-  slug: DS.attr('string'),
-  avatar_hash: DS.attr('string')
-});
+export default DS.Model.extend(SharedUserAttrs);

+ 6 - 2
misago/emberapp/app/routes/user.js

@@ -5,6 +5,10 @@ export default MisagoRoute.extend({
 
   model: function(params) {
     var urlName = this.getParsedUrlNameOr404(params.url_name);
-    return this.store.find('user', urlName.id);
-  }
+    return this.store.find('user-profile', urlName.id);
+  },
+
+  unloadUserModel: function() {
+    this.store.unloadAll('user-profile');
+  }.on('deactivate')
 });

+ 8 - 0
misago/emberapp/app/services/auth.js

@@ -20,6 +20,14 @@ export default Ember.Service.extend({
     });
   }.on('init'),
 
+  setUrlNameOnUser: function() {
+    this.get('user').reopen({
+      url_name: function() {
+        return this.get('slug') + '-' + this.get('id');
+      }.property('id', 'slug')
+    });
+  }.on('init'),
+
   _handleAuthChange: function(isAuthenticated) {
     if (!this.get('needsSync')) {
       // display annoying "you were desynced" message

+ 9 - 9
misago/emberapp/app/templates/components/last-username-changes.hbs

@@ -5,7 +5,7 @@
   <li class="list-group-item">
     <div class="side-avatar hidden-md hidden-lg">
       {{#if change.changed_by}}
-        {{#link-to 'user' change.changed_by}}
+        {{#link-to 'user' change.changed_by.url_name}}
           {{user-avatar user=change.changed_by size=20}}
         {{/link-to}}
       {{else}}
@@ -15,15 +15,15 @@
 
     <div class="first-row">
       {{#if change.changed_by}}
-      {{#link-to 'user' change.changed_by class="hidden-xs hidden-sm"}}
-        {{user-avatar user=change.changed_by size=20}}
-      {{/link-to}}
-      {{#link-to 'user' change.changed_by class="item-name right-margin"}}
-        {{change.changed_by.username}}
-      {{/link-to}}
+        {{#link-to 'user' change.changed_by.url_name class="hidden-xs hidden-sm"}}
+          {{user-avatar user=change.changed_by size=20}}
+        {{/link-to}}
+        {{#link-to 'user' change.changed_by.url_name class="item-name right-margin"}}
+          {{change.changed_by.username}}
+        {{/link-to}}
       {{else}}
-      <span class="hidden-xs hidden-sm">{{user-avatar user=change.changed_by size=20}}</span>
-      <strong class="item-name right-margin"> {{change.changed_by_username}}</strong>
+        <span class="hidden-xs hidden-sm">{{user-avatar user=change.changed_by size=20}}</span>
+        <strong class="item-name right-margin"> {{change.changed_by_username}}</strong>
       {{/if}}
 
       {{change.old_username}} <i class="material-icons">arrow_forward</i> {{change.new_username}}

+ 1 - 1
misago/emberapp/app/templates/components/user-nav.hbs

@@ -25,7 +25,7 @@
 
         <div class="row">
           <div class="col-xs-6">
-            {{#link-to 'user' auth.user activeClass="" class="btn btn-outlined btn-default btn-block btn-sm"}}
+            {{#link-to 'user' auth.user.url_name activeClass="" class="btn btn-outlined btn-default btn-block btn-sm"}}
               {{gettext "Profile"}}
             {{/link-to}}
           </div>

+ 21 - 0
misago/emberapp/app/templates/user.hbs

@@ -0,0 +1,21 @@
+<div class="user-page">
+
+  <div class="page-header">
+    <div class="container">
+
+      <div class="media">
+        <div class="media-left">
+          {{user-avatar user=model size=100}}
+        </div>
+        <div class="media-body">
+          <h1 class="media-heading">{{model.username}}</h1>
+          Lorem ipsum dolor met.
+        </div>
+      </div>
+
+    </div>
+  </div>
+
+  {{outlet}}
+
+</div>

+ 12 - 0
misago/emberapp/app/transforms/ember-object.js

@@ -0,0 +1,12 @@
+import Ember from 'ember';
+import DS from 'ember-data';
+
+export default DS.Transform.extend({
+  deserialize: function(deserialized) {
+    return Ember.Object.create(deserialized || {});
+  },
+
+  serialize: function(serialized) {
+    return serialized;
+  }
+});

+ 0 - 2
misago/users/serializers/user.py

@@ -79,12 +79,10 @@ class UserSerializer(serializers.ModelSerializer):
             'id',
             'username',
             'slug',
-            'is_avatar_locked',
             'avatar_hash',
             'title',
             'rank',
             'state',
-            'is_signature_locked',
             'signature',
         )