diff --git a/client/KnowledgeBank/completedProjects.ts b/client/KnowledgeBank/completedProjects.ts index c79b51a0561c9f49337ccbaa3099a23e6e025aed..ca57fb5dd1cc7c439159160b5e6b3f5096bc182c 100644 --- a/client/KnowledgeBank/completedProjects.ts +++ b/client/KnowledgeBank/completedProjects.ts @@ -21,133 +21,11 @@ import { import { formatDate } from "../projectPage/projectPage.js"; +import { projectCard } from "../currentProjects/currentProjects.js" + let projectCards: projectCard[] = []; let filteredImprovementWorks: any[] = []; -class projectCard { - public name: string; // Projectowner - public department: string; - public title: string; - public description: string; - public id: number; - public projectId: string; - public stage: any; - public dateStarted: any; - - constructor( - id: number, - name: string, - department: string, - title: string, - description: string, - projectId: string, - currentStage: string, - dateStarted: any - ) { - this.name = name; - this.department = department; - this.title = title; - this.description = description; - this.id = id; - this.projectId = projectId; - this.stage = currentStage; - this.dateStarted = dateStarted; - } - - showMoreInfo(blockId: string, thisTextId: string): void { - const blockElement = document.getElementById(blockId); - if (blockElement) { - blockElement.style.display = "flex"; - } - - const textElement = document.getElementById(thisTextId); - if (textElement) { - textElement.innerText = "^ Stäng detaljer"; - } - } - - closeMoreInfo(blockId: string, thisTextId: string): void { - const blockElement = document.getElementById(blockId) as HTMLSelectElement; - if (blockElement) { - blockElement.style.display = "none"; - } - const textElement = document.getElementById(thisTextId); - if (textElement) { - textElement.innerText = "> Mer information"; - } - } - - loadInitiatePage() { - alert("The initiate project page should now be loaded"); - } - - generateHTML(): string { - const stageImages = { - Act: "../images/Hemsida_PGSA_A.png", - Study: "../images/Hemsida_PGSA_S.png", - Do: "../images/Hemsida_PGSA_G.png", - Plan: "../images/Hemsida_PGSA_P.png", - Finished: "path/to/finished-image.jpg", - }; - - let stageKey = this.stage; - - // Check if the stage is directly a key in stageImages - if (!stageImages[stageKey as keyof typeof stageImages]) { - // If not, try to map the Swedish stage to English using nolanStageMapping - stageKey = nolanStageMapping[stageKey]; - } - - // Now get the imageUrl using the stageKey - const imageUrl = stageImages[stageKey as keyof typeof stageImages]; - - return ` - <div class="totalExpandedOngoingWorkCard"> - <div style="cursor: pointer;" class="flex-container ongoingCard" id="completed-page-${ - this.projectId - }"> - <div class="ongoingCardImageContainer toSinglePage"> - <div id="borderPinkFaded"> - <div class = "flex-box ongoingCardImage toSinglePage"> - <div id="currentStageLetterCompletedProjects" style="font-size: 25px; font-weight: bolder; - color: #845380; - position: inherit; margin-left: 5px; margin-top: 30px;">Avslutat</div> - </div> - </div> - </div> - <div class="div ongoingCardInfo toSinglePage"> - <p class="toSinglePage" id="ongoingCardIdeaTitle">${this.title}</p> - <p class="toSinglePage" id="ongoingCardDepartment">${ - this.department - }</p> - <p class="toSinglePage" id="ongoingCardManager">${this.name}</p> - <p class="toSinglePage" id="ongoingCardDatesCompletedProjects${ - this.projectId - }" style="font-size: 13px; font-style: italic; margin-top: 5px;">${formatDate( - this.dateStarted - )} </p> - </div> - <button id="completed-page-button-${this.projectId}" data-project-id="${ - this.id - }" class="projectButton fs-6 text-white d-flex pb-2 pt-2" role="button" style="height: 10%; min-width: 15vw; white-space: nowrap; align-items: center; font-family:'Roboto', sans-serif;">Gå till Förbättringsarbetet</button> - <div class="container ongoingSeeCardDetails toSinglePage"> - <div class="ongoingSeeCardDetailsInner"> - <p id="completed-page-ongoingSeeDetailsButton${ - this.projectId - }" class = "moreInfoClass">> Mer information</p> - </div> - </div> - </div> - <div class = "expandedOngoingWorkCard" id="expandedOngoingWorkCard${ - this.projectId - }" style="display: none;"> - <div class ="expandedTextOngoingWorkCard"> - ${this.description} - </div> - </div> - </div> `; - } -} export async function loadPage(listenersLoaded: boolean) { const container = document.querySelector("#container-fluid"); @@ -464,7 +342,9 @@ async function getProjects( improvementWork.content, improvementWork.id, improvementWork.currentStage, - improvementWork.dateStarted + improvementWork.dateStarted, + improvementWork.endDate, + improvementWork.completed ); projectCards.push(card); let cardHTML = card.generateHTML(); diff --git a/client/KnowledgeBank/knowledgeBank.css b/client/KnowledgeBank/knowledgeBank.css index d3873810a391defcbb557c35c3668a9fe0ad995f..be6ff9f922d0dc3288cb66d703b7969fa2f1084f 100644 --- a/client/KnowledgeBank/knowledgeBank.css +++ b/client/KnowledgeBank/knowledgeBank.css @@ -29,6 +29,7 @@ transition: ease .5s; user-select: none; overflow: hidden; + font-size: 23px; } .button-kunskapsbanken::before { diff --git a/client/KnowledgeBank/knowledgeBank.html b/client/KnowledgeBank/knowledgeBank.html index 9806074f340cc927ecf87a41e9c6fec441830fb1..64e1480b3c932420caf342b5944605588600a46d 100644 --- a/client/KnowledgeBank/knowledgeBank.html +++ b/client/KnowledgeBank/knowledgeBank.html @@ -42,12 +42,12 @@ <div class="bottom-buttons d-flex m-2 p-3 justify-content-evenly"> <button onclick="redirectToPage('completedProjects.html')" id="buttons-kunskapsbanken-button3" class="button-kunskapsbanken" role="button" - >Inspiration:<br>avslutade förbättringarbeten</button> + >Inspiration:<br>Avslutade förbättringsarbeten</button> <button onclick="redirectToPage('ContactOrganizations.html')" id="buttons-kunskapsbanken-button4" class="button-kunskapsbanken" role="button" - >Konktakinformation<br>förbättringsorganisationer</button> + >Kontaktinformation<br>förbättringsorganisationer</button> </div> </div> diff --git a/client/currentProjects/currentProjects.ts b/client/currentProjects/currentProjects.ts index e7d113f200b60de09a2146b166e790dcd11b8c70..f06ca70c99ab0dbd23d7855c1597f85a33159ea7 100644 --- a/client/currentProjects/currentProjects.ts +++ b/client/currentProjects/currentProjects.ts @@ -24,7 +24,7 @@ import { formatDate } from "../projectPage/projectPage.js"; let projectCards: projectCard[] = []; let filteredImprovementWorks: any[] = []; -class projectCard { +export class projectCard { public name: string; // Projectowner public department: string; public title: string; @@ -33,6 +33,8 @@ class projectCard { public projectId: string; public stage: any; public dateStarted: any; + public endDate: any; + public completed: boolean; constructor( id: number, @@ -42,7 +44,9 @@ class projectCard { description: string, projectId: string, currentStage: string, - dateStarted: any + dateStarted: any, + endDate: any, + completed: boolean ) { this.name = name; this.department = department; @@ -52,6 +56,8 @@ class projectCard { this.projectId = projectId; this.stage = currentStage; this.dateStarted = dateStarted; + this.endDate = endDate; + this.completed = completed; } showMoreInfo(blockId: string, thisTextId: string): void { @@ -82,25 +88,33 @@ class projectCard { } generateHTML(): string { - const stageImages = { - Act: "../images/Hemsida_PGSA_A.png", - Study: "../images/Hemsida_PGSA_S.png", - Do: "../images/Hemsida_PGSA_G.png", - Plan: "../images/Hemsida_PGSA_P.png", - Finished: "path/to/finished-image.jpg", - }; - - let stageKey = this.stage; - - // Check if the stage is directly a key in stageImages - if (!stageImages[stageKey as keyof typeof stageImages]) { - // If not, try to map the Swedish stage to English using nolanStageMapping - stageKey = nolanStageMapping[stageKey]; + // Set default styles for stageSymbol (P, D, S, A, Avslutat) + let stageSymbol = ""; + let stageFontSize = "50px"; + let stageMarginLeft = "35px"; + let stageMarginTop = "10px"; + + // Set projectDates to dateStarted + let projectDates = formatDate(this.dateStarted); + + if (this.completed) { + stageSymbol = "Avslutat"; + stageFontSize = "25px"; + stageMarginLeft = "5px"; + stageMarginTop = "30px"; + + // Append endDate to projectDates + projectDates += " till " + formatDate(this.endDate); + } else if (this.stage == "Plan") { + stageSymbol = "P"; + } else if (this.stage == "Do") { + stageSymbol = "D"; + } else if (this.stage == "Study") { + stageSymbol = "S"; + } else if (this.stage == "Act") { + stageSymbol = "A"; } - // Now get the imageUrl using the stageKey - const imageUrl = stageImages[stageKey as keyof typeof stageImages]; - return ` <div class="totalExpandedOngoingWorkCard"> <div style="cursor: default;" class="flex-container ongoingCard shadow" id="${ @@ -109,11 +123,15 @@ class projectCard { <div class="ongoingCardImageContainer toSinglePage"> <div id="borderPinkFaded"> <div class = "flex-box ongoingCardImage toSinglePage"> - <div id="currentStageLetter${ - this.projectId - }" style="font-size: 50px; font-weight: bolder; + <div id="currentStageLetter${this.projectId}" style= + "font-size: ${stageFontSize}; + margin-left: ${stageMarginLeft}; + margin-top: ${stageMarginTop}; + font-weight: + bolder; color: #845380; - position: inherit; margin-left: 35px; margin-top: 10px;"></div> + position: inherit; + ">${stageSymbol}</div> </div> </div> </div> @@ -123,18 +141,11 @@ class projectCard { this.department }</p> <p class="toSinglePage" id="ongoingCardManager">${this.name}</p> - <p class="toSinglePage" id="ongoingCardDatesCurrentProjects${ - this.projectId - }" style="font-size: 13px; font-style: italic; margin-top: 5px;">${formatDate( - this.dateStarted - )} </p> + <p class="toSinglePage" id="ongoingCardDatesCurrentProjects${this.projectId}" style="font-size: 13px; font-style: italic; margin-top: 5px;">${projectDates} </p> </div> <button id="project-button-${this.projectId}" data-project-id="${ this.id }" class="projectButton fs-6 text-white d-flex pb-2 pt-2" role="button" style="height: 10%; min-width: 15vw; white-space: nowrap; align-items: center; font-family:'Roboto', sans-serif;">Gå till Förbättringsarbetet</button> - <!--<div> - <img class="statusImage" src="${imageUrl}" alt="Stage Image"> - </div>--> <div class="container ongoingSeeCardDetails toSinglePage"> <div class="ongoingSeeCardDetailsInner"> <div id="ongoingSeeDetailsButton${ @@ -425,7 +436,7 @@ export async function loadPage(listenersLoaded: boolean) { loadWorkStatus(); } -async function loadNolanStages() { +export async function loadNolanStages() { const selectStageHTML = $("#nolanStageSelection"); // loads the select type from html const allStages = ["Planera", "Göra", "Studera", "Agera"]; allStages.forEach((stage) => { @@ -445,7 +456,7 @@ async function loadNolanStages() { }); } -async function loadPatientRiskLevels() { +export async function loadPatientRiskLevels() { const selectPatientRiskLevelHTML = $("#patientRiskLevelSelection"); // loads the select type from html const allRiskLevels = ["Grön", "Blå", "Gul", "Röd"]; allRiskLevels.forEach((riskLevel) => { @@ -485,7 +496,7 @@ async function loadWorkStatus() { }); } -function sortProjects( +export function sortProjects( selectElement: Element, listenersLoaded: boolean, ascendingDates: boolean @@ -507,7 +518,7 @@ function sortProjects( } } -async function getProjects( +export async function getProjects( selectElement: Element, listenersLoaded: boolean, improvementWorks: any[] @@ -527,7 +538,9 @@ async function getProjects( improvementWork.content, improvementWork.id, improvementWork.currentStage, - improvementWork.dateStarted + improvementWork.dateStarted, + improvementWork.endDate, + improvementWork.completed, ); projectCards.push(card); let cardHTML = card.generateHTML(); @@ -538,39 +551,6 @@ async function getProjects( selectElement.appendChild(div); // Stop if the container isn't found addEventListener(improvementWork.id, card); - // Display end date for completed projects - if (improvementWork.completed) { - const datesDiv = document.getElementById( - "ongoingCardDatesCurrentProjects" + improvementWork.id - ); - if (datesDiv) { - datesDiv.innerText += - " till " + formatDate(improvementWork.endDate); - } - } - - // Display "Avslutat" for completed projects - const stageDiv = document.getElementById( - "currentStageLetter" + improvementWork.id - ); - if (stageDiv) { - if (improvementWork.completed) { - stageDiv.innerText = "Avslutat"; - stageDiv.style.fontSize = "25px"; - stageDiv.style.marginLeft = "5px"; - stageDiv.style.marginTop = "30px"; - } else if (improvementWork.currentStage == "Plan") { - console.log("hej"); - stageDiv.innerHTML = "P"; - } else if (improvementWork.currentStage == "Do") { - stageDiv.innerHTML = "D"; - } else if (improvementWork.currentStage == "Study") { - stageDiv.innerText = "S"; - } else if (improvementWork.currentStage == "Act") { - stageDiv.innerText = "A"; - } - } - id++; } else { console.log(improvementWork.unitId + " is not a unit"); //Unit Ids on improvement work that do not exist diff --git a/client/homePage.html b/client/homePage.html index 4a4064c8b0f7fbef5d249acfe45cf9819c1650f4..c9de501577a0ea1d677bcb5d43b7d11a5bc0e992 100644 --- a/client/homePage.html +++ b/client/homePage.html @@ -61,7 +61,7 @@ <div class="monthly-finished-work"> <div class="rounded-container fs-5"> - <p>Månadens Förbättringsarbete</p> + <p>Aktuella Förbättringsarbeten</p> <div class="inner2-container"> </div> </div> diff --git a/client/ideaBank/ideaBank.ts b/client/ideaBank/ideaBank.ts index 7341210bf70e207b20ce07099c9d0ddd0a5a4598..8343d86d7afa51bd366333c02347fccd5ab7826d 100644 --- a/client/ideaBank/ideaBank.ts +++ b/client/ideaBank/ideaBank.ts @@ -28,18 +28,15 @@ class IdeaCard { const user = JSON.parse(tmp)[0]; try { - let suggestion = await getSuggestions({ id: this.suggestionID }); + let suggestion = await await getObjectById("suggestion", this.suggestionID); - - console.log(suggestion); // Check if each suggestion has the 'upvotes' array - - // Check if suggestion and suggestion[0] are defined - if (!suggestion || suggestion.length === 0 || !suggestion[0]) { + // Check if suggestion and suggestion are defined + if (!suggestion || suggestion.length === 0) { console.error("Suggestion not found or is invalid"); return false; } - if (suggestion[0].upvotes.includes(user.id)) { + if (suggestion.upvotes.includes(user.id)) { return true; } } catch (error) { @@ -62,10 +59,10 @@ class IdeaCard { this.upvoteCount++; } else { this.upvoteCount--; - } return upvoted; } + private header: string; private department: string; private name: string; @@ -97,6 +94,7 @@ class IdeaCard { // <img src="images/upvoteIcon.png" class ="upvoteIcon" alt="upvoteIcon"> async generateHTML() { const userHasUpvoted = await this.hasUserUpvoted(); + const upvoteColor = userHasUpvoted ? "purple" : "white"; const strokeColor = userHasUpvoted ? "purple" : "grey";