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