{"version":3,"file":"idea-ionic-teams.mjs","sources":["../../../modules/teams/src/account/account.page.ts","../../../modules/teams/src/account/account.routes.ts","../../../modules/teams/src/attachments/attachments.component.ts","../../../modules/teams/src/attachments/attachments.component.html","../../../modules/teams/src/resourceCenter/RCConfigurator.component.ts","../../../modules/teams/src/resourceCenter/RCResources.component.ts","../../../modules/teams/src/resourceCenter/RCFolders.component.ts","../../../modules/teams/src/resourceCenter/RCPicker.component.ts","../../../modules/teams/src/teams/teams.page.ts","../../../modules/teams/src/teams/teams.routes.ts","../../../modules/teams/idea-ionic-teams.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  AlertController,\n  NavController,\n  IonList,\n  IonHeader,\n  IonToolbar,\n  IonButtons,\n  IonButton,\n  IonIcon,\n  IonTitle,\n  IonContent,\n  IonItem,\n  IonInput,\n  IonListHeader,\n  IonBadge,\n  IonLabel\n} from '@ionic/angular/standalone';\nimport { User } from 'idea-toolbox';\nimport {\n  IDEAEnvironment,\n  IDEALoadingService,\n  IDEAMessageService,\n  IDEATranslatePipe,\n  IDEATranslationsService\n} from '@idea-ionic/common';\nimport { IDEATinCanService, IDEAAWSAPIService } from '@idea-ionic/uncommon';\n\n@Component({\n  selector: 'account',\n  imports: [\n    CommonModule,\n    FormsModule,\n    IDEATranslatePipe,\n    IonLabel,\n    IonBadge,\n    IonListHeader,\n    IonInput,\n    IonItem,\n    IonContent,\n    IonTitle,\n    IonIcon,\n    IonButton,\n    IonButtons,\n    IonToolbar,\n    IonHeader,\n    IonList\n  ],\n  template: `\n    <ion-header>\n      <ion-toolbar color=\"ideaToolbar\">\n        <ion-buttons slot=\"start\">\n          <ion-button testId=\"closeButton\" [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n            <ion-icon name=\"arrow-back\" slot=\"icon-only\" />\n          </ion-button>\n        </ion-buttons>\n        <ion-title>{{ 'IDEA_TEAMS.ACCOUNT.ACCOUNT' | translate }}</ion-title>\n      </ion-toolbar>\n    </ion-header>\n    <ion-content class=\"ion-padding\">\n      <ion-list lines=\"full\" class=\"account\">\n        <ion-item>\n          <ion-input\n            testId=\"account.email\"\n            type=\"text\"\n            readonly=\"true\"\n            labelPlacement=\"stacked\"\n            [label]=\"'IDEA_TEAMS.ACCOUNT.EMAIL' | translate\"\n            [(ngModel)]=\"newEmail\"\n          />\n          <ion-button\n            testId=\"setNewEmailButton\"\n            slot=\"end\"\n            fill=\"clear\"\n            class=\"marginTop\"\n            [title]=\"'IDEA_TEAMS.ACCOUNT.SET_A_NEW_EMAIL' | translate\"\n            (click)=\"updateEmail()\"\n          >\n            <ion-icon name=\"pencil\" slot=\"icon-only\" />\n          </ion-button>\n        </ion-item>\n        <ion-item>\n          <ion-input\n            testId=\"account.password\"\n            type=\"text\"\n            readonly=\"true\"\n            value=\"********\"\n            labelPlacement=\"stacked\"\n            [label]=\"'IDEA_TEAMS.ACCOUNT.PASSWORD' | translate\"\n          />\n          <ion-button\n            testId=\"setNewPasswordButton\"\n            slot=\"end\"\n            fill=\"clear\"\n            class=\"marginTop\"\n            [title]=\"'IDEA_TEAMS.ACCOUNT.SET_A_NEW_PASSWORD' | translate\"\n            (click)=\"updatePassword()\"\n          >\n            <ion-icon name=\"pencil\" slot=\"icon-only\" />\n          </ion-button>\n        </ion-item>\n        <ion-list-header class=\"disruptive\">\n          <ion-badge color=\"danger\">\n            <ion-icon name=\"nuclear\" /> {{ 'IDEA_TEAMS.ACCOUNT.DISRUPTIVE_ACTIONS' | translate }}\n          </ion-badge>\n        </ion-list-header>\n        <ion-item>\n          <ion-label class=\"ion-text-wrap\">\n            {{ 'IDEA_TEAMS.ACCOUNT.USER_DELETION' | translate }}\n            <p>\n              {{ 'IDEA_TEAMS.ACCOUNT.IRREVERSIBLE_OPERATION' | translate }}\n              <br />\n              <i>{{ 'IDEA_TEAMS.ACCOUNT.YOU_MUST_LEAVE_ALL_TEAMS_FIRST' | translate }}</i>\n            </p>\n          </ion-label>\n          <ion-button\n            testId=\"deleteUserButton\"\n            slot=\"end\"\n            color=\"danger\"\n            [title]=\"'IDEA_TEAMS.ACCOUNT.DELETE_PERMANENTLY_USER' | translate\"\n            (click)=\"deleteUser()\"\n          >\n            {{ 'IDEA_TEAMS.ACCOUNT.DELETE' | translate }}\n          </ion-button>\n        </ion-item>\n      </ion-list>\n    </ion-content>\n  `,\n  styles: [\n    `\n      .account {\n        max-width: 500px;\n        margin: 0 auto;\n        background: transparent;\n        ion-item {\n          --background: var(--ion-color-white);\n          --border-color: var(--ion-color-light);\n        }\n      }\n      .disruptive {\n        margin-top: 50px;\n        padding-left: 0;\n      }\n      .marginTop {\n        margin-top: 14px;\n      }\n    `\n  ]\n})\nexport class IDEAAccountPage implements OnInit {\n  protected _env = inject(IDEAEnvironment);\n  private _tc = inject(IDEATinCanService);\n  private _nav = inject(NavController);\n  private _alert = inject(AlertController);\n  private _loading = inject(IDEALoadingService);\n  private _message = inject(IDEAMessageService);\n  private _API = inject(IDEAAWSAPIService);\n  private _translate = inject(IDEATranslationsService);\n\n  user: User;\n  newEmail: string;\n  newPassword: string;\n  newPasswordConfirm: string;\n\n  ngOnInit(): void {\n    this.user = new User(this._tc.get('user'));\n    this.newEmail = this.user.email;\n  }\n\n  async updateEmail(): Promise<void> {\n    const doUpdate = async ({ pwd, email }: any): Promise<void> => {\n      if (!email) return this._message.info('IDEA_TEAMS.ACCOUNT.INVALID_EMAIL');\n      try {\n        await this._loading.show();\n        const body = { password: pwd, newEmail: email, project: this._env.idea.project };\n        await this._API.postResource('emailChangeRequests', { idea: true, body });\n        const alert = await this._alert.create({\n          header: this._translate._('COMMON.OPERATION_COMPLETED'),\n          subHeader: this._translate._('IDEA_TEAMS.ACCOUNT.UPDATE_EMAIL_FLOW_EXPLANATION'),\n          buttons: [this._translate._('COMMON.GOT_IT')]\n        });\n        alert.present();\n      } catch (error) {\n        this._message.error('IDEA_TEAMS.ACCOUNT.OPERATION_FAILED_PASSWORD');\n      } finally {\n        this._loading.hide();\n      }\n    };\n\n    const header = this._translate._('IDEA_TEAMS.ACCOUNT.UPDATE_EMAIL');\n    const subHeader = this._translate._('IDEA_TEAMS.ACCOUNT.UPDATE_EMAIL_EXPLANATION');\n    const inputs: any[] = [\n      { name: 'pwd', type: 'password', placeholder: this._translate._('IDEA_TEAMS.ACCOUNT.YOUR_CURRENT_PASSWORD') },\n      { name: 'email', placeholder: this._translate._('IDEA_TEAMS.ACCOUNT.NEW_EMAIL') }\n    ];\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.CONFIRM'), handler: doUpdate }\n    ];\n    const alert = await this._alert.create({ header, subHeader, inputs, buttons });\n    alert.present();\n  }\n  async updatePassword(): Promise<void> {\n    const doUpdate = async ({ old, newP, new2 }: any): Promise<void> => {\n      if (newP.length < 8)\n        this._message.warning(this._translate._('IDEA_TEAMS.ACCOUNT.INVALID_PASSWORD', { n: 8 }), true);\n      else if (newP !== new2) this._message.warning('IDEA_TEAMS.ACCOUNT.PASSWORD_CONFIRMATION_DONT_MATCH');\n      else {\n        try {\n          await this._loading.show();\n          const body = { action: 'UPDATE_PASSWORD', password: old, newPassword: newP };\n          await this._API.patchResource('users', { idea: true, resourceId: this.user.userId, body });\n          this._message.success('IDEA_TEAMS.ACCOUNT.PASSWORD_UPDATED');\n        } catch (error) {\n          this._message.error('IDEA_TEAMS.ACCOUNT.OPERATION_FAILED_PASSWORD');\n        } finally {\n          this._loading.hide();\n        }\n      }\n    };\n\n    const header = this._translate._('IDEA_TEAMS.ACCOUNT.UPDATE_PASSWORD');\n    const inputs: any[] = [\n      { name: 'old', type: 'password', placeholder: this._translate._('IDEA_TEAMS.ACCOUNT.YOUR_CURRENT_PASSWORD') },\n      { name: 'newP', type: 'password', placeholder: this._translate._('IDEA_TEAMS.ACCOUNT.NEW_PASSWORD_', { n: 8 }) },\n      { name: 'new2', type: 'password', placeholder: this._translate._('IDEA_TEAMS.ACCOUNT.CONFIRM_NEW_PASSWORD') }\n    ];\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.CONFIRM'), handler: doUpdate }\n    ];\n    const alert = await this._alert.create({ header, inputs, buttons });\n    alert.present();\n  }\n\n  async deleteUser(): Promise<void> {\n    const doDelete = async ({ pwd }: any): Promise<void> => {\n      try {\n        await this._loading.show();\n        await this._API.deleteResource('users', {\n          idea: true,\n          resourceId: this.user.userId,\n          headers: { password: pwd }\n        });\n        window.location.assign('');\n      } catch (error) {\n        this._message.error('COMMON.OPERATION_FAILED');\n      } finally {\n        this._loading.hide();\n      }\n    };\n\n    const header = this._translate._('IDEA_TEAMS.ACCOUNT.USER_DELETION');\n    const subHeader = this._translate._('IDEA_TEAMS.ACCOUNT.USER_DELETION_ARE_YOU_SURE');\n    const inputs: any[] = [\n      { name: 'pwd', type: 'password', placeholder: this._translate._('IDEA_TEAMS.ACCOUNT.YOUR_CURRENT_PASSWORD') }\n    ];\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.CONFIRM'), handler: doDelete }\n    ];\n    const alert = await this._alert.create({ header, subHeader, inputs, buttons });\n    alert.present();\n  }\n\n  close(errorMessage?: string): void {\n    if (errorMessage) this._message.error(errorMessage);\n    try {\n      this._nav.back();\n    } catch (_) {\n      this._nav.navigateRoot(['']);\n    }\n  }\n}\n","import { Routes } from '@angular/router';\n\nimport { IDEAAccountPage } from './account.page';\n\nexport const ideaAccountRoutes: Routes = [{ path: '', component: IDEAAccountPage }];\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Input, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Platform, IonItem, IonButton, IonIcon, IonInput, IonLabel, IonSpinner } from '@ionic/angular/standalone';\nimport { Browser } from '@capacitor/browser';\nimport { Camera, CameraResultType, CameraSource } from '@capacitor/camera';\nimport heic2any from 'heic2any';\nimport { Attachment } from 'idea-toolbox';\nimport { IDEALoadingService, IDEAMessageService, IDEATranslatePipe, IDEATranslationsService } from '@idea-ionic/common';\nimport { IDEAAWSAPIService, IDEAOfflineService, IDEATinCanService } from '@idea-ionic/uncommon';\n\n@Component({\n  selector: 'idea-attachments',\n  imports: [CommonModule, FormsModule, IDEATranslatePipe, IonSpinner, IonLabel, IonInput, IonIcon, IonButton, IonItem],\n  templateUrl: 'attachments.component.html',\n  styleUrls: ['attachments.component.scss']\n})\nexport class IDEAttachmentsComponent implements OnInit {\n  private _platform = inject(Platform);\n  private _loading = inject(IDEALoadingService);\n  private _message = inject(IDEAMessageService);\n  private _tc = inject(IDEATinCanService);\n  private _api = inject(IDEAAWSAPIService);\n  _offline = inject(IDEAOfflineService);\n  _translate = inject(IDEATranslationsService);\n\n  /**\n   * The team from which we want to load the resources. Default: try to guess current team.\n   */\n  @Input() team: string | null = null;\n  /**\n   * The path to the online API resource, as an array. Don't include the team. E.g. `['entities', entityId]`.\n   */\n  @Input() pathResource: string[] = [];\n  /**\n   * The array in which we want to add/remove attachments.\n   */\n  @Input() attachments: Attachment[] | null = null;\n  /**\n   * Regulate the mode (view/edit).\n   */\n  @Input() editMode = false;\n  /**\n   * Show errors as reported from the parent component.\n   */\n  @Input() errors = new Set<string>();\n  /**\n   * The lines attribute of the item.\n   */\n  @Input() lines = 'none';\n\n  /**\n   * URL towards to make API requests, based on the path of the resource.\n   */\n  requestURL: string;\n  /**\n   * Stack of errors from the last upload.\n   */\n  uploadErrors: string[] = [];\n\n  ngOnInit(): void {\n    // if the team isn't specified, try to guess it in the usual IDEA's paths\n    this.team = this.team || this._tc.get('membership').teamId || this._tc.get('teamId');\n    this.requestURL = `teams/${this.team}/`;\n    if (this.pathResource && this.pathResource.length)\n      this.requestURL = this.requestURL.concat(this.pathResource.filter(x => x).join('/'));\n  }\n\n  isCapacitor(): boolean {\n    return this._platform.is('capacitor');\n  }\n\n  hasFieldAnError(field: string): boolean {\n    return this.errors.has(field);\n  }\n\n  browseFiles(): void {\n    document.getElementById('attachmentPicker').click();\n  }\n  addAttachmentFromFile(ev: any): void {\n    this.uploadErrors = new Array<string>();\n    const files: FileList = ev.target ? ev.target.files : {};\n    for (let i = 0; i < files.length; i++) {\n      const file = files.item(i);\n      const fullName = file.name.split('.');\n      const format = fullName.pop();\n      const name = fullName.join('.');\n      this.addAttachment(name, format, file);\n    }\n  }\n  async takePictureAndAttach(ev: Event): Promise<void> {\n    if (ev) ev.stopPropagation();\n    if (!this._platform.is('capacitor') || !Camera) return;\n    const image = await Camera.getPhoto({\n      quality: 90,\n      allowEditing: false,\n      source: CameraSource.Camera,\n      resultType: CameraResultType.Base64\n    });\n    const filename = new Date().toISOString();\n    const content = this.base64toBlob(image.base64String, 'image/jpeg');\n    this.addAttachment(filename, image.format, content);\n  }\n  private base64toBlob(base64str: string, type: string): Blob {\n    const binary = atob(base64str);\n    const array = [];\n    for (let i = 0; i < binary.length; i++) array.push(binary.charCodeAt(i));\n    return new Blob([new Uint8Array(array)], { type });\n  }\n  private async addAttachment(name: string, format: string, content: any): Promise<void> {\n    if (format === FileFormatTypes.HEIC) {\n      format = FileFormatTypes.JPEG;\n      content = await heic2any({ blob: content, toType: 'image/jpeg' });\n    }\n    const attachment = new Attachment({ name, format });\n    this.attachments.push(attachment);\n    try {\n      const signedURL = await this._api.patchResource(this.requestURL, {\n        body: { action: 'ATTACHMENTS_PUT', attachmentId: attachment.attachmentId }\n      });\n      await this._api.rawRequest().put(signedURL.url, content).toPromise();\n      attachment.attachmentId = signedURL.id;\n    } catch (error) {\n      this.uploadErrors.push(name);\n      this.removeAttachment(attachment);\n      this._message.error('IDEA_TEAMS.ATTACHMENTS.ERROR_UPLOADING_ATTACHMENT');\n    }\n  }\n\n  removeAttachment(attachment: Attachment): void {\n    const index = this.attachments.indexOf(attachment);\n    if (index !== -1) this.attachments.splice(index, 1);\n  }\n\n  async openAttachment(attachment: Attachment): Promise<void> {\n    try {\n      await this._loading.show();\n      const { url } = await this._api.patchResource(this.requestURL, {\n        body: { action: 'ATTACHMENTS_GET', attachmentId: attachment.attachmentId }\n      });\n      await Browser.open({ url });\n    } catch (error) {\n      this._message.error('IDEA_TEAMS.ATTACHMENTS.ERROR_OPENING_ATTACHMENT');\n    } finally {\n      this._loading.hide();\n    }\n  }\n\n  getFormatIcon(format: string): string {\n    switch (format) {\n      case FileFormatTypes.JPG:\n      case FileFormatTypes.JPEG:\n      case FileFormatTypes.PNG:\n        return 'image';\n      case FileFormatTypes.PDF:\n        return 'document';\n      default:\n        return 'help';\n    }\n  }\n}\n\n/**\n * The possibile file types (formats).\n */\nenum FileFormatTypes {\n  JPG = 'jpg',\n  JPEG = 'jpeg',\n  PNG = 'png',\n  PDF = 'pdf',\n  HEIC = 'heic'\n}\n","@for (att of attachments; track att; let index = $index; let odd = $odd) {\n  <ion-item\n    class=\"attachments\"\n    [class.fieldHasError]=\"hasFieldAnError('attachments[' + index + '].attachmentId')\"\n    [class.odd]=\"odd\"\n    [lines]=\"lines\"\n  >\n    @if (att.attachmentId && _offline.isOnline()) {\n      <ion-button fill=\"clear\" size=\"small\" slot=\"start\" (click)=\"openAttachment(att)\">\n        <ion-icon name=\"open-outline\" slot=\"icon-only\" size=\"small\" />\n      </ion-button>\n    }\n    @if (!editMode && att.attachmentId) {\n      <ion-icon slot=\"start\" color=\"medium\" [name]=\"getFormatIcon(att.format)\" [title]=\"att.format\" />\n    }\n    @if (editMode && att.attachmentId) {\n      <ion-input\n        [(ngModel)]=\"att.name\"\n        (ionBlur)=\"$event.target.value = $event.target.value || _translate._('IDEA_TEAMS.ATTACHMENTS.NO_NAME')\"\n      />\n    }\n    @if (editMode && !att.attachmentId) {\n      <ion-label class=\"loadingWarning\">\n        {{ 'IDEA_TEAMS.ATTACHMENTS.UPLOADING_ATTACHMENT_WARNING' | translate }}\n      </ion-label>\n    }\n    @if (!editMode) {\n      <ion-label>{{ att.name }}.{{ att.format }}</ion-label>\n    }\n    @if (!att.attachmentId) {\n      <ion-spinner slot=\"end\" [title]=\"'IDEA_TEAMS.ATTACHMENTS.UPLOADING' | translate\" />\n    }\n    @if (editMode) {\n      <ion-button\n        slot=\"end\"\n        color=\"danger\"\n        fill=\"clear\"\n        [title]=\"'IDEA_TEAMS.ATTACHMENTS.REMOVE_ATTACHMENT' | translate\"\n        (click)=\"removeAttachment(att)\"\n      >\n        <ion-icon name=\"remove\" slot=\"icon-only\" />\n      </ion-button>\n    }\n  </ion-item>\n}\n<!----->\n@if (!editMode && !attachments?.length) {\n  <ion-item lines=\"none\" class=\"noAttachments\">\n    <ion-label>\n      {{ 'IDEA_TEAMS.ATTACHMENTS.NO_ATTACHMENT' | translate }}\n    </ion-label>\n  </ion-item>\n}\n<!----->\n@if (editMode) {\n  <div>\n    @for (err of uploadErrors; track err) {\n      <ion-item class=\"attachments\" [lines]=\"lines\">\n        <ion-icon name=\"alert-circle\" slot=\"start\" color=\"danger\" />\n        <ion-label color=\"danger\">\n          {{ err }}\n          <p>{{ 'IDEA_TEAMS.ATTACHMENTS.ERROR_UPLOADING_ATTACHMENT' | translate }}</p>\n        </ion-label>\n        <ion-button\n          slot=\"end\"\n          color=\"danger\"\n          fill=\"clear\"\n          [title]=\"'IDEA_TEAMS.ATTACHMENTS.HIDE_ERROR' | translate\"\n          (click)=\"uploadErrors.splice(uploadErrors.indexOf(err), 1)\"\n        >\n          <ion-icon name=\"close\" slot=\"icon-only\" />\n        </ion-button>\n      </ion-item>\n    }\n  </div>\n}\n<!----->\n@if (editMode) {\n  <ion-item lines=\"none\" class=\"selectable\" (click)=\"browseFiles()\">\n    <ion-label color=\"medium\">{{ 'IDEA_TEAMS.ATTACHMENTS.TAP_TO_ADD_ATTACHMENT' | translate }}</ion-label>\n    <input id=\"attachmentPicker\" type=\"file\" multiple style=\"display: none\" (change)=\"addAttachmentFromFile($event)\" />\n    @if (editMode) {\n      <ion-icon slot=\"end\" name=\"caret-down\" class=\"selectIcon\" />\n    }\n    @if (editMode && isCapacitor()) {\n      <ion-button slot=\"end\" fill=\"clear\" color=\"dark\" (click)=\"takePictureAndAttach($event)\">\n        <ion-icon slot=\"icon-only\" name=\"camera\" />\n      </ion-button>\n    }\n  </ion-item>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, OnInit, inject } from '@angular/core';\nimport { RCConfiguredFolder, RCFolder, Suggestion } from 'idea-toolbox';\nimport { IDEAMessageService, IDEASelectComponent, IDEATranslatePipe } from '@idea-ionic/common';\nimport { IDEAAWSAPIService, IDEATinCanService } from '@idea-ionic/uncommon';\n\n@Component({\n  selector: 'idea-rc-configurator',\n  imports: [CommonModule, IDEATranslatePipe, IDEASelectComponent],\n  template: `\n    <idea-select\n      [data]=\"foldersSuggestions\"\n      [description]=\"folder?.name || 'IDEA_TEAMS.RESOURCE_CENTER.NO_FOLDER_SELECTED' | translate\"\n      [label]=\"label\"\n      [placeholder]=\"'IDEA_TEAMS.RESOURCE_CENTER.SELECT_FOLDER' | translate\"\n      [searchPlaceholder]=\"'IDEA_TEAMS.RESOURCE_CENTER.SELECT_FOLDER' | translate\"\n      [lines]=\"lines\"\n      [hideIdFromUI]=\"true\"\n      [disabled]=\"!editMode\"\n      [avoidAutoSelection]=\"true\"\n      [icon]=\"icon\"\n      [iconColor]=\"iconColor\"\n      (select)=\"$event ? setFolder($event?.value) : null\"\n      (iconSelect)=\"iconSelect.emit()\"\n    />\n  `\n})\nexport class IDEARCConfiguratorComponent implements OnInit {\n  private _message = inject(IDEAMessageService);\n  private _tc = inject(IDEATinCanService);\n  private _API = inject(IDEAAWSAPIService);\n\n  /**\n   * The team from which we want to load the resources. Default: try to guess current team.\n   */\n  @Input() team: string;\n  /**\n   * The folder we want to configure with the Resource Center folder.\n   */\n  @Input() folder: RCConfiguredFolder;\n  /**\n   * The label for the field.\n   */\n  @Input() label: string;\n  /**\n   * Regulate the mode (view/edit).\n   */\n  @Input() editMode: boolean;\n  /**\n   * The lines attribute of the item.\n   */\n  @Input() lines: string;\n  /**\n   * The icon for the field.\n   */\n  @Input() icon: string;\n  /**\n   * The color of the icon.\n   */\n  @Input() iconColor: string;\n  /**\n   * Icon select.\n   */\n  @Output() iconSelect = new EventEmitter<void>();\n\n  folders: RCFolder[];\n  foldersSuggestions: Suggestion[];\n\n  async ngOnInit(): Promise<void> {\n    // if the team isn't specified, try to guess it in the usual IDEA's paths\n    this.team = this.team || this._tc.get('membership').teamId || this._tc.get('teamId');\n    try {\n      const folders: RCFolder[] = await this._API.getResource(`teams/${this.team}/folders`);\n      this.folders = folders;\n      this.foldersSuggestions = folders.map(x => new Suggestion({ value: x.folderId, name: x.name }));\n    } catch (error) {\n      this._message.error('COMMON.COULDNT_LOAD_LIST');\n    }\n  }\n\n  setFolder(folderId?: string): void {\n    const folder = this.folders.find(f => f.folderId === folderId);\n    if (folder) {\n      this.folder.folderId = folderId;\n      this.folder.name = folder.name;\n    } else {\n      this.folder.folderId = null;\n      this.folder.name = null;\n    }\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ViewChild, Component, Input, OnInit, inject } from '@angular/core';\nimport {\n  IonInfiniteScroll,\n  AlertController,\n  ModalController,\n  IonRefresher,\n  IonSearchbar,\n  IonHeader,\n  IonToolbar,\n  IonButtons,\n  IonButton,\n  IonIcon,\n  IonContent,\n  IonRefresherContent,\n  IonList,\n  IonCard,\n  IonCardContent,\n  IonListHeader,\n  IonLabel,\n  IonItem,\n  IonSkeletonText,\n  IonNote,\n  IonInfiniteScrollContent\n} from '@ionic/angular/standalone';\nimport { Browser } from '@capacitor/browser';\nimport { loopStringEnumValues, RCFolder, RCResource, RCResourceFormats } from 'idea-toolbox';\nimport {\n  IDEALoadingService,\n  IDEAMessageService,\n  IDEATranslationsService,\n  IDEAActionSheetController,\n  IDEATranslatePipe,\n  IDEALocalizedDatePipe\n} from '@idea-ionic/common';\nimport { CacheModes, IDEAAWSAPIService, IDEAOfflineService, IDEATinCanService } from '@idea-ionic/uncommon';\n\nconst FILE_SIZE_LIMIT_MB = 10;\n\nconst MAX_PAGE_SIZE = 24;\n\n@Component({\n  selector: 'idea-rc-resources',\n  imports: [\n    CommonModule,\n    IDEATranslatePipe,\n    IDEALocalizedDatePipe,\n    IonSearchbar,\n    IonInfiniteScroll,\n    IonInfiniteScrollContent,\n    IonNote,\n    IonSkeletonText,\n    IonItem,\n    IonLabel,\n    IonListHeader,\n    IonCardContent,\n    IonCard,\n    IonList,\n    IonRefresher,\n    IonRefresherContent,\n    IonContent,\n    IonIcon,\n    IonButton,\n    IonButtons,\n    IonToolbar,\n    IonHeader\n  ],\n  template: `\n    <ion-header>\n      <ion-toolbar color=\"ideaToolbar\">\n        <ion-buttons slot=\"start\">\n          <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n            <ion-icon name=\"arrow-back\" slot=\"icon-only\" />\n          </ion-button>\n        </ion-buttons>\n        <ion-searchbar\n          #searchbar\n          [placeholder]=\"\n            'IDEA_TEAMS.RESOURCE_CENTER.SEARCH_FOR_RESOURCES_OF_FOLDER_' | translate: { folder: folder.name }\n          \"\n          (ionInput)=\"search($event.target ? $event.target.value : '')\"\n        />\n        <ion-buttons slot=\"end\">\n          @if (admin) {\n            <ion-button\n              [disabled]=\"_offline.isOffline()\"\n              [title]=\"'IDEA_TEAMS.RESOURCE_CENTER.UPLOAD_NEW_RESOURCES' | translate\"\n              (click)=\"browseUploadNewResource()\"\n            >\n              <ion-icon slot=\"icon-only\" name=\"cloud-upload\" />\n            </ion-button>\n          }\n          <input\n            id=\"newResourcePicker\"\n            type=\"file\"\n            accept=\".jpg,.jpeg,.png,.pdf\"\n            multiple\n            style=\"display: none\"\n            (change)=\"uploadNewResources($event)\"\n          />\n        </ion-buttons>\n      </ion-toolbar>\n    </ion-header>\n    <ion-content>\n      <ion-refresher slot=\"fixed\" (ionRefresh)=\"doRefresh($event.target)\">\n        <ion-refresher-content />\n      </ion-refresher>\n      <ion-list class=\"aList\">\n        @if (uploadErrors?.length) {\n          <ion-card color=\"danger\">\n            <ion-card-content>\n              <b>{{ 'IDEA_TEAMS.RESOURCE_CENTER.THE_FOLLOWING_FILES_FAILED_UPLOAD' | translate }}:</b>\n              <ul>\n                @for (err of uploadErrors; track err) {\n                  <li>{{ err }}</li>\n                }\n              </ul>\n            </ion-card-content>\n          </ion-card>\n        }\n        <ion-list-header>\n          <ion-label>\n            <h2>{{ folder.name }}</h2>\n          </ion-label>\n        </ion-list-header>\n        @if (!filteredResources) {\n          <ion-item>\n            <ion-label>\n              <ion-skeleton-text animated style=\"width: 50%\" />\n            </ion-label>\n          </ion-item>\n        }\n        @if (filteredResources && !filteredResources.length) {\n          <ion-item class=\"noElements\">\n            <ion-label>{{ 'COMMON.NO_ELEMENT_FOUND' | translate }}</ion-label>\n          </ion-item>\n        }\n        @for (r of filteredResources; track r) {\n          <ion-item>\n            <ion-button\n              slot=\"start\"\n              fill=\"clear\"\n              [title]=\"'IDEA_TEAMS.RESOURCE_CENTER.OPEN_RESOURCE' | translate\"\n              [disabled]=\"_offline.isOffline()\"\n              (click)=\"openResource(r)\"\n            >\n              <ion-icon name=\"open-outline\" slot=\"icon-only\" />\n            </ion-button>\n            <ion-icon slot=\"start\" color=\"medium\" [name]=\"getFormatIcon(r.format)\" [title]=\"r.format\" />\n            <ion-label>\n              {{ r.name }}\n              <p>\n                {{ 'IDEA_TEAMS.RESOURCE_CENTER.LASTLY_UPDATED_X_AGO' | translate: { time: (r.version | dateLocale) } }}\n              </p>\n            </ion-label>\n            <ion-note slot=\"end\">{{ r.format }}</ion-note>\n            @if (admin) {\n              <ion-button\n                color=\"medium\"\n                fill=\"clear\"\n                slot=\"end\"\n                [title]=\"'IDEA_TEAMS.RESOURCE_CENTER.ACTIONS_ON_THE_RESOURCE' | translate\"\n                [disabled]=\"_offline.isOffline()\"\n                (click)=\"actionsOnResource(r)\"\n              >\n                <ion-icon name=\"ellipsis-vertical\" slot=\"icon-only\" />\n              </ion-button>\n            }\n            <input\n              [id]=\"r.resourceId.concat('_picker')\"\n              type=\"file\"\n              accept=\".jpg,.jpeg,.png,.pdf\"\n              style=\"display: none\"\n              (change)=\"updateResource(r, $event)\"\n            />\n          </ion-item>\n        }\n        <ion-infinite-scroll (ionInfinite)=\"search(searchbar?.value, $event.target)\">\n          <ion-infinite-scroll-content />\n        </ion-infinite-scroll>\n      </ion-list>\n    </ion-content>\n  `\n})\nexport class IDEARCResourcesComponent implements OnInit {\n  private _tc = inject(IDEATinCanService);\n  private _modal = inject(ModalController);\n  private _alert = inject(AlertController);\n  private _actions = inject(IDEAActionSheetController);\n  private _loading = inject(IDEALoadingService);\n  private _message = inject(IDEAMessageService);\n  private _translate = inject(IDEATranslationsService);\n  private _API = inject(IDEAAWSAPIService);\n  _offline = inject(IDEAOfflineService);\n\n  /**\n   * The id of the team from which we want to load the resources. Default: try to guess current team.\n   */\n  @Input() teamId: string;\n  /**\n   * The Resource Center's folder of which to show the resources.\n   */\n  @Input() folder: RCFolder;\n  /**\n   * Whether the user has permissions to manage the resource center.\n   */\n  @Input() admin: boolean;\n\n  resources: RCResource[];\n  filteredResources: RCResource[];\n  currentPage: number;\n\n  @ViewChild('searchbar') searchbar: IonSearchbar;\n\n  uploadErrors: string[];\n\n  ngOnInit(): void {\n    // if the team isn't specified, try to guess it in the usual IDEA's paths\n    this.teamId = this.teamId || this._tc.get('membership').teamId || this._tc.get('teamId');\n    this.loadResources();\n  }\n\n  async loadResources(getFromNetwork?: boolean): Promise<void> {\n    try {\n      const useCache = getFromNetwork ? CacheModes.NETWORK_FIRST : CacheModes.CACHE_FIRST;\n      const resources: RCResource[] = await this._API.getResource(\n        `teams/${this.teamId}/folders/${this.folder.folderId}/resources`,\n        { useCache }\n      );\n      this.resources = resources.map(r => new RCResource(r));\n      this.search(this.searchbar ? this.searchbar.value : null);\n    } catch (error) {\n      this._message.error('IDEA_TEAMS.RESOURCE_CENTER.COULDNT_LOAD_LIST');\n    }\n  }\n\n  search(toSearch?: string, scrollToNextPage?: IonInfiniteScroll): void {\n    toSearch = toSearch ? toSearch.toLowerCase() : '';\n\n    this.filteredResources = (this.resources || [])\n      .filter(m =>\n        toSearch\n          .split(' ')\n          .every(searchTerm => [m.name, m.format].filter(f => f).some(f => f.toLowerCase().includes(searchTerm)))\n      )\n      .sort((a, b): number => a.name.localeCompare(b.name));\n\n    if (scrollToNextPage) this.currentPage++;\n    else this.currentPage = 0;\n    this.filteredResources = this.filteredResources.slice(0, (this.currentPage + 1) * MAX_PAGE_SIZE);\n\n    if (scrollToNextPage) setTimeout((): Promise<void> => scrollToNextPage.complete(), 100);\n  }\n  doRefresh(refresher?: IonRefresher): void {\n    this.filteredResources = null;\n    setTimeout((): void => {\n      this.loadResources(Boolean(refresher));\n      if (refresher) refresher.complete();\n    }, 500); // the timeout is needed\n  }\n\n  async openResource(resource: RCResource): Promise<void> {\n    try {\n      await this._loading.show();\n      const request = `teams/${this.teamId}/folders/${this.folder.folderId}/resources`;\n      const body = { action: 'GET_DOWNLOAD_URL' };\n      const { url } = await this._API.patchResource(request, { resourceId: resource.resourceId, body });\n      Browser.open({ url });\n    } catch (error) {\n      this._message.error('COMMON.OPERATION_FAILED');\n    } finally {\n      this._loading.hide();\n    }\n  }\n\n  getFormatIcon(format: RCResourceFormats): string {\n    switch (format) {\n      case RCResourceFormats.JPG:\n      case RCResourceFormats.JPEG:\n      case RCResourceFormats.PNG:\n        return 'image';\n      case RCResourceFormats.PDF:\n        return 'document';\n      default:\n        return 'help';\n    }\n  }\n\n  async actionsOnResource(res: RCResource): Promise<void> {\n    if (!this.admin) return;\n    const header = this._translate._('IDEA_TEAMS.RESOURCE_CENTER.ACTIONS_ON_RESOURCE');\n    const buttons = [];\n    buttons.push({\n      text: this._translate._('IDEA_TEAMS.RESOURCE_CENTER.UPLOAD_NEW_VERSION'),\n      icon: 'cloud-upload',\n      handler: (): void => this.browseUpdateResource(res)\n    });\n    buttons.push({\n      text: this._translate._('IDEA_TEAMS.RESOURCE_CENTER.RENAME'),\n      icon: 'text',\n      handler: (): Promise<void> => this.renameResource(res)\n    });\n    buttons.push({\n      text: this._translate._('IDEA_TEAMS.RESOURCE_CENTER.DELETE'),\n      role: 'destructive',\n      icon: 'trash',\n      handler: (): Promise<void> => this.deleteResource(res)\n    });\n    buttons.push({ text: this._translate._('COMMON.CANCEL'), role: 'cancel', icon: 'arrow-undo' });\n    const actions = await this._actions.create({ header, buttons });\n    actions.present();\n  }\n  browseUpdateResource(res: RCResource): void {\n    if (!this.admin) return;\n    document.getElementById(res.resourceId.concat('_picker')).click();\n  }\n  async updateResource(res: RCResource, ev: any): Promise<void> {\n    this.uploadErrors = new Array<string>();\n    // identify the file to upload (consider only the first file selected)\n    const fileList: FileList = ev.target ? ev.target.files : {};\n    const file = fileList.item(0);\n    // upload the file\n    await this._loading.show();\n    await this.uploadFile(file);\n    this._loading.hide();\n    if (this.uploadErrors.length) this._message.error('IDEA_TEAMS.RESOURCE_CENTER.ONE_OR_MORE_FILE_UPLOAD_FAILED');\n    else this._message.success('IDEA_TEAMS.RESOURCE_CENTER.UPLOAD_COMPLETED');\n  }\n  async renameResource(res: RCResource): Promise<void> {\n    const doRename = async ({ name }: any): Promise<void> => {\n      if (!name) return;\n      if (this.resources.some(x => x.resourceId !== res.resourceId && x.name === name))\n        return this._message.error('IDEA_TEAMS.RESOURCE_CENTER.RESOURCE_WITH_SAME_NAME_ALREADY_EXISTS');\n      res.name = name;\n      try {\n        await this._loading.show();\n        const path = `teams/${this.teamId}/folders/${this.folder.folderId}/resources`;\n        await this._API.putResource(path, { resourceId: res.resourceId, body: res });\n        // full-refresh to be sure we update the cache\n        this.loadResources(true);\n      } catch (err) {\n        if ((err as any).message === 'RESOURCE_WITH_SAME_NAME_ALREADY_EXISTS')\n          this._message.error('IDEA_TEAMS.RESOURCE_CENTER.RESOURCE_WITH_SAME_NAME_ALREADY_EXISTS');\n        else this._message.error('COMMON.OPERATION_FAILED');\n      } finally {\n        this._loading.hide();\n      }\n    };\n\n    const header = this._translate._('IDEA_TEAMS.RESOURCE_CENTER.RENAME_RESOURCE');\n    const subHeader = this._translate._('IDEA_TEAMS.RESOURCE_CENTER.SELECT_RESOURCE_NAME');\n    const message = this._translate._('IDEA_TEAMS.RESOURCE_CENTER.NAME_MUST_BE_UNIQUE_IN_FOLDER');\n    const inputs: any[] = [\n      { name: 'name', placeholder: this._translate._('IDEA_TEAMS.RESOURCE_CENTER.NAME'), value: res.name }\n    ];\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.CONFIRM'), handler: doRename }\n    ];\n    const alert = await this._alert.create({ header, subHeader, message, inputs, buttons });\n    alert.present();\n  }\n  async deleteResource(res: RCResource): Promise<void> {\n    const doDelete = async (): Promise<void> => {\n      try {\n        await this._loading.show();\n        const path = `teams/${this.teamId}/folders/${this.folder.folderId}/resources`;\n        await this._API.deleteResource(path, { resourceId: res.resourceId });\n        // full-refresh to be sure we update the cache\n        this.loadResources(true);\n      } catch (error) {\n        this._message.error('COMMON.OPERATION_FAILED');\n      } finally {\n        this._loading.hide();\n      }\n    };\n\n    const header = this._translate._('COMMON.ARE_YOU_SURE');\n    const subHeader = this._translate._('COMMON.OPERATION_IRREVERSIBLE');\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.DELETE'), handler: doDelete }\n    ];\n    const alert = await this._alert.create({ header, subHeader, buttons });\n    alert.present();\n  }\n\n  browseUploadNewResource(): void {\n    if (!this.admin) return;\n    // browse the local file(s)\n    document.getElementById('newResourcePicker').click();\n  }\n  async uploadNewResources(ev: any): Promise<void> {\n    this.uploadErrors = new Array<string>();\n    // gather the files to upload\n    const fileList: FileList = ev.target ? ev.target.files : {};\n    const files = new Array<File>();\n    for (let i = 0; i < fileList.length; i++) files.push(fileList.item(i));\n    // upload each file and show the results\n    await this._loading.show();\n    files.forEach(async file => await this.uploadFile(file));\n    this._loading.hide();\n    if (this.uploadErrors.length) this._message.error('IDEA_TEAMS.RESOURCE_CENTER.ONE_OR_MORE_FILE_UPLOAD_FAILED');\n    else this._message.success('IDEA_TEAMS.RESOURCE_CENTER.UPLOAD_COMPLETED');\n    // reload the resources (force update cache)\n    this.loadResources(true);\n  }\n\n  async uploadFile(file: File, existingRes?: RCResource): Promise<void> {\n    const fullName = file.name.split('.');\n    const format = fullName.pop();\n    const name = fullName.join('.');\n    let resource: RCResource;\n    if (existingRes) {\n      existingRes.format = format as RCResourceFormats;\n      resource = existingRes;\n    } else resource = new RCResource({ name, format });\n\n    if (!loopStringEnumValues(RCResourceFormats).some(x => x === format)) {\n      this.uploadErrors.push(this._translate._('IDEA_TEAMS.RESOURCE_CENTER.INVALID_FORMAT_FILE_', { name }));\n      return;\n    }\n\n    const sizeMB = Number((file.size / 1024 / 1024).toFixed(4));\n    if (sizeMB > FILE_SIZE_LIMIT_MB) {\n      this.uploadErrors.push(this._translate._('IDEA_TEAMS.RESOURCE_CENTER.INVALID_SIZE_FILE_', { name }));\n      return;\n    }\n\n    try {\n      const path = `teams/${this.teamId}/folders/${this.folder.folderId}/resources`;\n      let req: Promise<RCResource>;\n      if (existingRes) req = this._API.putResource(path, { resourceId: resource.resourceId, body: resource });\n      else req = this._API.postResource(path, { body: resource });\n      const newRes: RCResource = await req;\n      try {\n        const { url } = await this._API.patchResource(path, {\n          resourceId: newRes.resourceId,\n          body: { action: 'GET_UPLOAD_URL' }\n        });\n        await this._API.rawRequest().put(url, file).toPromise();\n      } catch (error) {\n        this.uploadErrors.push(this._translate._('IDEA_TEAMS.RESOURCE_CENTER.UPLOAD_ERROR_FILE', { name }));\n      }\n    } catch (error) {\n      this.uploadErrors.push(this._translate._('IDEA_TEAMS.RESOURCE_CENTER.ERROR_CREATING_RESOURCE_FILE', { name }));\n    }\n  }\n\n  close(): void {\n    this._modal.dismiss();\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ViewChild, Component, Input, OnInit, inject } from '@angular/core';\nimport {\n  IonInfiniteScroll,\n  AlertController,\n  ModalController,\n  IonRefresher,\n  IonSearchbar,\n  IonHeader,\n  IonToolbar,\n  IonButtons,\n  IonButton,\n  IonIcon,\n  IonContent,\n  IonRefresherContent,\n  IonList,\n  IonItem,\n  IonLabel,\n  IonInfiniteScrollContent,\n  IonSkeletonText\n} from '@ionic/angular/standalone';\nimport { RCFolder } from 'idea-toolbox';\nimport { IDEALoadingService, IDEAMessageService, IDEATranslatePipe, IDEATranslationsService } from '@idea-ionic/common';\nimport { CacheModes, IDEAAWSAPIService, IDEAOfflineService, IDEATinCanService } from '@idea-ionic/uncommon';\n\nimport { IDEARCResourcesComponent } from './RCResources.component';\n\nconst MAX_PAGE_SIZE = 24;\n\n@Component({\n  selector: 'idea-rc-folders',\n  imports: [\n    CommonModule,\n    IDEATranslatePipe,\n    IonSkeletonText,\n    IonInfiniteScroll,\n    IonInfiniteScrollContent,\n    IonLabel,\n    IonItem,\n    IonList,\n    IonRefresher,\n    IonRefresherContent,\n    IonContent,\n    IonIcon,\n    IonButton,\n    IonButtons,\n    IonToolbar,\n    IonHeader,\n    IonSearchbar\n  ],\n  template: `\n    <ion-header>\n      <ion-toolbar color=\"ideaToolbar\">\n        <ion-buttons slot=\"start\">\n          <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n            <ion-icon name=\"arrow-back\" slot=\"icon-only\" />\n          </ion-button>\n        </ion-buttons>\n        <ion-searchbar\n          #searchbar\n          [placeholder]=\"'IDEA_TEAMS.RESOURCE_CENTER.SEARCH_FOR_FOLDERS' | translate\"\n          (ionInput)=\"search($event.target ? $event.target.value : '')\"\n        />\n        <ion-buttons slot=\"end\">\n          @if (admin) {\n            <ion-button\n              [disabled]=\"_offline.isOffline()\"\n              [title]=\"'IDEA_TEAMS.RESOURCE_CENTER.CREATE_NEW_FOLDER' | translate\"\n              (click)=\"newFolder()\"\n            >\n              <ion-icon slot=\"icon-only\" name=\"add\" />\n            </ion-button>\n          }\n        </ion-buttons>\n      </ion-toolbar>\n    </ion-header>\n    <ion-content>\n      <ion-refresher slot=\"fixed\" (ionRefresh)=\"doRefresh($event.target)\">\n        <ion-refresher-content />\n      </ion-refresher>\n      <ion-list class=\"aList\">\n        @if (!filteredFolders) {\n          <ion-item>\n            <ion-label>\n              <ion-skeleton-text animated style=\"width: 50%\" />\n            </ion-label>\n          </ion-item>\n        }\n        @if (filteredFolders && !filteredFolders.length) {\n          <ion-item class=\"noElements\">\n            <ion-label>{{ 'COMMON.NO_ELEMENT_FOUND' | translate }}</ion-label>\n          </ion-item>\n        }\n        @for (folder of filteredFolders; track folder) {\n          <ion-item button (click)=\"openFolder(folder)\">\n            <ion-label>{{ folder.name }}</ion-label>\n            <ion-button\n              color=\"medium\"\n              fill=\"clear\"\n              slot=\"end\"\n              [title]=\"'IDEA_TEAMS.RESOURCE_CENTER.RENAME' | translate\"\n              [disabled]=\"_offline.isOffline()\"\n              (click)=\"renameFolder(folder, $event)\"\n            >\n              <ion-icon name=\"pencil\" slot=\"icon-only\" />\n            </ion-button>\n            <ion-button\n              color=\"danger\"\n              fill=\"clear\"\n              slot=\"end\"\n              [title]=\"'IDEA_TEAMS.RESOURCE_CENTER.DELETE' | translate\"\n              [disabled]=\"_offline.isOffline()\"\n              (click)=\"deleteFolder(folder, $event)\"\n            >\n              <ion-icon name=\"trash\" slot=\"icon-only\" />\n            </ion-button>\n          </ion-item>\n        }\n      </ion-list>\n      <ion-infinite-scroll (ionInfinite)=\"search(searchbar?.value, $event.target)\">\n        <ion-infinite-scroll-content />\n      </ion-infinite-scroll>\n    </ion-content>\n  `\n})\nexport class IDEARCFoldersComponent implements OnInit {\n  private _tc = inject(IDEATinCanService);\n  private _modal = inject(ModalController);\n  private _alert = inject(AlertController);\n  private _loading = inject(IDEALoadingService);\n  private _message = inject(IDEAMessageService);\n  private _translate = inject(IDEATranslationsService);\n  private _API = inject(IDEAAWSAPIService);\n  _offline = inject(IDEAOfflineService);\n\n  /**\n   * The id of the team from which we want to load the resources. Default: try to guess current team.\n   */\n  @Input() teamId: string;\n  /**\n   * Whether the user has permissions to manage the resource center.\n   */\n  @Input() admin: boolean;\n\n  folders: RCFolder[];\n  filteredFolders: RCFolder[];\n  currentPage: number;\n\n  @ViewChild('searchbar') searchbar: IonSearchbar;\n\n  ngOnInit(): void {\n    // if the team isn't specified, try to guess it in the usual IDEA's paths\n    this.teamId = this.teamId || this._tc.get('membership').teamId || this._tc.get('teamId');\n    this.loadFolders();\n  }\n  async loadFolders(getFromNetwork?: boolean): Promise<void> {\n    try {\n      const folders: RCFolder[] = await this._API.getResource(`teams/${this.teamId}/folders`, {\n        useCache: getFromNetwork ? CacheModes.NETWORK_FIRST : CacheModes.CACHE_FIRST\n      });\n      this.folders = folders.map(f => new RCFolder(f));\n      this.search(this.searchbar ? this.searchbar.value : null);\n    } catch (error) {\n      this._message.error('IDEA_TEAMS.RESOURCE_CENTER.COULDNT_LOAD_LIST');\n    }\n  }\n\n  search(toSearch?: string, scrollToNextPage?: IonInfiniteScroll): void {\n    toSearch = toSearch ? toSearch.toLowerCase() : '';\n\n    this.filteredFolders = (this.folders || [])\n      .filter(m =>\n        toSearch.split(' ').every(searchTerm => [m.name].filter(f => f).some(f => f.toLowerCase().includes(searchTerm)))\n      )\n      .sort((a, b): number => a.name.localeCompare(b.name));\n\n    if (scrollToNextPage) this.currentPage++;\n    else this.currentPage = 0;\n    this.filteredFolders = this.filteredFolders.slice(0, (this.currentPage + 1) * MAX_PAGE_SIZE);\n\n    if (scrollToNextPage) setTimeout((): Promise<void> => scrollToNextPage.complete(), 100);\n  }\n  doRefresh(refresher?: IonRefresher): void {\n    this.filteredFolders = null;\n    setTimeout((): void => {\n      this.loadFolders(Boolean(refresher));\n      if (refresher) refresher.complete();\n    }, 500); // the timeout is needed\n  }\n\n  openFolder(folder: RCFolder): void {\n    this._modal\n      .create({ component: IDEARCResourcesComponent, componentProps: { folder, admin: this.admin } })\n      .then(modal => modal.present());\n  }\n  async newFolder(): Promise<void> {\n    if (!this.admin) return;\n\n    const doCreate = async ({ name }: any): Promise<void> => {\n      if (!name) return;\n      if (this.folders.some(x => x.name === name))\n        return this._message.error('IDEA_TEAMS.RESOURCE_CENTER.FOLDER_WITH_SAME_NAME_ALREADY_EXISTS');\n      try {\n        await this._loading.show();\n        await this._API.postResource(`teams/${this.teamId}/folders`, { body: { name: name } });\n        // full-refresh to be sure we update the cache\n        this.loadFolders(true);\n      } catch (err: any) {\n        if (err.message === 'FOLDER_WITH_SAME_NAME_ALREADY_EXISTS')\n          this._message.error('IDEA_TEAMS.RESOURCE_CENTER.FOLDER_WITH_SAME_NAME_ALREADY_EXISTS');\n        else this._message.error('COMMON.OPERATION_FAILED');\n      } finally {\n        this._loading.hide();\n      }\n    };\n\n    const header = this._translate._('IDEA_TEAMS.RESOURCE_CENTER.CREATE_NEW_FOLDER');\n    const subHeader = this._translate._('IDEA_TEAMS.RESOURCE_CENTER.SELECT_FOLDER_NAME');\n    const message = this._translate._('IDEA_TEAMS.RESOURCE_CENTER.NAME_MUST_BE_UNIQUE_IN_RC');\n    const inputs: any[] = [{ name: 'name', placeholder: this._translate._('IDEA_TEAMS.RESOURCE_CENTER.NAME') }];\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.CONFIRM'), handler: doCreate }\n    ];\n    const alert = await this._alert.create({ header, subHeader, message, inputs, buttons });\n    alert.present();\n  }\n\n  async renameFolder(folder: RCFolder, event?: any): Promise<void> {\n    if (event) event.stopPropagation();\n    if (!this.admin) return;\n\n    const doRemove = async ({ name }: any): Promise<void> => {\n      if (!name) return;\n      if (this.folders.some(x => x.folderId !== folder.folderId && x.name === name))\n        return this._message.error('IDEA_TEAMS.RESOURCE_CENTER.FOLDER_WITH_SAME_NAME_ALREADY_EXISTS');\n      folder.name = name;\n      try {\n        await this._loading.show();\n        await this._API.putResource(`teams/${this.teamId}/folders`, { resourceId: folder.folderId, body: folder });\n        // full-refresh to be sure we update the cache\n        this.loadFolders(true);\n      } catch (err: any) {\n        if (err.message === 'FOLDER_WITH_SAME_NAME_ALREADY_EXISTS')\n          this._message.error('IDEA_TEAMS.RESOURCE_CENTER.FOLDER_WITH_SAME_NAME_ALREADY_EXISTS');\n        else this._message.error('COMMON.OPERATION_FAILED');\n      } finally {\n        this._loading.hide();\n      }\n    };\n\n    const header = this._translate._('IDEA_TEAMS.RESOURCE_CENTER.RENAME_FOLDER');\n    const subHeader = this._translate._('IDEA_TEAMS.RESOURCE_CENTER.SELECT_FOLDER_NAME');\n    const message = this._translate._('IDEA_TEAMS.RESOURCE_CENTER.NAME_MUST_BE_UNIQUE_IN_RC');\n    const inputs: any[] = [\n      { name: 'name', placeholder: this._translate._('IDEA_TEAMS.RESOURCE_CENTER.NAME'), value: folder.name }\n    ];\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.CONFIRM'), handler: doRemove }\n    ];\n    const alert = await this._alert.create({ header, subHeader, message, inputs, buttons });\n    alert.present();\n  }\n  async deleteFolder(folder: RCFolder, event?: any): Promise<void> {\n    if (event) event.stopPropagation();\n    if (!this.admin) return;\n\n    const doDelete = async (): Promise<void> => {\n      try {\n        await this._loading.show();\n        await this._API.deleteResource(`teams/${this.teamId}/folders`, { resourceId: folder.folderId });\n        // full-refresh to be sure we update the cache\n        this.loadFolders(true);\n      } catch {\n        this._message.error('COMMON.OPERATION_FAILED');\n      } finally {\n        this._loading.hide();\n      }\n    };\n\n    const header = this._translate._('COMMON.ARE_YOU_SURE');\n    const subHeader = this._translate._('COMMON.OPERATION_IRREVERSIBLE');\n    const message = this._translate._('IDEA_TEAMS.RESOURCE_CENTER.YOU_WILL_USE_ALL_FILES_IN_FOLDER');\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.DELETE'), handler: doDelete }\n    ];\n    const alert = await this._alert.create({ header, subHeader, message, buttons });\n    alert.present();\n  }\n\n  close(): void {\n    this._modal.dismiss();\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Browser } from '@capacitor/browser';\nimport { IonItem, IonButton, IonIcon, IonInput, IonLabel, IonText } from '@ionic/angular/standalone';\nimport { RCAttachedResource, RCConfiguredFolder, RCResource, RCResourceFormats, Suggestion } from 'idea-toolbox';\nimport {\n  IDEALoadingService,\n  IDEAMessageService,\n  IDEASelectComponent,\n  IDEATranslatePipe,\n  IDEATranslationsService\n} from '@idea-ionic/common';\nimport { IDEAAWSAPIService, IDEAOfflineService, IDEATinCanService } from '@idea-ionic/uncommon';\n\n@Component({\n  selector: 'idea-rc-picker',\n  imports: [\n    CommonModule,\n    FormsModule,\n    IDEATranslatePipe,\n    IDEASelectComponent,\n    IonText,\n    IonLabel,\n    IonInput,\n    IonIcon,\n    IonButton,\n    IonItem\n  ],\n  template: `\n    @for (r of attachedResources; track r; let odd = $odd) {\n      <ion-item class=\"resources\" [lines]=\"lines\" [class.odd]=\"odd\">\n        @if (_offline.isOnline()) {\n          <ion-button fill=\"clear\" size=\"small\" slot=\"start\" (click)=\"openResource(r, true)\">\n            <ion-icon name=\"open-outline\" slot=\"icon-only\" size=\"small\" />\n          </ion-button>\n        }\n        @if (!editMode) {\n          <ion-icon slot=\"start\" color=\"medium\" [name]=\"getFormatIcon(r.format)\" [title]=\"r.format\" />\n        }\n        @if (editMode) {\n          <ion-input\n            [(ngModel)]=\"r.name\"\n            [placeholder]=\"r.originalName\"\n            (ionBlur)=\"$event.target.value = $event.target.value || _translate._('IDEA_TEAMS.RESOURCE_CENTER.NO_NAME')\"\n          />\n        }\n        @if (!editMode) {\n          <ion-label>\n            {{ r.name }}\n            <p>{{ r.originalName }}.{{ r.format }}</p>\n            @if (resources && isResourceNewerVersionAvailable(r)) {\n              <p class=\"ion-text-wrap oldVersionAlert\">\n                {{ 'IDEA_TEAMS.RESOURCE_CENTER.VERSION_ATTACHED_IS_OLDER' | translate }}.\n                @if (_offline.isOnline()) {\n                  <ion-text class=\"tappable\" (click)=\"openResource(r)\">\n                    {{ 'IDEA_TEAMS.RESOURCE_CENTER.OPEN_OLD_VERSION' | translate }}\n                  </ion-text>\n                }\n              </p>\n            }\n          </ion-label>\n        }\n        @if (editMode) {\n          <ion-button\n            slot=\"end\"\n            color=\"danger\"\n            fill=\"clear\"\n            [title]=\"'IDEA_TEAMS.RESOURCE_CENTER.REMOVE_RESOURCE' | translate\"\n            (click)=\"removeResource(r)\"\n          >\n            <ion-icon name=\"remove\" slot=\"icon-only\" />\n          </ion-button>\n        }\n      </ion-item>\n    }\n    <!----->\n    @if (!editMode && !attachedResources?.length) {\n      <ion-item lines=\"none\" class=\"noResources\">\n        <ion-label>\n          {{ 'IDEA_TEAMS.RESOURCE_CENTER.NO_RESOURCES' | translate }}\n        </ion-label>\n      </ion-item>\n    }\n    <!----->\n    @if (editMode && resourcesSuggestions) {\n      <idea-select\n        [data]=\"resourcesSuggestions\"\n        [placeholder]=\"'IDEA_TEAMS.RESOURCE_CENTER.TAP_TO_ADD_A_RESOURCE' | translate\"\n        [searchPlaceholder]=\"'IDEA_TEAMS.RESOURCE_CENTER.RESOURCES_AVAILABLE' | translate\"\n        [lines]=\"'none'\"\n        [clearValueAfterSelection]=\"true\"\n        [hideClearButton]=\"true\"\n        [avoidAutoSelection]=\"true\"\n        [hideIdFromUI]=\"true\"\n        (select)=\"$event ? addResource($event.value) : null\"\n      />\n    }\n  `,\n  styles: [\n    `\n      .resources {\n        ion-button[slot='start'],\n        ion-icon[slot='start'] {\n          margin-right: 10px;\n        }\n        .oldVersionAlert {\n          font-size: 0.8em;\n          line-height: 1em;\n          font-style: italic;\n          ion-text {\n            color: var(--ion-color-primary);\n            font-weight: 500;\n          }\n        }\n      }\n      .noResources {\n        font-style: italic;\n      }\n      .tappable {\n        cursor: pointer;\n      }\n    `\n  ]\n})\nexport class IDEARCPickerComponent implements OnChanges {\n  private _loading = inject(IDEALoadingService);\n  private _message = inject(IDEAMessageService);\n  private _tc = inject(IDEATinCanService);\n  private _API = inject(IDEAAWSAPIService);\n  _offline = inject(IDEAOfflineService);\n  _translate = inject(IDEATranslationsService);\n\n  /**\n   * The team from which we want to load the resources. Default: try to guess current team.\n   */\n  @Input() team: string;\n  /**\n   * The folder of which to load the resources.\n   */\n  @Input() folder: RCConfiguredFolder;\n  /**\n   * The array in which we want to add/remove resources.\n   */\n  @Input() attachedResources: RCAttachedResource[];\n  /**\n   * Regulate the mode (view/edit).\n   */\n  @Input() editMode = false;\n  /**\n   * The lines attribute of the item.\n   */\n  @Input() lines = 'none';\n\n  resources: RCResource[];\n  resourcesSuggestions: Suggestion[];\n\n  async ngOnChanges(changes: SimpleChanges): Promise<void> {\n    if (changes.team || changes.folder) {\n      // if the team isn't specified, try to guess it in the usual IDEA's paths\n      this.team = this.team || this._tc.get('membership').teamId || this._tc.get('teamId');\n      try {\n        const url = `teams/${this.team}/folders/${this.folder.folderId}/resources`;\n        const resources: RCResource[] = await this._API.getResource(url);\n        this.resources = resources;\n        this.resourcesSuggestions = resources.map(\n          x => new Suggestion({ value: x.resourceId, name: `${x.name}.${x.format}` })\n        );\n      } catch (error) {\n        this._message.error('COMMON.COULDNT_LOAD_LIST');\n      }\n    }\n  }\n\n  addResource(resourceId: string): void {\n    const resource = this.resources.find(r => r.resourceId === resourceId);\n    if (resource) this.attachedResources.push(new RCAttachedResource(resource));\n  }\n\n  removeResource(resource: RCAttachedResource): void {\n    this.attachedResources.splice(this.attachedResources.indexOf(resource), 1);\n  }\n\n  async openResource(resource: RCAttachedResource, latestVersion?: boolean): Promise<void> {\n    if (!resource) return;\n    const body: any = { action: 'GET_DOWNLOAD_URL' };\n    if (!latestVersion) body.version = resource.version;\n    try {\n      await this._loading.show();\n      const request = `teams/${this.team}/folders/${this.folder.folderId}/resources`;\n      const { url } = await this._API.patchResource(request, { resourceId: resource.resourceId, body });\n      await Browser.open({ url });\n    } catch (error) {\n      this._message.error('IDEA_TEAMS.RESOURCE_CENTER.ERROR_OPENING_RESOURCE');\n    } finally {\n      this._loading.hide();\n    }\n  }\n\n  getFormatIcon(format: RCResourceFormats | string): string {\n    switch (format) {\n      case RCResourceFormats.JPG:\n      case RCResourceFormats.JPEG:\n      case RCResourceFormats.PNG:\n        return 'image';\n      case RCResourceFormats.PDF:\n        return 'document';\n      default:\n        return 'help';\n    }\n  }\n\n  isResourceNewerVersionAvailable(attachedResource: RCAttachedResource): boolean {\n    const latestRes = this.resources.find(x => x.resourceId === attachedResource.resourceId);\n    return latestRes && latestRes.version > attachedResource.version;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit, inject } from '@angular/core';\nimport {\n  NavController,\n  IonHeader,\n  IonToolbar,\n  IonButtons,\n  IonButton,\n  IonIcon,\n  IonTitle,\n  IonContent,\n  IonList,\n  IonListHeader,\n  IonLabel,\n  IonItem,\n  IonBadge\n} from '@ionic/angular/standalone';\nimport { Team, User } from 'idea-toolbox';\nimport {\n  IDEAEnvironment,\n  IDEALoadingService,\n  IDEAMessageService,\n  IDEATranslatePipe,\n  IDEATranslationsService\n} from '@idea-ionic/common';\nimport { IDEAAWSAPIService, IDEATinCanService } from '@idea-ionic/uncommon';\n\n@Component({\n  selector: 'teams',\n  imports: [\n    CommonModule,\n    IDEATranslatePipe,\n    IonBadge,\n    IonItem,\n    IonLabel,\n    IonListHeader,\n    IonList,\n    IonContent,\n    IonTitle,\n    IonIcon,\n    IonButton,\n    IonButtons,\n    IonToolbar,\n    IonHeader\n  ],\n  template: `\n    <ion-header>\n      <ion-toolbar color=\"ideaToolbar\">\n        <ion-buttons slot=\"start\">\n          @if (aTeamIsSelected()) {\n            <ion-button testId=\"closeButton\" [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n              <ion-icon name=\"arrow-back\" slot=\"icon-only\" />\n            </ion-button>\n          }\n        </ion-buttons>\n        <ion-title>{{ 'IDEA_TEAMS.TEAMS.SELECT_A_TEAM' | translate }}</ion-title>\n        <ion-buttons slot=\"end\">\n          <ion-button\n            testId=\"manageAccountButton\"\n            [title]=\"'IDEA_TEAMS.ACCOUNT.MANAGE_YOUR_ACCOUNT_HINT' | translate\"\n            (click)=\"openAccount()\"\n          >\n            <ion-icon name=\"person\" slot=\"icon-only\" />\n          </ion-button>\n        </ion-buttons>\n      </ion-toolbar>\n    </ion-header>\n    <ion-content>\n      <ion-list lines=\"full\" class=\"aList maxWidthContainer\">\n        @if (!aTeamIsSelected()) {\n          <ion-list-header>\n            <ion-label class=\"ion-text-center\">\n              <h2>{{ 'IDEA_TEAMS.TEAMS.YOU_NEED_A_TEAM_TO_CONTINUE' | translate }}</h2>\n            </ion-label>\n          </ion-list-header>\n        }\n        @for (team of teams; track team) {\n          <ion-item\n            [title]=\"'IDEA_TEAMS.TEAMS.SELECT_TEAM_' | translate: { team: team.name }\"\n            [button]=\"true\"\n            [disabled]=\"!teamIsActiveOnProject(team)\"\n            (click)=\"selectTeam(team)\"\n          >\n            <ion-label>\n              <b>{{ team.name }}</b>\n              @if (!teamIsActiveOnProject(team)) {\n                <p>{{ 'IDEA_TEAMS.TEAMS.TEAM_NOT_ACTIVATED_DISCLAIMER' | translate }}</p>\n              }\n              @if (team.activeInProjects.length) {\n                <p>\n                  {{ 'IDEA_TEAMS.TEAMS.ACTIVE_ON' | translate }}:\n                  @for (p of team.activeInProjects; track p) {\n                    <ion-badge color=\"light\" size=\"small\"> {{ getProjectName(p) }} </ion-badge>\n                  }\n                </p>\n              }\n            </ion-label>\n            @if (isCurrentTeam(team)) {\n              <ion-badge slot=\"end\" color=\"primary\" [title]=\"'IDEA_TEAMS.TEAMS.CURRENT_TEAM_EXPLANATION' | translate\">\n                {{ 'IDEA_TEAMS.TEAMS.CURRENT' | translate }}\n              </ion-badge>\n            }\n          </ion-item>\n        }\n      </ion-list>\n    </ion-content>\n  `,\n  styles: [\n    `\n      .aList {\n        ion-item ion-label p ion-badge {\n          margin-top: 4px;\n          vertical-align: bottom;\n        }\n      }\n    `\n  ]\n})\nexport class IDEATeamsPage implements OnInit {\n  protected _env = inject(IDEAEnvironment);\n  private _tc = inject(IDEATinCanService);\n  private _nav = inject(NavController);\n  private _loading = inject(IDEALoadingService);\n  private _message = inject(IDEAMessageService);\n  private _API = inject(IDEAAWSAPIService);\n  private _translate = inject(IDEATranslationsService);\n\n  user: User;\n  teams: Team[];\n  project: string;\n\n  ngOnInit(): void {\n    this.project = this._env.idea.project;\n    this.user = this._tc.get('user');\n    this.loadTeams();\n  }\n\n  async loadTeams(): Promise<void> {\n    try {\n      await this._loading.show();\n      const teams: Team[] = await this._API.getResource('teams', { idea: true, params: { project: this.project } });\n      this.teams = teams.map(t => new Team(t));\n    } catch (error) {\n      this._nav.navigateRoot(['auth']);\n    } finally {\n      this._loading.hide();\n    }\n  }\n\n  async selectTeam(team: Team): Promise<void> {\n    try {\n      await this._loading.show();\n      await this._API.patchResource('users', {\n        idea: true,\n        resourceId: this.user.userId,\n        body: { action: 'CHANGE_TEAM', teamId: team.teamId, project: this.project }\n      });\n      window.location.assign('');\n    } catch (error) {\n      this._message.error('COMMON.OPERATION_FAILED');\n    } finally {\n      this._loading.hide();\n    }\n  }\n\n  aTeamIsSelected(): boolean {\n    return Boolean(this.user.getCurrentTeamOfProject(this.project));\n  }\n  teamIsActiveOnProject(team: Team): boolean {\n    return team.activeInProjects.some(p => p === this.project);\n  }\n  isCurrentTeam(team: Team): boolean {\n    return this.user.getCurrentTeamOfProject(this.project) === team.teamId;\n  }\n\n  getProjectName(project: string): string {\n    return this._translate._('IDEA_TEAMS.TEAMS.PROJECTS_NAMES.'.concat(project));\n  }\n\n  openAccount(): void {\n    this._nav.navigateForward(['account']);\n  }\n\n  close(errorMessage?: string): void {\n    if (errorMessage) this._message.error(errorMessage);\n    try {\n      this._nav.back();\n    } catch (_) {\n      this._nav.navigateRoot(['']);\n    }\n  }\n}\n","import { Routes } from '@angular/router';\n\nimport { IDEATeamsPage } from './teams.page';\n\nexport const ideaTeamsRoutes: Routes = [{ path: '', component: IDEATeamsPage }];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["MAX_PAGE_SIZE"],"mappings":"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"}