Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
profilePage.ts 16.23 KiB
import { onAuthStateChanged } from "firebase/auth";
import { auth } from "./Database/database.js";
import { logout } from "./Database/authentication.js";
import { getUsers, getSuggestions, getImprovementWorks, getImprovementWorkResponsible, getUnits, getObjectById, getImprovementWorksForUser } from "../client/Database/database.js";
import { formatDate } from "./projectPage/projectPage.js";
import {
  loadProjectPageP,
  loadProjectPageA,
  loadProjectPageG,
  loadProjectPageS,
  loadInitiatePage
} from "./SidebarAndHeader/pageHandler.js";
import { projectCard, addEventListener } from "./currentProjects/currentProjects.js";

import {
  getProjects
} from "./homePage.js"

function logoutUser(event : Event) {
    event.preventDefault();
    alert('logout')
    
    logout()
}

/* onAuthStateChanged(auth, (user) => {
    const userNameLink = document.getElementById('userNameLink') as HTMLAnchorElement;
    const logOutLink = document.getElementById('logOutLink');

    if ( userNameLink && logOutLink){
        if ( user ) {
            var x = user;
            // User is logged in, 'user' contains user information
            console.log("User is logged in:", user.uid, user.email, user);
            console.log(user.uid)
            $("#user-name").text("Nytt namn");
            userNameLink.textContent = user.email;
            userNameLink.href = 'homePage.html';
            logOutLink.style.display = 'inline'; // Show Logga ut
            logOutLink.addEventListener('click', logoutUser);
            
        } else {
            // No user is logged in
        }
    }
});
 */

interface Project {
    ID: string;
    name: string;
    current_stage: string;
    content: string;
    unit_ID: string;
    date_started: Date;
}

let myIdeaCards: { [key: number]: IdeaCard } = {};

class IdeaCard {
    private header: string;
    private department: string;
    private name: string;
    private description: string;
    private upvoteCount: number;
    private id: number;
    private suggestionID: string;
  
    constructor(
      id: number,
      header: string,
      department: string,
      name: string,
      description: string,
      upvoteCount: number,
      suggestionID: string
    ) {
      this.header = header;
      this.department = department;
      this.name = name;
      this.description = description;
      this.upvoteCount = upvoteCount;
      this.id = id;
      this.suggestionID = suggestionID;
  }

