Making changes to store more data related to tasks
This commit is contained in:
parent
b26b61e959
commit
46c149ceb7
@ -1285,6 +1285,15 @@ ul {
|
||||
|
||||
#intern_info__name {
|
||||
font-size: 1.5rem;
|
||||
padding: 0.4rem 0.5rem;
|
||||
border-radius: 0.5rem;
|
||||
}
|
||||
#intern_info__name[contenteditable=true] {
|
||||
background-color: rgba(var(--text-color), 0.1);
|
||||
}
|
||||
|
||||
#edit_intern_name {
|
||||
min-width: 3.5rem;
|
||||
}
|
||||
|
||||
.icon--star {
|
||||
|
||||
2
css/main.min.css
vendored
2
css/main.min.css
vendored
File diff suppressed because one or more lines are too long
@ -1257,6 +1257,14 @@ ul {
|
||||
}
|
||||
#intern_info__name {
|
||||
font-size: 1.5rem;
|
||||
padding: 0.4rem 0.5rem;
|
||||
border-radius: 0.5rem;
|
||||
&[contenteditable="true"] {
|
||||
background-color: rgba(var(--text-color), 0.1);
|
||||
}
|
||||
}
|
||||
#edit_intern_name {
|
||||
min-width: 3.5rem;
|
||||
}
|
||||
.icon--star {
|
||||
fill: var(--orange);
|
||||
|
||||
66
index.html
66
index.html
@ -533,7 +533,7 @@
|
||||
related updates</a>
|
||||
<div id="explorer_branch_container" class="flex align-center flex-wrap gap-0-3 margin-top-0-5">
|
||||
</div>
|
||||
<div id="explorer_task_list" class="observe-empty-state"></div>
|
||||
<div id="explorer_task_list" class="observe-empty-state margin-top-1"></div>
|
||||
<h4 class="empty-state">No tasks are added to this projects</h4>
|
||||
</section>
|
||||
</section>
|
||||
@ -788,7 +788,6 @@
|
||||
<script id="default_ui_library">
|
||||
// Global variables
|
||||
const { html, render: renderElem } = uhtml;
|
||||
const domRefs = {}
|
||||
//Checks for internet connection status
|
||||
if (!navigator.onLine)
|
||||
floGlobals.connectionErrorNotification = notify('There seems to be a problem connecting to the internet, Please check you internet connection.', 'error')
|
||||
@ -799,22 +798,8 @@
|
||||
getRef('notification_drawer').remove(floGlobals.connectionErrorNotification)
|
||||
notify('We are back online.', 'success')
|
||||
})
|
||||
// Use instead of document.getElementById
|
||||
function getRef(elementId) {
|
||||
if (!domRefs.hasOwnProperty(elementId)) {
|
||||
domRefs[elementId] = {
|
||||
count: 1,
|
||||
ref: null,
|
||||
};
|
||||
}
|
||||
if (domRefs[elementId].count < 3) {
|
||||
domRefs[elementId].count += 1;
|
||||
return document.getElementById(elementId);
|
||||
} else {
|
||||
if (!domRefs[elementId].ref?.deref())
|
||||
domRefs[elementId].ref = new WeakRef(document.getElementById(elementId));
|
||||
return domRefs[elementId].ref.deref();
|
||||
}
|
||||
return document.getElementById(elementId);
|
||||
}
|
||||
|
||||
// returns dom with specified element
|
||||
@ -1710,7 +1695,7 @@
|
||||
const render = {
|
||||
displayTaskCard(projectCode, branch, task) {
|
||||
const { title, category, maxSlots, duration, durationType, reward } = RIBC.getTaskDetails(projectCode, branch, task)
|
||||
const assignedInterns = RIBC.getAssignedInterns(projectCode, branch, task) || [];
|
||||
const assignedInterns = RIBC.getAssignedInterns(projectCode, branch, task);
|
||||
return html`
|
||||
<li class=${`display-task`}>
|
||||
<div class="flex align-center space-between">
|
||||
@ -1732,7 +1717,7 @@
|
||||
${maxSlots ? html`
|
||||
<div class="display-task__detail">
|
||||
<span class="display-task__detail__title">Slots: </span>
|
||||
<span class="display-task__detail__value">${maxSlots - assignedInterns.length}</span>
|
||||
<span class="display-task__detail__value">${maxSlots - Object.keys(assignedInterns).length}</span>
|
||||
</div>
|
||||
`: ''}
|
||||
${reward ? html`
|
||||
@ -1757,11 +1742,11 @@
|
||||
for (const taskId of displayedTasks) {
|
||||
availableCategories.add(allTasks[taskId].category)
|
||||
const [projectCode, branch, task] = taskId.split('_')
|
||||
const assignedInterns = RIBC.getAssignedInterns(projectCode, branch, task) || [];
|
||||
const assignedInterns = RIBC.getAssignedInterns(projectCode, branch, task);
|
||||
if (filterCategory && allTasks[taskId].category !== filterCategory) continue;
|
||||
if (searchQuery && searchQuery !== '' && !allTasks[taskId].title.toLowerCase().includes(searchQuery.toLowerCase())) continue;
|
||||
if (assignedInterns.length >= allTasks[taskId].maxSlots) continue;
|
||||
if (userType && userType === 'intern' && floDapps.user.id && assignedInterns.includes(floDapps.user.id)) continue;
|
||||
if (Object.keys(assignedInterns).length >= allTasks[taskId].maxSlots) continue;
|
||||
if (userType && userType === 'intern' && floDapps.user.id && assignedInterns.hasOwnProperty(floDapps.user.id)) continue;
|
||||
filtered.push(render.displayTaskCard(projectCode, branch, task))
|
||||
}
|
||||
let renderedTasks = filtered
|
||||
@ -1822,10 +1807,10 @@
|
||||
}
|
||||
})
|
||||
const assignedInterns = RIBC.getAssignedInterns(appState.params.id, appState.params.branch, task) || []
|
||||
const assignedInternsCards = filterMap(assignedInterns, (internFloId) => render.assignedInternCard(internFloId));
|
||||
const assignedInternsCards = Object.keys(assignedInterns).map(internFloId => render.assignedInternCard(internFloId));
|
||||
const status = RIBC.getTaskStatus(appState.params.id, appState.params.branch, task)
|
||||
let applyButton
|
||||
if (!assignedInterns.includes(myFloID) && userType !== 'admin') {
|
||||
if (!assignedInterns.hasOwnProperty(myFloID) && userType !== 'admin') {
|
||||
const hasApplied = [...RIBC.getTaskRequests(false), ...sessionTaskRequests].find(({ details }) => {
|
||||
return `${appState.params.id}_${appState.params.branch}_${task}` === details.taskId
|
||||
})
|
||||
@ -1865,7 +1850,7 @@
|
||||
${maxSlots ? html`
|
||||
<div class="display-task__detail">
|
||||
<span class="display-task__detail__title">Slots: </span>
|
||||
<span class="display-task__detail__value">${maxSlots - assignedInterns.length}</span>
|
||||
<span class="display-task__detail__value">${maxSlots - Object.keys(assignedInterns).length}</span>
|
||||
</div>
|
||||
`: ''}
|
||||
${reward ? html`
|
||||
@ -1963,10 +1948,7 @@
|
||||
const assignedInterns = RIBC.getAssignedInterns(appState.params.id, appState.params.branch, task)
|
||||
const status = RIBC.getTaskStatus(appState.params.id, appState.params.branch, task)
|
||||
const taskDetails = { title, description, category, maxSlots, duration, durationType, reward } = RIBC.getTaskDetails(appState.params.id, appState.params.branch, task)
|
||||
let assignedInternsCards
|
||||
if (assignedInterns) {
|
||||
assignedInternsCards = filterMap(assignedInterns, (internFloId) => render.assignedInternCard(internFloId, status === 'incomplete'))
|
||||
}
|
||||
let assignedInternsCards = Object.keys(assignedInterns).map(internFloId => render.assignedInternCard(internFloId, status === 'incomplete'))
|
||||
const branches = getAllBranches(appState.params.id)
|
||||
const branchesButtons = filterMap(branches, (branch) => {
|
||||
const { branchName, parentBranch, startPoint, endPoint } = branch
|
||||
@ -2399,7 +2381,7 @@
|
||||
${maxSlots ? html`
|
||||
<div class="display-task__detail">
|
||||
<span class="display-task__detail__title">Slots: </span>
|
||||
<span class="display-task__detail__value">${maxSlots - assignedInterns.length}</span>
|
||||
<span class="display-task__detail__value">${maxSlots - Object.keys(assignedInterns).length}</span>
|
||||
</div>
|
||||
`: ''}
|
||||
${reward ? html`
|
||||
@ -2547,7 +2529,7 @@
|
||||
// opens a popup containing various intern information
|
||||
function showInternInfo(e) {
|
||||
const internFloId = e.target.closest('.intern-card').dataset.internFloId;
|
||||
const { completedTasks = {}, active = true } = RIBC.getInternRecord(internFloId) || {}
|
||||
const { joined, completedTasks = {}, active = true } = RIBC.getInternRecord(internFloId) || {}
|
||||
const internName = RIBC.getInternList()[internFloId]
|
||||
const rating = RIBC.getInternRating(internFloId)
|
||||
let completedTasksCount = 0;
|
||||
@ -2561,15 +2543,19 @@
|
||||
if (splitName.length > 1) {
|
||||
initials += splitName[splitName.length - 1][0]
|
||||
}
|
||||
console.log(joined)
|
||||
renderElem(getRef('intern_info__wrapper'), html`
|
||||
<div class="flex flex-direction-column align-items-center gap-1 text-center">
|
||||
<div class="flex flex-direction-column align-items-center gap-1-5">
|
||||
<div id="intern_info__initials" class="intern-card__initials" style=${`--color: var(${getInternColor(internFloId)})`}>${initials}</div>
|
||||
<div class="flex align-center gap-0-5">
|
||||
<h3 id="intern_info__name">${internName}</h3>
|
||||
${userType === 'admin' ? html`<button class="button button--small button--colored" onclick=${toggleInternNameEditing}>Edit</button> ` : ''}
|
||||
<div class="flex flex-direction-column align-items-center gap-0-5">
|
||||
<div class="flex align-center gap-0-5">
|
||||
<h3 id="intern_info__name" class="text-center">${internName}</h3>
|
||||
${userType === 'admin' ? html`<button id="edit_intern_name" class="button button--small button--colored" onclick=${toggleInternNameEditing}>Edit</button> ` : ''}
|
||||
</div>
|
||||
<sm-copy id="intern_info__flo_id" value=${internFloId}></sm-copy>
|
||||
</div>
|
||||
${joined ? html`<p>Joined on ${getFormattedTime(joined, 'date-only')}</p>` : ''}
|
||||
</div>
|
||||
<sm-copy id="intern_info__flo_id" value=${internFloId}></sm-copy>
|
||||
<div id="stats_wrapper">
|
||||
<div id="intern_rating" class="stat">
|
||||
<div class="stat__display">
|
||||
@ -2602,7 +2588,7 @@
|
||||
color = '--orange'
|
||||
}
|
||||
setTimeout(() => {
|
||||
document.getElementById('intern_rating').style = `--progress: ${400 - (rating * 4)}; --rating-color:var(${color})`;
|
||||
getRef('intern_rating').style = `--progress: ${400 - (rating * 4)}; --rating-color:var(${color})`;
|
||||
}, 100);
|
||||
}
|
||||
|
||||
@ -2700,7 +2686,7 @@
|
||||
renderElem(getRef('rating_wrapper'), html`
|
||||
<h4>${currentTask.querySelector('.task-title').textContent}</h4>
|
||||
<sm-form>
|
||||
${assignedInterns.map((intern, index) => html`
|
||||
${Object.keys(assignedInterns).map((intern, index) => html`
|
||||
<div class="flex flex-direction-column gap-0-5 rating-part" data-intern-id=${intern}>
|
||||
<h4>${RIBC.getInternList()[intern]}</h4>
|
||||
<div class="flex gap-0-5">
|
||||
@ -3244,7 +3230,7 @@
|
||||
for (const taskKey in allTasks) {
|
||||
const [projectCode, branch, task] = taskKey.split('_')
|
||||
const assignedInterns = RIBC.getAssignedInterns(projectCode, branch, task)
|
||||
if (Array.isArray(assignedInterns) && assignedInterns.includes(myFloID)) {
|
||||
if (assignedInterns.hasOwnProperty(myFloID)) {
|
||||
floGlobals.assignedProjectsList.add(projectCode)
|
||||
if (RIBC.getTaskStatus(projectCode, branch, task) === 'incomplete') {
|
||||
floGlobals.assignedTasks.add(taskKey);
|
||||
@ -3339,7 +3325,7 @@
|
||||
return allInterns[a].toLowerCase().localeCompare(allInterns[b].toLowerCase())
|
||||
})
|
||||
if (availableInternsOnly) {
|
||||
arrayOfInterns = arrayOfInterns.filter(intern => !RIBC.getAssignedInterns(appState.params.id, appState.params.branch, currentTask.dataset.taskId)?.includes(intern))
|
||||
arrayOfInterns = arrayOfInterns.filter(intern => !RIBC.getAssignedInterns(appState.params.id, appState.params.branch, currentTask.dataset.taskId)?.hasOwnProperty(intern))
|
||||
}
|
||||
if (searchKey === '') {
|
||||
filtered = (sortByRating ? highPerformingInterns : arrayOfInterns).map(floId => {
|
||||
|
||||
@ -104,7 +104,7 @@
|
||||
Ribc.getInternList = () => _.internList;
|
||||
Ribc.getInternRating = (floID) => _.internRating[floID];
|
||||
Ribc.getInternRecord = (floID) => _.internRecord[floID];
|
||||
Ribc.getAssignedInterns = (projectCode, branch, taskNumber) => _.internsAssigned[projectCode + "_" + branch + "_" + taskNumber]
|
||||
Ribc.getAssignedInterns = (projectCode, branch, taskNumber) => _.internsAssigned[projectCode + "_" + branch + "_" + taskNumber] || {};
|
||||
Ribc.getAllTasks = () => _.projectTaskDetails
|
||||
Ribc.getDisplayedTasks = () => floGlobals.appObjects.RIBC.displayedTasks || [];
|
||||
|
||||
@ -160,16 +160,20 @@
|
||||
floCloudAPI.noteApplicationData(vectorClock, status).then(_ => null).catch(e => console.error(e))
|
||||
return status;
|
||||
}
|
||||
|
||||
Admin.initInternRecord = function (floID) {
|
||||
if (!_.internRecord[floID])
|
||||
_.internRecord[floID] = {
|
||||
active: true,
|
||||
joined: Date.now(),
|
||||
completedTasks: {},
|
||||
}
|
||||
}
|
||||
const addIntern = Admin.addIntern = function (floID, internName) {
|
||||
if (floID in _.internList)
|
||||
return false
|
||||
_.internList[floID] = internName
|
||||
_.internRating[floID] = 0
|
||||
_.internRecord[floID] = {
|
||||
active: true,
|
||||
completedTasks: {},
|
||||
}
|
||||
Admin.initInternRecord(floID)
|
||||
return true;
|
||||
}
|
||||
Admin.renameIntern = function (floID, newName) {
|
||||
@ -186,19 +190,15 @@
|
||||
delete _.internRating[floID]
|
||||
delete _.internRecord[floID]
|
||||
for (const taskId in _.projectTaskDetails) {
|
||||
if (_.internsAssigned[taskId].includes(floID))
|
||||
_.internsAssigned[taskId] = _.internsAssigned[taskId].filter(id => id != floID)
|
||||
if (_.internsAssigned[taskId].hasOwnProperty(floID))
|
||||
delete _.internsAssigned[taskId][floID]
|
||||
}
|
||||
return true;
|
||||
}
|
||||
Admin.addTaskScore = function (floID, taskId, points, details = {}) {
|
||||
if (!(floID in _.internList))
|
||||
return false;
|
||||
if (!_.internRecord[floID])
|
||||
_.internRecord[floID] = {
|
||||
active: true,
|
||||
completedTasks: {},
|
||||
}
|
||||
Admin.initInternRecord(floID)
|
||||
_.internRecord[floID].completedTasks[taskId] = {
|
||||
points,
|
||||
...details
|
||||
@ -255,19 +255,23 @@
|
||||
}
|
||||
|
||||
const assignInternToTask = Admin.assignInternToTask = function (floID, projectCode, branch, taskNumber) {
|
||||
var index = projectCode + "_" + branch + "_" + taskNumber
|
||||
if (!Array.isArray(_.internsAssigned[index]))
|
||||
_.internsAssigned[index] = []
|
||||
if (!_.internsAssigned[index].includes(floID)) {
|
||||
_.internsAssigned[index].push(floID)
|
||||
const key = projectCode + "_" + branch + "_" + taskNumber
|
||||
if (!_.internsAssigned[key])
|
||||
_.internsAssigned[key] = {}
|
||||
if (!_.internsAssigned[key].hasOwnProperty(floID)) {
|
||||
_.internsAssigned[key][floID] = { assignedOn: Date.now() }
|
||||
return true
|
||||
} else
|
||||
return false
|
||||
}
|
||||
|
||||
Admin.unassignInternFromTask = function (floID, projectCode, branch, taskNumber) {
|
||||
const index = projectCode + "_" + branch + "_" + taskNumber
|
||||
_.internsAssigned[index] = _.internsAssigned[index].filter(id => id != floID)
|
||||
const key = projectCode + "_" + branch + "_" + taskNumber
|
||||
if (_.internsAssigned[key] && _.internsAssigned[key].hasOwnProperty(floID)) {
|
||||
delete _.internsAssigned[key][floID]
|
||||
return true
|
||||
} else
|
||||
return false
|
||||
}
|
||||
|
||||
Admin.putTaskStatus = function (taskStatus, projectCode, branch, taskNumber) {
|
||||
|
||||
2
scripts/ribc.min.js
vendored
2
scripts/ribc.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user