ribc/scripts/ribc.min.js
sairaj mote eaca2bebbc admin UX improvements
-- added active tasks to dashboard for easier management
2023-02-07 01:32:04 +05:30

1 line
9.7 KiB
JavaScript

(function(){function e(e){if(a.projectBranches.hasOwnProperty(e))var t=a.projectBranches[e].split(",");else t=!1;return t}function t(e){for(var t={},n=a.projectBranches[e].split(","),r=0;r<n.length;r++)t[n[r]]=a.projectMap[e][n[r]][1],"Stop"==t[n[r]]&&(t[n[r]]=0);return t}const n=window.RIBC={},r=n.admin={};n.init=function(e=!1){return new Promise((t,r)=>{Promise.all([n.refreshObjectData(),n.refreshGeneralData(e)]).then(e=>t(e)).catch(e=>r(e))})},n.refreshObjectData=(()=>new Promise((e,t)=>{floCloudAPI.requestObjectData("RIBC").then(t=>{floGlobals.appObjects.RIBC||(floGlobals.appObjects.RIBC={});var n=["projectMap","projectBranches","projectTaskDetails","projectDetails","internList","internRating","internRecord","internsAssigned","projectTaskStatus","displayedTasks"];n.forEach(e=>{floGlobals.appObjects.RIBC[e]||(floGlobals.appObjects.RIBC[e]={}),a[e]=floGlobals.appObjects.RIBC[e]}),e("Object Data Refreshed Successfully")}).catch(e=>t(e))})),n.refreshGeneralData=(e=>new Promise((t,n)=>{var r=["InternUpdates"],a=[],s=[];(e?r:s).push("TaskRequests","InternRequests");let o=[];for(let e of r)o.push(floCloudAPI.requestGeneralData(e));for(let e of a)o.push(floCloudAPI.requestGeneralData(e,{senderID:floGlobals.subAdmins}));for(let e of s)o.push(floCloudAPI.requestGeneralData(e,{senderID:floDapps.user.id}));Promise.all(o).then(e=>t("General Data Refreshed Successfully")).catch(e=>n(e))}));const a={};n.applyForIntern=(e=>new Promise((t,n)=>{floCloudAPI.sendGeneralData(e,"InternRequests").then(e=>t(e)).catch(e=>n(e))})),n.postInternUpdate=(e=>new Promise((t,n)=>{floCloudAPI.sendGeneralData(e,"InternUpdates").then(e=>t(e)).catch(e=>n(e))})),n.getInternUpdates=function(e=null){let t=Object.values(floGlobals.generalDataset("InternUpdates")).map(e=>({floID:e.senderID,update:e.message,time:e.vectorClock.split("_")[0],note:e.note,tag:e.tag}));return t=t.filter(e=>e.floID in a.internList),t.reverse(),e&&e<t.length&&(t=t.slice(0,e)),t},r.commentInternUpdate=((e,t)=>new Promise((n,r)=>{if(!(e in floGlobals.generalDataset("InternUpdates")))return r("Intern update not found");floCloudAPI.noteApplicationData(e,t).then(e=>n(e)).catch(e=>r(e))})),n.applyForTask=(e=>new Promise((t,n)=>{floCloudAPI.sendGeneralData(e,"TaskRequests").then(e=>t(e)).catch(e=>n(e))})),n.getProjectList=(()=>Object.keys(a.projectMap)),n.getProjectDetails=(e=>a.projectDetails[e]),n.getProjectMap=(e=>a.projectMap[e]),n.getProjectBranches=(t=>e(t)),n.getTaskDetails=(e=>a.projectTaskDetails[e]),n.getTaskStatus=(e=>a.projectTaskStatus[e]),n.getInternList=(()=>a.internList),n.getInternRating=(e=>a.internRating[e]||0),n.getInternRecord=(e=>a.internRecord[e]||{}),n.getAssignedInterns=(e=>a.internsAssigned[e]||[]),n.getAllTasks=(()=>a.projectTaskDetails),n.getDisplayedTasks=(()=>floGlobals.appObjects.RIBC.displayedTasks||[]),r.updateObjects=(()=>new Promise((e,t)=>{floCloudAPI.updateObjectData("RIBC").then(t=>e(t)).catch(e=>t(e))})),r.resetObjects=(()=>new Promise((e,t)=>{floCloudAPI.resetObjectData("RIBC").then(t=>e(t)).catch(e=>t(e))})),r.addProjectDetails=function(e,t){if(!(e in a.projectMap))return"Project not Found!";if(e in a.projectDetails&&"object"==typeof e&&"object"==typeof t)for(let n in t)a.projectDetails[e][n]=t[n];else a.projectDetails[e]=t;return"added project details for "+e},n.getInternRequests=function(e=!0){var t=Object.values(floGlobals.generalDataset("InternRequests")).map(e=>({floID:e.senderID,vectorClock:e.vectorClock,details:e.message,status:e.note}));return t=t.filter(e=>!(e.floID in a.internList)),e&&(t=t.filter(e=>!e.status)),t},r.processInternRequest=function(e,t=!0){let n=floGlobals.generalDataset("InternRequests")[e];return n?(r=t&&s(n.senderID,n.message[0])?"Accepted":"Rejected",floCloudAPI.noteApplicationData(e,r).then(e=>null).catch(e=>console.error(e)),r):"Request not found";var r},r.initInternRecord=function(e){a.internRecord[e]||(a.internRecord[e]={active:!0,joined:Date.now(),assignedTasks:{},completedTasks:{},failedTasks:{}})};const s=r.addIntern=function(e,t){return!(e in a.internList)&&(a.internList[e]=t,a.internRating[e]=0,r.initInternRecord(e),!0)};r.renameIntern=function(e,t){return e in a.internList&&(a.internList[e]=t,!0)},r.removeIntern=function(e){if(!(e in a.internList))return!1;delete a.internList[e],delete a.internRating[e],delete a.internRecord[e];for(const t in a.projectTaskDetails)a.internsAssigned[t].includes(e)&&(a.internsAssigned[t]=a.internsAssigned[t].filter(t=>t!==e));return!0},r.addCompletedTask=function(e,t,n,s={}){if(!(e in a.internList))return!1;r.initInternRecord(e),a.internRecord[e].completedTasks[t]={points:n,...s};let o=0;for(const t in a.internRecord[e].completedTasks)o+=a.internRecord[e].completedTasks[t].points;const i=Object.keys(a.internRecord[e].completedTasks).length,c=Object.keys(a.internRecord[e].failedTasks).length;return a.internRating[e]=parseInt(o/(i+c)||1),!0},r.addFailedTask=function(e,t,n={}){return e in a.internList&&(r.initInternRecord(e),a.internRecord[e].failedTasks[t]={...n},r.unassignInternFromTask(e,t),!0)},r.setInternStatus=function(e,t=!0){return e in a.internList&&(a.internRecord[e].active=t,!0)},n.getTaskRequests=function(e=!0){var t=Object.values(floGlobals.generalDataset("TaskRequests")).map(e=>({floID:e.senderID,vectorClock:e.vectorClock,details:e.message,status:e.note}));try{floDapps.user.id&&!floGlobals.subAdmins.includes(floDapps.user.id)&&(t=t.filter(e=>e.floID===floDapps.user.id))}catch(e){return[]}return e&&(t=t.filter(e=>!e.status)),t},r.processTaskRequest=function(e,t=!0){let n=floGlobals.generalDataset("TaskRequests")[e];if(!n)return"Request not found";const{message:{taskId:r,name:a},senderID:i}=n,[c,l,p]=r.split("_");var d;return s(i,a),d=t&&o(i,c,l,p)?"Accepted":"Rejected",floCloudAPI.noteApplicationData(e,d)};const o=r.assignInternToTask=function(e,t,n,r){const s=t+"_"+n+"_"+r;return a.internsAssigned[s]||(a.internsAssigned[s]=[]),!a.internsAssigned[s].includes(e)&&(a.internsAssigned[s].push(e),a.internRecord[e].assignedTasks[s]={assignedOn:Date.now()},!0)};r.unassignInternFromTask=function(e,t){return!(!a.internsAssigned[t]||!a.internsAssigned[t].includes(e))&&(a.internsAssigned[t]=a.internsAssigned[t].filter(t=>t!==e),delete a.internRecord[e].assignedTasks[t],!0)},r.putTaskStatus=function(e,t,n,r){a.projectTaskStatus[t+"_"+n+"_"+r]=e},r.setDisplayedTasks=function(e=[]){floGlobals.appObjects.RIBC.displayedTasks=e},r.createProject=function(e){return e in a.projectMap?"Project Name already exists":(i(e),"Project Create: "+e)},r.copyBranchToNewProject=function(e,t,n,r,s,o){if("mainLine"==t)return"You cannot change mainLine";if(0==a.projectMap.hasOwnProperty(n))return"The project does not exist";if(0==a.projectMap[n].hasOwnProperty(c))return"The branch does not exist";if(s>o)return"Startpoint cannot be later than endpoint";var c=i(n,r,s,o);a.projectMap[n][c]=a.projectMap[e][t].slice(),a.projectMap[n][c][0]="undefined"==r?"mainLine":"newBranchConnection","undefined"!=s&&(a.projectMap[n][c][2]=s),"undefined"!=o&&(a.projectMap[n][c][3]=o);var l=a.projectTaskDetails;for(var p in l)if(l.hasOwnProperty(p)&&p.contains(e+"_"+t)){var d=p.replace(e+"_"+t+"_","");a.projectTaskDetails[n+"_"+c+"_"+d]=l[p]}return a.projectMap[n][c]},r.deleteTaskInMap=function(e,t,n){for(var r,s=a.projectMap[e][t],o=4;o<s.length;o++)s[o]==n&&(r=o);var i,c=r+1,l=r-1,p=a.projectMap[e][t][c],d=a.projectMap[e][t][l];r==s.length-1&&(i="last"),4==r&&(i="first"),r>4&&r<s.length-1&&(i="normal"),4==r&&r==s.length-1&&(i="nothingToDelete");var u=Object.keys(a.projectMap[e]);u=u.filter(e=>e!==t||"mainLine"!==e);for(o=0;o<u.length;o++){if(a.projectMap[e][u[o]][2]==n)if("normal"==i)a.projectMap[e][u[o]][2]=d;else if("last"==i)a.projectMap[e][u[o]][2]=d;else if("first"==i)a.projectMap[e][u[o]][2]=p;else if("undefined"==i)return" nothing to delete";if(a.projectMap[e][u[o]][3]==n)if("normal"==i)a.projectMap[e][u[o]][3]=p;else if("last"==i)a.projectMap[e][u[o]][3]=d;else if("first"==i)a.projectMap[e][u[o]][3]=p;else if("undefined"==i)return" nothing to delete"}var f=a.projectTaskDetails;for(var j in f)f.hasOwnProperty(j)&&j==e+"_"+t+"_"+n&&delete f[j];s.splice(r,1),s[1]=s[1]-1},r.insertTaskInMap=function(e,n,r){var s=[];s=t(e);for(var o=s[n],i=a.projectMap[e][n],c=o+1,l=0,p=4;p<i.length;p++)i[p]>=c&&(c=i[p]+1),i[p]==r&&(l=p);return l>3?(i.splice(l+1,0,c),i[1]++,c):"Not possible to insert here.Try another position"},r.changeBranchLine=function(e,t,n,r,s){return"mainLine"==t?"You cannot change mainLine":0==a.projectMap.hasOwnProperty(e)?"The project does not exist":0==a.projectMap[e].hasOwnProperty(t)?"The branch does not exist":0==a.projectMap[e].hasOwnProperty(n)?"The newConnection does not exist":r>s?"Startpoint cannot be later than endpoint":(a.projectMap[e][t][0]=n,"undefined"!=r&&(a.projectMap[e][t][2]=r),"undefined"!=s&&(a.projectMap[e][t][3]=s),a.projectMap[e][t])},r.changeBranchPoint=function(e,t,n,r){var s;return"mainLine"!=t&&(1==r&&(n<=a.projectMap[e][t][3]?(a.projectMap[e][t][2]=n,s=n):s="Start point cannot be later than end point"),2==r&&(n>=a.projectMap[e][t][2]?(a.projectMap[e][t][3]=n,s=n):s="End point cannot be earlier than start point")),"mainLine"==t&&(s="mainLine cannot be rerouted"),s};const i=r.addBranch=function(t,n,r,s){var o,i=e(t);if(0==i)a.projectMap[t]={},a.projectMap[t].mainLine=["mainLine",0,"Start","Stop"],o="mainLine",a.projectBranches[t]="mainLine";else{var c=i[i.length-1];if(c.includes("branch")){var l=c.split("branch"),p=parseFloat(l[1])+1;o="branch"+p,a.projectMap[t]["branch"+p]=[n,0,r,s],a.projectBranches[t]=a.projectBranches[t]+",branch"+p}c.includes("mainLine")&&(o="branch1",a.projectMap[t].branch1=["mainLine",0,r,s],a.projectBranches[t]="mainLine,branch1")}return o};r.editTaskDetails=function(e,t,n,r){a.projectTaskDetails[t+"_"+n+"_"+r]={...a.projectTaskDetails[t+"_"+n+"_"+r],...e}},r.addTaskInMap=function(e,n){var r=[];r=t(e);var s=r[n],o=s+1;return a.projectMap[e][n].push(o),a.projectMap[e][n][1]++,o}})();