Skip to content

Commit

Permalink
Merge pull request #471 from crossroads/master
Browse files Browse the repository at this point in the history
[Release] Admin v0.17.7
  • Loading branch information
patrixr authored Dec 1, 2020
2 parents bd37b77 + 19defcc commit 7d1d879
Show file tree
Hide file tree
Showing 32 changed files with 724 additions and 37 deletions.
8 changes: 4 additions & 4 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ GEM
json (>= 1.5.1)
atomos (0.1.3)
aws-eventstream (1.1.0)
aws-partitions (1.394.0)
aws-partitions (1.399.0)
aws-sdk-core (3.109.3)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0)
Expand All @@ -25,7 +25,7 @@ GEM
aws-sdk-kms (1.39.0)
aws-sdk-core (~> 3, >= 3.109.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.84.1)
aws-sdk-s3 (1.85.0)
aws-sdk-core (~> 3, >= 3.109.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1)
Expand Down Expand Up @@ -97,7 +97,7 @@ GEM
faraday_middleware (1.0.0)
faraday (~> 1.0)
fastimage (2.2.0)
fastlane (2.167.0)
fastlane (2.168.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.3, < 3.0.0)
aws-sdk-s3 (~> 1.0)
Expand Down Expand Up @@ -255,4 +255,4 @@ DEPENDENCIES
rake

BUNDLED WITH
2.0.2
1.17.3
10 changes: 10 additions & 0 deletions app/components/canned-content.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import Ember from "ember";
export default Ember.Component.extend({
isClicked: false,

actions: {
handleClick() {
this.toggleProperty("isClicked");
}
}
});
42 changes: 42 additions & 0 deletions app/components/canned-messages-overlay.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import Ember from "ember";
import _ from "lodash";

export default Ember.Component.extend({
messageService: Ember.inject.service(),
displayResults: true,
store: Ember.inject.service(),
onSearchTextChange: Ember.observer("searchText", function() {
Ember.run.debounce(this, this.reloadResults, 500);
}),

reloadResults() {
this.set("displayResults", false);
Ember.run.debounce(this, () => this.set("displayResults", true), 500);
},

hasSearchText: Ember.computed("searchText", function() {
return this.get("searchText") && this.get("searchText").trim().length;
}),

actions: {
loadMoreCannedMessages() {
const params = { searchText: this.get("searchText") };
return this.get("store").query("canned_response", params);
},

setCannedResponse(text) {
if (!text) return;
const onSelect = this.getWithDefault("onSelect", _.noop);
onSelect(text);
this.set("open", false);
},

clearSearch() {
this.set("searchText", "");
},

cancel() {
this.set("open", false);
}
}
});
20 changes: 16 additions & 4 deletions app/controllers/companies/edit.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,30 @@
import Ember from "ember";

export default Ember.Controller.extend({
messageBox: Ember.inject.service(),
actions: {
back() {
this.get("model.company").rollbackAttributes();
this.transitionToRoute(
"review_offer.donor_details",
this.get("model.id")
);
},
updateCompany() {
let self = this;
let company = this.get("model.company");
let offer = this.get("model");
company.set("name", this.get("model.company.name"));
company.set("crmId", this.get("model.company.crmId"));
company.set("updatedById", this.get("session.currentUser.id"));

company.save().then(function() {
self.transitionToRoute("review_offer.donor_details", offer.get("id"));
});
company
.save()
.then(() => {
this.transitionToRoute("review_offer.donor_details", offer.get("id"));
})
.catch(({ errors }) => {
throw errors[0]["detail"];
});
}
}
});
30 changes: 25 additions & 5 deletions app/controllers/companies/new.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,45 @@ import Ember from "ember";

