Adding functionality for Tasks.

This commit is contained in:
Brian McGonagill 2022-09-05 15:30:20 -05:00
parent 947abfb76f
commit 56b27d6b05
13 changed files with 234 additions and 9 deletions

2
.gitignore vendored
View file

@ -109,3 +109,5 @@ node_modules/meteor-node-stubs/node_modules/which-boxed-primitive/.meteor-portab
node_modules/meteor-node-stubs/node_modules/which-typed-array/.meteor-portable-2.json node_modules/meteor-node-stubs/node_modules/which-typed-array/.meteor-portable-2.json
node_modules/meteor-node-stubs/node_modules/xtend/.meteor-portable-2.json node_modules/meteor-node-stubs/node_modules/xtend/.meteor-portable-2.json
node_modules/regenerator-runtime/.meteor-portable-2.json node_modules/regenerator-runtime/.meteor-portable-2.json
node_modules/moment/
node_modules/meteor-node-stubs/

View file

@ -9,7 +9,7 @@
<select name="taskUser" id="taskUser" class="taskUser"> <select name="taskUser" id="taskUser" class="taskUser">
<option value="" disabled selected>Assign to user...</option> <option value="" disabled selected>Assign to user...</option>
{{#each taskUsers}} {{#each taskUsers}}
<option value="{{username}}">{{username}}</option> <option value="{{username}}_{{usersId}}">{{username}}</option>
{{/each}} {{/each}}
</select> </select>
</div> </div>

View file

@ -24,6 +24,9 @@ Template.taskForm.helpers({
username: function() { username: function() {
return this.profile.fullname; return this.profile.fullname;
}, },
usersId: function() {
return this._id;
},
}); });
Template.taskForm.events({ Template.taskForm.events({
@ -35,6 +38,8 @@ Template.taskForm.events({
let taskUserErr = false; let taskUserErr = false;
let taskNameErr = false; let taskNameErr = false;
let taskDateErr = false; let taskDateErr = false;
let userInfo;
let actDate;
console.log("taskUser value: " + taskUser); console.log("taskUser value: " + taskUser);
@ -44,15 +49,18 @@ Template.taskForm.events({
if (taskDate == null || taskDate == "") { if (taskDate == null || taskDate == "") {
taskDateErr = true; taskDateErr = true;
} else {
actDate = new Date(taskDate);
} }
if (taskUser == null || taskUser == "") { if (taskUser == null || taskUser == "") {;
console.log("triggered taskUser error.");
taskUserErr = true; taskUserErr = true;
} else {
userInfo = taskUser.split('_');
} }
if (taskUserErr == false && taskDateErr == false && taskNameErr == false) { if (taskUserErr == false && taskDateErr == false && taskNameErr == false) {
Meteor.call("add.task", taskName, taskUser, taskDate, function(err, result) { Meteor.call("add.task", taskName, userInfo[0], userInfo[1], taskDate, actDate, function(err, result) {
if (err) { if (err) {
console.log(" ERROR adding the new task: " + err); console.log(" ERROR adding the new task: " + err);
} else { } else {

View file

@ -13,9 +13,9 @@ Template.taskTbl.helpers({
tasks: function() { tasks: function() {
let hideComp = Session.get("hideCompletedTasks"); let hideComp = Session.get("hideCompletedTasks");
if (hideComp == false) { if (hideComp == false) {
return TaskItems.find({}); return TaskItems.find({}, { sort: { actualDate: 1 }});
} else { } else {
return TaskItems.find({ isComplete: false }); return TaskItems.find({ isComplete: false }, { sort: { actualDate: 1 }});
} }
}, },
completeDate: function() { completeDate: function() {

View file

@ -52,7 +52,7 @@ Template.menuItemsForm.events({
let menuInfoLen = menuInfo.length; let menuInfoLen = menuInfo.length;
for (i = 0; i < menuInfoLen; i++) { for (i = 0; i < menuInfoLen; i++) {
let menuItemId = menuInfo[i]._id; let menuItemId = menuInfo[i]._id;
let momentAddDay = moment(menuInfo[i].serveDate).add(1, 'day').format("MMM D, YYYY"); let momentAddDay = moment(menuInfo[i].serveDate).add(1, 'day').format("MMM DD, YYYY");
// console.log(momentAddDay); // console.log(momentAddDay);
Meteor.call('shiftDate', menuItemId, momentAddDay, function(err,result) { Meteor.call('shiftDate', menuItemId, momentAddDay, function(err,result) {
if (err) { if (err) {

View file

@ -0,0 +1,5 @@
<template name="myTasks">
{{> myTasksForm}}
<hr>
{{> myTasksTbl}}
</template>

View file

@ -0,0 +1,35 @@
<template name="myTasksForm">
<h4>MyTasks</h4>
<div class="row">
<div class="col s12 m6 l6 input-field">
<input type="text" class="myTaskName" id="myTaskName" />
<label for="myTaskName">Task Name</label>
</div>
<div class="col s12 m6 l6 input-field">
<input type="text" class="datepicker" id="myTaskDate" />
<label for="myTaskDate">Due Date</label>
</div>
</div>
<div class="row">
<div class="col s6 m4 l4">
<p>
<label>
<input type="checkbox" id="hideMyCompletedTasks" />
<span>Hide Completed</span>
</label>
</p>
</div>
<div class="col s6 m4 l4">
<p>
<label>
<input type="checkbox" id="onlyTodaysTasks" />
<span>Today's Tasks</span>
</label>
</p>
</div>
<div class="col s12 m4 l4">
<a class="waves-effect waves-light btn addNewTask green right">Add</a>
</div>
</div>
{{> snackbar}}
</template>

View file

@ -0,0 +1,58 @@
import { TaskItems } from '../../imports/api/tasks.js';
Template.myTasksForm.onCreated(function() {
});
Template.myTasksForm.onRendered(function() {
$('.datepicker').datepicker();
Session.set("hideComplete", false);
Session.set("onlyToday", false);
});
Template.myTasksForm.helpers({
});
Template.myTasksForm.events({
'click .addNewTask' (event) {
event.preventDefault();
let taskName = $("#myTaskName").val();
let taskDate = $("#myTaskDate").val();
let actDate = new Date(taskDate);
if (taskName == null || taskName == "" || taskDate == "" || taskDate == null) {
taskEntryErr = true;
showSnackbar("Task Name and Date are Required!", "red");
return;
} else {
Meteor.call("add.task", taskName, "self", "selfId", taskDate, actDate, function(err, result) {
if (err) {
console.log(" ERROR adding task for self: " + err);
showSnackbar("ERROR adding task for self!", "red");
} else {
console.log(" SUCCESS adding task for self.");
$("#myTaskName").val("");
$("#myTaskDate").val("");
}
});
}
},
'click #hideMyCompletedTasks' (event) {
let hide = $("#hideMyCompletedTasks").prop('checked');
if (hide == true) {
Session.set("hideComplete", true);
} else {
Session.set("hideComplete", false);
}
},
'click #onlyTodaysTasks' (event) {
let onlyToday = $("#onlyTodaysTasks").prop('checked');
if (onlyToday == true) {
Session.set("onlyToday", true);
} else {
Session.set("onlyToday", false);
}
}
});

View file

@ -0,0 +1,19 @@
<template name="myTasksTbl">
<ul class="collapsible">
{{#each tasks}}
<li>
<div class="collapsible-header {{#if $eq passedDate false}}yellow{{/if}}{{#if $eq isComplete true}}green lighten-2{{/if}}"><h5>{{taskName}}</h5></div>
<div class="collapsible-body">
<span>
<ul class="collection">
<li class="collection-item">{{taskDate}}<i class="material-icons clickable right markMyTaskComplete">check</i><i class="material-icons clickable right deleteMyTask">delete</i></li>
<li class="collection-item">Complete? {{#if $eq isComplete true}}<i class="material-icons green">check</i>{{else}}<i class="material-icons red">close</i>{{/if}}</li>
<li class="collection-item">Completed On? {{#if $eq isComplete true}}{{compOn}}{{else}}Not Complete{{/if}}</li>
</ul>
</span>
</div>
</li>
{{/each}}
</ul>
{{> deleteConfirmationModal}}
</template>

View file

@ -0,0 +1,69 @@
import { TaskItems } from '../../imports/api/tasks.js';
import moment from 'moment';
Template.myTasksTbl.onCreated(function() {
this.subscribe("myTasks");
});
Template.myTasksTbl.onRendered(function() {
$('.collapsible').collapsible();
Session.set("hideComplete", false);
Session.set("onlyToday", false);
});
Template.myTasksTbl.helpers({
tasks: function() {
let onlyToday = Session.get("onlyToday");
let hide = Session.get("hideComplete");
let todayIs = moment(new Date()).format("MMM DD, YYYY");
if (hide == true && onlyToday == false) {
return TaskItems.find({ isComplete: false }, { sort: { actualDate: 1 }});
} else if (hide == true && onlyToday == true) {
return TaskItems.find({ isComplete: false, taskDate: todayIs }, { sort: { actualDate: 1 }});
} else if (hide == false && onlyToday == true) {
return TaskItems.find({ taskDate: todayIs }, { sort: { actualDate: 1 }});
} else {
return TaskItems.find({}, { sort: { actualDate: 1 }});
}
},
passedDate: function() {
let taskDate = new Date(this.taskDate);
let now = new Date()
let diff = now < taskDate;
let comp = this.isComplete;
if (diff == false && comp == false) {
return false;
} else {
return true;
}
},
compOn: function() {
if (this.isComplete == true) {
return moment(this.completedOn).format("MMM DD, YYYY");
}
}
});
Template.myTasksTbl.events({
'click .markMyTaskComplete' (event) {
event.preventDefault();
let taskId = this._id;
Meteor.call("markTask.complete", taskId, function(err, result) {
if (err) {
console.log(" ERROR marking task completeL " + err);
showSnackbar("ERROR Marking Task Complete!", "red");
} else {
showSnackbar("Successfully Marked Task Complete!", "green");
}
});
},
'click .deleteMyTask' (event) {
event.preventDefault();
Session.set("deleteId", this._id);
Session.set("method", "delete.task");
Session.set("item", this.taskName);
Session.set("view", "My Tasks");
$('#modalDelete').modal('open');
}
});

View file

@ -12,19 +12,33 @@ TaskItems.allow({
}); });
Meteor.methods({ Meteor.methods({
'add.task' (taskName, assignedTo, taskDate) { 'add.task' (taskName, assignedTo, assignedToId, taskDate, actDate) {
check(taskName, String); check(taskName, String);
check(assignedTo, String); check(assignedTo, String);
check(taskDate, String); check(taskDate, String);
check(assignedToId, String);
check(actDate, Date);
if (!this.userId) { if (!this.userId) {
throw new Meteor.Error('You are not allowed to add tasks. Make sure you are logged in with valid user credentials.'); throw new Meteor.Error('You are not allowed to add tasks. Make sure you are logged in with valid user credentials.');
} }
let username;
if (assignedTo == "self") {
let userInfo = Meteor.users.findOne({ _id: this.userId });
username = userInfo.profile.fullname;
assignedToId = this.userId;
} else {
username = assignedTo;
}
return TaskItems.insert({ return TaskItems.insert({
taskName: taskName, taskName: taskName,
taskDate: taskDate, taskDate: taskDate,
assignedTo: assignedTo, actualDate: actDate,
assignedTo: username,
assignedToId: assignedToId,
isComplete: false, isComplete: false,
completedOn: null, completedOn: null,
assignedOn: new Date(), assignedOn: new Date(),

View file

@ -115,4 +115,11 @@ FlowRouter.route('/taskHome', {
action() { action() {
BlazeLayout.render('MainLayout', { main: 'taskHome' }); BlazeLayout.render('MainLayout', { main: 'taskHome' });
} }
});
FlowRouter.route('/myTasks', {
name: 'myTasks',
action() {
BlazeLayout.render('MainLayout', { main: 'myTasks' });
}
}); });

View file

@ -104,4 +104,12 @@ Meteor.publish("allTasks", function() {
} catch (error) { } catch (error) {
console.log(" ERROR pulling the task items: " + error); console.log(" ERROR pulling the task items: " + error);
} }
});
Meteor.publish("myTasks", function() {
try {
return TaskItems.find({ assignedToId: this.userId });
} catch (error) {
console.log(" ERROR pulling the task items: " + error);
}
}); });