Refactoring rules description

This commit is contained in:
Angelo Gallarello 2018-09-14 16:49:06 +02:00
parent e649c79bb7
commit fc73dc5bbc
15 changed files with 270 additions and 69 deletions

View file

@ -17,7 +17,6 @@ BlazeComponent.extendComponent({
if(actionSelected == "top"){
const triggerId = Triggers.insert(trigger);
const actionId = Actions.insert({actionType: "moveCardToTop","listTitle":listTitle,"boardId":boardId});
console.log("Action inserted");
Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId});
}
if(actionSelected == "bottom"){
@ -49,12 +48,12 @@ BlazeComponent.extendComponent({
const actionSelected = this.find('#arch-action').value;
if(actionSelected == "archive"){
const triggerId = Triggers.insert(trigger);
const actionId = Actions.insert({actionType: "archive"});
const actionId = Actions.insert({actionType: "archive","boardId":boardId});
Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId});
}
if(actionSelected == "unarchive"){
const triggerId = Triggers.insert(trigger);
const actionId = Actions.insert({actionType: "unarchive"});
const actionId = Actions.insert({actionType: "unarchive","boardId":boardId});
Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId});
}
},

View file

@ -5,7 +5,6 @@ BlazeComponent.extendComponent({
labels(){
const labels = Boards.findOne(Session.get('currentBoard')).labels;
console.log(labels);
for(let i = 0;i<labels.length;i++){
if(labels[i].name == "" || labels[i].name == undefined){
labels[i].name = labels[i].color.toUpperCase();

View file

@ -3,6 +3,5 @@ template(name="ruleDetails")
h2
i.fa.fa-magic
| {{{_ 'r-rule-details' }}}
| trigger
| action
= trigger
= action

View file

@ -1,15 +1,24 @@
BlazeComponent.extendComponent({
onCreated() {
this.subscribe('allRules');
this.subscribe('allTriggers');
this.subscribe('allActions');
},
trigger(){
const rule = Rules.findOne({_id:ruleId});
return Triggers.findOne({_id:rule.triggerId});
const ruleId = this.data().ruleId;
const rule = Rules.findOne({_id: ruleId.get()});
const trigger = Triggers.findOne({_id:rule.triggerId});
console.log(trigger);
return trigger.description();
},
action(){
const rule = Rules.findOne({_id:ruleId});
return Triggers.findOne({_id:rule.actionId});
const ruleId = this.data().ruleId;
const rule = Rules.findOne({_id: ruleId.get()});
const action = Actions.findOne({_id:rule.actionId});
console.log(action);
return action.description();
},
events() {

View file

@ -10,7 +10,7 @@ template(name="rulesList")
p
= title
div.rules-btns-group
button
button.js-goto-details
i.fa.fa-eye
| {{{_ 'r-view-rule'}}}
if currentUser.isAdmin

View file

@ -4,4 +4,6 @@ template(name="rulesMain")
if($eq rulesCurrentTab.get 'trigger')
+rulesTriggers(ruleName=ruleName triggerVar=triggerVar)
if($eq rulesCurrentTab.get 'action')
+rulesActions(ruleName=ruleName triggerVar=triggerVar)
+rulesActions(ruleName=ruleName triggerVar=triggerVar)
if($eq rulesCurrentTab.get 'ruleDetails')
+ruleDetails(ruleId=ruleId)

View file

@ -46,6 +46,8 @@ BlazeComponent.extendComponent({
},
'click .js-goto-details'(event) {
event.preventDefault();
const rule = this.currentData();
this.ruleId.set(rule._id)
this.setRuleDetails();
},

View file

@ -6,7 +6,7 @@ template(name="boardTriggers")
div.trigger-dropdown
select(id="gen-action")
option(value="created") {{{_'r-added-to'}}}
option(value="removed") {{{_'r-added-to'}}}
option(value="removed") {{{_'r-removed-from'}}}
div.trigger-text
| {{{_'r-the-board'}}}
div.trigger-button.js-add-gen-trigger.js-goto-action
@ -19,7 +19,7 @@ template(name="boardTriggers")
div.trigger-dropdown
select(id="create-action")
option(value="created") {{{_'r-added-to'}}}
option(value="removed") {{{_'r-added-to'}}}
option(value="removed") {{{_'r-removed-from'}}}
div.trigger-text
| {{{_'r-list'}}}
div.trigger-dropdown

View file

@ -6,51 +6,56 @@ BlazeComponent.extendComponent({
events() {
return [
{'click .js-add-gen-trigger'(event) {
const desc = Utils.getTriggerActionDesc(event,this);
let datas = this.data();
const actionSelected = this.find('#gen-action').value;
const boardId = Session.get('currentBoard')
if(actionSelected == "created"){
datas.triggerVar.set({activityType: "createCard","boardId":boardId,"listName":"*"});
datas.triggerVar.set({activityType: "createCard","boardId":boardId,"listName":"*","desc":desc});
}
if(actionSelected == "removed"){
datas.triggerVar.set({activityType: "removeCard","boardId":boardId});
datas.triggerVar.set({activityType: "removeCard","boardId":boardId,"desc":desc});
}
},
'click .js-add-create-trigger'(event) {
const desc = Utils.getTriggerActionDesc(event,this);
let datas = this.data();
const actionSelected = this.find('#create-action').value;
const listName = this.find('#create-list-name').value;
const boardId = Session.get('currentBoard')
if(actionSelected == "created"){
datas.triggerVar.set({activityType: "createCard","boardId":boardId,"listName":listName});
datas.triggerVar.set({activityType: "createCard","boardId":boardId,"listName":listName,"desc":desc});
}
if(actionSelected == "removed"){
datas.triggerVar.set({activityType: "removeCard","boardId":boardId,"listName":listName});
datas.triggerVar.set({activityType: "removeCard","boardId":boardId,"listName":listName,"desc":desc});
}
},
'click .js-add-moved-trigger'(event) {
let datas = this.data();
const desc = Utils.getTriggerActionDesc(event,this);
const actionSelected = this.find('#move-action').value;
const listName = this.find('#move-list-name').value;
const boardId = Session.get('currentBoard')
if(actionSelected == "moved-to"){
datas.triggerVar.set({activityType: "moveCard","boardId":boardId,"listName":listName,"oldListName":"*"});
datas.triggerVar.set({activityType: "moveCard","boardId":boardId,"listName":listName,"oldListName":"*","desc":desc});
}
if(actionSelected == "moved-from"){
datas.triggerVar.set({activityType: "moveCard","boardId":boardId,"listName":"*","oldListName":listName});
datas.triggerVar.set({activityType: "moveCard","boardId":boardId,"listName":"*","oldListName":listName,"desc":desc});
}
},
'click .js-add-arc-trigger'(event) {
let datas = this.data();
const desc = Utils.getTriggerActionDesc(event,this);
const actionSelected = this.find('#arch-action').value;
const boardId = Session.get('currentBoard')
if(actionSelected == "archived"){
datas.triggerVar.set({activityType: "archivedCard","boardId":boardId});
datas.triggerVar.set({activityType: "archivedCard","boardId":boardId,"desc":desc});
}
if(actionSelected == "unarchived"){
datas.triggerVar.set({activityType: "restoredCard","boardId":boardId});
datas.triggerVar.set({activityType: "restoredCard","boardId":boardId,"desc":desc});
}
}

View file

@ -22,7 +22,7 @@ template(name="cardTriggers")
option(value="#{_id}")
= name
div.trigger-text
| is
| {{{_'r-is'}}}
div.trigger-dropdown
select(id="spec-label-action")
option(value="added") {{{_'r-added-to'}}}

View file

@ -40,14 +40,14 @@ Utils = {
base = 0;
increment = 1;
// If we drop the card in the first position
} else if (!prevData) {
base = nextData.sort - 1;
increment = -1;
} else if (!prevData) {
base = nextData.sort - 1;
increment = -1;
// If we drop the card in the last position
} else if (!nextData) {
base = prevData.sort + 1;
increment = 1;
}
} else if (!nextData) {
base = prevData.sort + 1;
increment = 1;
}
// In the general case take the average of the previous and next element
// sort indexes.
else {
@ -72,14 +72,14 @@ Utils = {
base = 0;
increment = 1;
// If we drop the card in the first position
} else if (!prevCardDomElement) {
base = Blaze.getData(nextCardDomElement).sort - 1;
increment = -1;
} else if (!prevCardDomElement) {
base = Blaze.getData(nextCardDomElement).sort - 1;
increment = -1;
// If we drop the card in the last position
} else if (!nextCardDomElement) {
base = Blaze.getData(prevCardDomElement).sort + 1;
increment = 1;
}
} else if (!nextCardDomElement) {
base = Blaze.getData(prevCardDomElement).sort + 1;
increment = 1;
}
// In the general case take the average of the previous and next element
// sort indexes.
else {
@ -121,7 +121,7 @@ Utils = {
return Math.sqrt(
Math.pow(touchA.screenX - touchB.screenX, 2) +
Math.pow(touchA.screenY - touchB.screenY, 2)
);
);
},
enableClickOnTouch(selector) {
@ -144,6 +144,27 @@ Utils = {
}
});
},
getTriggerActionDesc(event,tempInstance){
const jqueryEl = tempInstance.$(event.currentTarget.parentNode);
const triggerEls = jqueryEl.find(".trigger-content").children();
let finalString = "";
for(let i = 0;i< triggerEls.length;i++){
const element = tempInstance.$(triggerEls[i]);
if(element.hasClass("trigger-text")){
finalString += element.text();
}else if(element.find("select").length > 0){
finalString += element.find("select option:selected").text();
}else if(element.find("input").length > 0){
finalString += element.find("input").val();
}
// Add space
if(i != length - 1){
finalString += " ";
}
}
return finalString.toLowerCase();
},
};
// A simple tracker dependency that we invalidate every time the window is

View file

@ -575,7 +575,31 @@
"r-send-email": "Send an email",
"r-to": "to",
"r-subject": "subject",
"r-rule-details": "Rule details"
"r-rule-details": "Rule details",
"r-d-move-to-top-gen": "Move card to top of its list",
"r-d-move-to-top-spec": "Move card to top of list",
"r-d-move-to-bottom-gen": "Move card to bottom of its list",
"r-d-move-to-bottom-spec": "Move card to bottom of list",
"r-d-send-email": "Send email",
"r-d-send-email-to": "to",
"r-d-send-email-subject": "subject",
"r-d-send-email-message": "message",
"r-d-archive": "Archive the card",
"r-d-unarchive": "Unarchive the card",
"r-d-add-label": "Add label",
"r-d-remove-label": "Remove label",
"r-d-add-member": "Add member",
"r-d-remove-member": "Remove member",
"r-d-remove-all-member": "Remove all member",
"r-d-check-all": "Check all item of list",
"r-d-uncheck-all": "Uncheck all item of list",
"r-d-check-one": "Check item",
"r-d-uncheck-one": "Uncheck item",
"r-d-check-of-list": "of checklist",
"r-d-add-checklist": "Add checklist",
"r-d-remove-checklist": "Remove checklist"

View file

@ -2,15 +2,100 @@ Actions = new Mongo.Collection('actions');
Actions.allow({
insert(userId, doc) {
return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
},
update(userId, doc) {
return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
},
remove(userId, doc) {
return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
}
insert(userId, doc) {
return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
},
update(userId, doc) {
return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
},
remove(userId, doc) {
return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
}
});
Actions.helpers({
description() {
if(this.actionType == "moveCardToTop"){
if(this.listTitle == "*"){
return TAPi18n.__('r-d-move-to-top-gen');
}else{
return TAPi18n.__('r-d-move-to-top-spec') + " " + this.listTitle;
}
}
if(this.actionType == "moveCardToBottom"){
if(this.listTitle == "*"){
return TAPi18n.__('r-d-move-to-bottom-gen');
}else{
return TAPi18n.__('r-d-move-to-bottom-spec') + " " + this.listTitle;
}
}
if(this.actionType == "sendEmail"){
const to = " " + TAPi18n.__('r-d-send-email-to') + ": " + this.emailTo + ", ";
const subject = TAPi18n.__('r-d-send-email-subject') + ": " + this.emailSubject + ", ";
const message = TAPi18n.__('r-d-send-email-message') + ": " + this.emailMsg;
const total = TAPi18n.__('r-d-send-email') + to + subject + message;
return total;
}
if(this.actionType == "archive"){
return TAPi18n.__('r-d-archive');
}
if(this.actionType == "unarchive"){
return TAPi18n.__('r-d-unarchive');
}
if(this.actionType == "addLabel"){
const board = Boards.findOne(Session.get('currentBoard'));
const label = board.getLabelById(this.labelId);
let name;
if(label.name == "" || label.name == undefined){
name = label.color.toUpperCase();
}else{
name = label.name;
}
return TAPi18n.__('r-d-add-label') + ": "+name;
}
if(this.actionType == "removeLabel"){
const board = Boards.findOne(Session.get('currentBoard'));
const label = board.getLabelById(this.labelId);
let name;
if(label.name == "" || label.name == undefined){
name = label.color.toUpperCase();
}else{
name = label.name;
}
return TAPi18n.__('r-d-remove-label') + ": " + name;
}
if(this.actionType == "addMember"){
return TAPi18n.__('r-d-add-member') + ": " + this.memberName;
}
if(this.actionType == "removeMember"){
if(this.memberName == "*"){
return TAPi18n.__('r-d-remove-all-member');
}
return TAPi18n.__('r-d-remove-member') + ": "+ this.memberName;
}
if(this.actionType == "checkAll"){
return TAPi18n.__('r-d-check-all') + ": " + this.checklistName;
}
if(this.actionType == "uncheckAll"){
return TAPi18n.__('r-d-uncheck-all') + ": "+ this.checklistName;
}
if(this.actionType == "checkItem"){
return TAPi18n.__('r-d-check-one') + ": "+ this.checkItemName + " " + TAPi18n.__('r-d-check-of-list') + ": " +this.checklistName;
}
if(this.actionType == "uncheckItem"){
return TAPi18n.__('r-d-check-one') + ": "+ this.checkItemName + " " + TAPi18n.__('r-d-check-of-list') + ": " +this.checklistName;
}
if(this.actionType == "addChecklist"){
return TAPi18n.__('r-d-add-checklist') + ": "+ this.checklistName;
}
if(this.actionType == "removeChecklist"){
return TAPi18n.__('r-d-remove-checklist') + ": "+ this.checklistName;
}
return "Ops not trigger description";
}
});

View file

@ -24,28 +24,80 @@ Triggers.allow({
Triggers.helpers({
getRule(){
return Rules.findOne({triggerId:this._id});
},
description(){
if(this.activityType == "createCard"){
if(this.listName == "*"){
return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-added-to').toLowerCase() + " " + TAPi18n.__('r-the-board');
}else{
return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-added-to').toLowerCase() + " " + TAPi18n.__('r-list') + " " +this.listName;
}
}
if(this.activityType == "removeCard"){
if(this.listName == "*"){
return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-removed-from') + " " + TAPi18n.__('r-the-board');
}else{
return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-removed-from') + " " + TAPi18n.__('r-list') + " " +this.listName;
}
}
if(this.activityType == "moveCard"){
if(this.listName = "*"){
return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-moved-from') + " " + this.oldListName;
}else{
return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-moved-to') + " " + this.listName;
}
}
if(this.activityType = "archivedCard"){
return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-archived');
}
if(this.activityType = "restoredCard"){
return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-unarchived');
}
if(this.activityType = "addedLabel"){
if(this.labelId == "*"){
return TAPi18n.__('r-when-a-label-is') + " " + TAPi18n.__('r-added-to') + " " + TAPi18n.__('r-a-card');
}else{
const board = Boards.findOne(Session.get('currentBoard'));
const label = board.getLabelById(this.labelId);
let name;
if(label.name == "" || label.name == undefined){
name = label.color.toUpperCase();
}else{
name = label.name;
}
}
}
if(this.activityType = "restoredCard"){
return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-unarchived');
}
fromList() {
return Lists.findOne(this.fromId);
},
toList() {
return Lists.findOne(this.toId);
},
findList(title) {
return Lists.findOne({title:title});
},
return "No description found";
},
labels() {
const boardLabels = this.board().labels;
const cardLabels = _.filter(boardLabels, (label) => {
return _.contains(this.labelIds, label._id);
});
return cardLabels;
getRule(){
return Rules.findOne({triggerId:this._id});
},
fromList() {
return Lists.findOne(this.fromId);
},
toList() {
return Lists.findOne(this.toId);
},
findList(title) {
return Lists.findOne({title:title});
},
labels() {
const boardLabels = this.board().labels;
const cardLabels = _.filter(boardLabels, (label) => {
return _.contains(this.labelIds, label._id);
});
return cardLabels;
}});

View file

@ -12,3 +12,7 @@ Meteor.publish('allRules', () => {
Meteor.publish('allTriggers', () => {
return Triggers.find({});
});
Meteor.publish('allActions', () => {
return Actions.find({});
});