  generateHTML(): string {
    return `<div class="totalExpandedIdeaCard">
          <div class="ideaCard">
              <div class="ideaCardBorder">
                  <div class="ideaCardImageHP">
                      <img src="../images/pinkFaded.png" class ="pinkFadedHP" alt="pinkFaded">
                  </div>
                  <div class="ideaCardMiddleText">
                      <p id="ideaCardHeader" class="ideaCardFont">${this.header}</p>
                      <p id="ideaCardDepartment" class="ideaCardFont">${this.department}</p>
                      <p id="ideaCardName" class="ideaCardFont">${this.name}</p>
                      <p id="ideaCardMoreInfo${this.id}" class="ideaCardFont moreInfoClass"> > Mer information</p>
                  </div>
              </div>
              <div class="ideaCardUpvotesHP">
                  <div class="upvoteDivHP">
                  <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor" class="bi bi-caret-up upvoteSymbol" viewBox="0 0 16 16">
  <path d="M3.204 11h9.592L8 5.519 3.204 11zm-.753-.659 4.796-5.48a1 1 0 0 1 1.506 0l4.796 5.48c.566.647.106 1.659-.753 1.659H3.204a1 1 0 0 1-.753-1.659z"/>
</svg>                  <div id ="upvoteNumber" class="ideaCardFont">${this.upvoteCount}</div>

                  </div>
              </div>
          </div>
          <div id="expandedContent${
            this.id
          }" class= "expandedIdeaContent" style ="display : none;">
              <div class="expandedDescriptionText">
                  <p class="ideaCardFontComments" id="expandedHeader">Om ideen</p>
                  <p class="ideaCardFont" id="expandedDescription">${
                    this.description
                  }</p>
              </div>
              <div class="expandedCommentAndButton id = "expandedCommentAndButton${
                this.id
              }">
                  <div class="expandedComment">
                      <button class="ideaCardFontComments" id="commentsProjectCard">Kommentarer</button>
                  </div>

                  <div class="expandedButton">
                      <button class="initiateProjectButton" id="initiateProjectFromCard${
                        this.suggestionID
                      }">Initiera Förbättringsförslag</button>
                  </div>

                  <!-- commentsModal.html -->
                    <div id="commentsModal" class="modal">
                      <div class="modal-content">
                        <span class="close" id="closeModal">&times;</span>
                        <div id="existingComments">
                          <!-- Display existing comments here -->
                          <div class="comment-container">
                            <div class="comment">
                              <div class="comment-author">John Doe</div>
                              <div class="comment-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
                            </div>
                        
                            <div class="comment">
                              <div class="comment-author">Jane Smith</div>
                              <div class="comment-text">Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
                            </div>

                            <div class="comment">
                              <div class="comment-author">Erik Svensson</div>
                              <div class="comment-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
                            </div>
                          </div>
                        </div>
                        <form id="addCommentForm">
                          <input type="text" id="commentInput" name="commentInput">
                          <button type="button" id="addCommentBtn">Publicera</button>
                        </form>
                      </div>
                    </div>
              </div>
          </div>
      </div>`;
  }



  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");
  }
}
async function createNewCards(className: string, container: Element, signedInUserHsaID: string) {
  let user = await getObjectById("users",signedInUserHsaID);
  let userSuggestions = await getSuggestions({creatorHsaId: user.id})
  //If there exist filter use those instead to get matching suggestions rest should not need to be changed
  var counter = 0;
  userSuggestions.forEach(async (suggestion) => {
    var unit = await getObjectById("unit", suggestion.unitId);
    var user = await getObjectById("users", suggestion.creatorHsaId);
    createNewIdeaCard(
      suggestion.name,
      unit.name,
      user.firstName + " " + user.lastName,
      suggestion.content,
      suggestion.upvotes.length,
      className,
      container,
      counter,
      suggestion.id
    );
    counter = counter + 1;
  });
}
async function createNewIdeaCard(
    header: string,
    department: string,
    name: string,
    description: string,
    upvoteCount: number,
    className: string,
    container: Element,
    ID: number,
    suggestionID: string
  ) {
    let card = new IdeaCard(
      ID,
      header,
      department,
      name,
      description,
      upvoteCount,
      suggestionID
    );
    let cardHTML = card.generateHTML();
    myIdeaCards[ID] = card;
    let div = document.createElement("div");
    div.className = className; // Set the class name(s) here
    div.innerHTML = cardHTML;
    container.appendChild(div);
  }
  
 export async function loadPage(listenersLoaded: boolean) {
     const container = document.querySelector('#container-fluid');


     if (!container) return; // Stop if the container isn't found
     fetch('profilePage.html')
             .then(response => response.text())
             .then(async data => { 
                 // Create a temporary container element to hold the loaded content
                 const tempContainer = document.createElement('div');
                 tempContainer.innerHTML = data;

                 // Select the specific element with the class you want
                 const specificElement = tempContainer.querySelector('.main-content');

                 if (specificElement) {
                     // Insert the specific element into the target element
                     container.insertBefore(specificElement, container.firstChild);
                 }

                 var tmp = localStorage.getItem('user')
                 console.log(tmp)
                 if (!tmp){
                    console.log("there is not an user in localStorage")
                    return;
                 }
                 var user = JSON.parse(tmp)[0];
                 
                 const suggestionContainer = document.getElementById("suggestion-container");
                 if(suggestionContainer) {
                   await createNewCards("HomePageIdeaCardDiv",suggestionContainer, user.id);
                 }
                 addListner(myIdeaCards, container);

                 console.log(user.firstName + "user.firstname")
                 const nameHeaderElement = document.getElementById('user-name-header')
                 const nameElement = document.getElementById('user-name');
                 const emailElement = document.getElementById('user-email');
                 const roleElement = document.getElementById('user-role');
                 const unitElement = document.getElementById("user-unit");
                 
                 let userFullName = user.firstName + " " + user.lastName;
                 let userUnits = await getUnits({unitId: user.unitId});
                 let userUnit = userUnits[0];
            
                 if (emailElement && roleElement && nameElement && unitElement && nameHeaderElement) {
                     nameHeaderElement.textContent = userFullName
                     nameElement.textContent = userFullName;
                     unitElement.textContent = userUnit.name;
                     emailElement.textContent = user.email;
                     roleElement.textContent = user.role;
                     
                 }
                 const projectContainer = document.getElementById("project-container");
                 if(projectContainer) {
                  getProjects(projectContainer, listenersLoaded, user.id);
                 }
                
             })
             .catch(error => {
                 console.error('Failed to load the external HTML file:', error);
             });
            }
     
            function addListner(cardArray: { [key: number]: IdeaCard }, element: Element) {
                element.addEventListener("click", function (event) {
                  const target = event.target as HTMLElement;
                  //Adds an eventlistener for the more info of the card
                  if (target && target.className === "ideaCardFont moreInfoClass") {
                    const cardId = parseInt(target.id.replace("ideaCardMoreInfo", ""), 10);
                    if (cardArray[cardId]) {
                      const card = cardArray[cardId];
                      const expandedDiv = document.getElementById(`expandedContent${cardId}`);
                      console.log(expandedDiv);
                      if (expandedDiv) {
                        if (expandedDiv.style.display === "none") {
                          card.showMoreInfo(
                            `expandedContent${cardId}`,
                            `ideaCardMoreInfo${cardId}`
                          );
                        } else {
                          card.closeMoreInfo(
                            `expandedContent${cardId}`,
                            `ideaCardMoreInfo${cardId}`
                          );
                        }
                      } else {
                        console.error("Expanded div not found");
                      }
                      
                    }
                  }

                  if (target && target.className === "initiateProjectButton") {
                    const cardId = target.id.replace("initiateProjectFromCard", "");
                    loadInitiatePage(cardId);
                  }
                });
              }

    let projectCards: projectCard[] = [];

    // async function getProjects(
    //   selectElement: Element,
    //   listenersLoaded: boolean,
    //   improvementWorks: any[]
    // ) {
    //   let id = 0;
    //   projectCards = [];
    //   improvementWorks.forEach(async (improvementWork) => {
    //     let title = improvementWork.name;
    //     let department = await getObjectById("unit", improvementWork.unitId);
    //     let projectLeader = await getImprovementWorkResponsible(improvementWork.id);
    //     if (department) {
    //       let card = new projectCard(
    //         id,
    //         projectLeader.firstName + " " + projectLeader.lastName,
    //         department.name,
    //         title,
    //         improvementWork.content,
    //         improvementWork.id,
    //         improvementWork.currentStage,
    //         improvementWork.dateStarted,
    //         improvementWork.endDate,
    //         improvementWork.completed,
    //       );
    //       projectCards.push(card);
    //       let cardHTML = card.generateHTML();
    //       let div = document.createElement("div");
    //       div.className = "projectCardCardDiv"; // Set the class name(s) here
    //       div.innerHTML = cardHTML;
    //       if (!selectElement) return;
    //       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
    //     }
    //   });
    // }

//<p id="ongoingSeeDetailsButton${this.projectId}" class = "moreInfoClass">> Mer information</p>