@eo4geo/ngx-bok-utils 1.6.13 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1403,7 +1403,7 @@ class SkillTagComponent {
1403
1403
  tags = [];
1404
1404
  direction = 'original';
1405
1405
  compactBoKTags = true;
1406
- compactThreshold = 300;
1406
+ compactThreshold = 400;
1407
1407
  overflowTags = false;
1408
1408
  bokDiv;
1409
1409
  resizeObserver;
@@ -1 +1 @@
1
- {"version":3,"file":"eo4geo-ngx-bok-utils.mjs","sources":["../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/footer/footer.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/footer/footer.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/services/user.service.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/signInModal/sessionModal.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/signInModal/sessionModal.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/header/header.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/header/header.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/404/notFoundPage.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/404/notFoundPage.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/userPage/userPage.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/userPage/userPage.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/organizationForm/organizationForm.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/organizationForm/organizationForm.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/services/organization.service.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/organizationAdmin/organizationAdmin.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/organizationAdmin/organizationAdmin.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/organizationPage/organizationPage.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/organizationPage/organizationPage.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/skillTags/skillTags.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/skillTags/skillTags.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/model/tag.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/guards/auth.guard.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/services/exitWithoutSaving.service.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/guards/exitWithoutSaving.guard.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/services/auth.service.ts","../../../../projects/eo4geo/ngx-bok-utils/src/public-api.ts","../../../../projects/eo4geo/ngx-bok-utils/src/eo4geo-ngx-bok-utils.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\nimport { ToolbarModule } from 'primeng/toolbar';\n\n@Component({\n standalone: true,\n selector: 'footer',\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.css'],\n imports: [ToolbarModule, CommonModule],\n})\nexport class FooterComponent {\n @Output() openReleaseNotes = new EventEmitter<void>();\n @Output() openUserManual = new EventEmitter<void>();\n @Input() copyright: boolean = false;\n @Output() openCopyright = new EventEmitter<void>();\n\n\n clickReleaseNotes(): void {\n this.openReleaseNotes.emit();\n }\n\n clickUserManual(): void {\n this.openUserManual.emit();\n }\n\n clickCopyright(): void {\n this.openCopyright.emit()\n }\n}\n","<div class=\"footer\">\r\n <p-toolbar [style]=\"{'color': 'white', 'background': 'none', 'border': '0px', 'gap': '3rem'}\">\r\n <ng-template #start>\r\n <div class=\"flex flex-column align-items-center gap-1\">\r\n <div class=\"inline\">\r\n <a href=\"http://www.eo4geo.eu/\" target=\"_blank\"><img class=\"logo\" src=\"assets/images/EO4GEO_LOGO_WHITE.png\" alt=\"LogoEO4GEO\"></a>\r\n <a href=\"https://www.spacesuite-project.eu/\" target=\"_blank\"><img class=\"logo\" src=\"assets/images/SpaceSUITE_horizontal_white.png\" alt=\"LogoSpaceSUITE\"></a>\r\n </div>\r\n <span style=\"font-size: x-small;\">All tools were developed by <a href=\"https://geotec.uji.es/\" target=\"_blank\">GEOTEC</a></span>\r\n </div>\r\n </ng-template>\r\n <ng-template #center>\r\n <div style=\"font-size: smaller;\" class=\"flex flex-wrap gap-1\">\r\n <span>© 2025 spaceSUITE</span>\r\n <span class=\"link-separator\">\r\n | <a (click)=\"clickUserManual()\">User Manual</a>\r\n </span>\r\n <span class=\"link-separator\">\r\n | <a (click)=\"clickReleaseNotes()\">Release Notes</a>\r\n </span>\r\n <span class=\"link-separator\">\r\n | <a href=\"mailto:eo4geo@gmail.com?subject=EO4GEO%20Tools%20Contact\">Contact</a>\r\n </span>\r\n <span *ngIf=\"copyright\" class=\"link-separator\">\r\n | <a (click)=\"clickCopyright()\">License & Copyright</a>\r\n </span>\r\n <span class=\"link-separator\">\r\n | <a href=\"https://www.spacesuite-project.eu/privacy-policy/\" target=\"_blank\">Privacy Policy</a>\r\n </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #end>\r\n <div class=\"flex flex-column align-items-center gap-1 max-w-20rem\">\r\n <img class=\"logo\" src=\"assets/images/EU_Funding.png\" alt=\"LogoEU\">\r\n <span class=\"white-space-normal\" style=\"font-size: xx-small;\">Views and opinions expressed are however those of the author(s) only and do not necessarily reflect those of the European Union or the European Education and Culture Executive Agency (EACEA). Neither the European Union nor EACEA can be held responsible for them.</span>\r\n </div>\r\n </ng-template>\r\n </p-toolbar>\r\n</div>","import { inject, Injectable } from '@angular/core';\r\nimport { Auth, authState, createUserWithEmailAndPassword, GoogleAuthProvider, sendPasswordResetEmail, signInWithEmailAndPassword, signInWithPopup, signOut, updateProfile, user } from '@angular/fire/auth';\r\nimport { Firestore, collection, CollectionReference, doc, getDoc, setDoc, updateDoc, docData, DocumentReference, query, where, getDocs } from '@angular/fire/firestore';\r\nimport { from, Observable, of, concatMap, take, ReplaySubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class UserService {\r\n private auth;\r\n private db;\r\n\r\n private userCollection: CollectionReference;\r\n private errorMessages = new Map<string, string>([\r\n [\"auth/user-not-found\", \"Invalid email.\"],\r\n [\"auth/wrong-password\", \"Incorrect password.\"],\r\n [\"auth/missing-password\", \"Incorrect password.\"],\r\n [\"auth/invalid-email\", \"Invalid email.\"],\r\n [\"auth/email-already-in-use\", \"This email is already in use.\"],\r\n [\"auth/weak-password\", \"Weak password. Use at least 6 characters.\"],\r\n [\"auth/passwords-do-not-match\", \"Passwords do not match.\"],\r\n [\"auth/cancelled-popup-request\", \"The popup request was canceled.\"],\r\n [\"auth/network-request-failed\", \"Network error.\"],\r\n ]);\r\n\r\n private userStateSubject = new ReplaySubject<{ logged: boolean; nameInitial: string; uid: string } | undefined>(1);\r\n \r\n constructor() {\r\n this.auth = inject(Auth);\r\n this.db = inject(Firestore);\r\n\r\n this.userCollection = collection(this.db, 'Users');\r\n\r\n user(this.auth).subscribe(user => {\r\n const logged = !!user;\r\n const nameInitial = user?.displayName ? user.displayName[0].toUpperCase() : 'A';\r\n const uid: string = user?.uid || '';\r\n this.userStateSubject.next({ logged, nameInitial, uid});\r\n });\r\n }\r\n\r\n async loginWithEmailAndPassword(email: string, password: string): Promise<void> {\r\n try {\r\n if (!this.isValidEmail(email)) throw { code: \"auth/invalid-email\" };\r\n await signInWithEmailAndPassword(this.auth, email, password);\r\n } catch (error: any) {\r\n throw this.handleAuthError(error);\r\n }\r\n }\r\n\r\n async registerWithEmailAndPassword(email: string, password: string, repeatPassword: string): Promise<void> {\r\n try {\r\n if (!this.isValidEmail(email)) throw { code: \"auth/invalid-email\" };\r\n if (password.length < 6) throw { code: \"auth/weak-password\" };\r\n if (password !== repeatPassword) throw { code: \"auth/passwords-do-not-match\" };\r\n await createUserWithEmailAndPassword(this.auth, email, password);\r\n await this.checkUser();\r\n } catch (error: any) {\r\n throw this.handleAuthError(error);\r\n }\r\n }\r\n\r\n async loginWithGoogle(): Promise<void> {\r\n try {\r\n await signInWithPopup(this.auth, new GoogleAuthProvider());\r\n await this.checkUser();\r\n } catch (error: any) {\r\n throw this.handleAuthError(error);\r\n }\r\n }\r\n\r\n async recoverPassword(email: string): Promise<void> {\r\n try {\r\n if (!this.isValidEmail(email)) throw { code: \"auth/invalid-email\" };\r\n await sendPasswordResetEmail(this.auth, email);\r\n } catch (error: any) {\r\n throw this.handleAuthError(error);\r\n }\r\n }\r\n\r\n private async checkUser(): Promise<void> {\r\n if (!this.auth.currentUser) return;\r\n\r\n const userDocRef = doc(this.userCollection, this.auth.currentUser.uid);\r\n const userDocSnap = await getDoc(userDocRef);\r\n\r\n if (!userDocSnap.exists()) {\r\n await setDoc(userDocRef, {\r\n _id: this.auth.currentUser.uid,\r\n email: this.auth.currentUser.email,\r\n name: this.auth.currentUser.displayName || \"\",\r\n });\r\n }\r\n }\r\n\r\n private handleAuthError(error: any): string {\r\n if (error.code === \"auth/popup-closed-by-user\") return '';\r\n return this.errorMessages.get(error.code) || \"An error occurred. Please try again.\";\r\n }\r\n\r\n private isValidEmail(email: string): boolean {\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return emailRegex.test(email);\r\n }\r\n\r\n getUserState(): Observable<{ logged: boolean; nameInitial: string; uid: string } | undefined> {\r\n return this.userStateSubject.asObservable();\r\n }\r\n\r\n async logout(): Promise<void> {\r\n await signOut(this.auth);\r\n }\r\n\r\n async updateUserName(newName: string): Promise<void> {\r\n const user = this.auth.currentUser;\r\n if (user) {\r\n try {\r\n const userDocRef = doc(this.userCollection, user.uid);\r\n await updateDoc(userDocRef, { name: newName });\r\n await updateProfile(user, { displayName: newName });\r\n this.userStateSubject.next({ logged: true, nameInitial: newName[0].toUpperCase(), uid: user.uid });\r\n } catch (error) {\r\n console.error('Error updating name:', error);\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n getNameAndEmail(): Observable<{ email: string; name: string } | null> {\r\n return authState(this.auth).pipe(\r\n concatMap(user => {\r\n if (user) {\r\n const userDocRef: DocumentReference = doc(this.userCollection, user.uid);\r\n return docData(userDocRef) as Observable<{ email: string; name: string }>;\r\n }\r\n return of(null);\r\n })\r\n );\r\n }\r\n\r\n isCurrentUser(userId: string): boolean {\r\n return this.auth.currentUser?.uid == userId;\r\n }\r\n\r\n getUidWithEmail(email: string): Observable<{uid: string, name: string}> {\r\n return new Observable<{uid: string, name: string}>((observer) => {\r\n if (!this.isValidEmail(email)) { \r\n observer.error(new Error('Invalid email.'));\r\n return;\r\n }\r\n const userQuery = query(this.userCollection, where('email', '==', email));\r\n from(getDocs(userQuery)).pipe(take(1)).subscribe({\r\n next: snapshot => {\r\n if (snapshot.empty) {\r\n observer.error(new Error('No user found with this email.'));\r\n } else {\r\n const userData = snapshot.docs[0].data();\r\n observer.next({ uid: userData['_id'], name: userData['name'] });\r\n observer.complete();\r\n }\r\n },\r\n error: err => {\r\n observer.error(err);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output, SimpleChanges } from \"@angular/core\";\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { InputTextModule } from \"primeng/inputtext\";\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { InputIconModule } from 'primeng/inputicon';\r\nimport { IconFieldModule } from 'primeng/iconfield';\r\nimport { Message } from 'primeng/message';\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { UserService } from \"../../services/user.service\";\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'sessionModal',\r\n templateUrl: './sessionModal.component.html',\r\n styleUrls: ['./sessionModal.component.css'],\r\n imports: [ButtonModule, DialogModule, InputIconModule, IconFieldModule, InputTextModule, FloatLabelModule, FormsModule, CommonModule, Message],\r\n})\r\nexport class SessionModalComponent {\r\n\r\n @Input() visible: boolean = false;\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n\r\n login: boolean = true;\r\n resetpassword: boolean = false;\r\n\r\n email: string = '';\r\n password: string = '';\r\n showPassword: boolean = false;\r\n repeatPassword: string = '';\r\n showRepeatPassword: boolean = false;\r\n\r\n error: string | null = null;\r\n\r\n constructor(private userService: UserService) {}\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.login = changes['visible'].currentValue;\r\n this.resetpassword = !changes['visible'].currentValue;\r\n this.email = '';\r\n this.password = '';\r\n this.repeatPassword = '';\r\n this.error = null;\r\n }\r\n\r\n getHeader(): string {\r\n if (this.resetpassword) return 'Recover Password';\r\n if (this.login) return 'Login';\r\n return 'Register';\r\n }\r\n\r\n getSwitchLabel() {\r\n if (this.resetpassword) return 'Return';\r\n if (!this.login) return 'Login';\r\n return 'Register';\r\n }\r\n\r\n clickSwitchButton() {\r\n this.error = null;\r\n if (this.resetpassword) this.resetpassword = !this.resetpassword;\r\n else this.login = !this.login;\r\n }\r\n\r\n clickMainButton() {\r\n if (this.resetpassword) return this.recoverPassword();\r\n if (this.login) return this.loginWithEmailAndPassword();\r\n return this.registerWithEmailAndPassword();\r\n }\r\n\r\n async loginWithGoogle() {\r\n try {\r\n await this.userService.loginWithGoogle();\r\n this.visibleChange.emit(false);\r\n } catch (error: any) {\r\n this.error = error;\r\n }\r\n }\r\n\r\n async loginWithEmailAndPassword() {\r\n try {\r\n await this.userService.loginWithEmailAndPassword(this.email, this.password);\r\n this.visibleChange.emit(false);\r\n } catch (error: any) {\r\n this.error = error;\r\n }\r\n }\r\n\r\n async registerWithEmailAndPassword() {\r\n try {\r\n await this.userService.registerWithEmailAndPassword(this.email, this.password, this.repeatPassword);\r\n this.visibleChange.emit(false);\r\n } catch (error: any) {\r\n this.error = error;\r\n }\r\n }\r\n\r\n async recoverPassword() {\r\n try {\r\n await this.userService.recoverPassword(this.email);\r\n this.password = '';\r\n this.repeatPassword = '';\r\n this.resetpassword = !this.resetpassword;\r\n } catch (error: any) {\r\n this.error = error;\r\n }\r\n }\r\n}","<p-dialog [header]=\"getHeader()\" [modal]=\"true\" [visible]=\"visible\" resizable=\"false\" (visibleChange)=\"visibleChange.emit($event)\" [style]=\"{color: 'var(--primary-color)'}\">\r\n <p-message *ngIf=\"error\" severity=\"error\" variant=\"simple\" styleClass=\"mb-4 white-space-normal\" class=\"error-info\">{{error}}</p-message>\r\n <div class=\"flex items-center gap-4 mt-2 mb-1\">\r\n <p-floatlabel variant=\"on\" [class]=\"error ? 'custom-floatlabel error-floatlabel' : 'custom-floatlabel'\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-user\" />\r\n <input pInputText id=\"email\" autocomplete=\"off\" [class]=\"error ? 'custom-input error-input' : 'custom-input'\" [(ngModel)]=\"email\"/>\r\n </p-iconfield>\r\n <label for=\"email\">Email</label>\r\n </p-floatlabel>\r\n </div>\r\n <div *ngIf=\"!resetpassword\" class=\"flex items-center gap-4 mt-4 mb-1\">\r\n <p-floatlabel variant=\"on\" [class]=\"error ? 'custom-floatlabel error-floatlabel' : 'custom-floatlabel'\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-lock\" />\r\n <input [type]=\"showPassword ? 'text' : 'password'\" pInputText id=\"password\" autocomplete=\"off\" [class]=\"error ? 'custom-input error-input' : 'custom-input'\" [(ngModel)]=\"password\"/>\r\n <i [class]=\"showPassword ? 'eye-icon pi pi-eye-slash' : 'eye-icon pi pi-eye'\" (click)=\"showPassword = !showPassword\"></i>\r\n </p-iconfield>\r\n <label for=\"password\">Password</label>\r\n </p-floatlabel>\r\n </div>\r\n <div *ngIf=\"!login\" class=\"flex items-center gap-4 mt-4 mb-1\">\r\n <p-floatlabel variant=\"on\" [class]=\"error ? 'custom-floatlabel error-floatlabel' : 'custom-floatlabel'\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-lock\" />\r\n <input [type]=\"showRepeatPassword ? 'text' : 'password'\" pInputText id=\"rPassword\" autocomplete=\"off\" [class]=\"error ? 'custom-input error-input' : 'custom-input'\" [(ngModel)]=\"repeatPassword\"/>\r\n <i [class]=\"showRepeatPassword ? 'eye-icon pi pi-eye-slash' : 'eye-icon pi pi-eye'\" (click)=\"showRepeatPassword = !showRepeatPassword\"></i>\r\n </p-iconfield>\r\n <label for=\"rPassword\">Repeat Password</label>\r\n </p-floatlabel>\r\n </div>\r\n <a *ngIf=\"login && !resetpassword\" class=\"inline-flex ml-2 text-sm\" (click)=\"resetpassword = !resetpassword; error = null;\">Forgot Password?</a>\r\n <div class=\"flex align-items-center justify-content-between gap-2 mt-4\">\r\n <div class=\"flex justify-end gap-2\">\r\n <p-button class=\"custom-button\" [label]=\"getHeader()\" (click)=\"clickMainButton()\" />\r\n <p-button severity=\"secondary\" class=\"custom-secondary-button\" [label]=\"getSwitchLabel()\" (click)=\"clickSwitchButton()\" />\r\n </div>\r\n <p-button *ngIf=\"!resetpassword\" class=\"custom-button\" icon=\"pi pi-google\" label=\"Google\" (click)=\"loginWithGoogle()\" />\r\n </div>\r\n</p-dialog>","import { CommonModule } from '@angular/common';\r\nimport {Component, EventEmitter, HostListener, inject, Input, Output} from '@angular/core';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { TieredMenuModule } from 'primeng/tieredmenu';\r\nimport { AvatarModule } from 'primeng/avatar';\r\nimport { AvatarGroupModule } from 'primeng/avatargroup';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { SessionModalComponent } from \"../signInModal/sessionModal.component\";\r\nimport { UserService } from '../../services/user.service';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'header',\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.css'],\r\n imports: [ButtonModule, TieredMenuModule, CommonModule, AvatarModule, AvatarGroupModule, SessionModalComponent],\r\n})\r\nexport class HeaderComponent {\r\n @Input() items: MenuItem[] = [ \r\n {\r\n label: 'Tools',\r\n icon: 'pi pi-cog',\r\n items: [\r\n {\r\n label: 'BoK Visualization & Search',\r\n icon: 'pi pi-search',\r\n style: {'--p-tieredmenu-item-color': 'var(--hover-color)'},\r\n iconStyle: {'color': 'var(--hover-color)'}\r\n },\r\n {\r\n label: 'Occupational Profile Tool',\r\n icon: 'pi pi-users',\r\n url: 'https://eo4geo-opt.web.app',\r\n },\r\n {\r\n label: 'Job Offer Tool',\r\n icon: 'pi pi-book',\r\n url: 'https://eo4geo-jot.web.app',\r\n },\r\n {\r\n label: 'Curriculum Design Tool',\r\n icon: 'pi pi-graduation-cap',\r\n url: 'https://eo4geo-cdt.web.app',\r\n },\r\n {\r\n label: 'BoK Annotation Tool',\r\n icon: 'pi pi-pencil',\r\n url: 'https://eo4geo-bat.web.app',\r\n },\r\n {\r\n label: 'BoK Matching Tool',\r\n icon: 'pi pi-equals',\r\n url: 'https://eo4geo-bmt.web.app',\r\n }\r\n ]\r\n }, \r\n {\r\n label: 'Share',\r\n icon: 'pi pi-share-alt',\r\n items: [\r\n {\r\n label: 'X',\r\n icon: 'pi pi-twitter',\r\n url: 'https://twitter.com/SpaceSUITE_eu',\r\n },\r\n {\r\n label: 'Facebook',\r\n icon: 'pi pi-facebook',\r\n url: 'https://www.facebook.com/spacesuiteproject/',\r\n },\r\n {\r\n label: 'Youtube',\r\n icon: 'pi pi-youtube',\r\n url: 'https://www.youtube.com/@SpaceSUITE_eu',\r\n },\r\n {\r\n label: 'LinkedIn',\r\n icon: 'pi pi-linkedin',\r\n url: 'https://www.linkedin.com/showcase/spacesuite_eu/',\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n userItems: MenuItem[] = [\r\n {\r\n label: 'Profile', \r\n icon: 'pi pi-user',\r\n command: () => {\r\n this.profileClick.emit();\r\n }\r\n },\r\n {\r\n label: 'Organization', \r\n icon: 'pi pi-users',\r\n command: () => {\r\n this.organizationClick.emit();\r\n }\r\n }, \r\n {\r\n label: 'Logout', \r\n icon: 'pi pi-sign-out', \r\n command: () => {\r\n this.logout();\r\n }\r\n }\r\n ];\r\n\r\n unregisteredUserItems: MenuItem[] = [\r\n {\r\n label: 'Login', \r\n icon: 'pi pi-sign-in', \r\n command: () => {\r\n this.showLoginModal = !this.showLoginModal\r\n }\r\n }\r\n ];\r\n\r\n buttonItems: MenuItem[] = this.items.concat(this.unregisteredUserItems);\r\n\r\n @Input() toolName: string = \"BoK Visualization & Search\";\r\n @Input() login: boolean = false;\r\n @Output() profileClick: EventEmitter<void> = new EventEmitter()\r\n @Output() organizationClick: EventEmitter<void> = new EventEmitter()\r\n \r\n hideMenu: boolean = true;\r\n logged: boolean = false;\r\n nameInitial: string = 'A';\r\n\r\n showLoginModal: boolean = false;\r\n\r\n private userStateSubscription!: Subscription;\r\n\r\n constructor(private userService: UserService, private router: Router) {}\r\n\r\n ngOnInit() {\r\n this.userStateSubscription = this.userService.getUserState().pipe(filter(value => value != undefined)).subscribe(({ logged, nameInitial }) => {\r\n this.logged = logged;\r\n this.nameInitial = nameInitial;\r\n if (this.logged) this.buttonItems = this.items.concat(this.userItems);\r\n else {\r\n this.buttonItems = this.items.concat(this.unregisteredUserItems);\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.userStateSubscription?.unsubscribe();\r\n }\r\n\r\n async logout() {\r\n await this.userService.logout();\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n clickout(event: { target: any }) {\r\n if (!event.target.closest(\"p-tieredmenu\") && !event.target.closest(\"p-button.custom-header-button\")) {\r\n this.hideMenu = true;\r\n }\r\n }\r\n\r\n navigateToMainPage() {\r\n this.router.navigate(['']);\r\n }\r\n}\r\n","<div class=\"header\">\r\n <div class=\"flex align-content-center p-4 mx-4\">\r\n <a (click)=\"navigateToMainPage()\" class=\"align-self-center\"><img class=\"logo flex align-items-center justify-content-center\" src=\"assets/images/SpaceSUITE_horizontal_color.png\" alt=\"LogoSpaceSUITE\"></a>\r\n <div class=\"hidden xl:flex align-self-center fixed-text\">\r\n <strong class=\"text-2xl overflow-hidden white-space-nowrap text-overflow-ellipsis\" style=\"cursor: pointer;\" (click)=\"navigateToMainPage()\">\r\n {{toolName}}\r\n </strong>\r\n </div>\r\n <div class=\"flex gap-6 ml-auto\">\r\n <div class=\"justify-content-center hidden md:flex\" *ngFor=\"let item of items;\">\r\n <div class=\"flex align-items-center justify-content-center gap-2 text-xl font-bold header-option\" (click)=\"subMenu.toggle($event)\" *ngIf=\"item.label != 'Share'; else share\">\r\n <i [class]=\"item.icon\"></i>\r\n <div>{{item.label}}</div>\r\n <i *ngIf=\"item.items\" class=\"pi pi-angle-down\"></i>\r\n </div>\r\n <p-tieredmenu #subMenu [model]=\"item.items\" [breakpoint]=\"'767px'\" class=\"custom-p-tieredmenu\" [popup]=\"true\" />\r\n <ng-template #share>\r\n <div class=\"flex align-items-center justify-content-center gap-3\">\r\n <div *ngFor=\"let social of item.items;\">\r\n <a [href]=\"social.url\" target=\"_blank\" class=\"flex\">\r\n <i [class]=\"social.icon\" style=\"font-size: 1.25rem\"></i>\r\n </a>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"login\" class=\"hidden md:flex align-items-center justify-content-center\">\r\n <p-avatar *ngIf=\"logged; else loginButton\" [label]=\"nameInitial\" class=\"custom-p-avatar\" shape=\"circle\" (click)=\"userMenu.toggle($event)\"></p-avatar>\r\n </div>\r\n <p-tieredmenu #userMenu [model]=\"userItems\" [breakpoint]=\"'767px'\" class=\"custom-p-tieredmenu\" [popup]=\"true\" />\r\n <ng-template #loginButton>\r\n <p-button class=\"custom-header-button\" size=\"small\" label=\"Login\" aria-label=\"Login\" (onClick)=\"showLoginModal = !showLoginModal\"></p-button>\r\n </ng-template>\r\n </div>\r\n \r\n <p-button #menuButton (click)=\"hideMenu = !hideMenu\" class=\"md:hidden flex align-items-center custom-header-button ml-auto\" icon=\"pi pi-bars\" aria-label=\"Menu\"></p-button>\r\n </div>\r\n <p-tieredmenu #menu [hidden]=\"hideMenu\" [model]=\"buttonItems\" class=\"md:hidden custom-p-tieredmenu\"/>\r\n</div>\r\n\r\n<sessionModal [(visible)]=\"showLoginModal\"></sessionModal>\r\n","import { Component } from \"@angular/core\";\r\nimport { Router } from \"@angular/router\";\r\nimport { ButtonModule } from 'primeng/button';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'not-found-page',\r\n templateUrl: './notFoundPage.component.html',\r\n styleUrls: ['./notFoundPage.component.css'],\r\n imports: [ButtonModule],\r\n})\r\nexport class NotFoundPageComponent {\r\n constructor(private router: Router) {}\r\n\r\n goToHomepage() {\r\n this.router.navigate(['']);\r\n }\r\n}","<div class=\"flex flex-column justify-content-center align-items-center m-8\">\r\n <img src=\"assets/images/hosting-404-error-1.png\" alt=\"not Found\" class=\"w-4 m-4\">\r\n <h1>page not found</h1>\r\n <p-button label=\"Go To Homepage\" size=\"large\" class=\"custom-button\" (onClick)=\"goToHomepage()\"></p-button>\r\n</div>","import { Component} from \"@angular/core\";\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { InputTextModule } from \"primeng/inputtext\";\r\nimport { FloatLabelModule } from \"primeng/floatlabel\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { InputIconModule } from 'primeng/inputicon';\r\nimport { IconFieldModule } from 'primeng/iconfield';\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { UserService } from \"../../services/user.service\";\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { MessageService } from \"primeng/api\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'user-page',\r\n templateUrl: './userPage.component.html',\r\n styleUrls: ['./userPage.component.css'],\r\n imports: [ButtonModule, InputIconModule, IconFieldModule, InputTextModule, FloatLabelModule, FormsModule, CommonModule, ToastModule],\r\n providers: [MessageService]\r\n})\r\nexport class UserPageComponent {\r\n userSubscription!: Subscription;\r\n userStateSubscription!: Subscription;\r\n\r\n email: string = \"\";\r\n name: string = \"\";\r\n newName: string = \"\";\r\n\r\n constructor(private userService: UserService, private messageService: MessageService, private router: Router) {}\r\n \r\n ngOnInit() {\r\n this.userSubscription = this.userService.getNameAndEmail().subscribe(userData => {\r\n this.email = userData?.email ?? '';\r\n this.name = userData?.name ?? '';\r\n this.newName = this.name;\r\n });\r\n this.userStateSubscription = this.userService.getUserState().subscribe( userState => {\r\n if (!userState?.logged) this.router.navigate([''])\r\n });\r\n}\r\n\r\n ngOnDestroy() {\r\n this.userSubscription?.unsubscribe();\r\n this.userStateSubscription?.unsubscribe();\r\n }\r\n\r\n async updateName() {\r\n try {\r\n await this.userService.updateUserName(this.newName);\r\n this.messageService.add({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `Name updated without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n } catch (error) {\r\n this.messageService.add({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n }\r\n\r\n}","<p-toast class=\"custom-toast\" position=\"bottom-right\"/>\r\n<div class=\"flex flex-column align-items-center justify-content-center p-4\">\r\n <h2>User Profile</h2>\r\n <div class=\"flex gap-4\">\r\n <p-floatlabel variant=\"on\" class=\"custom-floatlabel\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-envelope\" />\r\n <input pInputText id=\"email\" [disabled]=\"true\" autocomplete=\"off\" class=\"w-full max-w-25rem custom-input\" [(ngModel)]=\"email\"/>\r\n </p-iconfield>\r\n <label for=\"email\">Email</label>\r\n </p-floatlabel>\r\n </div>\r\n <div class=\"flex gap-4 mt-4 mb-4\">\r\n <p-floatlabel variant=\"on\" class=\"custom-floatlabel\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-user\" />\r\n <input pInputText id=\"password\" [disabled]=\"email == ''\" autocomplete=\"off\" class=\"w-full max-w-25rem custom-input\" [(ngModel)]=\"newName\"/>\r\n </p-iconfield>\r\n <label for=\"password\">Name</label>\r\n </p-floatlabel>\r\n </div>\r\n <p-button class=\"custom-button\" label=\"Update Name\" [disabled]=\"name == newName || email == ''\" (click)=\"updateName()\" />\r\n</div>","import { Component, EventEmitter, Input, Output, SimpleChanges} from \"@angular/core\";\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { InputIconModule } from \"primeng/inputicon\";\r\nimport { IconFieldModule } from \"primeng/iconfield\";\r\nimport { InputTextModule } from \"primeng/inputtext\";\r\nimport { FloatLabelModule } from \"primeng/floatlabel\";\r\nimport { TextareaModule } from 'primeng/textarea';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'organization-form',\r\n templateUrl: './organizationForm.component.html',\r\n styleUrls: ['./organizationForm.component.css'],\r\n imports: [ButtonModule, CommonModule, FormsModule, InputIconModule, IconFieldModule, InputTextModule, FloatLabelModule, TextareaModule],\r\n})\r\nexport class OrganizationFormComponent {\r\n\r\n @Input() organization!: {_id: string, name: string, description: string, email:string, isAdmin: boolean};\r\n @Input() descriptionError: boolean = false;\r\n @Input() buttonLabel: string = \"Update Information\";\r\n @Input() validationFunction: Function = (data: [string, string][]): boolean => {\r\n for (let pair of data) {\r\n if (pair[0] != pair[1]) return false\r\n }\r\n return true\r\n };\r\n @Output() formChange: EventEmitter<{name: string | null, description: string | null, contact: string | null}> = new EventEmitter();\r\n\r\n newName: string = \"\";\r\n newDescription: string = \"\";\r\n newContact: string = \"\";\r\n\r\n emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\r\n isValidEmail = (email: string): boolean => this.emailRegex.test(email);\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['organization'] && this.organization) {\r\n this.newName = changes['organization'].currentValue.name;\r\n this.newDescription = changes['organization'].currentValue.description;\r\n this.newContact = changes['organization'].currentValue.email;\r\n }\r\n }\r\n\r\n descriptionFormModified() {\r\n const pairs: [string, string][] = [[this.newName, this.organization.name], [this.newDescription, this.organization.description], [this.newContact, this.organization.email]];\r\n return this.validationFunction(pairs) || !this.isValidEmail(this.newContact);\r\n }\r\n\r\n updateDescription() {\r\n const updateInfo = {\r\n name: this.newName != this.organization.name ? this.newName : null,\r\n description: this.newDescription != this.organization.description ? this.newDescription : null,\r\n contact: this.newContact != this.organization.email ? this.newContact : null\r\n }\r\n this.formChange.emit(updateInfo);\r\n }\r\n\r\n}","<div class=\"flex flex-column gap-4 m-2 mb-4\">\r\n <p-floatlabel variant=\"on\" class=\"custom-floatlabel\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-pencil\" />\r\n <input pInputText id=\"name\" autocomplete=\"off\" class=\"w-full custom-input\" (ngModelChange)=\"descriptionError = false;\"\r\n [ngClass]=\"descriptionError ? 'error-input' : ''\" [(ngModel)]=\"newName\"/>\r\n </p-iconfield>\r\n <label for=\"name\">Name</label>\r\n </p-floatlabel>\r\n\r\n <p-floatlabel variant=\"on\" class=\"custom-floatlabel\">\r\n <p-iconfield class=\"textarea-iconfield\">\r\n <p-inputicon class=\"pi pi-align-justify\"></p-inputicon>\r\n <textarea id=\"description\" rows=\"5\" cols=\"30\" pTextarea [(ngModel)]=\"newDescription\" (ngModelChange)=\"descriptionError = false;\"\r\n style=\"resize: none;\" class=\"w-full custom-textarea\" [ngClass]=\"descriptionError ? 'error-textarea' : ''\"></textarea>\r\n </p-iconfield>\r\n <label for=\"description\">Description</label>\r\n </p-floatlabel>\r\n\r\n <p-floatlabel variant=\"on\" class=\"custom-floatlabel\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-envelope\" />\r\n <input pInputText id=\"contact\" autocomplete=\"off\" class=\"w-full custom-input\" (ngModelChange)=\"descriptionError = false;\"\r\n [ngClass]=\"descriptionError ? 'error-input' : ''\" [(ngModel)]=\"newContact\"/>\r\n </p-iconfield>\r\n <label for=\"contact\">Contact</label>\r\n </p-floatlabel>\r\n</div>\r\n<p-button class=\"custom-button ml-2\" [label]=\"buttonLabel\" size=\"small\" [disabled]=\"descriptionFormModified()\" (onClick)=\"updateDescription()\"/>","import { inject, Injectable } from '@angular/core';\r\nimport { Auth, authState } from '@angular/fire/auth';\r\nimport { Firestore, collection, CollectionReference, doc, updateDoc, docData, DocumentReference, collectionData, setDoc, deleteDoc } from '@angular/fire/firestore';\r\nimport { ToastMessageOptions } from 'primeng/api';\r\nimport { catchError, concatMap, first, forkJoin, from, map, Observable, of, Subject, take, combineLatest, switchMap, distinctUntilChanged } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class OrganizationService {\r\n private auth;\r\n private db;\r\n\r\n private userCollection: CollectionReference;\r\n private orgCollection: CollectionReference;\r\n\r\n private adminOrganizationMessagesSource = new Subject<ToastMessageOptions>();\r\n adminOrganizationMessages$ = this.adminOrganizationMessagesSource.asObservable();\r\n \r\n constructor() {\r\n this.auth = inject(Auth);\r\n this.db = inject(Firestore)\r\n this.userCollection = collection(this.db, 'Users');\r\n this.orgCollection = collection(this.db, 'Organizations');\r\n }\r\n\r\n emitMessage(message: ToastMessageOptions) {\r\n this.adminOrganizationMessagesSource.next(message)\r\n }\r\n\r\n getOrganizations(): Observable<{ _id: string, name: string }[]> {\r\n return collectionData(this.orgCollection) as Observable<{ _id: string, name: string }[]>;\r\n }\r\n\r\n getUserOrganizations(): Observable<{ _id: string, name: string; description: string, email: string, isAdmin: boolean }[]> {\r\n return authState(this.auth).pipe(\r\n switchMap(user => {\r\n if (!user) return of(null);\r\n const userDocRef: DocumentReference = doc(this.userCollection, user.uid);\r\n return docData(userDocRef) as Observable<{ organizations: string[] }>;\r\n }),\r\n distinctUntilChanged((a,b) => JSON.stringify(a) === JSON.stringify(b)),\r\n switchMap(userData => {\r\n const orgIds = userData?.organizations ?? [];\r\n if (orgIds.length === 0) return of([]);\r\n const orgObservables = orgIds.map(id => this.getOrganizationInfo(id));\r\n return combineLatest(orgObservables);\r\n }),\r\n map(orgs => orgs ?? [])\r\n );\r\n }\r\n\r\n private getOrganizationInfo(orgId: string): Observable<{ _id: string, name: string; description: string, email:string, isAdmin: boolean }> {\r\n const orgDocRef: DocumentReference = doc(this.orgCollection, orgId);\r\n return docData(orgDocRef).pipe(\r\n first(),\r\n map(document => ({\r\n _id: document?.['_id'],\r\n name: document?.['name'],\r\n description: document?.['description'],\r\n email: document?.['contact'],\r\n isAdmin: Array.isArray(document?.['admin']) && document['admin'].includes(this.auth.currentUser?.uid)\r\n }))\r\n );\r\n }\r\n\r\n getOrganizationUsers(orgId: string): Observable<{ _id: string, name: string; email: string, isAdmin: boolean }[]> {\r\n const orgDocRef = doc(this.orgCollection, orgId);\r\n const organizationUsersSnapshot = docData(orgDocRef) as Observable<{ admin: string[], regular: string[] }>;\r\n return organizationUsersSnapshot.pipe(\r\n concatMap(users => {\r\n const adminUsers$ = users.admin.map(uid =>\r\n this.getUserInfo(uid).pipe(take(1),map(user => ({ ...user, isAdmin: true })))\r\n );\r\n\r\n const regularUsers$ = users.regular.map(uid =>\r\n this.getUserInfo(uid).pipe(take(1), map(user => ({ ...user, isAdmin: false })))\r\n );\r\n\r\n return forkJoin([...adminUsers$, ...regularUsers$]);\r\n })\r\n );\r\n }\r\n\r\n private getUserInfo(uid: string): Observable<{ _id: string, name: string; email: string }> {\r\n const orgDocRef: DocumentReference = doc(this.userCollection, uid);\r\n return docData(orgDocRef) as Observable<{ _id: string, name: string; email: string }>;\r\n }\r\n\r\n getOrganizationDivisions(orgId: string): Observable<string[]> {\r\n const orgDocRef = doc(this.orgCollection, orgId);\r\n const organizationUsersSnapshot = docData(orgDocRef) as Observable<{ divisions: string[] }>;\r\n return organizationUsersSnapshot.pipe(\r\n map(data => data.divisions)\r\n );\r\n }\r\n \r\n leaveOrganization(orgId: string): Observable<void> {\r\n return this.updateOrganizationUsers(orgId, this.removeItem).pipe(\r\n concatMap(() => this.updateUserOrganizations(orgId, this.removeItem)));\r\n }\r\n \r\n joinOrganization(orgId: string): Observable<void> {\r\n return this.updateOrganizationUsers(orgId, this.addItem, undefined, this.nothing).pipe(\r\n concatMap(() => this.updateUserOrganizations(orgId, this.addItem)));\r\n }\r\n\r\n deleteUserFromOrganization(orgId: string, userId: string) {\r\n return this.updateOrganizationUsers(orgId, this.removeItem, userId).pipe(\r\n concatMap(() => this.updateUserOrganizations(orgId, this.removeItem, userId)));\r\n }\r\n\r\n addUserToOrganization(orgId: string, userId: string) {\r\n return this.updateOrganizationUsers(orgId, this.addItem, userId, this.nothing).pipe(\r\n concatMap(() => this.updateUserOrganizations(orgId, this.addItem, userId)));\r\n }\r\n\r\n changeAdminState(orgId: string, userId: string, newState: boolean) {\r\n return newState \r\n ? this.updateOrganizationUsers(orgId, this.removeItem, userId, this.addItem) \r\n : this.updateOrganizationUsers(orgId, this.addItem, userId, this.removeItem);\r\n }\r\n \r\n private updateUserOrganizations(orgId: string, updateFn: (arr: string[], item: string) => string[], userId?: string): Observable<void> {\r\n const currentUserId = userId ?? this.auth.currentUser?.uid;\r\n if (!currentUserId) return of(void 0);\r\n const userDocRef = doc(this.userCollection, currentUserId);\r\n const userOrganizationsSnapshot = docData(userDocRef) as Observable<{ organizations: string[] }>;\r\n return new Observable<void>((observer) => {\r\n userOrganizationsSnapshot.pipe(take(1)).subscribe(async (userOrganizations) => {\r\n if (!userOrganizations) {\r\n observer.error(new Error('User organizations data is unavailable.'));\r\n return;\r\n }\r\n const updatedOrganizations = updateFn(userOrganizations.organizations ?? [], orgId);\r\n await updateDoc(userDocRef, { organizations: updatedOrganizations });\r\n observer.next();\r\n observer.complete();\r\n });\r\n });\r\n }\r\n \r\n private updateOrganizationUsers(orgId: string, updateFn: (arr: string[], item: string) => string[], userId?: string, updateAdminFn?: (arr: string[], item: string) => string[]): Observable<void> {\r\n const orgDocRef = doc(this.orgCollection, orgId);\r\n const organizationUsersSnapshot = docData(orgDocRef) as Observable<{ admin: string[], regular: string[] }>;\r\n return new Observable<void>((observer) => {\r\n organizationUsersSnapshot.pipe(take(1)).subscribe(async (organizationUsers) => {\r\n if (!organizationUsers) {\r\n observer.error(new Error('Organization users data is unavailable.'));\r\n return;\r\n }\r\n const currentUserId = userId ?? this.auth.currentUser?.uid;\r\n if (!currentUserId) {\r\n observer.error(new Error('Current user is not authenticated.'));\r\n return;\r\n }\r\n if (organizationUsers.admin.length == 1 && organizationUsers.admin.includes(currentUserId)) {\r\n observer.error(new Error('Cannot perform action: Current user is the only administrator.'));\r\n return;\r\n }\r\n await updateDoc(orgDocRef, {\r\n admin: updateAdminFn ? updateAdminFn(organizationUsers.admin, currentUserId) : updateFn(organizationUsers.admin, currentUserId),\r\n regular: updateFn(organizationUsers.regular, currentUserId)\r\n });\r\n observer.next();\r\n observer.complete();\r\n });\r\n });\r\n }\r\n\r\n addDivisions(orgId: string, newDivision: string): Observable<void> {\r\n return this.updateOrganizationDivisions(orgId, newDivision, this.addItem);\r\n }\r\n \r\n deleteDivision(orgId: string, newDivision: string): Observable<void> {\r\n return this.updateOrganizationDivisions(orgId, newDivision, this.removeItem);\r\n }\r\n\r\n private updateOrganizationDivisions(orgId: string, newDivision: string, updateFn: (arr: string[], item: string) => string[]): Observable<void> {\r\n const orgDocRef = doc(this.orgCollection, orgId);\r\n const organizationDivisions = this.getOrganizationDivisions(orgId);\r\n return new Observable<void>((observer) => {\r\n organizationDivisions.pipe(take(1)).subscribe(async (divisions) => {\r\n if (!divisions) {\r\n observer.error(new Error('Organization divisions data is unavailable.'));\r\n return;\r\n }\r\n await updateDoc(orgDocRef, {\r\n divisions: updateFn(divisions, newDivision)\r\n });\r\n observer.next();\r\n observer.complete();\r\n });\r\n });\r\n }\r\n \r\n private addItem(arr: string[], item: string): string[] {\r\n return [...arr, item];\r\n }\r\n \r\n private removeItem(arr: string[], item: string, ): string[] {\r\n return arr.filter(i => i !== item);\r\n }\r\n\r\n private nothing(arr: string[], item: string, ): string[] {\r\n return arr;\r\n }\r\n\r\n updateOrganizationInformation(orgId: string, info: { name: string | null; description: string | null; contact: string | null }): Observable<void> {\r\n const orgDocRef = doc(this.orgCollection, orgId);\r\n return new Observable<void>((observer) => {\r\n const updateData: Record<string, string> = {};\r\n Object.entries(info).forEach(([key, value]) => {\r\n if (value !== null) {\r\n updateData[key] = value;\r\n }\r\n });\r\n if (Object.keys(updateData).length > 0) {\r\n updateDoc(orgDocRef, updateData)\r\n .then(() => {\r\n observer.next();\r\n observer.complete();\r\n })\r\n .catch((error) => observer.error(error));\r\n } else {\r\n observer.complete();\r\n }\r\n });\r\n }\r\n\r\n createOrganization(name: string, description: string, contact: string) {\r\n const currentUserId = this.auth.currentUser?.uid;\r\n if (!currentUserId) {\r\n throw new Error('Current user is not authenticated.');\r\n }\r\n const orgRef = doc(this.orgCollection);\r\n const org = {\r\n _id: orgRef.id,\r\n name,\r\n description,\r\n admin: [currentUserId],\r\n regular: [],\r\n pending: [],\r\n adminUser: [],\r\n regularUser: [],\r\n pendingUser: [],\r\n isPublic: false,\r\n contact,\r\n divisions: [],\r\n };\r\n return from(setDoc(orgRef, org)).pipe(\r\n concatMap(() => this.updateUserOrganizations(org._id, this.addItem, currentUserId)),\r\n take(1)\r\n );\r\n }\r\n\r\n deleteOrganization(orgId: string, users: string[]): Observable<void> {\r\n const userObservables = users.map(uid => this.updateUserOrganizations(orgId, this.removeItem, uid));\r\n return forkJoin(userObservables).pipe(\r\n concatMap(() => {\r\n const orgRef = doc(this.orgCollection, orgId);\r\n return from(deleteDoc(orgRef)).pipe(\r\n catchError((error) => {\r\n throw new Error('Error al eliminar la organización');\r\n }),\r\n take(1)\r\n );\r\n })\r\n );\r\n }\r\n}\r\n","import { Component, Input} from \"@angular/core\";\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { TableModule } from 'primeng/table';\r\nimport { ToggleSwitchChangeEvent, ToggleSwitchModule } from 'primeng/toggleswitch';\r\nimport { AccordionModule } from 'primeng/accordion';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { OrganizationService } from \"../../services/organization.service\";\r\nimport { ConfirmationService } from \"primeng/api\";\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { catchError, finalize, of, Subscription, concatMap } from \"rxjs\";\r\nimport { InputIconModule } from \"primeng/inputicon\";\r\nimport { IconFieldModule } from \"primeng/iconfield\";\r\nimport { InputTextModule } from \"primeng/inputtext\";\r\nimport { FloatLabelModule } from \"primeng/floatlabel\";\r\nimport { UserService } from \"../../services/user.service\";\r\nimport { OrganizationFormComponent } from \"../organizationForm/organizationForm.component\";\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'organization-admin',\r\n templateUrl: './organizationAdmin.component.html',\r\n styleUrls: ['./organizationAdmin.component.css'],\r\n imports: [ButtonModule, CommonModule, TableModule, ToggleSwitchModule, FormsModule, AccordionModule, InputIconModule,\r\n IconFieldModule, InputTextModule, FloatLabelModule, ConfirmDialogModule, OrganizationFormComponent],\r\n providers: [ConfirmationService]\r\n})\r\nexport class OrganizationAdminComponent {\r\n\r\n @Input() organization!: {_id: string, name: string, description: string, email:string, isAdmin: boolean};\r\n users: { _id: string; name: string; email: string; isAdmin: boolean;}[] = [];\r\n skelletonData: any[] = Array.from({ length: 5 }).map(() => {});\r\n divisions: string[] = [];\r\n\r\n newDivision: string = \"\";\r\n divisionError: boolean = false;\r\n\r\n descriptionError: boolean = false;\r\n\r\n newUser: string = \"\";\r\n userError: boolean = false;\r\n\r\n private usersSubscription!: Subscription;\r\n private divisionsSubscription!: Subscription;\r\n\r\n inplaceIndicator: boolean = false;\r\n\r\n constructor(private orgService: OrganizationService, private userService: UserService, private confirmationService: ConfirmationService) {}\r\n \r\n ngOnInit() {\r\n this.usersSubscription = this.orgService.getOrganizationUsers(this.organization._id).subscribe(newUsers => this.users = newUsers.sort((a, b) => b.email.localeCompare(a.email)));\r\n this.divisionsSubscription = this.orgService.getOrganizationDivisions(this.organization._id).subscribe(newDivisions => this.divisions = newDivisions);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe()\r\n }\r\n\r\n private unsubscribe() {\r\n if (this.usersSubscription) {\r\n this.usersSubscription.unsubscribe();\r\n }\r\n if (this.divisionsSubscription) {\r\n this.divisionsSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n isCurrentUser(userId: string) {\r\n return this.userService.isCurrentUser(userId);\r\n }\r\n\r\n deleteUser(userId: string, userName: string) {\r\n let isSuccess = true;\r\n this.orgService.deleteUserFromOrganization(this.organization._id, userId).pipe(\r\n catchError(error => {\r\n isSuccess = false;\r\n this.orgService.emitMessage({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.orgService.emitMessage({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You deleted ${userName ?? userId} from the organization without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n switchAdminStateModal(event: ToggleSwitchChangeEvent, userId: string, userName: string, newState: boolean) {\r\n this.confirmationService.confirm({\r\n target: event.originalEvent.target as EventTarget,\r\n message: `Do you want to change ${userName} admin status?`,\r\n header: 'Change Admin Status',\r\n icon: 'pi pi-info-circle',\r\n rejectLabel: 'Cancel',\r\n rejectButtonProps: {\r\n label: 'Cancel',\r\n severity: 'secondary',\r\n },\r\n acceptButtonProps: {\r\n label: 'Delete',\r\n severity: 'primary',\r\n },\r\n\r\n accept: () => {\r\n this.switchAdminState(userId, userName, newState);\r\n },\r\n reject: () => {\r\n const user = this.users.find(u => u._id === userId);\r\n if (user) user.isAdmin = !newState;\r\n },\r\n });\r\n }\r\n\r\n switchAdminState(userId: string, userName: string, newState: boolean) {\r\n let isSuccess = true;\r\n this.orgService.changeAdminState(this.organization._id, userId, newState).pipe(\r\n catchError(error => {\r\n isSuccess = false;\r\n const user = this.users.find(u => u._id === userId);\r\n if (user) user.isAdmin = !newState;\r\n this.orgService.emitMessage({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n const user = this.users.find(u => u._id === userId);\r\n if (user) user.isAdmin = newState;\r\n if(this.isCurrentUser(userId)) this.organization.isAdmin = newState;\r\n this.orgService.emitMessage({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: newState ? `${userName ?? userId} is now an administrator of the organization.` : `${userName ?? userId} is no longer an administrator of the organization.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n deleteDivision(division: string) {\r\n let isSuccess = true;\r\n this.orgService.deleteDivision(this.organization._id, division).pipe(\r\n catchError(error => {\r\n isSuccess = false;\r\n this.orgService.emitMessage({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.orgService.emitMessage({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You deleted ${division} from the organization without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n addDivision() {\r\n if (this.divisions.includes(this.newDivision)) {\r\n this.divisionError = true;\r\n this.orgService.emitMessage({ \r\n severity: 'warn', \r\n summary: 'Warn', \r\n detail: 'You cannot add an existing division.',\r\n life: 3000, \r\n closable: true,\r\n });\r\n return;\r\n }\r\n let isSuccess = true;\r\n this.orgService.addDivisions(this.organization._id, this.newDivision).pipe(\r\n catchError(error => {\r\n isSuccess = false;\r\n this.divisionError = true;\r\n this.orgService.emitMessage({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.divisionError = false;\r\n this.orgService.emitMessage({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You added ${this.newDivision} to the organization without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n this.newDivision = \"\";\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n updateDescription(updateInfo: {name: string | null, description: string | null, contact: string | null}) {\r\n let isSuccess = true;\r\n this.orgService.updateOrganizationInformation(this.organization._id, updateInfo).pipe(\r\n catchError(error => {\r\n isSuccess = false;\r\n this.descriptionError = true;\r\n this.orgService.emitMessage({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.descriptionError = false;\r\n this.organization.name = updateInfo.name ?? this.organization.name;\r\n this.organization.description = updateInfo.description ?? this.organization.description;\r\n this.organization.email = updateInfo.contact ?? this.organization.email; \r\n this.orgService.emitMessage({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You modified the organization description without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n addUserToOrganization() {\r\n let isSuccess = true;\r\n this.userService.getUidWithEmail(this.newUser).pipe(\r\n concatMap(data => {\r\n if(this.users.some(user => user._id === data.uid)) {\r\n isSuccess = false;\r\n this.userError = true;\r\n this.orgService.emitMessage({ \r\n severity: 'warn', \r\n summary: 'Warn', \r\n detail:`${this.newUser} already belong to this organization.`, \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }\r\n return this.orgService.addUserToOrganization(this.organization._id, data.uid)\r\n }),\r\n catchError(error => {\r\n isSuccess = false;\r\n this.userError = true;\r\n this.orgService.emitMessage({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) { \r\n this.userError = false;\r\n this.orgService.emitMessage({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You added ${this.newUser} to the organization without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n this.newUser = \"\";\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n deleteUserModal(event: Event, userId: string, userName: string) {\r\n this.confirmationService.confirm({\r\n target: event.target as EventTarget,\r\n message: `Do you want to delete ${userName} from this organization?`,\r\n header: 'Delete User',\r\n icon: 'pi pi-info-circle',\r\n rejectLabel: 'Cancel',\r\n rejectButtonProps: {\r\n label: 'Cancel',\r\n severity: 'secondary',\r\n },\r\n acceptButtonProps: {\r\n label: 'Delete',\r\n severity: 'primary',\r\n },\r\n\r\n accept: () => {\r\n this.deleteUser(userId, userName);\r\n },\r\n reject: () => {\r\n },\r\n });\r\n }\r\n\r\n deleteDivisionModal(event: Event, division: string) {\r\n this.confirmationService.confirm({\r\n target: event.target as EventTarget,\r\n message: `Do you want to delete ${division} from this organization?`,\r\n header: 'Delete Division',\r\n icon: 'pi pi-info-circle',\r\n rejectLabel: 'Cancel',\r\n rejectButtonProps: {\r\n label: 'Cancel',\r\n severity: 'secondary',\r\n },\r\n acceptButtonProps: {\r\n label: 'Delete',\r\n severity: 'primary',\r\n },\r\n\r\n accept: () => {\r\n this.deleteDivision(division);\r\n },\r\n reject: () => {\r\n },\r\n });\r\n }\r\n\r\n deleteOrganizationModal(event: Event) {\r\n this.confirmationService.confirm({\r\n target: event.target as EventTarget,\r\n message: `Do you want to delete this organization?`,\r\n header: 'Delete Organization',\r\n icon: 'pi pi-info-circle',\r\n rejectLabel: 'Cancel',\r\n rejectButtonProps: {\r\n label: 'Cancel',\r\n severity: 'secondary',\r\n },\r\n acceptButtonProps: {\r\n label: 'Delete',\r\n severity: 'primary',\r\n },\r\n\r\n accept: () => {\r\n this.deleteOrganization()\r\n },\r\n reject: () => {\r\n },\r\n });\r\n }\r\n\r\n deleteOrganization() {\r\n let isSuccess = true;\r\n this.orgService.deleteOrganization(this.organization._id, this.users.map(user => user._id)).pipe(\r\n catchError(error => {\r\n isSuccess = false;\r\n this.orgService.emitMessage({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.orgService.emitMessage({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You deleted ${this.organization.name} without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n}","<p-confirmdialog />\r\n\r\n<div class=\"mt-4\" *ngIf=\"inplaceIndicator; else AdminContent\">\r\n <p-accordion [value]=\"[]\" [multiple]=\"true\" class=\"custom-acordion\">\r\n <p-accordion-panel value=\"0\">\r\n <p-accordion-header>Description</p-accordion-header>\r\n <p-accordion-content>\r\n <organization-form [organization]=\"organization\" [descriptionError]=\"descriptionError\" (formChange)=\"updateDescription($event)\"></organization-form>\r\n </p-accordion-content>\r\n </p-accordion-panel>\r\n \r\n <p-accordion-panel value=\"1\">\r\n <p-accordion-header>Users</p-accordion-header>\r\n <p-accordion-content>\r\n <div class=\"flex flex-wrap my-3 justify-content-center align-items-center gap-4\">\r\n <p-floatlabel variant=\"on\" [class]=\"userError ? 'custom-floatlabel error-floatlabel' : 'custom-floatlabel'\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-envelope\" />\r\n <input pInputText id=\"nDivision\" autocomplete=\"off\" class=\"w-full max-w-25rem\" [class]=\"userError ? 'custom-input error-input' : 'custom-input'\" \r\n [(ngModel)]=\"newUser\" (ngModelChange)=\"userError = false;\"/>\r\n </p-iconfield>\r\n <label for=\"nDivision\">User Email</label>\r\n </p-floatlabel>\r\n <p-button class=\"custom-button\" label=\"Add User\" size=\"small\" [disabled]=\"!newUser\" (onClick)=\"addUserToOrganization()\"/>\r\n </div>\r\n <p-table [value]=\"users\" [paginator]=\"true\" [rows]=\"5\" class=\"custom-table\">\r\n <ng-template #header>\r\n <tr>\r\n <th>Email</th>\r\n <th>Name</th>\r\n <th>Admin</th>\r\n <th style=\"width: 5rem\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template #body let-user>\r\n <tr >\r\n <td>{{ user.email }}</td>\r\n <td>{{ user.name }}</td>\r\n <td>\r\n <p-toggleswitch class=\"custom-toogle\" [(ngModel)]=\"user.isAdmin\" (onChange)=\"switchAdminStateModal($event ,user._id, user.name, $event.checked)\"/>\r\n </td>\r\n <td>\r\n <p-button class=\"flex trash-button\" variant=\"text\" rounded=\"true\" size=\"large\" icon=\"pi pi-trash\" [disabled]=\"isCurrentUser(user._id)\" (onClick)=\"deleteUserModal($event, user._id, user.name)\"/>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-accordion-content>\r\n </p-accordion-panel>\r\n \r\n <p-accordion-panel value=\"2\">\r\n <p-accordion-header>Divisions</p-accordion-header>\r\n <p-accordion-content>\r\n <div class=\"flex flex-wrap my-3 justify-content-center align-items-center gap-4\">\r\n <p-floatlabel variant=\"on\" [class]=\"divisionError ? 'custom-floatlabel error-floatlabel' : 'custom-floatlabel'\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-pencil\" />\r\n <input pInputText id=\"nDivision\" autocomplete=\"off\" class=\"w-full max-w-25rem\" [class]=\"divisionError ? 'custom-input error-input' : 'custom-input'\" \r\n [(ngModel)]=\"newDivision\" (ngModelChange)=\"divisionError = false;\"/>\r\n </p-iconfield>\r\n <label for=\"nDivision\">New Division</label>\r\n </p-floatlabel>\r\n <p-button class=\"custom-button\" label=\"Add Division\" size=\"small\" [disabled]=\"!newDivision\" (onClick)=\"addDivision()\"/>\r\n </div>\r\n <p-table [value]=\"divisions\" [paginator]=\"true\" [rows]=\"5\" class=\"custom-table\">\r\n <ng-template #header>\r\n <tr>\r\n <th>Name</th>\r\n <th style=\"width: 5rem\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template #body let-division>\r\n <tr >\r\n <td>{{ division }}</td>\r\n <td>\r\n <p-button class=\"flex trash-button\" variant=\"text\" rounded=\"true\" size=\"large\" icon=\"pi pi-trash\" (onClick)=\"deleteDivisionModal($event, division)\"/>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-accordion-content>\r\n </p-accordion-panel>\r\n </p-accordion>\r\n \r\n <div class=\"flex justify-content-between align-items-center mt-4 gap-4\">\r\n <div class=\"custom-inplace-display\" (click)=\"inplaceIndicator = false\">Collapse</div>\r\n <p-button class=\"delete-button\" label=\"Delete Organization\" size=\"small\" (onClick)=\"deleteOrganizationModal($event)\"/>\r\n </div>\r\n</div>\r\n\r\n<ng-template #AdminContent>\r\n <p class=\"mb-0 custom-inplace-display\" (click)=\"inplaceIndicator = true\">Admin Content</p>\r\n</ng-template>","import { Component} from \"@angular/core\";\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { CardModule } from 'primeng/card';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { AccordionModule } from 'primeng/accordion';\r\nimport { SelectModule } from 'primeng/select';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { catchError, filter, finalize, map, Observable, of, Subscription, switchMap, take, tap } from \"rxjs\";\r\nimport { MessageService, ConfirmationService } from \"primeng/api\";\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { OrganizationService } from \"../../services/organization.service\";\r\nimport { UserService } from \"../../services/user.service\";\r\nimport { OrganizationAdminComponent } from \"../organizationAdmin/organizationAdmin.component\";\r\nimport { OrganizationFormComponent } from \"../organizationForm/organizationForm.component\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'organization-page',\r\n templateUrl: './organizationPage.component.html',\r\n styleUrls: ['./organizationPage.component.css'],\r\n imports: [ButtonModule, CommonModule, CardModule, ToastModule, SelectModule, FormsModule, OrganizationAdminComponent, TooltipModule, ConfirmDialogModule, AccordionModule, OrganizationFormComponent],\r\n providers: [MessageService, ConfirmationService]\r\n})\r\nexport class OrganizationPageComponent {\r\n\r\n userOrganizations$!: Observable<{_id: string, name: string, description: string, email:string, isAdmin: boolean}[]>;\r\n adminMessageSubscription!: Subscription;\r\n\r\n organizations$!: Observable<{_id: string, name: string}[]>;\r\n selectedOrganization: {_id: string, name: string} | undefined;\r\n\r\n duplicatedOrg: boolean = false;\r\n\r\n newOrganization: {_id: string, name: string, description: string, email:string, isAdmin: boolean} = {_id: \"\", name: \"\", description: \"\", email: \"\", isAdmin: true};\r\n newOrganizationError: boolean = false;\r\n newOrganizationAcordion = []\r\n\r\n userStateSubscription!: Subscription;\r\n\r\n constructor(private orgService: OrganizationService, private messageService: MessageService, private confirmationService: ConfirmationService, \r\n private userService: UserService, private router: Router) {}\r\n \r\n ngOnInit() {\r\n this.userOrganizations$ = this.orgService.getUserOrganizations();\r\n\r\n this.organizations$ = this.orgService.getOrganizations().pipe(\r\n take(1), \r\n map(orgs => {\r\n const organizations = orgs.map(org => ({\r\n _id: org._id,\r\n name: org.name.trim().charAt(0).toUpperCase() + org.name.trim().slice(1)\r\n }));\r\n return organizations.sort((a, b) => a.name.localeCompare(b.name));\r\n })\r\n );\r\n\r\n this.adminMessageSubscription = this.orgService.adminOrganizationMessages$.subscribe( message => this.messageService.add(message));\r\n this.userStateSubscription = this.userService.getUserState().subscribe( userState => {\r\n if (!userState?.logged) this.router.navigate([''])\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.adminMessageSubscription?.unsubscribe();\r\n this.userStateSubscription?.unsubscribe();\r\n }\r\n\r\n leaveOrganization(orgId: string, orgName: string) {\r\n let isSuccess = true;\r\n this.orgService.leaveOrganization(orgId).pipe(\r\n catchError((error) => {\r\n isSuccess = false;\r\n this.messageService.add({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.messageService.add({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You left ${orgName} without problems.`,\r\n life: 3000, \r\n closable: true \r\n }); \r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n private checkSelectedOrganization(): Observable<boolean> {\r\n if (!this.selectedOrganization) {\r\n return of(false);\r\n }\r\n\r\n return this.userOrganizations$.pipe(\r\n take(1),\r\n map(userOrgs =>\r\n userOrgs.some(o => o._id === this.selectedOrganization!._id)\r\n ),\r\n tap(isDuplicated => {\r\n if (isDuplicated) {\r\n this.messageService.add({\r\n severity: 'warn',\r\n summary: 'Warn',\r\n detail: 'You cannot join an organization to which you already belong.',\r\n life: 3000,\r\n closable: true,\r\n });\r\n this.duplicatedOrg = true;\r\n }\r\n }),\r\n map(isDuplicated => !isDuplicated)\r\n );\r\n }\r\n\r\n joinOrganization() {\r\n this.checkSelectedOrganization().pipe(\r\n filter(valid => valid),\r\n switchMap(() => {\r\n const orgId: string = this.selectedOrganization!._id;\r\n const orgName: string = this.selectedOrganization!.name;\r\n let isSuccess = true;\r\n return this.orgService.joinOrganization(orgId).pipe(\r\n catchError((error) => {\r\n isSuccess = false;\r\n this.messageService.add({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.messageService.add({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You joined ${orgName} without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n })\r\n )\r\n })\r\n ).subscribe();\r\n }\r\n\r\n updateDuplicatedOrg() {\r\n if (this.duplicatedOrg) this.duplicatedOrg = false;\r\n }\r\n\r\n copyEmail(email: string, name: string): void {\r\n navigator.clipboard.writeText(email);\r\n this.messageService.add({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You copied ${name} contact email without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n\r\n deleteModal(event: Event, orgId: string, orgName: string) {\r\n this.confirmationService.confirm({\r\n target: event.target as EventTarget,\r\n message: 'Do you want to leave this organization?',\r\n header: 'Leave Organization',\r\n icon: 'pi pi-info-circle',\r\n rejectLabel: 'Cancel',\r\n rejectButtonProps: {\r\n label: 'Cancel',\r\n severity: 'secondary',\r\n },\r\n acceptButtonProps: {\r\n label: 'Delete',\r\n severity: 'primary',\r\n },\r\n\r\n accept: () => {\r\n this.leaveOrganization(orgId, orgName);\r\n },\r\n reject: () => {\r\n },\r\n });\r\n }\r\n\r\n createOrganization(createData: {name: string | null, description: string | null, contact: string | null}) {\r\n if (!createData.name?.trim() || !createData.description?.trim() || !createData.contact?.trim()) {\r\n this.messageService.add({ \r\n severity: 'warn', \r\n summary: 'Warn', \r\n detail: 'You cannot create an organization until you fill in all the fields.',\r\n life: 3000, \r\n closable: true,\r\n });\r\n this.newOrganizationError = true;\r\n return;\r\n }\r\n let isSuccess = true;\r\n this.orgService.createOrganization(createData.name, createData.description, createData.contact).pipe(\r\n catchError((error) => {\r\n isSuccess = false;\r\n this.messageService.add({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n this.newOrganizationError = true;\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.messageService.add({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You created ${createData.name} without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n this.newOrganizationError = false;\r\n this.newOrganization = {_id: \"\", name: \"\", description: \"\", email: \"\", isAdmin: true};\r\n this.newOrganizationAcordion = []\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n \r\n newOrganizationValidation(data: [string, string][]): boolean {\r\n return data.some(([first, second]) => first === second || first === \"\");\r\n }\r\n}","<p-toast class=\"custom-toast\" position=\"bottom-right\"/>\r\n<p-confirmdialog />\r\n<div class=\"flex flex-column align-items-stretch p-4\">\r\n <h2 class=\"mx-auto\">Your Organization(s) Details</h2>\r\n <p class=\"mx-auto\">You are part of {{(userOrganizations$ | async)?.length || 0}} organization(s). You can also create your own organization.</p>\r\n <div class=\"flex flex-wrap mb-4 align-items-center gap-4 justify-content-center w-full\">\r\n <p-select [options]=\"(organizations$ | async) || []\" [showClear]=\"true\" [(ngModel)]=\"selectedOrganization\" \r\n [optionLabel]=\"'name'\" placeholder=\"Select an Organization\" [ngClass]=\"duplicatedOrg ? 'invalid-select' : 'custom-select'\" \r\n (onChange)=\"updateDuplicatedOrg()\" class=\"w-full max-w-30rem\" [checkmark]=\"true\" panelStyleClass=\"max-w-30rem\" />\r\n <p-button class=\"custom-button\" label=\"Join Organization\" size=\"small\" (click)=\"joinOrganization()\" [disabled]=\"!selectedOrganization\"/>\r\n </div>\r\n <div class=\"flex flex-column gap-4\">\r\n <p-card class=\"custom-color-card flex justify-content-center\" styleClass=\"flex-auto\" [style]=\"{ 'max-width': '50rem', 'min-width': '20rem', height: 'auto'}\" *ngFor=\"let organization of userOrganizations$ | async; let i = index\">\r\n <ng-template #header>\r\n <div class=\"flex justify-content-between\" style=\"padding-left: 1.25rem; padding-right: 1.25rem; padding-top: 1.25rem;\">\r\n <div class=\"p-card-title\">{{organization.name}}</div>\r\n <div class=\"flex gap-1\">\r\n <p-button class=\"flex email-button\" variant=\"text\" rounded=\"true\" size=\"large\" icon=\"pi pi-envelope\" [disabled]=\"!organization.email\" \r\n (click)=\"copyEmail(organization.email, organization.name)\" pTooltip=\"{{organization.email}}\" tooltipPosition=\"top\"/>\r\n <p-button class=\"flex trash-button\" variant=\"text\" rounded=\"true\" size=\"large\" icon=\"pi pi-sign-out\"\r\n (click)=\"deleteModal($event, organization._id, organization.name)\"/>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <p class=\"m-0\">\r\n {{organization.description}}\r\n </p>\r\n <div *ngIf=\"organization.isAdmin\">\r\n <organization-admin [organization]=\"organization\"></organization-admin>\r\n </div>\r\n </p-card>\r\n <p-card class=\"custom-color-card flex justify-content-center\" styleClass=\"flex-auto plus-card\" [style]=\"{ 'max-width': '50rem', 'min-width': '20rem', height: 'auto'}\">\r\n <ng-template #content>\r\n <p-accordion [value]=\"newOrganizationAcordion\" [multiple]=\"true\" class=\"custom-acordion\" [expandIcon]=\"'pi pi-plus'\" [collapseIcon]=\"'pi pi-minus'\">\r\n <p-accordion-panel class=\"custom-accordionpanel\" value=\"0\">\r\n <p-accordion-header class=\"custom-accordionheader\">Create New Organization</p-accordion-header>\r\n <p-accordion-content>\r\n <div class=\"pt-4\">\r\n <organization-form [organization]=\"newOrganization\" [descriptionError]=\"newOrganizationError\" [buttonLabel]=\"'Create Organization'\" [validationFunction]=\"newOrganizationValidation\" (formChange)=\"createOrganization($event)\"></organization-form>\r\n </div>\r\n </p-accordion-content>\r\n </p-accordion-panel>\r\n </p-accordion>\r\n </ng-template>\r\n </p-card>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport {ChangeDetectorRef, Component, ElementRef, Input, ViewChild} from '@angular/core';\r\nimport { TagModule } from 'primeng/tag';\r\nimport { debounceTime, fromEvent, Subscription } from 'rxjs';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { Tag } from '../../model/tag';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'skill-tags',\r\n templateUrl: './skillTags.component.html',\r\n styleUrls: ['./skillTags.component.css'],\r\n imports: [CommonModule, TagModule, TooltipModule],\r\n})\r\nexport class SkillTagComponent {\r\n @Input() tags: Tag[] = [];\r\n @Input() direction: Direction = 'original';\r\n @Input() compactBoKTags: boolean = true;\r\n @Input() compactThreshold: number = 300;\r\n overflowTags: boolean = false;\r\n\r\n @ViewChild('bokDiv', { static: false }) bokDiv!: ElementRef<HTMLDivElement>;\r\n\r\n resizeObserver!: ResizeObserver;\r\n\r\n constructor(private cd: ChangeDetectorRef) {}\r\n\r\n ngAfterViewInit() {\r\n this.resizeObserver = new ResizeObserver(() => this.checkOverflow());\r\n this.resizeObserver.observe(this.bokDiv.nativeElement);\r\n this.checkOverflow();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.resizeObserver?.disconnect();\r\n }\r\n\r\n checkOverflow() {\r\n if (!this.compactBoKTags) return;\r\n\r\n const elWidth = this.bokDiv.nativeElement.offsetWidth;\r\n let isOverflowing = elWidth < this.compactThreshold;\r\n\r\n if (this.overflowTags !== isOverflowing) {\r\n this.overflowTags = isOverflowing;\r\n this.cd.detectChanges();\r\n }\r\n }\r\n\r\n getBokColor(color: string): string {\r\n return this.convertHexToRgba(color, 0.5);\r\n }\r\n\r\n getTooltipClass(tag: Tag): string {\r\n return tag.tooltip == 'Unknown Concept' ? 'custom-p-tooltip-text' : '';\r\n }\r\n\r\n onClickConcept(code: string) {\r\n window.open('https://bok.eo4geo.eu/' + code);\r\n }\r\n\r\n getStyleClass() {\r\n switch(this.direction){\r\n case 'original':\r\n return 'flex flex-wrap gap-2';\r\n case 'center':\r\n return 'flex flex-wrap gap-2 align-items-center justify-content-center';\r\n case 'reverse':\r\n return 'flex flex-wrap gap-2 flex-row-reverse';\r\n case 'homepage':\r\n return 'flex flex-wrap gap-3 align-items-center justify-content-center';\r\n }\r\n }\r\n\r\n private convertHexToRgba(hex: string, alpha: number): string {\r\n hex = hex.replace('#', '');\r\n const r = parseInt(hex.substring(0, 2), 16);\r\n const g = parseInt(hex.substring(2, 4), 16);\r\n const b = parseInt(hex.substring(4, 6), 16);\r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\r\n }\r\n}\r\n\r\nexport type Direction = 'original' | 'center' | 'reverse' | 'homepage';","<div #bokDiv [class]=\"getStyleClass()\">\r\n <ng-content *ngFor=\"let tag of tags\">\r\n <p-tag *ngIf=\"tag.variant != 'bok' else bokTag\" \r\n [class]=\"tag.variant == 'secondary' ? 'secondary-tag' : 'primary-tag'\" \r\n [rounded]=\"true\" \r\n [value]=\"tag.label\"\r\n />\r\n <ng-template #bokTag>\r\n <div \r\n [pTooltip]=\"overflowTags ? tag.tooltip : undefined\" \r\n tooltipPosition=\"top\" \r\n [tooltipStyleClass]=\"getTooltipClass(tag)\"\r\n >\r\n <p-tag \r\n class=\"bok-tag\" \r\n [style.backgroundColor]=\"tag.color ? getBokColor(tag.color) : ''\" \r\n [rounded]=\"true\" \r\n (click)=\"onClickConcept(tag.label)\" \r\n [value]=\"overflowTags ? tag.label : '[' + tag.label + '] ' + tag.tooltip\"\r\n />\r\n </div>\r\n </ng-template>\r\n </ng-content>\r\n</div>","export class Tag {\r\n label: string = '';\r\n variant?: Variant = 'primary';\r\n tooltip:string = '';\r\n color?: string = '';\r\n\r\n constructor(label: string, variant?: Variant, tooltip?: string, color?: string) {\r\n this.label = label;\r\n if(variant) this.variant = variant;\r\n if(tooltip) this.tooltip = tooltip;\r\n if(color) this.color = color;\r\n }\r\n}\r\n\r\nexport type Variant = 'primary' | 'secondary' | 'bok';","import { CanMatchFn } from '@angular/router';\r\nimport { inject } from '@angular/core';\r\nimport { UserService } from '../services/user.service';\r\nimport { filter, map, take } from 'rxjs';\r\n\r\nexport const AuthGuard: CanMatchFn = () => {\r\n const userService = inject(UserService);\r\n return userService.getUserState().pipe(\r\n filter(value => value !== undefined),\r\n take(1),\r\n map(user => user?.logged)\r\n );\r\n};","import { Injectable } from \"@angular/core\";\r\nimport { BehaviorSubject, Subject } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ExitWithoutSavingService {\r\n exitSubject: Subject<boolean> = new Subject();\r\n showModalSubject: Subject<boolean> = new Subject();\r\n bypassGuard: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n}","import { Component, inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanDeactivateFn, RouterStateSnapshot } from '@angular/router';\r\nimport { ExitWithoutSavingService } from '../services/exitWithoutSaving.service';\r\n\r\nexport const exitWithoutSavingGuard: CanDeactivateFn<Component> = (component: Component, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot) => {\r\n const exitWithoutSavingService = inject(ExitWithoutSavingService);\r\n if (exitWithoutSavingService.bypassGuard.getValue()) {\r\n exitWithoutSavingService.bypassGuard.next(false);\r\n return true;\r\n }\r\n exitWithoutSavingService.showModalSubject.next(true);\r\n return exitWithoutSavingService.exitSubject.asObservable();\r\n};","import { Injectable } from '@angular/core';\r\nimport { UserService } from './user.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthService {\r\n\r\n constructor(private readonly userService: UserService) {}\r\n\r\n public getUserState() {\r\n return this.userService.getUserState()\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ngx-bok-utils\r\n */\r\n\r\nexport * from './lib/components/footer/footer.component';\r\nexport * from './lib/components/header/header.component';\r\nexport * from './lib/components/404/notFoundPage.component';\r\nexport * from './lib/components/userPage/userPage.component';\r\nexport * from './lib/components/organizationPage/organizationPage.component';\r\nexport * from './lib/components/skillTags/skillTags.component';\r\nexport * from './lib/model/tag';\r\nexport * from './lib/guards/auth.guard';\r\nexport * from './lib/guards/exitWithoutSaving.guard';\r\nexport * from './lib/services/exitWithoutSaving.service';\r\nexport * from './lib/services/auth.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1.UserService","i3","i4","i5","i6","i1","i7","i9","i8","i1.OrganizationService","i2.UserService","i10","i11","i12","i13","i3.UserService"],"mappings":"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"}
1
+ {"version":3,"file":"eo4geo-ngx-bok-utils.mjs","sources":["../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/footer/footer.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/footer/footer.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/services/user.service.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/signInModal/sessionModal.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/signInModal/sessionModal.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/header/header.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/header/header.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/404/notFoundPage.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/404/notFoundPage.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/userPage/userPage.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/userPage/userPage.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/organizationForm/organizationForm.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/organizationForm/organizationForm.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/services/organization.service.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/organizationAdmin/organizationAdmin.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/organizationAdmin/organizationAdmin.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/organizationPage/organizationPage.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/organizationPage/organizationPage.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/skillTags/skillTags.component.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/components/skillTags/skillTags.component.html","../../../../projects/eo4geo/ngx-bok-utils/src/lib/model/tag.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/guards/auth.guard.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/services/exitWithoutSaving.service.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/guards/exitWithoutSaving.guard.ts","../../../../projects/eo4geo/ngx-bok-utils/src/lib/services/auth.service.ts","../../../../projects/eo4geo/ngx-bok-utils/src/public-api.ts","../../../../projects/eo4geo/ngx-bok-utils/src/eo4geo-ngx-bok-utils.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\nimport { ToolbarModule } from 'primeng/toolbar';\n\n@Component({\n standalone: true,\n selector: 'footer',\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.css'],\n imports: [ToolbarModule, CommonModule],\n})\nexport class FooterComponent {\n @Output() openReleaseNotes = new EventEmitter<void>();\n @Output() openUserManual = new EventEmitter<void>();\n @Input() copyright: boolean = false;\n @Output() openCopyright = new EventEmitter<void>();\n\n\n clickReleaseNotes(): void {\n this.openReleaseNotes.emit();\n }\n\n clickUserManual(): void {\n this.openUserManual.emit();\n }\n\n clickCopyright(): void {\n this.openCopyright.emit()\n }\n}\n","<div class=\"footer\">\r\n <p-toolbar [style]=\"{'color': 'white', 'background': 'none', 'border': '0px', 'gap': '3rem'}\">\r\n <ng-template #start>\r\n <div class=\"flex flex-column align-items-center gap-1\">\r\n <div class=\"inline\">\r\n <a href=\"http://www.eo4geo.eu/\" target=\"_blank\"><img class=\"logo\" src=\"assets/images/EO4GEO_LOGO_WHITE.png\" alt=\"LogoEO4GEO\"></a>\r\n <a href=\"https://www.spacesuite-project.eu/\" target=\"_blank\"><img class=\"logo\" src=\"assets/images/SpaceSUITE_horizontal_white.png\" alt=\"LogoSpaceSUITE\"></a>\r\n </div>\r\n <span style=\"font-size: x-small;\">All tools were developed by <a href=\"https://geotec.uji.es/\" target=\"_blank\">GEOTEC</a></span>\r\n </div>\r\n </ng-template>\r\n <ng-template #center>\r\n <div style=\"font-size: smaller;\" class=\"flex flex-wrap gap-1\">\r\n <span>© 2025 spaceSUITE</span>\r\n <span class=\"link-separator\">\r\n | <a (click)=\"clickUserManual()\">User Manual</a>\r\n </span>\r\n <span class=\"link-separator\">\r\n | <a (click)=\"clickReleaseNotes()\">Release Notes</a>\r\n </span>\r\n <span class=\"link-separator\">\r\n | <a href=\"mailto:eo4geo@gmail.com?subject=EO4GEO%20Tools%20Contact\">Contact</a>\r\n </span>\r\n <span *ngIf=\"copyright\" class=\"link-separator\">\r\n | <a (click)=\"clickCopyright()\">License & Copyright</a>\r\n </span>\r\n <span class=\"link-separator\">\r\n | <a href=\"https://www.spacesuite-project.eu/privacy-policy/\" target=\"_blank\">Privacy Policy</a>\r\n </span>\r\n </div>\r\n </ng-template>\r\n <ng-template #end>\r\n <div class=\"flex flex-column align-items-center gap-1 max-w-20rem\">\r\n <img class=\"logo\" src=\"assets/images/EU_Funding.png\" alt=\"LogoEU\">\r\n <span class=\"white-space-normal\" style=\"font-size: xx-small;\">Views and opinions expressed are however those of the author(s) only and do not necessarily reflect those of the European Union or the European Education and Culture Executive Agency (EACEA). Neither the European Union nor EACEA can be held responsible for them.</span>\r\n </div>\r\n </ng-template>\r\n </p-toolbar>\r\n</div>","import { inject, Injectable } from '@angular/core';\r\nimport { Auth, authState, createUserWithEmailAndPassword, GoogleAuthProvider, sendPasswordResetEmail, signInWithEmailAndPassword, signInWithPopup, signOut, updateProfile, user } from '@angular/fire/auth';\r\nimport { Firestore, collection, CollectionReference, doc, getDoc, setDoc, updateDoc, docData, DocumentReference, query, where, getDocs } from '@angular/fire/firestore';\r\nimport { from, Observable, of, concatMap, take, ReplaySubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class UserService {\r\n private auth;\r\n private db;\r\n\r\n private userCollection: CollectionReference;\r\n private errorMessages = new Map<string, string>([\r\n [\"auth/user-not-found\", \"Invalid email.\"],\r\n [\"auth/wrong-password\", \"Incorrect password.\"],\r\n [\"auth/missing-password\", \"Incorrect password.\"],\r\n [\"auth/invalid-email\", \"Invalid email.\"],\r\n [\"auth/email-already-in-use\", \"This email is already in use.\"],\r\n [\"auth/weak-password\", \"Weak password. Use at least 6 characters.\"],\r\n [\"auth/passwords-do-not-match\", \"Passwords do not match.\"],\r\n [\"auth/cancelled-popup-request\", \"The popup request was canceled.\"],\r\n [\"auth/network-request-failed\", \"Network error.\"],\r\n ]);\r\n\r\n private userStateSubject = new ReplaySubject<{ logged: boolean; nameInitial: string; uid: string } | undefined>(1);\r\n \r\n constructor() {\r\n this.auth = inject(Auth);\r\n this.db = inject(Firestore);\r\n\r\n this.userCollection = collection(this.db, 'Users');\r\n\r\n user(this.auth).subscribe(user => {\r\n const logged = !!user;\r\n const nameInitial = user?.displayName ? user.displayName[0].toUpperCase() : 'A';\r\n const uid: string = user?.uid || '';\r\n this.userStateSubject.next({ logged, nameInitial, uid});\r\n });\r\n }\r\n\r\n async loginWithEmailAndPassword(email: string, password: string): Promise<void> {\r\n try {\r\n if (!this.isValidEmail(email)) throw { code: \"auth/invalid-email\" };\r\n await signInWithEmailAndPassword(this.auth, email, password);\r\n } catch (error: any) {\r\n throw this.handleAuthError(error);\r\n }\r\n }\r\n\r\n async registerWithEmailAndPassword(email: string, password: string, repeatPassword: string): Promise<void> {\r\n try {\r\n if (!this.isValidEmail(email)) throw { code: \"auth/invalid-email\" };\r\n if (password.length < 6) throw { code: \"auth/weak-password\" };\r\n if (password !== repeatPassword) throw { code: \"auth/passwords-do-not-match\" };\r\n await createUserWithEmailAndPassword(this.auth, email, password);\r\n await this.checkUser();\r\n } catch (error: any) {\r\n throw this.handleAuthError(error);\r\n }\r\n }\r\n\r\n async loginWithGoogle(): Promise<void> {\r\n try {\r\n await signInWithPopup(this.auth, new GoogleAuthProvider());\r\n await this.checkUser();\r\n } catch (error: any) {\r\n throw this.handleAuthError(error);\r\n }\r\n }\r\n\r\n async recoverPassword(email: string): Promise<void> {\r\n try {\r\n if (!this.isValidEmail(email)) throw { code: \"auth/invalid-email\" };\r\n await sendPasswordResetEmail(this.auth, email);\r\n } catch (error: any) {\r\n throw this.handleAuthError(error);\r\n }\r\n }\r\n\r\n private async checkUser(): Promise<void> {\r\n if (!this.auth.currentUser) return;\r\n\r\n const userDocRef = doc(this.userCollection, this.auth.currentUser.uid);\r\n const userDocSnap = await getDoc(userDocRef);\r\n\r\n if (!userDocSnap.exists()) {\r\n await setDoc(userDocRef, {\r\n _id: this.auth.currentUser.uid,\r\n email: this.auth.currentUser.email,\r\n name: this.auth.currentUser.displayName || \"\",\r\n });\r\n }\r\n }\r\n\r\n private handleAuthError(error: any): string {\r\n if (error.code === \"auth/popup-closed-by-user\") return '';\r\n return this.errorMessages.get(error.code) || \"An error occurred. Please try again.\";\r\n }\r\n\r\n private isValidEmail(email: string): boolean {\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return emailRegex.test(email);\r\n }\r\n\r\n getUserState(): Observable<{ logged: boolean; nameInitial: string; uid: string } | undefined> {\r\n return this.userStateSubject.asObservable();\r\n }\r\n\r\n async logout(): Promise<void> {\r\n await signOut(this.auth);\r\n }\r\n\r\n async updateUserName(newName: string): Promise<void> {\r\n const user = this.auth.currentUser;\r\n if (user) {\r\n try {\r\n const userDocRef = doc(this.userCollection, user.uid);\r\n await updateDoc(userDocRef, { name: newName });\r\n await updateProfile(user, { displayName: newName });\r\n this.userStateSubject.next({ logged: true, nameInitial: newName[0].toUpperCase(), uid: user.uid });\r\n } catch (error) {\r\n console.error('Error updating name:', error);\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n getNameAndEmail(): Observable<{ email: string; name: string } | null> {\r\n return authState(this.auth).pipe(\r\n concatMap(user => {\r\n if (user) {\r\n const userDocRef: DocumentReference = doc(this.userCollection, user.uid);\r\n return docData(userDocRef) as Observable<{ email: string; name: string }>;\r\n }\r\n return of(null);\r\n })\r\n );\r\n }\r\n\r\n isCurrentUser(userId: string): boolean {\r\n return this.auth.currentUser?.uid == userId;\r\n }\r\n\r\n getUidWithEmail(email: string): Observable<{uid: string, name: string}> {\r\n return new Observable<{uid: string, name: string}>((observer) => {\r\n if (!this.isValidEmail(email)) { \r\n observer.error(new Error('Invalid email.'));\r\n return;\r\n }\r\n const userQuery = query(this.userCollection, where('email', '==', email));\r\n from(getDocs(userQuery)).pipe(take(1)).subscribe({\r\n next: snapshot => {\r\n if (snapshot.empty) {\r\n observer.error(new Error('No user found with this email.'));\r\n } else {\r\n const userData = snapshot.docs[0].data();\r\n observer.next({ uid: userData['_id'], name: userData['name'] });\r\n observer.complete();\r\n }\r\n },\r\n error: err => {\r\n observer.error(err);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output, SimpleChanges } from \"@angular/core\";\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { InputTextModule } from \"primeng/inputtext\";\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { InputIconModule } from 'primeng/inputicon';\r\nimport { IconFieldModule } from 'primeng/iconfield';\r\nimport { Message } from 'primeng/message';\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { UserService } from \"../../services/user.service\";\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'sessionModal',\r\n templateUrl: './sessionModal.component.html',\r\n styleUrls: ['./sessionModal.component.css'],\r\n imports: [ButtonModule, DialogModule, InputIconModule, IconFieldModule, InputTextModule, FloatLabelModule, FormsModule, CommonModule, Message],\r\n})\r\nexport class SessionModalComponent {\r\n\r\n @Input() visible: boolean = false;\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n\r\n login: boolean = true;\r\n resetpassword: boolean = false;\r\n\r\n email: string = '';\r\n password: string = '';\r\n showPassword: boolean = false;\r\n repeatPassword: string = '';\r\n showRepeatPassword: boolean = false;\r\n\r\n error: string | null = null;\r\n\r\n constructor(private userService: UserService) {}\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.login = changes['visible'].currentValue;\r\n this.resetpassword = !changes['visible'].currentValue;\r\n this.email = '';\r\n this.password = '';\r\n this.repeatPassword = '';\r\n this.error = null;\r\n }\r\n\r\n getHeader(): string {\r\n if (this.resetpassword) return 'Recover Password';\r\n if (this.login) return 'Login';\r\n return 'Register';\r\n }\r\n\r\n getSwitchLabel() {\r\n if (this.resetpassword) return 'Return';\r\n if (!this.login) return 'Login';\r\n return 'Register';\r\n }\r\n\r\n clickSwitchButton() {\r\n this.error = null;\r\n if (this.resetpassword) this.resetpassword = !this.resetpassword;\r\n else this.login = !this.login;\r\n }\r\n\r\n clickMainButton() {\r\n if (this.resetpassword) return this.recoverPassword();\r\n if (this.login) return this.loginWithEmailAndPassword();\r\n return this.registerWithEmailAndPassword();\r\n }\r\n\r\n async loginWithGoogle() {\r\n try {\r\n await this.userService.loginWithGoogle();\r\n this.visibleChange.emit(false);\r\n } catch (error: any) {\r\n this.error = error;\r\n }\r\n }\r\n\r\n async loginWithEmailAndPassword() {\r\n try {\r\n await this.userService.loginWithEmailAndPassword(this.email, this.password);\r\n this.visibleChange.emit(false);\r\n } catch (error: any) {\r\n this.error = error;\r\n }\r\n }\r\n\r\n async registerWithEmailAndPassword() {\r\n try {\r\n await this.userService.registerWithEmailAndPassword(this.email, this.password, this.repeatPassword);\r\n this.visibleChange.emit(false);\r\n } catch (error: any) {\r\n this.error = error;\r\n }\r\n }\r\n\r\n async recoverPassword() {\r\n try {\r\n await this.userService.recoverPassword(this.email);\r\n this.password = '';\r\n this.repeatPassword = '';\r\n this.resetpassword = !this.resetpassword;\r\n } catch (error: any) {\r\n this.error = error;\r\n }\r\n }\r\n}","<p-dialog [header]=\"getHeader()\" [modal]=\"true\" [visible]=\"visible\" resizable=\"false\" (visibleChange)=\"visibleChange.emit($event)\" [style]=\"{color: 'var(--primary-color)'}\">\r\n <p-message *ngIf=\"error\" severity=\"error\" variant=\"simple\" styleClass=\"mb-4 white-space-normal\" class=\"error-info\">{{error}}</p-message>\r\n <div class=\"flex items-center gap-4 mt-2 mb-1\">\r\n <p-floatlabel variant=\"on\" [class]=\"error ? 'custom-floatlabel error-floatlabel' : 'custom-floatlabel'\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-user\" />\r\n <input pInputText id=\"email\" autocomplete=\"off\" [class]=\"error ? 'custom-input error-input' : 'custom-input'\" [(ngModel)]=\"email\"/>\r\n </p-iconfield>\r\n <label for=\"email\">Email</label>\r\n </p-floatlabel>\r\n </div>\r\n <div *ngIf=\"!resetpassword\" class=\"flex items-center gap-4 mt-4 mb-1\">\r\n <p-floatlabel variant=\"on\" [class]=\"error ? 'custom-floatlabel error-floatlabel' : 'custom-floatlabel'\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-lock\" />\r\n <input [type]=\"showPassword ? 'text' : 'password'\" pInputText id=\"password\" autocomplete=\"off\" [class]=\"error ? 'custom-input error-input' : 'custom-input'\" [(ngModel)]=\"password\"/>\r\n <i [class]=\"showPassword ? 'eye-icon pi pi-eye-slash' : 'eye-icon pi pi-eye'\" (click)=\"showPassword = !showPassword\"></i>\r\n </p-iconfield>\r\n <label for=\"password\">Password</label>\r\n </p-floatlabel>\r\n </div>\r\n <div *ngIf=\"!login\" class=\"flex items-center gap-4 mt-4 mb-1\">\r\n <p-floatlabel variant=\"on\" [class]=\"error ? 'custom-floatlabel error-floatlabel' : 'custom-floatlabel'\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-lock\" />\r\n <input [type]=\"showRepeatPassword ? 'text' : 'password'\" pInputText id=\"rPassword\" autocomplete=\"off\" [class]=\"error ? 'custom-input error-input' : 'custom-input'\" [(ngModel)]=\"repeatPassword\"/>\r\n <i [class]=\"showRepeatPassword ? 'eye-icon pi pi-eye-slash' : 'eye-icon pi pi-eye'\" (click)=\"showRepeatPassword = !showRepeatPassword\"></i>\r\n </p-iconfield>\r\n <label for=\"rPassword\">Repeat Password</label>\r\n </p-floatlabel>\r\n </div>\r\n <a *ngIf=\"login && !resetpassword\" class=\"inline-flex ml-2 text-sm\" (click)=\"resetpassword = !resetpassword; error = null;\">Forgot Password?</a>\r\n <div class=\"flex align-items-center justify-content-between gap-2 mt-4\">\r\n <div class=\"flex justify-end gap-2\">\r\n <p-button class=\"custom-button\" [label]=\"getHeader()\" (click)=\"clickMainButton()\" />\r\n <p-button severity=\"secondary\" class=\"custom-secondary-button\" [label]=\"getSwitchLabel()\" (click)=\"clickSwitchButton()\" />\r\n </div>\r\n <p-button *ngIf=\"!resetpassword\" class=\"custom-button\" icon=\"pi pi-google\" label=\"Google\" (click)=\"loginWithGoogle()\" />\r\n </div>\r\n</p-dialog>","import { CommonModule } from '@angular/common';\r\nimport {Component, EventEmitter, HostListener, inject, Input, Output} from '@angular/core';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { TieredMenuModule } from 'primeng/tieredmenu';\r\nimport { AvatarModule } from 'primeng/avatar';\r\nimport { AvatarGroupModule } from 'primeng/avatargroup';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { SessionModalComponent } from \"../signInModal/sessionModal.component\";\r\nimport { UserService } from '../../services/user.service';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'header',\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.css'],\r\n imports: [ButtonModule, TieredMenuModule, CommonModule, AvatarModule, AvatarGroupModule, SessionModalComponent],\r\n})\r\nexport class HeaderComponent {\r\n @Input() items: MenuItem[] = [ \r\n {\r\n label: 'Tools',\r\n icon: 'pi pi-cog',\r\n items: [\r\n {\r\n label: 'BoK Visualization & Search',\r\n icon: 'pi pi-search',\r\n style: {'--p-tieredmenu-item-color': 'var(--hover-color)'},\r\n iconStyle: {'color': 'var(--hover-color)'}\r\n },\r\n {\r\n label: 'Occupational Profile Tool',\r\n icon: 'pi pi-users',\r\n url: 'https://eo4geo-opt.web.app',\r\n },\r\n {\r\n label: 'Job Offer Tool',\r\n icon: 'pi pi-book',\r\n url: 'https://eo4geo-jot.web.app',\r\n },\r\n {\r\n label: 'Curriculum Design Tool',\r\n icon: 'pi pi-graduation-cap',\r\n url: 'https://eo4geo-cdt.web.app',\r\n },\r\n {\r\n label: 'BoK Annotation Tool',\r\n icon: 'pi pi-pencil',\r\n url: 'https://eo4geo-bat.web.app',\r\n },\r\n {\r\n label: 'BoK Matching Tool',\r\n icon: 'pi pi-equals',\r\n url: 'https://eo4geo-bmt.web.app',\r\n }\r\n ]\r\n }, \r\n {\r\n label: 'Share',\r\n icon: 'pi pi-share-alt',\r\n items: [\r\n {\r\n label: 'X',\r\n icon: 'pi pi-twitter',\r\n url: 'https://twitter.com/SpaceSUITE_eu',\r\n },\r\n {\r\n label: 'Facebook',\r\n icon: 'pi pi-facebook',\r\n url: 'https://www.facebook.com/spacesuiteproject/',\r\n },\r\n {\r\n label: 'Youtube',\r\n icon: 'pi pi-youtube',\r\n url: 'https://www.youtube.com/@SpaceSUITE_eu',\r\n },\r\n {\r\n label: 'LinkedIn',\r\n icon: 'pi pi-linkedin',\r\n url: 'https://www.linkedin.com/showcase/spacesuite_eu/',\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n userItems: MenuItem[] = [\r\n {\r\n label: 'Profile', \r\n icon: 'pi pi-user',\r\n command: () => {\r\n this.profileClick.emit();\r\n }\r\n },\r\n {\r\n label: 'Organization', \r\n icon: 'pi pi-users',\r\n command: () => {\r\n this.organizationClick.emit();\r\n }\r\n }, \r\n {\r\n label: 'Logout', \r\n icon: 'pi pi-sign-out', \r\n command: () => {\r\n this.logout();\r\n }\r\n }\r\n ];\r\n\r\n unregisteredUserItems: MenuItem[] = [\r\n {\r\n label: 'Login', \r\n icon: 'pi pi-sign-in', \r\n command: () => {\r\n this.showLoginModal = !this.showLoginModal\r\n }\r\n }\r\n ];\r\n\r\n buttonItems: MenuItem[] = this.items.concat(this.unregisteredUserItems);\r\n\r\n @Input() toolName: string = \"BoK Visualization & Search\";\r\n @Input() login: boolean = false;\r\n @Output() profileClick: EventEmitter<void> = new EventEmitter()\r\n @Output() organizationClick: EventEmitter<void> = new EventEmitter()\r\n \r\n hideMenu: boolean = true;\r\n logged: boolean = false;\r\n nameInitial: string = 'A';\r\n\r\n showLoginModal: boolean = false;\r\n\r\n private userStateSubscription!: Subscription;\r\n\r\n constructor(private userService: UserService, private router: Router) {}\r\n\r\n ngOnInit() {\r\n this.userStateSubscription = this.userService.getUserState().pipe(filter(value => value != undefined)).subscribe(({ logged, nameInitial }) => {\r\n this.logged = logged;\r\n this.nameInitial = nameInitial;\r\n if (this.logged) this.buttonItems = this.items.concat(this.userItems);\r\n else {\r\n this.buttonItems = this.items.concat(this.unregisteredUserItems);\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.userStateSubscription?.unsubscribe();\r\n }\r\n\r\n async logout() {\r\n await this.userService.logout();\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n clickout(event: { target: any }) {\r\n if (!event.target.closest(\"p-tieredmenu\") && !event.target.closest(\"p-button.custom-header-button\")) {\r\n this.hideMenu = true;\r\n }\r\n }\r\n\r\n navigateToMainPage() {\r\n this.router.navigate(['']);\r\n }\r\n}\r\n","<div class=\"header\">\r\n <div class=\"flex align-content-center p-4 mx-4\">\r\n <a (click)=\"navigateToMainPage()\" class=\"align-self-center\"><img class=\"logo flex align-items-center justify-content-center\" src=\"assets/images/SpaceSUITE_horizontal_color.png\" alt=\"LogoSpaceSUITE\"></a>\r\n <div class=\"hidden xl:flex align-self-center fixed-text\">\r\n <strong class=\"text-2xl overflow-hidden white-space-nowrap text-overflow-ellipsis\" style=\"cursor: pointer;\" (click)=\"navigateToMainPage()\">\r\n {{toolName}}\r\n </strong>\r\n </div>\r\n <div class=\"flex gap-6 ml-auto\">\r\n <div class=\"justify-content-center hidden md:flex\" *ngFor=\"let item of items;\">\r\n <div class=\"flex align-items-center justify-content-center gap-2 text-xl font-bold header-option\" (click)=\"subMenu.toggle($event)\" *ngIf=\"item.label != 'Share'; else share\">\r\n <i [class]=\"item.icon\"></i>\r\n <div>{{item.label}}</div>\r\n <i *ngIf=\"item.items\" class=\"pi pi-angle-down\"></i>\r\n </div>\r\n <p-tieredmenu #subMenu [model]=\"item.items\" [breakpoint]=\"'767px'\" class=\"custom-p-tieredmenu\" [popup]=\"true\" />\r\n <ng-template #share>\r\n <div class=\"flex align-items-center justify-content-center gap-3\">\r\n <div *ngFor=\"let social of item.items;\">\r\n <a [href]=\"social.url\" target=\"_blank\" class=\"flex\">\r\n <i [class]=\"social.icon\" style=\"font-size: 1.25rem\"></i>\r\n </a>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"login\" class=\"hidden md:flex align-items-center justify-content-center\">\r\n <p-avatar *ngIf=\"logged; else loginButton\" [label]=\"nameInitial\" class=\"custom-p-avatar\" shape=\"circle\" (click)=\"userMenu.toggle($event)\"></p-avatar>\r\n </div>\r\n <p-tieredmenu #userMenu [model]=\"userItems\" [breakpoint]=\"'767px'\" class=\"custom-p-tieredmenu\" [popup]=\"true\" />\r\n <ng-template #loginButton>\r\n <p-button class=\"custom-header-button\" size=\"small\" label=\"Login\" aria-label=\"Login\" (onClick)=\"showLoginModal = !showLoginModal\"></p-button>\r\n </ng-template>\r\n </div>\r\n \r\n <p-button #menuButton (click)=\"hideMenu = !hideMenu\" class=\"md:hidden flex align-items-center custom-header-button ml-auto\" icon=\"pi pi-bars\" aria-label=\"Menu\"></p-button>\r\n </div>\r\n <p-tieredmenu #menu [hidden]=\"hideMenu\" [model]=\"buttonItems\" class=\"md:hidden custom-p-tieredmenu\"/>\r\n</div>\r\n\r\n<sessionModal [(visible)]=\"showLoginModal\"></sessionModal>\r\n","import { Component } from \"@angular/core\";\r\nimport { Router } from \"@angular/router\";\r\nimport { ButtonModule } from 'primeng/button';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'not-found-page',\r\n templateUrl: './notFoundPage.component.html',\r\n styleUrls: ['./notFoundPage.component.css'],\r\n imports: [ButtonModule],\r\n})\r\nexport class NotFoundPageComponent {\r\n constructor(private router: Router) {}\r\n\r\n goToHomepage() {\r\n this.router.navigate(['']);\r\n }\r\n}","<div class=\"flex flex-column justify-content-center align-items-center m-8\">\r\n <img src=\"assets/images/hosting-404-error-1.png\" alt=\"not Found\" class=\"w-4 m-4\">\r\n <h1>page not found</h1>\r\n <p-button label=\"Go To Homepage\" size=\"large\" class=\"custom-button\" (onClick)=\"goToHomepage()\"></p-button>\r\n</div>","import { Component} from \"@angular/core\";\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { InputTextModule } from \"primeng/inputtext\";\r\nimport { FloatLabelModule } from \"primeng/floatlabel\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { InputIconModule } from 'primeng/inputicon';\r\nimport { IconFieldModule } from 'primeng/iconfield';\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { UserService } from \"../../services/user.service\";\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { MessageService } from \"primeng/api\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'user-page',\r\n templateUrl: './userPage.component.html',\r\n styleUrls: ['./userPage.component.css'],\r\n imports: [ButtonModule, InputIconModule, IconFieldModule, InputTextModule, FloatLabelModule, FormsModule, CommonModule, ToastModule],\r\n providers: [MessageService]\r\n})\r\nexport class UserPageComponent {\r\n userSubscription!: Subscription;\r\n userStateSubscription!: Subscription;\r\n\r\n email: string = \"\";\r\n name: string = \"\";\r\n newName: string = \"\";\r\n\r\n constructor(private userService: UserService, private messageService: MessageService, private router: Router) {}\r\n \r\n ngOnInit() {\r\n this.userSubscription = this.userService.getNameAndEmail().subscribe(userData => {\r\n this.email = userData?.email ?? '';\r\n this.name = userData?.name ?? '';\r\n this.newName = this.name;\r\n });\r\n this.userStateSubscription = this.userService.getUserState().subscribe( userState => {\r\n if (!userState?.logged) this.router.navigate([''])\r\n });\r\n}\r\n\r\n ngOnDestroy() {\r\n this.userSubscription?.unsubscribe();\r\n this.userStateSubscription?.unsubscribe();\r\n }\r\n\r\n async updateName() {\r\n try {\r\n await this.userService.updateUserName(this.newName);\r\n this.messageService.add({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `Name updated without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n } catch (error) {\r\n this.messageService.add({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n }\r\n\r\n}","<p-toast class=\"custom-toast\" position=\"bottom-right\"/>\r\n<div class=\"flex flex-column align-items-center justify-content-center p-4\">\r\n <h2>User Profile</h2>\r\n <div class=\"flex gap-4\">\r\n <p-floatlabel variant=\"on\" class=\"custom-floatlabel\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-envelope\" />\r\n <input pInputText id=\"email\" [disabled]=\"true\" autocomplete=\"off\" class=\"w-full max-w-25rem custom-input\" [(ngModel)]=\"email\"/>\r\n </p-iconfield>\r\n <label for=\"email\">Email</label>\r\n </p-floatlabel>\r\n </div>\r\n <div class=\"flex gap-4 mt-4 mb-4\">\r\n <p-floatlabel variant=\"on\" class=\"custom-floatlabel\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-user\" />\r\n <input pInputText id=\"password\" [disabled]=\"email == ''\" autocomplete=\"off\" class=\"w-full max-w-25rem custom-input\" [(ngModel)]=\"newName\"/>\r\n </p-iconfield>\r\n <label for=\"password\">Name</label>\r\n </p-floatlabel>\r\n </div>\r\n <p-button class=\"custom-button\" label=\"Update Name\" [disabled]=\"name == newName || email == ''\" (click)=\"updateName()\" />\r\n</div>","import { Component, EventEmitter, Input, Output, SimpleChanges} from \"@angular/core\";\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { InputIconModule } from \"primeng/inputicon\";\r\nimport { IconFieldModule } from \"primeng/iconfield\";\r\nimport { InputTextModule } from \"primeng/inputtext\";\r\nimport { FloatLabelModule } from \"primeng/floatlabel\";\r\nimport { TextareaModule } from 'primeng/textarea';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'organization-form',\r\n templateUrl: './organizationForm.component.html',\r\n styleUrls: ['./organizationForm.component.css'],\r\n imports: [ButtonModule, CommonModule, FormsModule, InputIconModule, IconFieldModule, InputTextModule, FloatLabelModule, TextareaModule],\r\n})\r\nexport class OrganizationFormComponent {\r\n\r\n @Input() organization!: {_id: string, name: string, description: string, email:string, isAdmin: boolean};\r\n @Input() descriptionError: boolean = false;\r\n @Input() buttonLabel: string = \"Update Information\";\r\n @Input() validationFunction: Function = (data: [string, string][]): boolean => {\r\n for (let pair of data) {\r\n if (pair[0] != pair[1]) return false\r\n }\r\n return true\r\n };\r\n @Output() formChange: EventEmitter<{name: string | null, description: string | null, contact: string | null}> = new EventEmitter();\r\n\r\n newName: string = \"\";\r\n newDescription: string = \"\";\r\n newContact: string = \"\";\r\n\r\n emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\r\n isValidEmail = (email: string): boolean => this.emailRegex.test(email);\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['organization'] && this.organization) {\r\n this.newName = changes['organization'].currentValue.name;\r\n this.newDescription = changes['organization'].currentValue.description;\r\n this.newContact = changes['organization'].currentValue.email;\r\n }\r\n }\r\n\r\n descriptionFormModified() {\r\n const pairs: [string, string][] = [[this.newName, this.organization.name], [this.newDescription, this.organization.description], [this.newContact, this.organization.email]];\r\n return this.validationFunction(pairs) || !this.isValidEmail(this.newContact);\r\n }\r\n\r\n updateDescription() {\r\n const updateInfo = {\r\n name: this.newName != this.organization.name ? this.newName : null,\r\n description: this.newDescription != this.organization.description ? this.newDescription : null,\r\n contact: this.newContact != this.organization.email ? this.newContact : null\r\n }\r\n this.formChange.emit(updateInfo);\r\n }\r\n\r\n}","<div class=\"flex flex-column gap-4 m-2 mb-4\">\r\n <p-floatlabel variant=\"on\" class=\"custom-floatlabel\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-pencil\" />\r\n <input pInputText id=\"name\" autocomplete=\"off\" class=\"w-full custom-input\" (ngModelChange)=\"descriptionError = false;\"\r\n [ngClass]=\"descriptionError ? 'error-input' : ''\" [(ngModel)]=\"newName\"/>\r\n </p-iconfield>\r\n <label for=\"name\">Name</label>\r\n </p-floatlabel>\r\n\r\n <p-floatlabel variant=\"on\" class=\"custom-floatlabel\">\r\n <p-iconfield class=\"textarea-iconfield\">\r\n <p-inputicon class=\"pi pi-align-justify\"></p-inputicon>\r\n <textarea id=\"description\" rows=\"5\" cols=\"30\" pTextarea [(ngModel)]=\"newDescription\" (ngModelChange)=\"descriptionError = false;\"\r\n style=\"resize: none;\" class=\"w-full custom-textarea\" [ngClass]=\"descriptionError ? 'error-textarea' : ''\"></textarea>\r\n </p-iconfield>\r\n <label for=\"description\">Description</label>\r\n </p-floatlabel>\r\n\r\n <p-floatlabel variant=\"on\" class=\"custom-floatlabel\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-envelope\" />\r\n <input pInputText id=\"contact\" autocomplete=\"off\" class=\"w-full custom-input\" (ngModelChange)=\"descriptionError = false;\"\r\n [ngClass]=\"descriptionError ? 'error-input' : ''\" [(ngModel)]=\"newContact\"/>\r\n </p-iconfield>\r\n <label for=\"contact\">Contact</label>\r\n </p-floatlabel>\r\n</div>\r\n<p-button class=\"custom-button ml-2\" [label]=\"buttonLabel\" size=\"small\" [disabled]=\"descriptionFormModified()\" (onClick)=\"updateDescription()\"/>","import { inject, Injectable } from '@angular/core';\r\nimport { Auth, authState } from '@angular/fire/auth';\r\nimport { Firestore, collection, CollectionReference, doc, updateDoc, docData, DocumentReference, collectionData, setDoc, deleteDoc } from '@angular/fire/firestore';\r\nimport { ToastMessageOptions } from 'primeng/api';\r\nimport { catchError, concatMap, first, forkJoin, from, map, Observable, of, Subject, take, combineLatest, switchMap, distinctUntilChanged } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class OrganizationService {\r\n private auth;\r\n private db;\r\n\r\n private userCollection: CollectionReference;\r\n private orgCollection: CollectionReference;\r\n\r\n private adminOrganizationMessagesSource = new Subject<ToastMessageOptions>();\r\n adminOrganizationMessages$ = this.adminOrganizationMessagesSource.asObservable();\r\n \r\n constructor() {\r\n this.auth = inject(Auth);\r\n this.db = inject(Firestore)\r\n this.userCollection = collection(this.db, 'Users');\r\n this.orgCollection = collection(this.db, 'Organizations');\r\n }\r\n\r\n emitMessage(message: ToastMessageOptions) {\r\n this.adminOrganizationMessagesSource.next(message)\r\n }\r\n\r\n getOrganizations(): Observable<{ _id: string, name: string }[]> {\r\n return collectionData(this.orgCollection) as Observable<{ _id: string, name: string }[]>;\r\n }\r\n\r\n getUserOrganizations(): Observable<{ _id: string, name: string; description: string, email: string, isAdmin: boolean }[]> {\r\n return authState(this.auth).pipe(\r\n switchMap(user => {\r\n if (!user) return of(null);\r\n const userDocRef: DocumentReference = doc(this.userCollection, user.uid);\r\n return docData(userDocRef) as Observable<{ organizations: string[] }>;\r\n }),\r\n distinctUntilChanged((a,b) => JSON.stringify(a) === JSON.stringify(b)),\r\n switchMap(userData => {\r\n const orgIds = userData?.organizations ?? [];\r\n if (orgIds.length === 0) return of([]);\r\n const orgObservables = orgIds.map(id => this.getOrganizationInfo(id));\r\n return combineLatest(orgObservables);\r\n }),\r\n map(orgs => orgs ?? [])\r\n );\r\n }\r\n\r\n private getOrganizationInfo(orgId: string): Observable<{ _id: string, name: string; description: string, email:string, isAdmin: boolean }> {\r\n const orgDocRef: DocumentReference = doc(this.orgCollection, orgId);\r\n return docData(orgDocRef).pipe(\r\n first(),\r\n map(document => ({\r\n _id: document?.['_id'],\r\n name: document?.['name'],\r\n description: document?.['description'],\r\n email: document?.['contact'],\r\n isAdmin: Array.isArray(document?.['admin']) && document['admin'].includes(this.auth.currentUser?.uid)\r\n }))\r\n );\r\n }\r\n\r\n getOrganizationUsers(orgId: string): Observable<{ _id: string, name: string; email: string, isAdmin: boolean }[]> {\r\n const orgDocRef = doc(this.orgCollection, orgId);\r\n const organizationUsersSnapshot = docData(orgDocRef) as Observable<{ admin: string[], regular: string[] }>;\r\n return organizationUsersSnapshot.pipe(\r\n concatMap(users => {\r\n const adminUsers$ = users.admin.map(uid =>\r\n this.getUserInfo(uid).pipe(take(1),map(user => ({ ...user, isAdmin: true })))\r\n );\r\n\r\n const regularUsers$ = users.regular.map(uid =>\r\n this.getUserInfo(uid).pipe(take(1), map(user => ({ ...user, isAdmin: false })))\r\n );\r\n\r\n return forkJoin([...adminUsers$, ...regularUsers$]);\r\n })\r\n );\r\n }\r\n\r\n private getUserInfo(uid: string): Observable<{ _id: string, name: string; email: string }> {\r\n const orgDocRef: DocumentReference = doc(this.userCollection, uid);\r\n return docData(orgDocRef) as Observable<{ _id: string, name: string; email: string }>;\r\n }\r\n\r\n getOrganizationDivisions(orgId: string): Observable<string[]> {\r\n const orgDocRef = doc(this.orgCollection, orgId);\r\n const organizationUsersSnapshot = docData(orgDocRef) as Observable<{ divisions: string[] }>;\r\n return organizationUsersSnapshot.pipe(\r\n map(data => data.divisions)\r\n );\r\n }\r\n \r\n leaveOrganization(orgId: string): Observable<void> {\r\n return this.updateOrganizationUsers(orgId, this.removeItem).pipe(\r\n concatMap(() => this.updateUserOrganizations(orgId, this.removeItem)));\r\n }\r\n \r\n joinOrganization(orgId: string): Observable<void> {\r\n return this.updateOrganizationUsers(orgId, this.addItem, undefined, this.nothing).pipe(\r\n concatMap(() => this.updateUserOrganizations(orgId, this.addItem)));\r\n }\r\n\r\n deleteUserFromOrganization(orgId: string, userId: string) {\r\n return this.updateOrganizationUsers(orgId, this.removeItem, userId).pipe(\r\n concatMap(() => this.updateUserOrganizations(orgId, this.removeItem, userId)));\r\n }\r\n\r\n addUserToOrganization(orgId: string, userId: string) {\r\n return this.updateOrganizationUsers(orgId, this.addItem, userId, this.nothing).pipe(\r\n concatMap(() => this.updateUserOrganizations(orgId, this.addItem, userId)));\r\n }\r\n\r\n changeAdminState(orgId: string, userId: string, newState: boolean) {\r\n return newState \r\n ? this.updateOrganizationUsers(orgId, this.removeItem, userId, this.addItem) \r\n : this.updateOrganizationUsers(orgId, this.addItem, userId, this.removeItem);\r\n }\r\n \r\n private updateUserOrganizations(orgId: string, updateFn: (arr: string[], item: string) => string[], userId?: string): Observable<void> {\r\n const currentUserId = userId ?? this.auth.currentUser?.uid;\r\n if (!currentUserId) return of(void 0);\r\n const userDocRef = doc(this.userCollection, currentUserId);\r\n const userOrganizationsSnapshot = docData(userDocRef) as Observable<{ organizations: string[] }>;\r\n return new Observable<void>((observer) => {\r\n userOrganizationsSnapshot.pipe(take(1)).subscribe(async (userOrganizations) => {\r\n if (!userOrganizations) {\r\n observer.error(new Error('User organizations data is unavailable.'));\r\n return;\r\n }\r\n const updatedOrganizations = updateFn(userOrganizations.organizations ?? [], orgId);\r\n await updateDoc(userDocRef, { organizations: updatedOrganizations });\r\n observer.next();\r\n observer.complete();\r\n });\r\n });\r\n }\r\n \r\n private updateOrganizationUsers(orgId: string, updateFn: (arr: string[], item: string) => string[], userId?: string, updateAdminFn?: (arr: string[], item: string) => string[]): Observable<void> {\r\n const orgDocRef = doc(this.orgCollection, orgId);\r\n const organizationUsersSnapshot = docData(orgDocRef) as Observable<{ admin: string[], regular: string[] }>;\r\n return new Observable<void>((observer) => {\r\n organizationUsersSnapshot.pipe(take(1)).subscribe(async (organizationUsers) => {\r\n if (!organizationUsers) {\r\n observer.error(new Error('Organization users data is unavailable.'));\r\n return;\r\n }\r\n const currentUserId = userId ?? this.auth.currentUser?.uid;\r\n if (!currentUserId) {\r\n observer.error(new Error('Current user is not authenticated.'));\r\n return;\r\n }\r\n if (organizationUsers.admin.length == 1 && organizationUsers.admin.includes(currentUserId)) {\r\n observer.error(new Error('Cannot perform action: Current user is the only administrator.'));\r\n return;\r\n }\r\n await updateDoc(orgDocRef, {\r\n admin: updateAdminFn ? updateAdminFn(organizationUsers.admin, currentUserId) : updateFn(organizationUsers.admin, currentUserId),\r\n regular: updateFn(organizationUsers.regular, currentUserId)\r\n });\r\n observer.next();\r\n observer.complete();\r\n });\r\n });\r\n }\r\n\r\n addDivisions(orgId: string, newDivision: string): Observable<void> {\r\n return this.updateOrganizationDivisions(orgId, newDivision, this.addItem);\r\n }\r\n \r\n deleteDivision(orgId: string, newDivision: string): Observable<void> {\r\n return this.updateOrganizationDivisions(orgId, newDivision, this.removeItem);\r\n }\r\n\r\n private updateOrganizationDivisions(orgId: string, newDivision: string, updateFn: (arr: string[], item: string) => string[]): Observable<void> {\r\n const orgDocRef = doc(this.orgCollection, orgId);\r\n const organizationDivisions = this.getOrganizationDivisions(orgId);\r\n return new Observable<void>((observer) => {\r\n organizationDivisions.pipe(take(1)).subscribe(async (divisions) => {\r\n if (!divisions) {\r\n observer.error(new Error('Organization divisions data is unavailable.'));\r\n return;\r\n }\r\n await updateDoc(orgDocRef, {\r\n divisions: updateFn(divisions, newDivision)\r\n });\r\n observer.next();\r\n observer.complete();\r\n });\r\n });\r\n }\r\n \r\n private addItem(arr: string[], item: string): string[] {\r\n return [...arr, item];\r\n }\r\n \r\n private removeItem(arr: string[], item: string, ): string[] {\r\n return arr.filter(i => i !== item);\r\n }\r\n\r\n private nothing(arr: string[], item: string, ): string[] {\r\n return arr;\r\n }\r\n\r\n updateOrganizationInformation(orgId: string, info: { name: string | null; description: string | null; contact: string | null }): Observable<void> {\r\n const orgDocRef = doc(this.orgCollection, orgId);\r\n return new Observable<void>((observer) => {\r\n const updateData: Record<string, string> = {};\r\n Object.entries(info).forEach(([key, value]) => {\r\n if (value !== null) {\r\n updateData[key] = value;\r\n }\r\n });\r\n if (Object.keys(updateData).length > 0) {\r\n updateDoc(orgDocRef, updateData)\r\n .then(() => {\r\n observer.next();\r\n observer.complete();\r\n })\r\n .catch((error) => observer.error(error));\r\n } else {\r\n observer.complete();\r\n }\r\n });\r\n }\r\n\r\n createOrganization(name: string, description: string, contact: string) {\r\n const currentUserId = this.auth.currentUser?.uid;\r\n if (!currentUserId) {\r\n throw new Error('Current user is not authenticated.');\r\n }\r\n const orgRef = doc(this.orgCollection);\r\n const org = {\r\n _id: orgRef.id,\r\n name,\r\n description,\r\n admin: [currentUserId],\r\n regular: [],\r\n pending: [],\r\n adminUser: [],\r\n regularUser: [],\r\n pendingUser: [],\r\n isPublic: false,\r\n contact,\r\n divisions: [],\r\n };\r\n return from(setDoc(orgRef, org)).pipe(\r\n concatMap(() => this.updateUserOrganizations(org._id, this.addItem, currentUserId)),\r\n take(1)\r\n );\r\n }\r\n\r\n deleteOrganization(orgId: string, users: string[]): Observable<void> {\r\n const userObservables = users.map(uid => this.updateUserOrganizations(orgId, this.removeItem, uid));\r\n return forkJoin(userObservables).pipe(\r\n concatMap(() => {\r\n const orgRef = doc(this.orgCollection, orgId);\r\n return from(deleteDoc(orgRef)).pipe(\r\n catchError((error) => {\r\n throw new Error('Error al eliminar la organización');\r\n }),\r\n take(1)\r\n );\r\n })\r\n );\r\n }\r\n}\r\n","import { Component, Input} from \"@angular/core\";\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { TableModule } from 'primeng/table';\r\nimport { ToggleSwitchChangeEvent, ToggleSwitchModule } from 'primeng/toggleswitch';\r\nimport { AccordionModule } from 'primeng/accordion';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { OrganizationService } from \"../../services/organization.service\";\r\nimport { ConfirmationService } from \"primeng/api\";\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { catchError, finalize, of, Subscription, concatMap } from \"rxjs\";\r\nimport { InputIconModule } from \"primeng/inputicon\";\r\nimport { IconFieldModule } from \"primeng/iconfield\";\r\nimport { InputTextModule } from \"primeng/inputtext\";\r\nimport { FloatLabelModule } from \"primeng/floatlabel\";\r\nimport { UserService } from \"../../services/user.service\";\r\nimport { OrganizationFormComponent } from \"../organizationForm/organizationForm.component\";\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'organization-admin',\r\n templateUrl: './organizationAdmin.component.html',\r\n styleUrls: ['./organizationAdmin.component.css'],\r\n imports: [ButtonModule, CommonModule, TableModule, ToggleSwitchModule, FormsModule, AccordionModule, InputIconModule,\r\n IconFieldModule, InputTextModule, FloatLabelModule, ConfirmDialogModule, OrganizationFormComponent],\r\n providers: [ConfirmationService]\r\n})\r\nexport class OrganizationAdminComponent {\r\n\r\n @Input() organization!: {_id: string, name: string, description: string, email:string, isAdmin: boolean};\r\n users: { _id: string; name: string; email: string; isAdmin: boolean;}[] = [];\r\n skelletonData: any[] = Array.from({ length: 5 }).map(() => {});\r\n divisions: string[] = [];\r\n\r\n newDivision: string = \"\";\r\n divisionError: boolean = false;\r\n\r\n descriptionError: boolean = false;\r\n\r\n newUser: string = \"\";\r\n userError: boolean = false;\r\n\r\n private usersSubscription!: Subscription;\r\n private divisionsSubscription!: Subscription;\r\n\r\n inplaceIndicator: boolean = false;\r\n\r\n constructor(private orgService: OrganizationService, private userService: UserService, private confirmationService: ConfirmationService) {}\r\n \r\n ngOnInit() {\r\n this.usersSubscription = this.orgService.getOrganizationUsers(this.organization._id).subscribe(newUsers => this.users = newUsers.sort((a, b) => b.email.localeCompare(a.email)));\r\n this.divisionsSubscription = this.orgService.getOrganizationDivisions(this.organization._id).subscribe(newDivisions => this.divisions = newDivisions);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe()\r\n }\r\n\r\n private unsubscribe() {\r\n if (this.usersSubscription) {\r\n this.usersSubscription.unsubscribe();\r\n }\r\n if (this.divisionsSubscription) {\r\n this.divisionsSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n isCurrentUser(userId: string) {\r\n return this.userService.isCurrentUser(userId);\r\n }\r\n\r\n deleteUser(userId: string, userName: string) {\r\n let isSuccess = true;\r\n this.orgService.deleteUserFromOrganization(this.organization._id, userId).pipe(\r\n catchError(error => {\r\n isSuccess = false;\r\n this.orgService.emitMessage({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.orgService.emitMessage({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You deleted ${userName ?? userId} from the organization without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n switchAdminStateModal(event: ToggleSwitchChangeEvent, userId: string, userName: string, newState: boolean) {\r\n this.confirmationService.confirm({\r\n target: event.originalEvent.target as EventTarget,\r\n message: `Do you want to change ${userName} admin status?`,\r\n header: 'Change Admin Status',\r\n icon: 'pi pi-info-circle',\r\n rejectLabel: 'Cancel',\r\n rejectButtonProps: {\r\n label: 'Cancel',\r\n severity: 'secondary',\r\n },\r\n acceptButtonProps: {\r\n label: 'Delete',\r\n severity: 'primary',\r\n },\r\n\r\n accept: () => {\r\n this.switchAdminState(userId, userName, newState);\r\n },\r\n reject: () => {\r\n const user = this.users.find(u => u._id === userId);\r\n if (user) user.isAdmin = !newState;\r\n },\r\n });\r\n }\r\n\r\n switchAdminState(userId: string, userName: string, newState: boolean) {\r\n let isSuccess = true;\r\n this.orgService.changeAdminState(this.organization._id, userId, newState).pipe(\r\n catchError(error => {\r\n isSuccess = false;\r\n const user = this.users.find(u => u._id === userId);\r\n if (user) user.isAdmin = !newState;\r\n this.orgService.emitMessage({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n const user = this.users.find(u => u._id === userId);\r\n if (user) user.isAdmin = newState;\r\n if(this.isCurrentUser(userId)) this.organization.isAdmin = newState;\r\n this.orgService.emitMessage({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: newState ? `${userName ?? userId} is now an administrator of the organization.` : `${userName ?? userId} is no longer an administrator of the organization.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n deleteDivision(division: string) {\r\n let isSuccess = true;\r\n this.orgService.deleteDivision(this.organization._id, division).pipe(\r\n catchError(error => {\r\n isSuccess = false;\r\n this.orgService.emitMessage({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.orgService.emitMessage({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You deleted ${division} from the organization without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n addDivision() {\r\n if (this.divisions.includes(this.newDivision)) {\r\n this.divisionError = true;\r\n this.orgService.emitMessage({ \r\n severity: 'warn', \r\n summary: 'Warn', \r\n detail: 'You cannot add an existing division.',\r\n life: 3000, \r\n closable: true,\r\n });\r\n return;\r\n }\r\n let isSuccess = true;\r\n this.orgService.addDivisions(this.organization._id, this.newDivision).pipe(\r\n catchError(error => {\r\n isSuccess = false;\r\n this.divisionError = true;\r\n this.orgService.emitMessage({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.divisionError = false;\r\n this.orgService.emitMessage({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You added ${this.newDivision} to the organization without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n this.newDivision = \"\";\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n updateDescription(updateInfo: {name: string | null, description: string | null, contact: string | null}) {\r\n let isSuccess = true;\r\n this.orgService.updateOrganizationInformation(this.organization._id, updateInfo).pipe(\r\n catchError(error => {\r\n isSuccess = false;\r\n this.descriptionError = true;\r\n this.orgService.emitMessage({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.descriptionError = false;\r\n this.organization.name = updateInfo.name ?? this.organization.name;\r\n this.organization.description = updateInfo.description ?? this.organization.description;\r\n this.organization.email = updateInfo.contact ?? this.organization.email; \r\n this.orgService.emitMessage({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You modified the organization description without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n addUserToOrganization() {\r\n let isSuccess = true;\r\n this.userService.getUidWithEmail(this.newUser).pipe(\r\n concatMap(data => {\r\n if(this.users.some(user => user._id === data.uid)) {\r\n isSuccess = false;\r\n this.userError = true;\r\n this.orgService.emitMessage({ \r\n severity: 'warn', \r\n summary: 'Warn', \r\n detail:`${this.newUser} already belong to this organization.`, \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }\r\n return this.orgService.addUserToOrganization(this.organization._id, data.uid)\r\n }),\r\n catchError(error => {\r\n isSuccess = false;\r\n this.userError = true;\r\n this.orgService.emitMessage({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) { \r\n this.userError = false;\r\n this.orgService.emitMessage({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You added ${this.newUser} to the organization without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n this.newUser = \"\";\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n deleteUserModal(event: Event, userId: string, userName: string) {\r\n this.confirmationService.confirm({\r\n target: event.target as EventTarget,\r\n message: `Do you want to delete ${userName} from this organization?`,\r\n header: 'Delete User',\r\n icon: 'pi pi-info-circle',\r\n rejectLabel: 'Cancel',\r\n rejectButtonProps: {\r\n label: 'Cancel',\r\n severity: 'secondary',\r\n },\r\n acceptButtonProps: {\r\n label: 'Delete',\r\n severity: 'primary',\r\n },\r\n\r\n accept: () => {\r\n this.deleteUser(userId, userName);\r\n },\r\n reject: () => {\r\n },\r\n });\r\n }\r\n\r\n deleteDivisionModal(event: Event, division: string) {\r\n this.confirmationService.confirm({\r\n target: event.target as EventTarget,\r\n message: `Do you want to delete ${division} from this organization?`,\r\n header: 'Delete Division',\r\n icon: 'pi pi-info-circle',\r\n rejectLabel: 'Cancel',\r\n rejectButtonProps: {\r\n label: 'Cancel',\r\n severity: 'secondary',\r\n },\r\n acceptButtonProps: {\r\n label: 'Delete',\r\n severity: 'primary',\r\n },\r\n\r\n accept: () => {\r\n this.deleteDivision(division);\r\n },\r\n reject: () => {\r\n },\r\n });\r\n }\r\n\r\n deleteOrganizationModal(event: Event) {\r\n this.confirmationService.confirm({\r\n target: event.target as EventTarget,\r\n message: `Do you want to delete this organization?`,\r\n header: 'Delete Organization',\r\n icon: 'pi pi-info-circle',\r\n rejectLabel: 'Cancel',\r\n rejectButtonProps: {\r\n label: 'Cancel',\r\n severity: 'secondary',\r\n },\r\n acceptButtonProps: {\r\n label: 'Delete',\r\n severity: 'primary',\r\n },\r\n\r\n accept: () => {\r\n this.deleteOrganization()\r\n },\r\n reject: () => {\r\n },\r\n });\r\n }\r\n\r\n deleteOrganization() {\r\n let isSuccess = true;\r\n this.orgService.deleteOrganization(this.organization._id, this.users.map(user => user._id)).pipe(\r\n catchError(error => {\r\n isSuccess = false;\r\n this.orgService.emitMessage({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.orgService.emitMessage({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You deleted ${this.organization.name} without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n}","<p-confirmdialog />\r\n\r\n<div class=\"mt-4\" *ngIf=\"inplaceIndicator; else AdminContent\">\r\n <p-accordion [value]=\"[]\" [multiple]=\"true\" class=\"custom-acordion\">\r\n <p-accordion-panel value=\"0\">\r\n <p-accordion-header>Description</p-accordion-header>\r\n <p-accordion-content>\r\n <organization-form [organization]=\"organization\" [descriptionError]=\"descriptionError\" (formChange)=\"updateDescription($event)\"></organization-form>\r\n </p-accordion-content>\r\n </p-accordion-panel>\r\n \r\n <p-accordion-panel value=\"1\">\r\n <p-accordion-header>Users</p-accordion-header>\r\n <p-accordion-content>\r\n <div class=\"flex flex-wrap my-3 justify-content-center align-items-center gap-4\">\r\n <p-floatlabel variant=\"on\" [class]=\"userError ? 'custom-floatlabel error-floatlabel' : 'custom-floatlabel'\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-envelope\" />\r\n <input pInputText id=\"nDivision\" autocomplete=\"off\" class=\"w-full max-w-25rem\" [class]=\"userError ? 'custom-input error-input' : 'custom-input'\" \r\n [(ngModel)]=\"newUser\" (ngModelChange)=\"userError = false;\"/>\r\n </p-iconfield>\r\n <label for=\"nDivision\">User Email</label>\r\n </p-floatlabel>\r\n <p-button class=\"custom-button\" label=\"Add User\" size=\"small\" [disabled]=\"!newUser\" (onClick)=\"addUserToOrganization()\"/>\r\n </div>\r\n <p-table [value]=\"users\" [paginator]=\"true\" [rows]=\"5\" class=\"custom-table\">\r\n <ng-template #header>\r\n <tr>\r\n <th>Email</th>\r\n <th>Name</th>\r\n <th>Admin</th>\r\n <th style=\"width: 5rem\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template #body let-user>\r\n <tr >\r\n <td>{{ user.email }}</td>\r\n <td>{{ user.name }}</td>\r\n <td>\r\n <p-toggleswitch class=\"custom-toogle\" [(ngModel)]=\"user.isAdmin\" (onChange)=\"switchAdminStateModal($event ,user._id, user.name, $event.checked)\"/>\r\n </td>\r\n <td>\r\n <p-button class=\"flex trash-button\" variant=\"text\" rounded=\"true\" size=\"large\" icon=\"pi pi-trash\" [disabled]=\"isCurrentUser(user._id)\" (onClick)=\"deleteUserModal($event, user._id, user.name)\"/>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-accordion-content>\r\n </p-accordion-panel>\r\n \r\n <p-accordion-panel value=\"2\">\r\n <p-accordion-header>Divisions</p-accordion-header>\r\n <p-accordion-content>\r\n <div class=\"flex flex-wrap my-3 justify-content-center align-items-center gap-4\">\r\n <p-floatlabel variant=\"on\" [class]=\"divisionError ? 'custom-floatlabel error-floatlabel' : 'custom-floatlabel'\">\r\n <p-iconfield>\r\n <p-inputicon class=\"pi pi-pencil\" />\r\n <input pInputText id=\"nDivision\" autocomplete=\"off\" class=\"w-full max-w-25rem\" [class]=\"divisionError ? 'custom-input error-input' : 'custom-input'\" \r\n [(ngModel)]=\"newDivision\" (ngModelChange)=\"divisionError = false;\"/>\r\n </p-iconfield>\r\n <label for=\"nDivision\">New Division</label>\r\n </p-floatlabel>\r\n <p-button class=\"custom-button\" label=\"Add Division\" size=\"small\" [disabled]=\"!newDivision\" (onClick)=\"addDivision()\"/>\r\n </div>\r\n <p-table [value]=\"divisions\" [paginator]=\"true\" [rows]=\"5\" class=\"custom-table\">\r\n <ng-template #header>\r\n <tr>\r\n <th>Name</th>\r\n <th style=\"width: 5rem\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template #body let-division>\r\n <tr >\r\n <td>{{ division }}</td>\r\n <td>\r\n <p-button class=\"flex trash-button\" variant=\"text\" rounded=\"true\" size=\"large\" icon=\"pi pi-trash\" (onClick)=\"deleteDivisionModal($event, division)\"/>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-accordion-content>\r\n </p-accordion-panel>\r\n </p-accordion>\r\n \r\n <div class=\"flex justify-content-between align-items-center mt-4 gap-4\">\r\n <div class=\"custom-inplace-display\" (click)=\"inplaceIndicator = false\">Collapse</div>\r\n <p-button class=\"delete-button\" label=\"Delete Organization\" size=\"small\" (onClick)=\"deleteOrganizationModal($event)\"/>\r\n </div>\r\n</div>\r\n\r\n<ng-template #AdminContent>\r\n <p class=\"mb-0 custom-inplace-display\" (click)=\"inplaceIndicator = true\">Admin Content</p>\r\n</ng-template>","import { Component} from \"@angular/core\";\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { CardModule } from 'primeng/card';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { AccordionModule } from 'primeng/accordion';\r\nimport { SelectModule } from 'primeng/select';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { catchError, filter, finalize, map, Observable, of, Subscription, switchMap, take, tap } from \"rxjs\";\r\nimport { MessageService, ConfirmationService } from \"primeng/api\";\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { OrganizationService } from \"../../services/organization.service\";\r\nimport { UserService } from \"../../services/user.service\";\r\nimport { OrganizationAdminComponent } from \"../organizationAdmin/organizationAdmin.component\";\r\nimport { OrganizationFormComponent } from \"../organizationForm/organizationForm.component\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'organization-page',\r\n templateUrl: './organizationPage.component.html',\r\n styleUrls: ['./organizationPage.component.css'],\r\n imports: [ButtonModule, CommonModule, CardModule, ToastModule, SelectModule, FormsModule, OrganizationAdminComponent, TooltipModule, ConfirmDialogModule, AccordionModule, OrganizationFormComponent],\r\n providers: [MessageService, ConfirmationService]\r\n})\r\nexport class OrganizationPageComponent {\r\n\r\n userOrganizations$!: Observable<{_id: string, name: string, description: string, email:string, isAdmin: boolean}[]>;\r\n adminMessageSubscription!: Subscription;\r\n\r\n organizations$!: Observable<{_id: string, name: string}[]>;\r\n selectedOrganization: {_id: string, name: string} | undefined;\r\n\r\n duplicatedOrg: boolean = false;\r\n\r\n newOrganization: {_id: string, name: string, description: string, email:string, isAdmin: boolean} = {_id: \"\", name: \"\", description: \"\", email: \"\", isAdmin: true};\r\n newOrganizationError: boolean = false;\r\n newOrganizationAcordion = []\r\n\r\n userStateSubscription!: Subscription;\r\n\r\n constructor(private orgService: OrganizationService, private messageService: MessageService, private confirmationService: ConfirmationService, \r\n private userService: UserService, private router: Router) {}\r\n \r\n ngOnInit() {\r\n this.userOrganizations$ = this.orgService.getUserOrganizations();\r\n\r\n this.organizations$ = this.orgService.getOrganizations().pipe(\r\n take(1), \r\n map(orgs => {\r\n const organizations = orgs.map(org => ({\r\n _id: org._id,\r\n name: org.name.trim().charAt(0).toUpperCase() + org.name.trim().slice(1)\r\n }));\r\n return organizations.sort((a, b) => a.name.localeCompare(b.name));\r\n })\r\n );\r\n\r\n this.adminMessageSubscription = this.orgService.adminOrganizationMessages$.subscribe( message => this.messageService.add(message));\r\n this.userStateSubscription = this.userService.getUserState().subscribe( userState => {\r\n if (!userState?.logged) this.router.navigate([''])\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.adminMessageSubscription?.unsubscribe();\r\n this.userStateSubscription?.unsubscribe();\r\n }\r\n\r\n leaveOrganization(orgId: string, orgName: string) {\r\n let isSuccess = true;\r\n this.orgService.leaveOrganization(orgId).pipe(\r\n catchError((error) => {\r\n isSuccess = false;\r\n this.messageService.add({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.messageService.add({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You left ${orgName} without problems.`,\r\n life: 3000, \r\n closable: true \r\n }); \r\n }\r\n })\r\n ).subscribe();\r\n }\r\n\r\n private checkSelectedOrganization(): Observable<boolean> {\r\n if (!this.selectedOrganization) {\r\n return of(false);\r\n }\r\n\r\n return this.userOrganizations$.pipe(\r\n take(1),\r\n map(userOrgs =>\r\n userOrgs.some(o => o._id === this.selectedOrganization!._id)\r\n ),\r\n tap(isDuplicated => {\r\n if (isDuplicated) {\r\n this.messageService.add({\r\n severity: 'warn',\r\n summary: 'Warn',\r\n detail: 'You cannot join an organization to which you already belong.',\r\n life: 3000,\r\n closable: true,\r\n });\r\n this.duplicatedOrg = true;\r\n }\r\n }),\r\n map(isDuplicated => !isDuplicated)\r\n );\r\n }\r\n\r\n joinOrganization() {\r\n this.checkSelectedOrganization().pipe(\r\n filter(valid => valid),\r\n switchMap(() => {\r\n const orgId: string = this.selectedOrganization!._id;\r\n const orgName: string = this.selectedOrganization!.name;\r\n let isSuccess = true;\r\n return this.orgService.joinOrganization(orgId).pipe(\r\n catchError((error) => {\r\n isSuccess = false;\r\n this.messageService.add({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.messageService.add({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You joined ${orgName} without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n })\r\n )\r\n })\r\n ).subscribe();\r\n }\r\n\r\n updateDuplicatedOrg() {\r\n if (this.duplicatedOrg) this.duplicatedOrg = false;\r\n }\r\n\r\n copyEmail(email: string, name: string): void {\r\n navigator.clipboard.writeText(email);\r\n this.messageService.add({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You copied ${name} contact email without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n }\r\n\r\n deleteModal(event: Event, orgId: string, orgName: string) {\r\n this.confirmationService.confirm({\r\n target: event.target as EventTarget,\r\n message: 'Do you want to leave this organization?',\r\n header: 'Leave Organization',\r\n icon: 'pi pi-info-circle',\r\n rejectLabel: 'Cancel',\r\n rejectButtonProps: {\r\n label: 'Cancel',\r\n severity: 'secondary',\r\n },\r\n acceptButtonProps: {\r\n label: 'Delete',\r\n severity: 'primary',\r\n },\r\n\r\n accept: () => {\r\n this.leaveOrganization(orgId, orgName);\r\n },\r\n reject: () => {\r\n },\r\n });\r\n }\r\n\r\n createOrganization(createData: {name: string | null, description: string | null, contact: string | null}) {\r\n if (!createData.name?.trim() || !createData.description?.trim() || !createData.contact?.trim()) {\r\n this.messageService.add({ \r\n severity: 'warn', \r\n summary: 'Warn', \r\n detail: 'You cannot create an organization until you fill in all the fields.',\r\n life: 3000, \r\n closable: true,\r\n });\r\n this.newOrganizationError = true;\r\n return;\r\n }\r\n let isSuccess = true;\r\n this.orgService.createOrganization(createData.name, createData.description, createData.contact).pipe(\r\n catchError((error) => {\r\n isSuccess = false;\r\n this.messageService.add({ \r\n severity: 'error', \r\n summary: 'Error', \r\n detail: error.message ?? 'Something went wrong. Try again later or contact the administrator.', \r\n life: 3000, \r\n closable: true \r\n });\r\n this.newOrganizationError = true;\r\n return of(null);\r\n }),\r\n finalize(() => {\r\n if (isSuccess) {\r\n this.messageService.add({ \r\n severity: 'info', \r\n summary: 'Info', \r\n detail: `You created ${createData.name} without problems.`,\r\n life: 3000, \r\n closable: true \r\n });\r\n this.newOrganizationError = false;\r\n this.newOrganization = {_id: \"\", name: \"\", description: \"\", email: \"\", isAdmin: true};\r\n this.newOrganizationAcordion = []\r\n }\r\n })\r\n ).subscribe();\r\n }\r\n \r\n newOrganizationValidation(data: [string, string][]): boolean {\r\n return data.some(([first, second]) => first === second || first === \"\");\r\n }\r\n}","<p-toast class=\"custom-toast\" position=\"bottom-right\"/>\r\n<p-confirmdialog />\r\n<div class=\"flex flex-column align-items-stretch p-4\">\r\n <h2 class=\"mx-auto\">Your Organization(s) Details</h2>\r\n <p class=\"mx-auto\">You are part of {{(userOrganizations$ | async)?.length || 0}} organization(s). You can also create your own organization.</p>\r\n <div class=\"flex flex-wrap mb-4 align-items-center gap-4 justify-content-center w-full\">\r\n <p-select [options]=\"(organizations$ | async) || []\" [showClear]=\"true\" [(ngModel)]=\"selectedOrganization\" \r\n [optionLabel]=\"'name'\" placeholder=\"Select an Organization\" [ngClass]=\"duplicatedOrg ? 'invalid-select' : 'custom-select'\" \r\n (onChange)=\"updateDuplicatedOrg()\" class=\"w-full max-w-30rem\" [checkmark]=\"true\" panelStyleClass=\"max-w-30rem\" />\r\n <p-button class=\"custom-button\" label=\"Join Organization\" size=\"small\" (click)=\"joinOrganization()\" [disabled]=\"!selectedOrganization\"/>\r\n </div>\r\n <div class=\"flex flex-column gap-4\">\r\n <p-card class=\"custom-color-card flex justify-content-center\" styleClass=\"flex-auto\" [style]=\"{ 'max-width': '50rem', 'min-width': '20rem', height: 'auto'}\" *ngFor=\"let organization of userOrganizations$ | async; let i = index\">\r\n <ng-template #header>\r\n <div class=\"flex justify-content-between\" style=\"padding-left: 1.25rem; padding-right: 1.25rem; padding-top: 1.25rem;\">\r\n <div class=\"p-card-title\">{{organization.name}}</div>\r\n <div class=\"flex gap-1\">\r\n <p-button class=\"flex email-button\" variant=\"text\" rounded=\"true\" size=\"large\" icon=\"pi pi-envelope\" [disabled]=\"!organization.email\" \r\n (click)=\"copyEmail(organization.email, organization.name)\" pTooltip=\"{{organization.email}}\" tooltipPosition=\"top\"/>\r\n <p-button class=\"flex trash-button\" variant=\"text\" rounded=\"true\" size=\"large\" icon=\"pi pi-sign-out\"\r\n (click)=\"deleteModal($event, organization._id, organization.name)\"/>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <p class=\"m-0\">\r\n {{organization.description}}\r\n </p>\r\n <div *ngIf=\"organization.isAdmin\">\r\n <organization-admin [organization]=\"organization\"></organization-admin>\r\n </div>\r\n </p-card>\r\n <p-card class=\"custom-color-card flex justify-content-center\" styleClass=\"flex-auto plus-card\" [style]=\"{ 'max-width': '50rem', 'min-width': '20rem', height: 'auto'}\">\r\n <ng-template #content>\r\n <p-accordion [value]=\"newOrganizationAcordion\" [multiple]=\"true\" class=\"custom-acordion\" [expandIcon]=\"'pi pi-plus'\" [collapseIcon]=\"'pi pi-minus'\">\r\n <p-accordion-panel class=\"custom-accordionpanel\" value=\"0\">\r\n <p-accordion-header class=\"custom-accordionheader\">Create New Organization</p-accordion-header>\r\n <p-accordion-content>\r\n <div class=\"pt-4\">\r\n <organization-form [organization]=\"newOrganization\" [descriptionError]=\"newOrganizationError\" [buttonLabel]=\"'Create Organization'\" [validationFunction]=\"newOrganizationValidation\" (formChange)=\"createOrganization($event)\"></organization-form>\r\n </div>\r\n </p-accordion-content>\r\n </p-accordion-panel>\r\n </p-accordion>\r\n </ng-template>\r\n </p-card>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport {ChangeDetectorRef, Component, ElementRef, Input, ViewChild} from '@angular/core';\r\nimport { TagModule } from 'primeng/tag';\r\nimport { debounceTime, fromEvent, Subscription } from 'rxjs';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { Tag } from '../../model/tag';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'skill-tags',\r\n templateUrl: './skillTags.component.html',\r\n styleUrls: ['./skillTags.component.css'],\r\n imports: [CommonModule, TagModule, TooltipModule],\r\n})\r\nexport class SkillTagComponent {\r\n @Input() tags: Tag[] = [];\r\n @Input() direction: Direction = 'original';\r\n @Input() compactBoKTags: boolean = true;\r\n @Input() compactThreshold: number = 400;\r\n overflowTags: boolean = false;\r\n\r\n @ViewChild('bokDiv', { static: false }) bokDiv!: ElementRef<HTMLDivElement>;\r\n\r\n resizeObserver!: ResizeObserver;\r\n\r\n constructor(private cd: ChangeDetectorRef) {}\r\n\r\n ngAfterViewInit() {\r\n this.resizeObserver = new ResizeObserver(() => this.checkOverflow());\r\n this.resizeObserver.observe(this.bokDiv.nativeElement);\r\n this.checkOverflow();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.resizeObserver?.disconnect();\r\n }\r\n\r\n checkOverflow() {\r\n if (!this.compactBoKTags) return;\r\n\r\n const elWidth = this.bokDiv.nativeElement.offsetWidth;\r\n let isOverflowing = elWidth < this.compactThreshold;\r\n\r\n if (this.overflowTags !== isOverflowing) {\r\n this.overflowTags = isOverflowing;\r\n this.cd.detectChanges();\r\n }\r\n }\r\n\r\n getBokColor(color: string): string {\r\n return this.convertHexToRgba(color, 0.5);\r\n }\r\n\r\n getTooltipClass(tag: Tag): string {\r\n return tag.tooltip == 'Unknown Concept' ? 'custom-p-tooltip-text' : '';\r\n }\r\n\r\n onClickConcept(code: string) {\r\n window.open('https://bok.eo4geo.eu/' + code);\r\n }\r\n\r\n getStyleClass() {\r\n switch(this.direction){\r\n case 'original':\r\n return 'flex flex-wrap gap-2';\r\n case 'center':\r\n return 'flex flex-wrap gap-2 align-items-center justify-content-center';\r\n case 'reverse':\r\n return 'flex flex-wrap gap-2 flex-row-reverse';\r\n case 'homepage':\r\n return 'flex flex-wrap gap-3 align-items-center justify-content-center';\r\n }\r\n }\r\n\r\n private convertHexToRgba(hex: string, alpha: number): string {\r\n hex = hex.replace('#', '');\r\n const r = parseInt(hex.substring(0, 2), 16);\r\n const g = parseInt(hex.substring(2, 4), 16);\r\n const b = parseInt(hex.substring(4, 6), 16);\r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\r\n }\r\n}\r\n\r\nexport type Direction = 'original' | 'center' | 'reverse' | 'homepage';","<div #bokDiv [class]=\"getStyleClass()\">\r\n <ng-content *ngFor=\"let tag of tags\">\r\n <p-tag *ngIf=\"tag.variant != 'bok' else bokTag\" \r\n [class]=\"tag.variant == 'secondary' ? 'secondary-tag' : 'primary-tag'\" \r\n [rounded]=\"true\" \r\n [value]=\"tag.label\"\r\n />\r\n <ng-template #bokTag>\r\n <div \r\n [pTooltip]=\"overflowTags ? tag.tooltip : undefined\" \r\n tooltipPosition=\"top\" \r\n [tooltipStyleClass]=\"getTooltipClass(tag)\"\r\n >\r\n <p-tag \r\n class=\"bok-tag\" \r\n [style.backgroundColor]=\"tag.color ? getBokColor(tag.color) : ''\" \r\n [rounded]=\"true\" \r\n (click)=\"onClickConcept(tag.label)\" \r\n [value]=\"overflowTags ? tag.label : '[' + tag.label + '] ' + tag.tooltip\"\r\n />\r\n </div>\r\n </ng-template>\r\n </ng-content>\r\n</div>","export class Tag {\r\n label: string = '';\r\n variant?: Variant = 'primary';\r\n tooltip:string = '';\r\n color?: string = '';\r\n\r\n constructor(label: string, variant?: Variant, tooltip?: string, color?: string) {\r\n this.label = label;\r\n if(variant) this.variant = variant;\r\n if(tooltip) this.tooltip = tooltip;\r\n if(color) this.color = color;\r\n }\r\n}\r\n\r\nexport type Variant = 'primary' | 'secondary' | 'bok';","import { CanMatchFn } from '@angular/router';\r\nimport { inject } from '@angular/core';\r\nimport { UserService } from '../services/user.service';\r\nimport { filter, map, take } from 'rxjs';\r\n\r\nexport const AuthGuard: CanMatchFn = () => {\r\n const userService = inject(UserService);\r\n return userService.getUserState().pipe(\r\n filter(value => value !== undefined),\r\n take(1),\r\n map(user => user?.logged)\r\n );\r\n};","import { Injectable } from \"@angular/core\";\r\nimport { BehaviorSubject, Subject } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ExitWithoutSavingService {\r\n exitSubject: Subject<boolean> = new Subject();\r\n showModalSubject: Subject<boolean> = new Subject();\r\n bypassGuard: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n}","import { Component, inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanDeactivateFn, RouterStateSnapshot } from '@angular/router';\r\nimport { ExitWithoutSavingService } from '../services/exitWithoutSaving.service';\r\n\r\nexport const exitWithoutSavingGuard: CanDeactivateFn<Component> = (component: Component, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot) => {\r\n const exitWithoutSavingService = inject(ExitWithoutSavingService);\r\n if (exitWithoutSavingService.bypassGuard.getValue()) {\r\n exitWithoutSavingService.bypassGuard.next(false);\r\n return true;\r\n }\r\n exitWithoutSavingService.showModalSubject.next(true);\r\n return exitWithoutSavingService.exitSubject.asObservable();\r\n};","import { Injectable } from '@angular/core';\r\nimport { UserService } from './user.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthService {\r\n\r\n constructor(private readonly userService: UserService) {}\r\n\r\n public getUserState() {\r\n return this.userService.getUserState()\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ngx-bok-utils\r\n */\r\n\r\nexport * from './lib/components/footer/footer.component';\r\nexport * from './lib/components/header/header.component';\r\nexport * from './lib/components/404/notFoundPage.component';\r\nexport * from './lib/components/userPage/userPage.component';\r\nexport * from './lib/components/organizationPage/organizationPage.component';\r\nexport * from './lib/components/skillTags/skillTags.component';\r\nexport * from './lib/model/tag';\r\nexport * from './lib/guards/auth.guard';\r\nexport * from './lib/guards/exitWithoutSaving.guard';\r\nexport * from './lib/services/exitWithoutSaving.service';\r\nexport * from './lib/services/auth.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1.UserService","i3","i4","i5","i6","i1","i7","i9","i8","i1.OrganizationService","i2.UserService","i10","i11","i12","i13","i3.UserService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eo4geo/ngx-bok-utils",
3
- "version": "1.6.13",
3
+ "version": "1.7.0",
4
4
  "author": "Marc Pardo Fernández",
5
5
  "license": "MIT",
6
6
  "peerDependencies": {