Browse Source

card model and card ui preparation for custom fields

Pouyan Savoli 7 years ago
parent
commit
d87191f17e

+ 3 - 0
client/components/cards/cardDetails.jade

@@ -45,6 +45,9 @@ template(name="cardDetails")
           h3.card-details-item-title {{_ 'card-due'}}
           h3.card-details-item-title {{_ 'card-due'}}
           +cardDueDate
           +cardDueDate
 
 
+      each customFields
+        .card-details-item.card-details-item-customfield
+          h3.card-details-item-title {{_ 'some-title' }}
 
 
     //- XXX We should use "editable" to avoid repetiting ourselves
     //- XXX We should use "editable" to avoid repetiting ourselves
     if canModifyCard
     if canModifyCard

+ 1 - 1
client/components/cards/cardDetails.js

@@ -200,7 +200,7 @@ Template.editCardTitleForm.events({
 Template.cardCustomFieldsPopup.events({
 Template.cardCustomFieldsPopup.events({
   'click .js-select-field'(evt) {
   'click .js-select-field'(evt) {
     const card = Cards.findOne(Session.get('currentCard'));
     const card = Cards.findOne(Session.get('currentCard'));
-    const customFieldId = this.customFieldId;
+    const customFieldId = this._id;
     card.toggleCustomField(customFieldId);
     card.toggleCustomField(customFieldId);
     evt.preventDefault();
     evt.preventDefault();
   },
   },

+ 3 - 2
client/components/cards/cardDetails.styl

@@ -70,6 +70,7 @@
 
 
   .card-details-items
   .card-details-items
     display: flex
     display: flex
+    flex-wrap: wrap
     margin: 15px 0
     margin: 15px 0
 
 
     .card-details-item
     .card-details-item
@@ -80,8 +81,8 @@
       &.card-details-item-members,
       &.card-details-item-members,
       &.card-details-item-start,
       &.card-details-item-start,
       &.card-details-item-due
       &.card-details-item-due
-        width: 50%
-        flex-shrink: 1
+        max-width: 50%
+        flex-grow: 1
 
 
   .card-details-item-title
   .card-details-item-title
     font-size: 14px
     font-size: 14px

+ 7 - 0
client/components/lists/listBody.js

@@ -35,12 +35,17 @@ BlazeComponent.extendComponent({
 
 
     const members = formComponent.members.get();
     const members = formComponent.members.get();
     const labelIds = formComponent.labels.get();
     const labelIds = formComponent.labels.get();
+    const customFields = formComponent.customFields.get();
+    console.log("members", members);
+    console.log("labelIds", labelIds);
+    console.log("customFields", customFields);
 
 
     if (title) {
     if (title) {
       const _id = Cards.insert({
       const _id = Cards.insert({
         title,
         title,
         members,
         members,
         labelIds,
         labelIds,
+        customFields,
         listId: this.data()._id,
         listId: this.data()._id,
         boardId: this.data().board()._id,
         boardId: this.data().board()._id,
         sort: sortIndex,
         sort: sortIndex,
@@ -121,11 +126,13 @@ BlazeComponent.extendComponent({
   onCreated() {
   onCreated() {
     this.labels = new ReactiveVar([]);
     this.labels = new ReactiveVar([]);
     this.members = new ReactiveVar([]);
     this.members = new ReactiveVar([]);
+    this.customFields = new ReactiveVar([]);
   },
   },
 
 
   reset() {
   reset() {
     this.labels.set([]);
     this.labels.set([]);
     this.members.set([]);
     this.members.set([]);
+    this.customFields.set([]);
   },
   },
 
 
   getLabels() {
   getLabels() {

+ 33 - 0
models/cards.js

@@ -38,6 +38,21 @@ Cards.attachSchema(new SimpleSchema({
       }
       }
     },
     },
   },
   },
+  customFields: {
+    type: [Object],
+    optional: true,
+  },
+  'customFields.$': {
+    type: new SimpleSchema({
+      _id: {
+        type: String,
+      },
+      value: {
+        type: Match.OneOf(String,Number,Boolean,Date),
+        optional: true,
+      },
+    })
+  },
   dateLastActivity: {
   dateLastActivity: {
     type: Date,
     type: Date,
     autoValue() {
     autoValue() {
@@ -238,6 +253,24 @@ Cards.mutations({
     }
     }
   },
   },
 
 
+  assignCustomField(customFieldId) {
+    console.log("assignCustomField", customFieldId);
+    return {$push: {customFields: {_id: customFieldId, value: null}}};
+  },
+
+  unassignCustomField(customFieldId) {
+    console.log("unassignCustomField", customFieldId);
+    return {$pull: {customFields: {_id: customFieldId}}};
+  },
+
+  toggleCustomField(customFieldId) {
+    if (this.customFields && this.customFields[customFieldId]) {
+      return this.unassignCustomField(customFieldId);
+    } else {
+      return this.assignCustomField(customFieldId);
+    }
+  },
+
   setCover(coverId) {
   setCover(coverId) {
     return {$set: {coverId}};
     return {$set: {coverId}};
   },
   },