From c747ce9561bdbc9ae18bd37496f2019ee44b9610 Mon Sep 17 00:00:00 2001 From: bharat619 Date: Fri, 29 May 2020 11:24:44 +0530 Subject: [PATCH 1/8] adding polymorphic relation changes --- addon/controllers/messages_base.js | 39 +++++++++++++++++++++--------- app/models/message.js | 2 ++ app/serializers/application.js | 26 ++++++++++++++++++-- 3 files changed, 53 insertions(+), 14 deletions(-) diff --git a/addon/controllers/messages_base.js b/addon/controllers/messages_base.js index 1b4f20fb..761ba310 100644 --- a/addon/controllers/messages_base.js +++ b/addon/controllers/messages_base.js @@ -13,12 +13,18 @@ export default Ember.Controller.extend({ sortedElements: Ember.computed.sort("messagesAndVersions", "sortProperties"), isItemThread: Ember.computed.notEmpty("item"), - autoMarkAsRead: Ember.on('init', - Ember.observer('isActive', 'messages.[]', 'messages.@each.state', function() { - if (this.get('isActive')) { - Ember.run.debounce(this, this.markConversationAsRead, 1500); + autoMarkAsRead: Ember.on( + "init", + Ember.observer( + "isActive", + "messages.[]", + "messages.@each.state", + function() { + if (this.get("isActive")) { + Ember.run.debounce(this, this.markConversationAsRead, 1500); + } } - }) + ) ), disabled: Ember.computed("offer.isCancelled", "item.isDraft", function() { @@ -35,11 +41,13 @@ export default Ember.Controller.extend({ messages: Ember.computed("allMessages.[]", "offer", "item", function() { var messages = this.get("allMessages"); - messages = this.get("isItemThread") ? - messages.filterBy("itemId", this.get("item.id")) : - messages - .filterBy("offerId", this.get("offer.id")) - .filterBy("item", null); + messages = this.get("isItemThread") + ? messages + .filterBy("messageableType", "Item") + .filterBy("messageableId", this.get("item.id")) + : messages + .filterBy("messageableType", "Offer") + .filterBy("messageableId", this.get("offer.id")); return messages.filter(m => { return Boolean(m.get("isPrivate")) === this.get("isPrivate"); }); @@ -145,8 +153,15 @@ export default Ember.Controller.extend({ this.set("inProgress", true); var values = this.getProperties("body", "offer", "item", "isPrivate"); - values.itemId = this.get("item.id"); - values.offerId = this.get("offer.id"); + const itemId = this.get("item.id"); + const offerId = this.get("offer.id"); + if (itemId) { + values.messageableType = "Item"; + values.messageableId = itemId; + } else { + values.messageableType = "Offer"; + values.messageableId = offerId; + } values.createdAt = new Date(); values.sender = this.store.peekRecord( "user", diff --git a/app/models/message.js b/app/models/message.js index 55ea7cc0..a273b786 100644 --- a/app/models/message.js +++ b/app/models/message.js @@ -21,6 +21,8 @@ export default DS.Model.extend({ var session = getOwner(this).lookup("service:session"); return this.get("sender.id") === session.get("currentUser.id"); }), + messageableType: attr("string"), + messageableId: attr("string"), isMessage: Ember.computed("this", function() { return true; diff --git a/app/serializers/application.js b/app/serializers/application.js index d70ee6a2..7d1d7442 100644 --- a/app/serializers/application.js +++ b/app/serializers/application.js @@ -1,14 +1,36 @@ -import { ActiveModelSerializer } from 'active-model-adapter'; +import { ActiveModelSerializer } from "active-model-adapter"; // Polymorphic associations are not supported in ember-data beta version: // refer: https://github.com/emberjs/data/issues/1574 -export default ActiveModelSerializer.extend({ +function normalize(payload) { + const key = + (payload.hasOwnProperty("messages") && "messages") || + (payload.hasOwnProperty("message") && "message"); + if (key) { + const messages = Array.isArray(payload[key]) + ? payload[key] + : Array(payload[key]); + messages.forEach(m => { + m[`${m.messageable_type.toLowerCase()}`] = m.messageable_id; + }); + } +} +export default ActiveModelSerializer.extend({ keyForAttribute: function(attr, method) { if (attr === "addressable") { return "addressable_id"; } return this._super(attr, method); + }, + normalizeResponse(store, primaryModelClass, payload, id, requestType) { + normalize(payload); + return this._super(...arguments); + }, + + pushPayload(store, payload) { + normalize(payload); + return this._super(...arguments); } }); From 9e9250cedc4bad9feb608ccb89bab943f7c486c4 Mon Sep 17 00:00:00 2001 From: bharat619 Date: Mon, 8 Jun 2020 12:08:28 +0530 Subject: [PATCH 2/8] GCW-3167 initial commit --- app/components/variable-height-textarea.js | 87 -- app/templates/message_template.hbs | 3 +- package.json | 5 +- yarn.lock | 1204 +++++++++++++++++++- 4 files changed, 1181 insertions(+), 118 deletions(-) delete mode 100644 app/components/variable-height-textarea.js diff --git a/app/components/variable-height-textarea.js b/app/components/variable-height-textarea.js deleted file mode 100644 index fe532563..00000000 --- a/app/components/variable-height-textarea.js +++ /dev/null @@ -1,87 +0,0 @@ -import Ember from 'ember'; -import config from './../config/environment'; - -export default Ember.TextArea.extend({ - tagName: "textarea", - attributeBindings: ["disabled"], - disabled: false, - cordova: Ember.inject.service(), - - valueChanged: Ember.observer('value', function () { - var _this = this; - var textarea = _this.element; - - if(textarea) { - Ember.run.once(function(){ - // auto-resize height of textarea $('textarea')[0]. - if (textarea.scrollHeight < 120) { - Ember.$(textarea) - .css({'height':'auto','overflow-y':'hidden'}) - .height(textarea.scrollHeight - 15); - - var parent = _this.get('parentDiv'); - var grandParentDiv = Ember.$(`.${parent}`).closest(".review_item "); - if(grandParentDiv.length === 0) { - - // auto-move textarea by chaning margin of parentDiv - var paddingSize = config.cordova.enabled ? 5 : (textarea.scrollHeight - 40); - Ember.$(`.${parent}`) - .css({'padding-bottom': (paddingSize > 0 ? paddingSize : 0) }); - - // scrolling down to bottom of page - if(_this.get("value") !== ""){ - window.scrollTo(0, document.body.scrollHeight); - } - } - - } else { - Ember.$(textarea) - .css({'height':'auto','overflow-y':'auto'}) - .height(105); - } - }); - } - }), - - didInsertElement() { - var _this = this; - var parent = _this.get('parentDiv'); - var grandParentDiv = Ember.$(`.${parent}`).closest(".review_item "); - - // Apply only in Donor Cordova App. - if(grandParentDiv.length === 0 && config.cordova.enabled) { - - var msgTextbox = Ember.$(Ember.$(_this.element).closest(".message-textbar")); - - Ember.run.scheduleOnce('afterRender', this, function(){ - - var isIOS = _this.get("cordova").isIOS(); - - var height = isIOS ? 55 : 30; - Ember.$(".message-footer").height(height); - - Ember.$(_this.element).focus(function(){ - - if(isIOS) { - if(document.body.scrollHeight === Ember.$(window).height()) { - Ember.$(".message-footer").addClass("message_footer_small_page"); - } else { - Ember.$(".message-footer").removeClass("message_footer_small_page"); - } - msgTextbox.css({'position': 'relative'}); - } else { - var positionVal = document.body.scrollHeight === Ember.$(window).height() ? 'fixed' : 'relative'; - } - - window.scrollTo(0, document.body.scrollHeight); - }); - - Ember.$(_this.element).blur(function(){ - msgTextbox.css({'position':'fixed'}); - }); - }); - - } - } - -}); diff --git a/app/templates/message_template.hbs b/app/templates/message_template.hbs index c05f8b1e..104707f6 100644 --- a/app/templates/message_template.hbs +++ b/app/templates/message_template.hbs @@ -37,6 +37,7 @@