export default Ember.Controller.extend({
offerId: Ember.computed.alias("model.id"),
messageBox: Ember.inject.service(),

actions: {
back() {
this.get("model.company") &&
this.get("model.company").rollbackAttributes();
this.transitionToRoute(
"review_offer.donor_details",
this.get("model.id")
);
},
saveCompanyAndOffer() {
if (!this.get("name")) {
return;
}
let offer = this.get("model");
let name = this.get("name");
let crmId = this.get("crmId");
let createdById = this.get("session.currentUser.id");
let self = this;
let company = this.store.createRecord("company", {
name: name,
crmId: crmId,
createdById: createdById
});

company.get("offers").pushObject(offer);
company.save().then(function() {
offer.save().then(() => {
self.transitionToRoute("review_offer.donor_details", offer.get("id"));
company
.save()
.then(() => {
offer.save().then(() => {
this.transitionToRoute(
"review_offer.donor_details",
offer.get("id")
);
});
})
.catch(({ errors }) => {
throw errors[0]["detail"];
});
});
}
}
});
182 changes: 182 additions & 0 deletions app/controllers/message_base_controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
import Ember from "ember";

export default Ember.Controller.extend({
messageLinkConvertor: Ember.inject.service(),
messageService: Ember.inject.service(),
body: "",
offerController: Ember.inject.controller("offer"),
messagesUtil: Ember.inject.service("messages"),
isPrivate: false,
inProgress: false,
offer: Ember.computed.alias("offerController.model"),
sortProperties: ["createdAt:asc"],
sortedElements: Ember.computed.sort("messagesAndVersions", "sortProperties"),
isItemThread: Ember.computed.notEmpty("item"),

autoMarkAsRead: Ember.on(
"init",
Ember.observer(
"isActive",
"messages.[]",
"[email protected]",
function() {
if (this.get("isActive")) {
Ember.run.debounce(this, this.markConversationAsRead, 1500);
}
}
)
),

disabled: Ember.computed("offer.isCancelled", "item.isDraft", function() {
return this.get("offer.isCancelled") || this.get("item.isDraft");
}),

groupedElements: Ember.computed("sortedElements.[]", function() {
return this.groupBy(this.get("sortedElements"), "createdDate");
}),

allMessages: Ember.computed(function() {
return this.store.peekAll("message");
}),

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);
return messages.filter(m => {
return Boolean(m.get("isPrivate")) === this.get("isPrivate");
});
}),

messagesAndVersions: Ember.computed(
"messages.[]",
"itemVersions",
"packageVersions",
"offerVersions",
function() {
var messages = this.get("messages").toArray();
var itemVersions = this.get("itemVersions").toArray();
var packageVersions = this.get("packageVersions").toArray();
var offerVersions = this.get("offerVersions").toArray();
return messages.concat(itemVersions, packageVersions, offerVersions);
}
),

itemVersions: Ember.computed(
"item.id",
"allVersions.[]",
"isItemThread",
function() {
if (!this.get("isItemThread")) {
return [];
}
var itemId = parseInt(this.get("item.id"), 10);
return this.get("allVersions")
.filterBy("itemId", itemId)
.filterBy("itemType", "Item");
}
),

packageVersions: Ember.computed(
"item.packages",
"allVersions.[]",
"isItemThread",
function() {
if (!this.get("isItemThread")) {
return [];
}
var packageIds = (this.get("item.packages") || []).mapBy("id");
return this.get("allVersions")
.filterBy("itemType", "Package")
.filter(function(log) {
return (
packageIds.indexOf(String(log.get("itemId"))) >= 0 &&
["received", "missing"].indexOf(log.get("state")) >= 0
);
});
}
),

allVersions: Ember.computed(function() {
return this.get("store").peekAll("version");
}),

offerVersions: Ember.computed(
"allVersions.[]",
"offer.id",
"isItemThread",
function() {
if (this.get("isItemThread")) {
return [];
}
var offerId = parseInt(this.get("offer.id"), 10);
return this.get("allVersions")
.filterBy("itemType", "Offer")
.filterBy("itemId", offerId);
}
),

groupBy: function(content, key) {
var result = [];
var object, value;

content.forEach(function(item) {
value = item.get ? item.get(key) : item[key];
object = result.findBy("value", value);
if (!object) {
object = {
value: value,
items: []
};
result.push(object);
}
return object.items.push(item);
});
return result.getEach("items");
},

markConversationAsRead() {
this.get("messages")
.filterBy("state", "unread")
.forEach(m => this.get("messagesUtil").markRead(m));
},

actions: {
async cannedMessageLookup() {
const text = await this.get("messageService").cannedMessageLookup();
this.set("body", text);
},

sendMessage() {
// To hide soft keyboard
Ember.$("textarea").trigger("blur");

this.set("inProgress", true);
var values = this.getProperties("body", "offer", "item", "isPrivate");
values.itemId = this.get("item.id");
values.offerId = this.get("offer.id");
values.createdAt = new Date();
values.sender = this.store.peekRecord(
"user",
this.get("session.currentUser.id")
);
this.get("messageLinkConvertor").convert(values);
var message = this.store.createRecord("message", values);
message
.save()
.then(() => {
this.set("body", "");
})
.catch(error => {
this.store.unloadRecord(message);
throw error;
})
.finally(() => this.set("inProgress", false));

Ember.$("body").animate({ scrollTop: Ember.$(document).height() }, 1000);
}
}
});
6 changes: 4 additions & 2 deletions app/controllers/offer/donor_messages.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import MessagesBaseController from "shared-goodcity/controllers/messages_base";
import MessagesBaseController from "goodcity/controllers/message_base_controller";

export default MessagesBaseController;
export default MessagesBaseController.extend({
displayCannedMessages: true
});
7 changes: 4 additions & 3 deletions app/controllers/review_item/donor_messages.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import Ember from "ember";
import MessagesBaseController from "shared-goodcity/controllers/messages_base";
import MessagesBaseController from "goodcity/controllers/message_base_controller";

export default MessagesBaseController.extend({
review_item: Ember.inject.controller('review_item'),
item: Ember.computed.alias("review_item.model")
review_item: Ember.inject.controller("review_item"),
item: Ember.computed.alias("review_item.model"),
displayCannedMessages: true
});
3 changes: 3 additions & 0 deletions app/locales/en/translations.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -447,4 +447,7 @@ I18nTranslationsEn =
"last_name": "Last name can't be blank"
"cell_phone": "Mobile number can't be blank"

"canned_response":
"title": "Manage pro-forma messages"

`export default I18nTranslationsEn`
3 changes: 3 additions & 0 deletions app/locales/zh-tw/translations.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -446,4 +446,7 @@ I18nTranslationsZhTw =
"last_name": "姓氏不能漏空"
"cell_phone": "電話號碼不能漏空"

"canned_response":
"title": "Manage pro-forma messages"

`export default I18nTranslationsZhTw`
Loading

0 comments on commit 7d1d879

Please sign in to comment.