{"version":3,"file":"solcre-org-admin-panels.mjs","sources":["../../../projects/admin-panels-library/src/lib/shared/pipes/size.pipe.ts","../../../projects/admin-panels-library/src/lib/shared/directives/file-class.directive.ts","../../../projects/admin-panels-library/src/lib/shared/components/ng-solcre-editor/solcre-upload-adapter.ts","../../../projects/admin-panels-library/src/lib/shared/services/admin-panels.service.ts","../../../projects/admin-panels-library/src/lib/shared/components/ng-solcre-editor/ng-solcre-editor.component.ts","../../../projects/admin-panels-library/src/lib/shared/components/ng-solcre-editor/ng-solcre-editor.component.html","../../../projects/admin-panels-library/src/lib/shared/admin-shared.module.ts","../../../projects/admin-panels-library/src/lib/intranet/models/announcement.model.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/announcements/announcements.component.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/announcements/announcements.component.html","../../../projects/admin-panels-library/src/lib/intranet/models/banner.model.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/banners/banners.component.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/banners/banners.component.html","../../../projects/admin-panels-library/src/lib/intranet/models/menu.model.ts","../../../projects/admin-panels-library/src/lib/intranet/models/workspace.model.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/menu/menu-item/menu-item.component.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/menu/menu-item/menu-item.component.html","../../../projects/admin-panels-library/src/lib/intranet/panels/menu/menu.component.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/menu/menu.component.html","../../../projects/admin-panels-library/src/lib/intranet/models/category.model.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/categories/categories.component.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/categories/categories.component.html","../../../projects/admin-panels-library/src/lib/intranet/models/users.model.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/users/users.component.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/users/users.component.html","../../../projects/admin-panels-library/src/lib/intranet/panels/workspace/workspace.component.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/workspace/workspace.component.html","../../../projects/admin-panels-library/src/lib/intranet/models/document.model.ts","../../../projects/admin-panels-library/src/lib/intranet/models/document-folder.model.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/documents/document-folder-access.model.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/documents/document-folder-move-destination.model.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/documents/document-folder-move.utility.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/documents/document-signature.model.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/documents/documents.service.ts","../../../projects/admin-panels-library/src/lib/shared/injections/window.injection.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/documents/documents-item/documents-item.component.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/documents/documents-item/documents-item.component.html","../../../projects/admin-panels-library/src/lib/intranet/panels/documents/documents-folders-item/documents-folders-item.component.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/documents/documents-folders-item/documents-folders-item.component.html","../../../projects/admin-panels-library/src/lib/intranet/panels/documents/documents.component.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/documents/documents.component.html","../../../projects/admin-panels-library/src/lib/intranet/models/news.model.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/news/news.component.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/news/news.component.html","../../../projects/admin-panels-library/src/lib/intranet/panels/media/media.model.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/media/media.component.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/media/media.component.html","../../../projects/admin-panels-library/src/lib/intranet/panels/events/events.model.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/events/events-type.model.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/events/events.component.ts","../../../projects/admin-panels-library/src/lib/intranet/panels/events/events.component.html","../../../projects/admin-panels-library/src/lib/intranet/admin-intranet-panels.module.ts","../../../projects/admin-panels-library/src/lib/admin-panels.module.ts","../../../projects/admin-panels-library/src/lib/constants/version.ts","../../../projects/admin-panels-library/src/public-api.ts","../../../projects/admin-panels-library/src/solcre-org-admin-panels.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'size',\n    standalone: false\n})\nexport class SizePipe implements PipeTransform {\n\n  transform(value: number, ...args: unknown[]): unknown {\n    const valueInKB: number = (value ?? 0) / 1024;\n    const valueInMB: number = valueInKB / 1024;\n    return valueInMB > 1 ? `${this.valueFormatted(valueInMB)} MB` : `${this.valueFormatted(valueInKB)} KB`;\n  }\n\n  private valueFormatted(value: number): string {\n    return (value ? value : 0).toLocaleString('es-uy', {\n\t\t\t\"minimumFractionDigits\": 0,\n\t\t\t\"maximumFractionDigits\": 2\n\t\t});\n  }\n\n}\n","import { Directive, ElementRef, Input, OnInit } from '@angular/core';\n\n@Directive({\n    selector: '[intranetFileClass]',\n    standalone: false\n})\nexport class FileClassDirective implements OnInit{\n  @Input() fileType: string = '';\n  \n  constructor(private elementRef: ElementRef) {}\n\n  ngOnInit(): void {\n    let classToAdd: string = '';\n    switch(this.fileType){\n      case 'image/jpeg':  \n        classToAdd = 'jpeg';\n        break;\n      case 'image/png':  \n        classToAdd = 'png';\n        break;\n      case 'image/doc':  \n        classToAdd = 'doc';\n        break;\n      case 'image/docx':  \n        classToAdd = 'doc';\n        break;\n      case 'video/mp4':  \n        classToAdd = 'mp4';\n        break;\n      case 'video/avi':  \n        classToAdd = 'avi';\n        break;\n      case 'application/pdf':  \n        classToAdd = 'pdf';\n        break;\n    }\n\n    if(classToAdd && this.elementRef.nativeElement){\n      this.elementRef.nativeElement.classList.add(classToAdd);\n    }\n  }\n\n}\n","import { HttpEvent } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { UploadResponse } from '@kolkov/angular-editor';\n\nexport class SolcreUploadAdapter {\n  constructor(\n    private loader: any,\n    private uploadFn: (file: File) => Observable<HttpEvent<UploadResponse>>\n  ) {}\n\n  upload(): Promise<{ default: string }> {\n    return this.loader.file.then((file: File) => {\n      return new Promise((resolve, reject) => {\n        const sub = this.uploadFn(file).subscribe({\n          next: (event) => {\n            // Cuando tu API devuelva el cuerpo final, armamos la URL\n            if ((event as any).body) {\n              const body: any = (event as any).body;\n              // Tu API devuelve { imageUrl: \"...\" } o { videoUrl: \"...\" }\n              const url =\n                body?.imageUrl || \n                body?.videoUrl || \n                body?.url || \n                body?.location || \n                body?.path || \n                body?.data?.url;\n              if (!url) {\n                reject('No se encontró la URL en la respuesta del servidor.');\n                return;\n              }\n              resolve({ default: url });\n              sub.unsubscribe();\n            }\n          },\n          error: (err) => {\n            reject(err?.message || 'Error subiendo archivo');\n          },\n        });\n      });\n    });\n  }\n\n  abort() {\n    // opcional: cancelar si mantienes una referencia a la suscripción\n  }\n}","import { Injectable } from '@angular/core';\nimport { AdminPanelsConfig } from '../models/configs/admin-panels-config.interface';\nimport { AdminPanelsUrlConfig } from '../models/configs/admin-panels-url-config.interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AdminPanelsService {\n  //Config\n  private config: AdminPanelsConfig = {\n    apiUrls: {\n      apiUploadImagesUrl: '/upload-image',\n      apiUploadVideosUrl: '/upload-video',\n      //Intranet\n      apiIntranetAnnouncementsUri: '/announcements',\n      apiIntranetBannersUri: '/banners',\n      apiIntranetMenusUri: '/menus',\n      apiIntranetWorkspacesUri: '/workspaces',\n      apiIntranetCategoriesUri: '/categories',\n      apiIntranetUsersUri: '/users',\n      // API_DOCUMENT_URI: '/documents',\n      apiIntranetDocumentsUri: '/documents',\n      // API_DOCUMENT_SIGNATURE_URI: '/get-aws-signature',\n      apiIntranetDocumentSignaturesUri: '/get-aws-signature',\n      // API_DOCUMENT_FILE_URI: '/get-file',\n      apiIntranetDocumentFilesUri: '/get-file',\n      // API_DOCUMENT_FOLDER_URI: '/documents-folders',\n      apiIntranetDocumentFoldersUri: '/documents-folders',\n      // API_DOCUMENT_FOLDER_GET_PERMISSIONS_URI: '/get-document-folder/:id/users-access',\n      apiIntranetDocumentFolderGetPermissionsUri: '/get-document-folder/:id/users-access',\n      // API_DOCUMENT_FOLDER_PERSIST_PERMISSIONS_URI: '/process-document-folder/:id/access',\n      apiIntranetDocumentFolderPersitPermissionsUri: '/process-document-folder/:id/access',\n      apiIntranetMediaUri: '/multimedia',\n      apiIntranetNewsUri: '/news'\n    }\n  }\n\n  constructor() { }\n\n  public setApiUrlsConfig(config: AdminPanelsUrlConfig): void {\n      this.config.apiUrls = { ...this.config.apiUrls, ...config };\n  }\n\n  public getApiUrlsConfig(): AdminPanelsUrlConfig {\n    return this.config.apiUrls ?? {}\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClient, HttpEvent } from '@angular/common/http';\nimport { Component, forwardRef, Input, OnInit } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport ClassicEditor from '@ckeditor/ckeditor5-build-classic';\nimport { CKEditorComponent, CKEditorModule } from '@ckeditor/ckeditor5-angular';\nimport { AdminPanelsService } from '../../services/admin-panels.service';\nimport { AuthService } from '@solcre-org/core';\nimport { UploadResponse } from '@kolkov/angular-editor';\nimport { SolcreUploadAdapter } from './solcre-upload-adapter';\n\n@Component({\n  selector: 'solcre-text-editor',\n  templateUrl: './ng-solcre-editor.component.html',\n  standalone: true,\n  styles: [`\n    .solcre-editor-wrapper {\n      position: relative;\n    }\n    \n    .solcre-custom-toolbar-overlay {\n      position: absolute;\n      top: 0;\n      right: 0;\n      z-index: 10;\n      display: flex;\n      gap: 2px;\n      padding: 4px;\n      pointer-events: none;\n    }\n    \n    .solcre-toolbar-btn {\n      background: transparent;\n      border: 1px solid transparent;\n      border-radius: 2px;\n      padding: 8px 10px;\n      cursor: pointer;\n      color: #333;\n      font-size: 14px;\n      transition: all 0.2s;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      pointer-events: auto;\n      height: 34px;\n      min-width: 34px;\n    }\n    \n    .solcre-toolbar-btn:hover {\n      background: rgba(0, 0, 0, 0.05);\n      border-color: rgba(0, 0, 0, 0.1);\n    }\n    \n    .solcre-toolbar-btn:active {\n      background: rgba(0, 0, 0, 0.1);\n    }\n    \n    .solcre-toolbar-btn i {\n      font-size: 15px;\n    }\n    \n    :host ::ng-deep .ck-editor__editable {\n      min-height: 200px !important;\n      height: 200px !important;\n    }\n    \n    :host ::ng-deep .ck.ck-editor {\n      min-height: 250px !important;\n    }\n    \n    /* Hacer espacio en la toolbar nativa para nuestros botones */\n    :host ::ng-deep .ck.ck-toolbar {\n      padding-right: 50px !important;\n    }\n  `],\n  imports: [CommonModule, FormsModule, CKEditorModule],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => NgSolcreEditorComponent),\n      multi: true,\n    },\n  ],\n})\nexport class NgSolcreEditorComponent implements OnInit, ControlValueAccessor {\n  @Input() id: string = '';\n  @Input() name: string = '';\n  @Input() className: string = '';\n  @Input() ngClass: any = {};\n  @Input() apiUrl: string = '';\n  @Input() apiUploadImagesUrl: string = '';\n  @Input() apiUploadVideosUrl: string = '';\n  @Input() authToken: string = '';\n\n  public editor: any = ClassicEditor;\n  public editorInstance: any;\n  public value: string = '';\n  public onChange: any = () => {};\n  private onTouched: any = () => {};\n\n  public editorConfig: any = {\n    toolbar: {\n      items: [\n        'heading',\n        '|',\n        'bold',\n        'italic',\n        '|',\n        'bulletedList',\n        'numberedList',\n        '|',\n        'outdent',\n        'indent',\n        '|',\n        'link',\n        'imageUpload',\n        'insertTable',\n        'mediaEmbed',\n        '|',\n        'blockQuote',\n        '|',\n        'undo',\n        'redo',\n      ],\n    },\n    heading: {\n      options: [\n        { model: 'paragraph', title: 'Párrafo' },\n        { model: 'heading1', view: 'h1', title: 'Encabezado 1' },\n        { model: 'heading2', view: 'h2', title: 'Encabezado 2' },\n        { model: 'heading3', view: 'h3', title: 'Encabezado 3' }\n      ]\n    },\n    image: {\n      toolbar: [\n        'imageTextAlternative',\n        'toggleImageCaption',\n        '|',\n        'imageStyle:inline',\n        'imageStyle:wrapText',\n        'imageStyle:breakText',\n        '|',\n        'resizeImage'\n      ],\n      resizeOptions: [\n        {\n          name: 'resizeImage:original',\n          value: null,\n          icon: 'original'\n        },\n        {\n          name: 'resizeImage:50',\n          value: '50',\n          icon: 'medium'\n        },\n        {\n          name: 'resizeImage:75',\n          value: '75',\n          icon: 'large'\n        }\n      ]\n    },\n    table: {\n      contentToolbar: [\n        'tableColumn',\n        'tableRow',\n        'mergeTableCells',\n        'tableCellProperties',\n        'tableProperties',\n      ],\n    },\n    link: {\n      addTargetToExternalLinks: true,\n      decorators: {\n        toggleDownloadable: {\n          mode: 'manual',\n          label: 'Downloadable',\n          attributes: {\n            download: 'file'\n          }\n        }\n      }\n    },\n    height: '800px',\n    mediaEmbed: {\n      previewsInData: true,\n    },\n  };\n\n  constructor(private httpClient: HttpClient, private adminPanelsService: AdminPanelsService, private authService: AuthService) {}\n\n  private createUploadAdapter(loader: any) {\n    return new SolcreUploadAdapter(loader, (file: File) =>\n      this.uploadEditorPicture(file)\n    );\n  }\n\n  private createVideoUploadAdapter(loader: any) {\n    return new SolcreUploadAdapter(loader, (file: File) =>\n      this.uploadEditorVideo(file)\n    );\n  }\n\n  ngOnInit() {}\n\n  public onEditorReady(editor: any): void {\n    this.editorInstance = editor;\n    editor.plugins.get('FileRepository').createUploadAdapter = (\n      loader: any\n    ) => {\n      return this.createUploadAdapter(loader);\n    };\n  }\n\n  public onVideoUploadClick(): void {\n    const input = document.createElement('input');\n    input.type = 'file';\n    input.accept = 'video/*';\n    input.style.display = 'none';\n    \n    input.addEventListener('change', (event: any) => {\n      const file = event.target.files[0];\n      if (file) {\n        this.uploadEditorVideo(file).subscribe({\n          next: (event) => {\n            if ((event as any).body) {\n              const body: any = (event as any).body;\n              const videoUrl = body?.videoUrl || body?.url || body?.location || body?.path || body?.data?.url;\n              \n              if (videoUrl) {\n                const videoHtml = `<video controls style=\"max-width: 100%; height: auto;\">\n                  <source src=\"${videoUrl}\" type=\"${file.type}\">\n                  Tu navegador no soporta el elemento video.\n                </video>`;\n                \n                if (this.editorInstance) {\n                  this.editorInstance.model.change((writer: any) => {\n                    const viewFragment = this.editorInstance.data.processor.toView(videoHtml);\n                    const modelFragment = this.editorInstance.data.toModel(viewFragment);\n                    this.editorInstance.model.insertContent(modelFragment);\n                  });\n                }\n              }\n            }\n          },\n          error: (err) => {\n            console.error('Error subiendo video:', err);\n            alert('Error al subir el video. Por favor, inténtalo de nuevo.');\n          }\n        });\n      }\n    });\n\n    document.body.appendChild(input);\n    input.click();\n    document.body.removeChild(input);\n  }\n\n  private uploadEditorPicture(\n    file: File\n  ): Observable<HttpEvent<UploadResponse>> {\n    const apiUrl: string = this.apiUrl || this.adminPanelsService.getApiUrlsConfig().apiUrl || '';\n    const uploadUrl: string = this.apiUploadImagesUrl || this.adminPanelsService.getApiUrlsConfig().apiUploadImagesUrl || '';\n    const url: string = apiUrl + uploadUrl;\n    const token: string = this.authToken || this.authService.getAccessToken()?.token || '';\n    \n    const formData: FormData = new FormData();\n    formData.append('file', file);\n    return this.httpClient.post<UploadResponse>(url, formData, {\n      headers: {\n        Authorization: `Bearer ${token}`,\n      },\n      observe: 'events',\n    });\n  }\n\n  private uploadEditorVideo(\n    file: File\n  ): Observable<HttpEvent<UploadResponse>> {\n    const apiUrl: string = this.apiUrl || this.adminPanelsService.getApiUrlsConfig().apiUrl || '';\n    const uploadUrl: string = this.apiUploadVideosUrl || this.adminPanelsService.getApiUrlsConfig().apiUploadVideosUrl || '/upload-video';\n    const url: string = apiUrl + uploadUrl;\n    const token: string = this.authToken || this.authService.getAccessToken()?.token || '';\n    \n    const formData: FormData = new FormData();\n    formData.append('file', file);\n    return this.httpClient.post<UploadResponse>(url, formData, {\n      headers: {\n        Authorization: `Bearer ${token}`,\n      },\n      observe: 'events',\n    });\n  }\n\n  writeValue(value: string): void {\n    this.value = value;\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n  }\n}","<div class=\"solcre-editor-wrapper\">\n  <ckeditor\n      [id]=\"id\"\n      [name]=\"name\"\n      [class]=\"className\"\n      [editor]=\"editor\"\n      [config]=\"editorConfig\"\n      [ngModel]=\"value\"\n      (ngModelChange)=\"onChange($event)\"\n      (ready)=\"onEditorReady($event)\"\n      [ngClass]=\"ngClass\">\n  </ckeditor>\n  \n  <div class=\"solcre-custom-toolbar-overlay\">\n    <button type=\"button\" class=\"solcre-toolbar-btn\" (click)=\"onVideoUploadClick()\" title=\"Subir video\">\n      <i class=\"fa-solid fa-video\"></i>\n    </button>\n  </div>\n</div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { SizePipe } from './pipes/size.pipe';\nimport { FileClassDirective } from './directives/file-class.directive';\nimport { NgSolcreEditorComponent } from './components/ng-solcre-editor/ng-solcre-editor.component';\n\n@NgModule({\n  declarations: [\n    SizePipe,\n    FileClassDirective\n  ],\n  imports: [\n    CommonModule,\n    NgSolcreEditorComponent\n  ],\n  exports: [\n    SizePipe,\n    FileClassDirective,\n    NgSolcreEditorComponent\n  ],\n  providers: [],\n})\nexport class SolcreAdminSharedModule {}\n","import { DateUtility } from '@solcre-org/admin-core';\nimport { DataBaseModelInterface } from '@solcre-org/core';\n\nexport class AnnouncementModel implements DataBaseModelInterface {\n\n    constructor(\n        public id?: number,\n        public title?: string,\n        public description?: string,\n        public content?: string,\n        public startDate?: string | null,\n        public endDate?: string | null,\n        public addedAt?: string | null,\n        public frame?: number | null,\n        public files?: any[]\n      ) { }\n    \n      public fromJSON(json: any): void {\n        if (json) {\n          this.id = json.id;\n          this.title = json.title;\n          this.description = json.description;\n          this.content = json.content;\n          this.addedAt = json.addedAt ? DateUtility.format(json.addedAt.date, \"DD/MM/YYYY\") : null;\n          this.startDate = json.startDate ? DateUtility.sqlDate(json.startDate.date) : null;\n          this.endDate = json.endDate ? DateUtility.sqlDate(json.endDate.date) : null;\n          this.frame = json.frame;\n          this.files = json.files && json.files.length ? json.files : null;\n        }\n      }\n    \n      public toJSON(): any {\n        return {\n          \"id\": this.id,\n          \"title\": this.title,\n          \"description\": this.description,\n          \"content\": this.content,\n          \"addedAt\": this.addedAt,\n          \"startDate\": this.startDate,\n          \"endDate\": this.endDate,\n          \"frame\": this.frame,\n          \"files\": this.files ?? null,\n          \"newFiles\": []\n        }\n      }\n    \n      public getId(): number {\n        return this.id ?? 0;\n      }\n    \n      public getReference(): string {\n        return this.title ?? '';\n      }\n\n}\n","import { Component, OnInit, inject } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { BreadcrumbModel, DateUtility, ErrorsHttpService, SimplePanelOptions, SimplePanelRowParsingInterface, SimplePanelService, TableHeaderModel, TableModel, TableOptions, TableRowModel } from '@solcre-org/admin-core';\nimport { HttpClient, HttpEvent } from '@angular/common/http';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ArrayUtility, AuthService } from '@solcre-org/core';\nimport { Observable } from 'rxjs';\n\nimport { AnnouncementModel } from '../../models/announcement.model';\nimport { AdminPanelsService } from '../../../shared/services/admin-panels.service';\n\n@Component({\n    selector: 'intranet-announcements',\n    templateUrl: './announcements.component.html',\n    providers: [SimplePanelService],\n    standalone: false\n})\nexport class AnnouncementsComponent implements OnInit {\n  //Services\n  adminPanelsService: AdminPanelsService = inject(AdminPanelsService);\n\n  //Models\n  breadcrumbs: BreadcrumbModel[];\n  tableModel: TableModel;\n  panelOptions: SimplePanelOptions;\n  tableOption: TableOptions;\n  primaryForm: FormGroup;\n  editFace: boolean = false;\n  imagesUrl: string = this.adminPanelsService.getApiUrlsConfig().apiImagesUrl;\n\n  constructor(\n    private errorsHttpService: ErrorsHttpService,\n    private httpClient: HttpClient,\n    private formBuilder: FormBuilder,\n    private translateService: TranslateService,\n    public authService: AuthService\n  ) {\n    //Initialize all models\n    this.tableModel = new TableModel(\n      [\n        new TableHeaderModel('', 'title'),\n        new TableHeaderModel('', 'startDate'),\n        new TableHeaderModel('', 'endDate'),\n      ],\n    );\n\n    //Panel options\n    this.panelOptions = {\n      URI: this.adminPanelsService.getApiUrlsConfig().apiIntranetAnnouncementsUri,\n      keepIdOnUpdate: true,\n      preventProcessHttpErrors: true,\n      title: '',\n      remoteData: []\n    };\n    //Create breadcrumbs\n    this.breadcrumbs = [new BreadcrumbModel('', ['news'], true)];\n\n    //Create form\n    this.primaryForm = this.formBuilder.group({\n      id: this.formBuilder.control(null, []),\n      title: this.formBuilder.control(null, [Validators.required]),\n      description: this.formBuilder.control(null, []),\n      content: this.formBuilder.control(null, []),\n      newFiles: this.formBuilder.control(null, []),\n      files: this.formBuilder.control(null, []),\n      startDate: this.formBuilder.control(null, [Validators.required]),\n      endDate: this.formBuilder.control(null, [Validators.required]),\n      frame: this.formBuilder.control(0),\n    });\n    \n    this.tableOption = { useUnshift: true };\n\n    //Load query params\n    this.loadDefaultQueryparams();\n  }\n\n  async ngOnInit() {\n    //Get translations\n    const translations: any = await this.translateService\n      .get([\n        'announcements.panelTitle',\n        'announcements.title',\n        'announcements.startDate',\n        'announcements.endDate',\n        'nav.announcements',\n      ])\n      .toPromise();\n\n    //Apply translations to panel\n    this.panelOptions.title = translations['announcements.panelTitle'];\n    this.breadcrumbs[0].display = translations['nav.announcements'];\n\n    //Check header\n    if (this.tableModel.header) {\n      this.tableModel.header[0].display = translations['announcements.title'];\n      this.tableModel.header[1].display = translations['announcements.startDate'];\n      this.tableModel.header[2].display = translations['announcements.endDate'];\n    }\n  }\n\n  onBeforeSend(json: any) {\n    const newFiles: File[] | null = json.newFiles;\n    const files: any[] | null = json.files;\n\n    //Remove keys\n    delete json.newFiles;\n    delete json.files;\n\n    //Check id\n    if (!!json.id) {\n      delete json.id;\n    }\n\n    //Fixed date\n    json.startDate = DateUtility.format(\n      json.startDate ?? new Date().toString(),\n      'YYYY-MM-DD 00:00'\n    );\n    json.endDate = DateUtility.format(\n      json.endDate ?? new Date().toString(),\n      'YYYY-MM-DD 00:00'\n    );\n\n    // Load new files\n    let hasFiles = false;\n    ArrayUtility.each(newFiles, (file: File, index: number) => {\n      json[`files[${index}]`] = file;\n      hasFiles = true;\n    });\n\n    //Load old files\n    if (hasFiles) {\n      ArrayUtility.each(files, (file: any, index: number) => {\n        json[`filesIds[${index}]`] = file.id;\n      });\n    } else {\n      json.filesIds = ArrayUtility.map(files ?? [], (file: any) => file.id);\n    }\n\n    if (json.frame === true) {\n      json.frame = 1;\n    } else {\n      json.frame = 0;\n    }\n  }\n\n  onPicturesSelected($event: any): void {\n    this.editFace = false;\n    const files: File[] = $event.target.files;\n    const prevFiles: File[] = this.primaryForm.value.newFiles ?? [];\n\n    //Load values\n    this.primaryForm.patchValue({ newFiles: [...files, ...prevFiles] });\n  }\n\n  onDeleteFile(index: number): void {\n    this.editFace = true;\n    const files: File[] = this.primaryForm.value.files ?? [];\n\n    //Remove\n    files.splice(index, 1);\n\n    //Clear input\n    this.primaryForm.patchValue({ files });\n  }\n\n  onDeleteSelectedFile(index: number): void {\n    this.editFace = true;\n    const newFiles: File[] = this.primaryForm.value.newFiles ?? [];\n\n    //Remove\n    newFiles.splice(index, 1);\n\n    //Clear input\n    this.primaryForm.patchValue({ newFiles });\n  }\n\n  onParseModel(arg: SimplePanelRowParsingInterface): void {\n    //Get each row from simple panel\n    const announcement: AnnouncementModel = new AnnouncementModel();\n    announcement.fromJSON(arg.json);\n    // Complete observable\n    arg.callback(announcement);\n  }\n\n  onBeforeOpen(json: any) {\n    this.editFace = true;\n  }\n\n  onError(error: any) {\n    //Display with translations\n    this.errorsHttpService.display(error);\n  }\n\n  onGetJSON(json: any, row: TableRowModel): any {\n    return json;\n  }\n\n  private loadDefaultQueryparams(): void {\n    this.panelOptions.defaultQueryParams = {\n      'sort[addedAt]': 'ASC',\n    }\n  }\n}","<div class=\"layout responsive\">\n    <ng-solcre-simple-panel \n        *ngIf=\"tableModel\" \n        (onParseModel)=\"onParseModel($event)\" \n        (onBeforeOpen)=\"onBeforeOpen($event)\" \n        (onBeforeSend)=\"onBeforeSend($event)\" \n        (onError)=\"onError($event)\" \n        [breadcrumbs]=\"breadcrumbs\" \n        [options]=\"panelOptions\" \n        [primaryForm]=\"primaryForm\" \n        [tableModel]=\"tableModel\" \n        [onGetJSON]=\"onGetJSON\" \n        [customTableTemplate]=\"customTdTemplate\" \n        [tableOptions]=\"tableOption\">\n\n        <div class=\"primary-form styled-form\" [formGroup]=\"primaryForm\">\n            <ng-solcre-input-holder \n                inputId=\"app-announcements-title\" \n                [control]=\"primaryForm.get('title')\">\n\n                <label class=\"label\" for=\"app-announcements-title\">{{ \"announcements.title\" | translate}}</label>\n                <input \n                    type=\"text\" \n                    name=\"title\" \n                    class=\"input\" \n                    formControlName=\"title\" \n                    id=\"app-announcements-title\" \n                    [class.error]=\"!primaryForm.get('title')?.valid && primaryForm.get('title')?.touched\" \n                    [placeholder]=\"'announcements.titlePlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n\n            \n            <ng-solcre-input-holder \n            inputId=\"app-announcements-description\" \n            [control]=\"primaryForm.get('description')\">\n            \n            <label class=\"label\" for=\"app-announcements-description\">{{ \"announcements.description\" | translate}}</label>\n            <input \n            type=\"text\" \n            name=\"description\" \n            class=\"input\" \n            formControlName=\"description\" \n            id=\"app-announcements-description\" \n            [class.error]=\"!primaryForm.get('description')?.valid && primaryForm.get('description')?.touched\" \n            [placeholder]=\"'announcements.descriptionPlaceholder' | translate\" />\n        </ng-solcre-input-holder>\n        \n        <ng-solcre-input-holder \n            inputId=\"app-announcements-startDate\" \n            [control]=\"primaryForm.get('startDate')\">\n\n            <label class=\"label\" for=\"app-announcements-startDate\">{{ \"announcements.startDate\" | translate}}</label>\n            <input \n                type=\"date\" \n                name=\"startDate\" \n                class=\"input\" \n                formControlName=\"startDate\" \n                id=\"app-announcements-startDate\" \n                [class.error]=\"!primaryForm.get('startDate')?.valid && primaryForm.get('startDate')?.touched\" />\n        </ng-solcre-input-holder>\n        <ng-solcre-input-holder \n            inputId=\"app-announcements-endDate\" \n            [control]=\"primaryForm.get('endDate')\">\n\n            <label class=\"label\" for=\"app-announcements-endDate\">{{ \"announcements.endDate\" | translate}}</label>\n            <input \n                type=\"date\" \n                name=\"endDate\" \n                class=\"input\" \n                formControlName=\"endDate\" \n                id=\"app-announcements-endDate\" \n                [class.error]=\"!primaryForm.get('endDate')?.valid && primaryForm.get('endDate')?.touched\" />\n        </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder \n                inputId=\"app-announcements-album\" \n                [control]=\"primaryForm.get('newFiles')\">\n\n                <label class=\"label\" for=\"app-announcements-album\">{{ \"announcements.files\" | translate}}</label>\n                <input class=\"input\" type=\"file\" multiple=\"1\" accept=\"image/*\" (change)=\"onPicturesSelected($event)\" />\n\n                <div class=\"row margin-t-3\">\n                    <ng-container *ngFor=\"let file of primaryForm.value.newFiles; let i=index;\">\n                        <div class=\"col-sm-3\">\n                            <ng-solcre-picture-preview \n                                [pictureFile]=\"file\" \n                                [pictureName]=\"''\" \n                                [imagesUrl]=\"imagesUrl\">\n                            </ng-solcre-picture-preview>\n                        </div>\n                        <div class=\"col-sm-1\">\n                            <button (click)=\"onDeleteSelectedFile(i)\" type=\"button\" class=\"action action-btn icon-btn icon-delete text-error\"></button>\n                        </div>\n                    </ng-container>\n                    <ng-container *ngFor=\"let file of primaryForm.value.files; let i=index;\">\n                        <div class=\"col-sm-3\">\n                            <ng-solcre-picture-preview \n                                [pictureName]=\"file.filename\" \n                                [imagesUrl]=\"imagesUrl\">\n                            </ng-solcre-picture-preview>\n                        </div>\n                        <div class=\"col-sm-1\">\n                            <button (click)=\"onDeleteFile(i)\" type=\"button\" class=\"action action-btn icon-btn icon-delete text-error\"></button>\n                        </div>\n                    </ng-container>\n                </div>\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder \n                *ngIf=\"primaryForm.value.newFiles != null && editFace===false\" \n                class=\"checkbox-group checkbox-container\" \n                inputId=\"app-announcements-checkbox\" \n                [control]=\"primaryForm.get('frame')\">\n                <label class=\"label\" for=\"app-announcements-checkbox\">Encuadrar foto</label>\n                <div class=\"radios-group\">\n                    <label class=\"checkbox-label clickable\" for=\"app-announcements-checkbox\">\n                        <input type=\"checkbox\" name=\"frame\" class=\"notVisible validate-required\" formControlName=\"frame\" id=\"app-news-checkbox\" />\n                        <span class=\"checkbox\"></span>\n                        <span class=\"text-tocheck\">Si</span>\n                    </label>\n                </div>\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-announcements-content\" [control]=\"primaryForm.get('content')\">\n\n                <label class=\"label\" for=\"app-announcements-content\">{{ 'announcements.content' | translate }}</label>\n                <solcre-text-editor \n                    id=\"app-announcements-content\" \n                    name=\"content\" \n                    class=\"input\" \n                    formControlName=\"content\"\n                    [apiUrl]=\"adminPanelsService.getApiUrlsConfig().apiUrl\"\n                    [apiUploadImagesUrl]=\"adminPanelsService.getApiUrlsConfig().apiUploadImagesUrl\"                    \n                    [authToken]=\"authService.getAccessToken()?.token\"\n                    [ngClass]=\"{ error: !primaryForm.get('content')?.valid && primaryForm.get('content')?.touched }\">\n                </solcre-text-editor>\n            </ng-solcre-input-holder>\n\n        </div>\n    </ng-solcre-simple-panel>\n</div>\n\n<ng-template #customTdTemplate let-model=\"model\" let-field=\"field\">\n    <span [ngSwitch]=\"field\">\n        <ng-container *ngSwitchCase=\"'startDate'\">{{ model.startDate | date: 'dd/MM/YYYY' }}</ng-container>\n        <ng-container *ngSwitchCase=\"'endDate'\">{{ model.endDate | date: 'dd/MM/YYYY' }}</ng-container>\n        <ng-container *ngSwitchDefault>{{ model[field] }}</ng-container>\n    </span>\n</ng-template>","import { DataBaseModelInterface } from '@solcre-org/core';\n\nexport class BannerModel implements DataBaseModelInterface {\n\n  constructor(\n    public id?: number,\n    public text?: string,\n    public link?: string,\n    public linkTitle?: string,\n    public classes?: string,\n    public position?: number,\n    public file?: any,\n    public mobileFile?: any ) { }\n    \n  public fromJSON(json: any): void {\n    if (json) {\n      this.id = json.id;\n      this.text = json.text;\n      this.link = json.link;\n      this.linkTitle = json.linkTitle;\n      this.classes = json.classes;\n      this.position = json.position;\n      this.file = json.file;\n      this.mobileFile = json.mobileFile;\n    }\n  }\n\n  public toJSON(): any {\n    return {\n      \"id\": this.id,\n      \"text\": this.text,\n      \"link\": this.link,\n      \"linkTitle\": this.linkTitle,\n      \"classes\": this.classes,\n      \"position\": this.position,\n      \"fileId\": this.file ?? null,\n      \"mobileFileId\": this.mobileFile ?? null,\n    }\n  }\n\n  public getId(): number {\n    return this.id ?? 0;\n  }\n\n  public getReference(): string {\n    return this.text ?? '';\n  }\n\n}\n","import { Component, OnInit, inject } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n  BreadcrumbModel,\n  ErrorsHttpService,\n  SimplePanelOptions,\n  SimplePanelRowParsingInterface,\n  SimplePanelService,\n  TableHeaderModel,\n  TableModel,\n  TableRowModel,\n} from '@solcre-org/admin-core';\nimport { BannerModel } from '../../models/banner.model';\nimport { ApiResponseModel } from '@solcre-org/core';\nimport { AdminPanelsService } from '../../../shared/services/admin-panels.service';\n\n@Component({\n    selector: 'intranet-banners',\n    templateUrl: './banners.component.html',\n    providers: [SimplePanelService],\n    standalone: false\n})\nexport class BannersComponent implements OnInit {\n  //Services\n  adminPanelsService: AdminPanelsService = inject(AdminPanelsService);\n\n  //Models\n  breadcrumbs: BreadcrumbModel[];\n  tableModel: TableModel;\n  panelOptions: SimplePanelOptions;\n  primaryForm: FormGroup;\n  imagesUrl: string = this.adminPanelsService.getApiUrlsConfig().apiImagesUrl;\n\n  constructor(\n    private formBuilder: FormBuilder,\n    private translateService: TranslateService,\n    private errorsHttpService: ErrorsHttpService\n  ) {\n    //Initialize all models\n    this.tableModel = new TableModel([\n      new TableHeaderModel('', 'text'),\n      new TableHeaderModel('', 'position'),\n      new TableHeaderModel('', 'link'),\n    ]);\n\n    this.panelOptions = {\n      URI: this.adminPanelsService.getApiUrlsConfig().apiIntranetBannersUri,\n      keepIdOnUpdate: true,\n      preventProcessHttpErrors: true,\n      title: '',\n      defaultQueryParams: {\n        'sort[position]': 'ASC',\n        size: -1,\n      },\n    };\n\n    //Create breadcrumbs\n    this.breadcrumbs = [new BreadcrumbModel('', ['bannerss'], true)];\n\n    //Create form\n    this.primaryForm = this.formBuilder.group({\n      id: this.formBuilder.control(null, []),\n      text: this.formBuilder.control(null, []),\n      link: this.formBuilder.control(null, [Validators.required]),\n      linkTitle: this.formBuilder.control(null, []),\n      classes: this.formBuilder.control(null, []),\n      position: this.formBuilder.control(null, [Validators.required]),\n      fileId: this.formBuilder.control(null, []),\n      mobileFileId: this.formBuilder.control(null, []),\n      file: this.formBuilder.control(null, []),\n      mobileFile: this.formBuilder.control(null, []),\n    });\n  }\n\n  async ngOnInit() {\n    //Get translations\n    const translations: any = await this.translateService\n      .get([\n        'banners.panelTitle',\n        'banners.text',\n        'banners.link',\n        'banners.position',\n        'nav.banners'\n      ])\n      .toPromise();\n\n    //Apply translations to panel\n    this.panelOptions.title = translations['banners.panelTitle'];\n    this.breadcrumbs[0].display = translations['nav.banners'];\n\n    //Check header\n    if (this.tableModel.header) {\n      this.tableModel.header[0].display = translations['banners.text'];\n      this.tableModel.header[1].display = translations['banners.position'];\n      this.tableModel.header[2].display = translations['banners.link'];\n    }\n  }\n\n  onBeforeSend(json: any) {\n    const files: any | null = json.fileId;\n    const mobileFiles: any | null = json.mobileFileId;\n\n    // Remove keys\n    delete json.fileId;\n    delete json.mobileFileId;\n\n    //Check id\n    if (!json.id) {\n      delete json.id;\n    }\n\n    //Check new file\n    if (files) {\n      json.fileId = files.id;\n    }\n    if (mobileFiles) {\n      json.mobileFileId = mobileFiles.id;\n    }\n  }\n\n  onPictureSelected($event: any): void {\n    const file: File = $event.target.files[0];\n\n    //Load values\n    this.primaryForm.patchValue({ file });\n  }\n\n  onDeleteFile(): void {\n    // Clear input\n    this.primaryForm.patchValue({ fileId: null });\n  }\n\n  onDeleteSelectedFile(): void {\n    //Clear input\n    this.primaryForm.patchValue({ file: null });\n  }\n\n  onMobilePictureSelected($event: any): void {\n    const mobileFile: File = $event.target.files[0];\n\n    //Load values\n    this.primaryForm.patchValue({ mobileFile });\n  }\n\n  onDeleteMobileFile(): void {\n    // Clear input\n    this.primaryForm.patchValue({ mobileFileId: null });\n  }\n\n  onDeleteSelectedMobileFile(): void {\n    //Clear input\n    this.primaryForm.patchValue({ mobileFile: null });\n  }\n\n  onParseModel(arg: SimplePanelRowParsingInterface): void {\n    //Get each row from simple panel\n    const banner: BannerModel = new BannerModel();\n    banner.fromJSON(arg.json);\n    // Complete observable\n    arg.callback(banner);\n  }\n\n  onBeforeOpen(json: any) {\n    if (json.file) {\n      json.fileId = json.file;\n      delete json.file;\n    }\n    if (json.mobileFile) {\n      json.mobileFileId = json.mobileFile;\n      delete json.mobileFile;\n    }\n  }\n\n  onSaveSuccess(response: ApiResponseModel): void {}\n\n  onError(error: any) {\n    //Display with translations\n    this.errorsHttpService.display(error);\n  }\n\n  onGetJSON(json: any, row: TableRowModel): any {\n    return json;\n  }\n}\n","<div class=\"layout responsive\">\n    <ng-solcre-simple-panel *ngIf=\"tableModel\" (onParseModel)=\"onParseModel($event)\" (onBeforeOpen)=\"onBeforeOpen($event)\" (onBeforeSend)=\"onBeforeSend($event)\" (onSaveSuccess)=\"onSaveSuccess($event)\" (onError)=\"onError($event)\" [breadcrumbs]=\"breadcrumbs\" [options]=\"panelOptions\" [primaryForm]=\"primaryForm\" [tableModel]=\"tableModel\" [onGetJSON]=\"onGetJSON\" [customTableTemplate]=\"customTdTemplate\">\n\n        <div class=\"primary-form styled-form\" [formGroup]=\"primaryForm\">\n            <ng-solcre-input-holder inputId=\"app-banners-text\" [control]=\"primaryForm.get('text')\">\n\n                <label class=\"label\" for=\"app-banners-text\">{{ \"banners.text\" | translate}}</label>\n                <input type=\"text\" name=\"text\" class=\"input\" formControlName=\"text\" id=\"app-banners-text\" [class.error]=\"!primaryForm.get('text')?.valid && primaryForm.get('text')?.touched\" [placeholder]=\"'banners.textPlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-banners-link\" [control]=\"primaryForm.get('link')\">\n\n                <label class=\"label\" for=\"app-banners-link\">{{ \"banners.link\" | translate}}</label>\n                <input type=\"link\" name=\"link\" class=\"input\" formControlName=\"link\" id=\"app-banners-link\" [class.error]=\"!primaryForm.get('link')?.valid && primaryForm.get('link')?.touched\" [placeholder]=\"'banners.linkPlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-banners-linkTitle\" [control]=\"primaryForm.get('linkTitle')\">\n\n                <label class=\"label\" for=\"app-banners-linkTitle\">{{ \"banners.linkTitle\" | translate}}</label>\n                <input type=\"text\" name=\"linkTitle\" class=\"input\" formControlName=\"linkTitle\" id=\"app-banners-linkTitle\" [class.error]=\"!primaryForm.get('linkTitle')?.valid && primaryForm.get('linkTitle')?.touched\" [placeholder]=\"'banners.linkTitlePlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-banners-classes\" [control]=\"primaryForm.get('classes')\">\n\n                <label class=\"label\" for=\"app-banners-classes\">{{ \"banners.classes\" | translate}}</label>\n                <input type=\"text\" name=\"classes\" class=\"input\" formControlName=\"classes\" id=\"app-banners-classes\" [class.error]=\"!primaryForm.get('classes')?.valid && primaryForm.get('classes')?.touched\" [placeholder]=\"'banners.classesPlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-banners-position\" [control]=\"primaryForm.get('position')\">\n\n                <label class=\"label\" for=\"app-banners-position\">{{ \"banners.position\" | translate}}</label>\n                <input type=\"number\" name=\"position\" class=\"input\" formControlName=\"position\" id=\"app-banners-position\" [class.error]=\"!primaryForm.get('position')?.valid && primaryForm.get('position')?.touched\" [placeholder]=\"'banners.positionPlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-banners-file\" [control]=\"primaryForm.get('file')\">\n\n                <label class=\"label\" for=\"app-banners-file\">{{ \"banners.file\" | translate}}</label>\n                <input *ngIf=\"!primaryForm.value.file && !primaryForm.value.fileId\" class=\"input\" type=\"file\" accept=\"image/*\" (change)=\"onPictureSelected($event)\" />\n\n                <div class=\"row margin-t-3\" *ngIf=\"primaryForm.value.file\">\n                    <div class=\"col-sm-3\">\n                        <ng-solcre-picture-preview [pictureFile]=\"primaryForm.value.file ?? null\" [pictureName]=\"''\" [imagesUrl]=\"imagesUrl\">\n                        </ng-solcre-picture-preview>\n                    </div>\n                    <div class=\"col-sm-1\">\n                        <button (click)=\"onDeleteSelectedFile()\" type=\"button\" class=\"action action-btn icon-btn icon-delete text-error\"></button>\n                    </div>\n                </div>\n                <div class=\"row margin-t-3\" *ngIf=\"primaryForm.value.fileId\">\n                    <div class=\"col-sm-3\">\n                        <ng-solcre-picture-preview [pictureName]=\"primaryForm.value.fileId.filename\" [imagesUrl]=\"imagesUrl\">\n                        </ng-solcre-picture-preview>\n                    </div>\n                    <div class=\"col-sm-1\">\n                        <button (click)=\"onDeleteFile()\" type=\"button\" class=\"action action-btn icon-btn icon-delete text-error\"></button>\n                    </div>\n                </div>\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-banners-mobileFile\" [control]=\"primaryForm.get('mobileFile')\">\n\n                <label class=\"label\" for=\"app-banners-mobileFile\">{{ \"banners.fileMobile\" | translate}}</label>\n                <input *ngIf=\"!primaryForm.value.mobileFile && !primaryForm.value.mobileFileId\" class=\"input\" type=\"file\" accept=\"image/*\" (change)=\"onMobilePictureSelected($event)\" />\n\n                                <div class=\"row margin-t-3\" *ngIf=\"primaryForm.value.mobileFile\">\n                    <div class=\"col-sm-3\">\n                        <ng-solcre-picture-preview [pictureFile]=\"primaryForm.value.mobileFile ?? null\" [pictureName]=\"''\" [imagesUrl]=\"imagesUrl\">\n                        </ng-solcre-picture-preview>\n                    </div>\n                    <div class=\"col-sm-1\">\n                        <button (click)=\"onDeleteSelectedMobileFile()\" type=\"button\" class=\"action action-btn icon-btn icon-delete text-error\"></button>\n                    </div>\n                </div>\n                <div class=\"row margin-t-3\" *ngIf=\"primaryForm.value.mobileFileId\">\n                    <div class=\"col-sm-3\">\n                        <ng-solcre-picture-preview [pictureName]=\"primaryForm.value.mobileFileId.filename\" [imagesUrl]=\"imagesUrl\">\n                        </ng-solcre-picture-preview>\n                    </div>\n                    <div class=\"col-sm-1\">\n                        <button (click)=\"onDeleteMobileFile()\" type=\"button\" class=\"action action-btn icon-btn icon-delete text-error\"></button>\n                    </div>\n                </div>\n            </ng-solcre-input-holder>\n        </div>\n    </ng-solcre-simple-panel>\n</div>\n<ng-template #customTdTemplate let-model=\"model\" let-field=\"field\">\n    <span [ngSwitch]=\"field\">\n        <ng-container *ngSwitchDefault>{{ model[field] }}</ng-container>\n    </span>\n</ng-template>","import { ArrayUtility, DataBaseModelInterface } from '@solcre-org/core';\n\nexport class MenuModel implements DataBaseModelInterface {\n    constructor(\n        public id?: number,\n        public name?: string | null,\n        public link?: string | null,\n        public target?: string | null,\n        public orderNumber?: number,\n        public isExternal?: boolean,\n        public childrens?: MenuModel[],\n        public parent?: number | null,\n      ) { }\n    \n      public fromJSON(json: any): void {\n        if (json) {\n          this.id = json.id;\n          this.name = json.name;\n          this.link = json.link;\n          this.target = json.target;\n          this.isExternal = json.isExternal;\n          this.orderNumber = json.orderNumber;\n          this.parent = json.parentId ?? null;\n          this.childrens = [];\n\n          ArrayUtility.each(json._embedded?.children, (children: any) => {\n              const childrenObj: MenuModel = new MenuModel();\n              childrenObj.fromJSON(children);\n              this.childrens?.push(childrenObj);\n          });\n        }\n      }\n    \n      public toJSON(): any {\n        return {\n          \"id\": this.id,\n          \"name\": this.name,\n          \"link\": this.link,\n          \"target\": this.target,\n          \"parent\": this.parent,\n          \"orderNumber\": this.orderNumber,\n          \"isExternal\": this.isExternal,\n          \"childrens\": this.childrens ?? []\n        }\n      }\n    \n      public getId(): number {\n        return this.id ?? 0;\n      }\n    \n      public getReference(): string {\n        return this.name ?? '';\n      }\n}","import { DateUtility } from '@solcre-org/admin-core';\nimport { DataBaseModelInterface } from '@solcre-org/core';\n\nexport class WorkspaceModel implements DataBaseModelInterface {\n\n  constructor(\n    public id?: number,\n    public title?: string,\n    public file?: any,\n    public addedAt?: string | null,\n    public content?: string,\n    //Relations\n    public category?: number | null,\n    public userGroup?: number | null,\n    public documentFolder?: number | null,\n    public menus?: number[]\n  ) { }\n\n  public fromJSON(json: any): void {\n    if (json) {\n      this.id = json.id;\n      this.title = json.title;\n      this.content = json.content;\n      this.file = json.file ? json.file : null;\n      this.addedAt = json.addedAt ? DateUtility.format(json.addedAt.date, \"DD/MM/YYYY\") : null;\n      //Relations\n      this.category = json.category;\n      this.userGroup = json.userGroup;\n      this.documentFolder = json.documentFolder;\n      this.menus = json.menus ?? [];\n    }\n  }\n\n  public toJSON(): any {\n    return {\n      \"id\": this.id,\n      \"title\": this.title,\n      \"content\": this.content,\n      \"file\": this.file ?? null,\n      \"addedAt\": this.addedAt,\n      //Relations\n      \"category\": this.category,\n      \"menus\": this.menus,\n      \"userGroup\": this.userGroup,\n      \"documentFolder\": this.documentFolder,\n    }\n  }\n\n  public getId(): number {\n    return this.id ?? 0;\n  }\n\n  public getReference(): string {\n    return this.title ?? '';\n  }\n\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MenuModel } from '../../../models/menu.model';\n\n@Component({\n    selector: 'intranet-menu-item',\n    templateUrl: './menu-item.component.html',\n    standalone: false\n})\nexport class MenuItemComponent {\n  @Input() item?: MenuModel;\n  @Output() onAdd: EventEmitter<number> = new EventEmitter();\n  @Output() onEdit: EventEmitter<MenuModel> = new EventEmitter();\n  @Output() onDelete: EventEmitter<MenuModel> = new EventEmitter();\n\n\n\n  onAddEmit(parentId?: number): void {\n    this.onAdd.emit(parentId);\n  }\n  onEditEmit(obj?: MenuModel): void {\n    this.onEdit.emit(obj);\n  }\n  onDeleteEmit(obj?: MenuModel): void {\n    this.onDelete.emit(obj);\n  }\n}\n","<li class=\"menu-item\" [class.has-childrens]=\"!!item?.childrens?.length\">\n    <span>{{ item?.name }} <span class=\"menu-item-order\">(Orden: {{ item?.orderNumber }})</span></span>\n    <span class=\"actions\">\n        <a (click)=\"onAddEmit(item?.id)\" [title]=\"'menu.add' | translate\" class=\"btn icon-btn icon-add text-success\"></a>\n        <a (click)=\"onEditEmit(item)\" [title]=\"'menu.edit' | translate\" class=\"btn icon-btn icon-edit text-info\"></a>\n        <a (click)=\"onDeleteEmit(item)\" [title]=\"'menu.delete' | translate\" class=\"btn icon-btn icon-delete text-error\"></a>\n    </span>\n    <ng-container *ngIf=\"item?.childrens?.length\">\n        <ul class=\"menu-list\">\n            <intranet-menu-item *ngFor=\"let menu of item?.childrens\" [item]=\"menu\" (onAdd)=\"onAddEmit($event)\" (onEdit)=\"onEditEmit($event)\" (onDelete)=\"onDeleteEmit($event)\" />\n        </ul>\n    </ng-container>\n</li>","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, OnInit, inject } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n  BreadcrumbModel,\n  DialogModel,\n  DialogService,\n  UiEventsService,\n  ErrorsHttpService,\n} from '@solcre-org/admin-core';\nimport { ApiResponseModel, ApiService, ArrayUtility, FormUtility } from '@solcre-org/core';\n\nimport { MenuModel } from '../../models/menu.model';\nimport { WorkspaceModel } from '../../models/workspace.model';\nimport { AdminPanelsService } from '../../../shared/services/admin-panels.service';\n\n@Component({\n    selector: 'intranet-menu',\n    templateUrl: './menu.component.html',\n    providers: [DialogService],\n    standalone: false\n})\nexport class MenuComponent implements OnInit {\n  //Services\n  adminPanelsService: AdminPanelsService = inject(AdminPanelsService);\n\n  //Models\n  globalLoading: boolean = false;\n  formLoading: boolean = false;\n  breadcrumbs: BreadcrumbModel[] = [];\n  menus: MenuModel[] = [];\n  workspaces: WorkspaceModel[] = [];\n  formState: boolean = false;\n  form: FormGroup;\n\n  constructor(\n    private fb: FormBuilder,\n    private apiService: ApiService,\n    private dialogService: DialogService,\n    private translateService: TranslateService,\n    private errorsServiceHttp: ErrorsHttpService,\n    private uiEventsService: UiEventsService\n  ) {\n    //Create breadcrumbs\n    this.breadcrumbs = [new BreadcrumbModel('', ['menu'])];\n\n    //Create form\n    this.form = this.fb.group({\n      id: this.fb.control(null),\n      parent: this.fb.control(null),\n      name: this.fb.control('', [Validators.required]),\n      link: this.fb.control(''),\n      workspacesIds: this.fb.control(null),\n      target: this.fb.control(null), // siempre en el add sea _blank\n      orderNumber: this.fb.control(null, [Validators.required]),\n      isExternal: this.fb.control(null), // siempre true por ahora\n    });\n  }\n\n  async ngOnInit() {\n    //Get translations\n    const translations: any = await this.translateService\n      .get(['menu.panelTitle'])\n      .toPromise();\n\n    //Apply translations to panel\n    this.breadcrumbs[0].display = translations['menu.panelTitle'];\n\n    //Fetch\n    this.fetchMenus();\n    this.fetchWorkspaces();\n  }\n\n  onAdd(parentId?: number): void {\n    //Clear previous values\n    this.form.reset();\n    this.form.patchValue({\n      parent: parentId ?? null,\n      target: '_blank',\n      isExternal: true,\n    });\n\n    //Open form\n    this.formState = true;\n    this.uiEventsService.internalModalStateChange.emit(true);\n  }\n\n  onEdit(obj?: MenuModel): void {\n    //Clear previous values\n    this.form.reset();\n    this.form.patchValue(obj?.toJSON());\n\n    //Patch wsIds\n    if(!obj.parent){\n      this.form.patchValue({\n        workspacesIds: this.findWorkspacesId(obj.id) ?? []\n      });\n    }\n\n    //Open form\n    this.formState = true;\n    this.uiEventsService.internalModalStateChange.emit(true);\n  }\n\n  onHideForm(): void {\n    this.formState = false;\n    this.uiEventsService.internalModalStateChange.emit(false);\n  }\n\n  onSaveForm(): void {\n    if (this.form.valid) {\n      const obj: any = this.form.value;\n\n      //Remove id\n      delete obj.id;\n\n      //Normalize isExternal\n      obj.isExternal = obj.isExternal ? 1 : 0;\n      obj.link = !!obj.link ? obj.link : '';\n      obj.parent = !!obj.parent ? obj.parent.toString() : null;\n\n      //Set loading\n      this.formLoading = true;\n\n      //Do request\n      this.apiService.createObj(this.adminPanelsService.getApiUrlsConfig().apiIntranetMenusUri, obj).subscribe({\n        next: (response: ApiResponseModel) => {\n          //Menu\n          const menu: MenuModel = new MenuModel();\n          menu.fromJSON(response.data);\n\n          //Find parent\n          if (menu.parent) {\n            //Find parent obj\n            this.findMenuItem(\n              menu.parent,\n              (index: number, item: MenuModel, items: MenuModel[]) => {\n                item.childrens?.push(menu);\n              }\n            );\n          } else {\n            //Push as root\n            this.menus.push(menu);\n\n            //Fetch WS\n            this.fetchWorkspaces();\n          }\n\n          //Set loading\n          this.formLoading = false;\n\n          //Close\n          this.formState = false;\n          this.uiEventsService.internalModalStateChange.emit(false);\n        },\n        error: (error: HttpErrorResponse) => {\n          //Display error\n          this.errorsServiceHttp.display(error);\n\n          //Set loading\n          this.formLoading = false;\n        },\n      });\n    } else {\n      FormUtility.validateAllFormFields(this.form);\n    }\n  }\n\n  onDelete(item: MenuModel): void {\n    this.dialogService.open(\n      new DialogModel(`¿Deseas borrar el menú: ${item.name}?`, () => {\n        //Do delete\n        this.apiService.deleteObj(this.adminPanelsService.getApiUrlsConfig().apiIntranetMenusUri, item.id).subscribe({\n          next: (response: boolean) => {\n            //Remove obj\n            this.findMenuItem(\n              item.id ?? -1,\n              (index: number, item: MenuModel, items: MenuModel[]) => {\n                items.splice(index, 1);\n              }\n            );\n          },\n        });\n\n        // Close dialog\n        this.dialogService.close();\n      })\n    );\n  }\n\n  onEditForm(): void {\n    if (this.form.valid) {\n      const obj: any = this.form.value;\n\n      //Normalize isExternal\n      obj.isExternal = obj.isExternal ? 1 : 0;\n      obj.link = !!obj.link ? obj.link : '';\n\n      //Set loading\n      this.formLoading = true;\n\n      //Do request\n      this.apiService\n        .updateObj(this.adminPanelsService.getApiUrlsConfig().apiIntranetMenusUri, obj.id, obj)\n        .subscribe({\n          next: (response: ApiResponseModel) => {\n            //Menu\n            const menu: MenuModel = new MenuModel();\n            menu.fromJSON(response.data);\n\n            //Find\n            this.findMenuItem(\n              menu.id ?? -1,\n              (index: number, item: MenuModel, items: MenuModel[]) => {\n                //Update item\n                items[index].name = menu.name;\n                items[index].orderNumber = menu.orderNumber;\n                items[index].link = menu.link;\n              }\n            );\n\n            //Set loading\n            this.formLoading = false;\n\n            //Close\n            this.formState = false;\n            this.uiEventsService.internalModalStateChange.emit(false);\n\n            //Check parent\n            if(!menu.parent){\n              //Fetch WS\n              this.fetchWorkspaces();\n            }\n          },\n          error: (error: HttpErrorResponse) => {\n            //Display error\n            this.errorsServiceHttp.display(error);\n\n            //Set loading\n            this.formLoading = false;\n          },\n        });\n    } else {\n      FormUtility.validateAllFormFields(this.form);\n    }\n  }\n\n  //Helper functions\n  private fetchMenus(): void {\n    //Loading\n    this.globalLoading = true;\n\n    //Do fetch\n    this.apiService\n      .fetchData(this.adminPanelsService.getApiUrlsConfig().apiIntranetMenusUri, {\n        parent: null,\n        'sort[orderNumber]': 'ASC',\n      })\n      .subscribe({\n        next: (data: ApiResponseModel) => {\n          this.menus = ArrayUtility.map(data.data, (json: any) => {\n            const menu: MenuModel = new MenuModel();\n            menu.fromJSON(json);\n            return menu;\n          });\n\n          //Loading\n          this.globalLoading = false;\n        },\n      });\n  }\n\n  private fetchWorkspaces(): void {\n    //Do fetch\n    this.apiService\n      .fetchData(this.adminPanelsService.getApiUrlsConfig().apiIntranetWorkspacesUri)\n      .subscribe({\n        next: (data: ApiResponseModel) => {\n          this.workspaces = ArrayUtility.map(data.data, (json: any) => {\n            const ws: WorkspaceModel = new WorkspaceModel();\n            ws.fromJSON(json);\n            return ws;\n          });\n        },\n      });\n  }\n\n  private findWorkspacesId(menuId: number): number[] {\n    const wsIds: number[] = [];\n    this.workspaces.forEach((ws: WorkspaceModel) => {\n      if(ws.menus?.indexOf(menuId) > -1){\n        wsIds.push(ws.id);\n      }\n    });\n    return wsIds;\n  }\n\n  private findMenuItem(\n    id: number,\n    callback: (index: number, item: MenuModel, items: MenuModel[]) => void,\n    items?: MenuModel[]\n  ): void {\n    const itemsAux: MenuModel[] = items ?? this.menus;\n\n    ArrayUtility.each(itemsAux, (menu: MenuModel, index: number) => {\n      if (id == menu.id) {\n        callback(index, menu, itemsAux);\n        return;\n      }\n\n      if (menu.childrens) {\n        this.findMenuItem(id, callback, menu.childrens);\n      }\n    });\n  }\n}\n","<div class=\"layout responsive\">\n\n    <div class=\"edit-available edit-view\">\n\n        <!-- PANEL CONTENT -->\n        <div class=\"panel-content hideOnInternalModal\">\n\n            <!-- PANEL TOPBAR -->\n            <ng-solcre-topbar [subtitle]=\"'menu.panelTitle' | translate\" [skipWrapper]=\"true\" [breadcrumbs]=\"breadcrumbs\" />\n\n\n            <div class=\"wrapper section\" [class.display-none]=\"!globalLoading\">\n                <ng-solcre-loader></ng-solcre-loader>\n            </div>\n\n            <div class=\"wrapper section\" [class.display-none]=\"globalLoading\">\n\n                <div class=\"topbar\">\n                    <div class=\"holder align-m\"><!--\n\t\t\t\t\t-->\n                        <div class=\"group wrapper align-m\"><!--\n\t\t\t\t\t\t-->\n                            <div class=\"align\">\n                                <p class=\"subtitle margin-b-3\">{{ \"menu.panelTitle\" | translate }}</p>\n                            </div> <!-- .align -->\n                        </div> <!-- .group -->\n                        <div class=\"group wrapper align-m\"><!--\n\t\t\t\t\t\t\t-->\n                            <div class=\"align\">\n                                <a (click)=\"onAdd()\" [title]=\"'menu.add' | translate\" class=\"btn icon-btn icon-add text-success\"></a>\n                            </div> <!-- .align -->\n                        </div> <!-- .group -->\n                    </div>\n                </div>\n\n                <ul class=\"menu-list\">\n                    <intranet-menu-item \n                        *ngFor=\"let menu of menus\" \n                        [item]=\"menu\" \n                        (onAdd)=\"onAdd($event)\" \n                        (onEdit)=\"onEdit($event)\" \n                        (onDelete)=\"onDelete($event)\" />\n                </ul>\n            </div>\n\n\n        </div> <!-- .panel-content -->\n\n    </div>\n    <!-- SEARCH MODAL -->\n    <ng-solcre-modal [state]=\"formState\" [internal]=\"true\">\n    \n        <div class=\"holder\">\n    \n            <div class=\"modal-head align-m\">\n                <div class=\"align\">\n                    <button (click)=\"onHideForm()\" type=\"button\" class=\"link cancel\">\n                        {{ \"menu.cancel\" | translate }}\n                    </button>\n    \n                    <ng-container *ngIf=\"!!form.value.id\">\n                        <p class=\"text\">{{ \"menu.editTitle\" | translate }}</p>\n    \n                        <button [class.loading]=\"formLoading\" class=\"link confirm\" type=\"button\" (click)=\"onEditForm()\">\n                            {{ \"menu.edit\" | translate }}\n                        </button>\n                    </ng-container>\n    \n                    <ng-container *ngIf=\"!form.value.id\">\n                        <p class=\"text\">{{ \"menu.addTitle\" | translate }}</p>\n    \n                        <button [class.loading]=\"formLoading\" class=\"link confirm\" type=\"button\" (click)=\"onSaveForm()\">\n                            {{ \"menu.add\" | translate }}\n                        </button>\n                    </ng-container>\n    \n                </div>\n    \n            </div>\n    \n    \n            <div class=\"scrollable wrapper section\">\n    \n                <form class=\"primary-form styled-form\" [formGroup]=\"form\">\n                    <ng-solcre-input-holder inputId=\"app-menu-name\" [control]=\"form.get('name')\">\n    \n                        <label class=\"label\" for=\"app-menu-name\">{{ \"menu.name\" | translate}}</label>\n                        <input type=\"text\" name=\"name\" class=\"input\" formControlName=\"name\" id=\"app-menu-name\" [class.error]=\"!form.get('name')?.valid && form.get('name')?.touched\" [placeholder]=\"'menu.namePlaceholder' | translate\" />\n                    </ng-solcre-input-holder>\n    \n                    <ng-solcre-input-holder inputId=\"app-menu-link\" [control]=\"form.get('link')\">\n    \n                        <label class=\"label\" for=\"app-menu-link\">{{ \"banners.link\" | translate}}</label>\n                        <input type=\"link\" name=\"link\" class=\"input\" formControlName=\"link\" id=\"app-menu-link\" [class.error]=\"!form.get('link')?.valid && form.get('link')?.touched\" [placeholder]=\"'menu.linkPlaceholder' | translate\" />\n                    </ng-solcre-input-holder>\n    \n                    <ng-solcre-input-holder inputId=\"app-menu-orderNumber\" [control]=\"form.get('orderNumber')\">\n    \n                        <label class=\"label\" for=\"app-menu-orderNumber\">{{ \"menu.orderNumber\" | translate}}</label>\n                        <input type=\"number\" name=\"orderNumber\" class=\"input\" formControlName=\"orderNumber\" id=\"app-menu-orderNumber\" [class.error]=\"!form.get('orderNumber')?.valid && form.get('orderNumber')?.touched\" [placeholder]=\"'menu.orderNumberPlaceholder' | translate\" />\n                    </ng-solcre-input-holder>\n                    \n                    @if (!form.value.parent) {\n                        <ng-solcre-input-holder \n                            inputId=\"app-menu-workspacesIds\" \n                            [control]=\"form.get('workspacesIds')\">\n\n                            <label\n                                class=\"label\" \n                                for=\"app-menu-workspacesIds\">{{ 'menu.visibility' | translate }}</label>\n                            <ng-solcre-select-multi\n                                controlName=\"workspacesIds\" \n                                modelId=\"id\" \n                                modelIdKey=\"id\" \n                                modelDisplayKey=\"title\" \n                                [placeholder]=\"'menu.visibilityPlaceholder' | translate\" \n                                [models]=\"workspaces\" \n                                [form]=\"form\">\n                            </ng-solcre-select-multi>\n                        </ng-solcre-input-holder>\n                    }\n                </form>\n            </div>\n        </div>\n        <div class=\"overlay\" (click)=\"onHideForm()\"></div>\n    </ng-solcre-modal>\n</div>\n\n\n<!-- CONFIRM DIALOG -->\n<ng-solcre-dialog></ng-solcre-dialog>","import { DataBaseModelInterface } from '@solcre-org/core';\n\nexport class CategoryModel implements DataBaseModelInterface {\n\n  constructor(\n    public id?: number,\n    public name?: string,\n    public featured?: boolean,\n    public orderNumber?: number) { }\n    \n  public fromJSON(json: any): void {\n    if (json) {\n      this.id = json.id;\n      this.name = json.name;\n      this.featured = json.featured;\n      this.orderNumber = json.orderNumber;\n    }\n  }\n\n  public toJSON(): any {\n    return {\n      \"id\": this.id,\n      \"name\": this.name,\n      \"featured\": this.featured,\n      \"orderNumber\": this.orderNumber,\n    }\n  }\n\n  public getId(): number {\n    return this.id ?? 0;\n  }\n\n  public getReference(): string {\n    return this.name ?? '';\n  }\n\n}\n","import { Component, OnInit, inject } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BreadcrumbModel, ErrorsHttpService, SimplePanelOptions, SimplePanelRowParsingInterface, SimplePanelService, TableHeaderModel, TableModel, TableOptions, TableRowModel } from '@solcre-org/admin-core';\nimport { ApiResponseModel } from '@solcre-org/core';\n\nimport { CategoryModel } from '../../models/category.model';\nimport { AdminPanelsService } from '../../../shared/services/admin-panels.service';\n\n@Component({\n    selector: 'intranet-categories',\n    templateUrl: './categories.component.html',\n    providers: [SimplePanelService],\n    standalone: false\n})\nexport class CategoriesComponent implements OnInit{\n  //Services\n  adminPanelsService: AdminPanelsService = inject(AdminPanelsService);\n  \n  //Models\n  breadcrumbs: BreadcrumbModel[];\n  tableModel: TableModel;\n  panelOptions: SimplePanelOptions;\n  tableOption: TableOptions;\n  primaryForm: FormGroup;\n\n  //Flags\n  flags: any[] = [\n    { id: '1', display: 'Si' },\n    { id: '0', display: 'No' }\n  ];\n\n  constructor(\n    private errorsHttpService: ErrorsHttpService,\n    private formBuilder: FormBuilder,\n    private translateService: TranslateService\n  ) {\n    //Initialize all models\n    this.tableModel = new TableModel(\n      [\n        new TableHeaderModel('', 'name'),\n        new TableHeaderModel('', 'featured'),\n      ],\n    );\n\n    this.panelOptions = {\n      URI: this.adminPanelsService.getApiUrlsConfig().apiIntranetCategoriesUri,\n      keepIdOnUpdate: true,\n      preventProcessHttpErrors: true,\n      title: '',\n      defaultQueryParams: {\n        'sort[orderNumber]': 'ASC',\n        size: -1,\n      },\n    };\n    //Create breadcrumbs\n    this.breadcrumbs = [new BreadcrumbModel('', ['news'], true)];\n\n    //Create form\n    this.primaryForm = this.formBuilder.group({\n      id: this.formBuilder.control(null, []),\n      name: this.formBuilder.control(null, [Validators.required]),\n      orderNumber: this.formBuilder.control(null, [Validators.required]),\n      featured: this.formBuilder.control(null, []),\n    });\n    \n    this.tableOption = { useUnshift: true };\n  }\n\n  async ngOnInit() {\n    //Get translations\n    const translations: any = await this.translateService\n      .get([\n        'categories.panelTitle',\n        'categories.name',\n        'categories.featured',\n        'nav.categories',\n      ])\n      .toPromise();\n\n    //Apply translations to panel\n    this.panelOptions.title = translations['categories.panelTitle'];\n    this.breadcrumbs[0].display = translations['nav.categories'];\n\n    //Check header\n    if (this.tableModel.header) {\n      this.tableModel.header[0].display = translations['categories.name'];\n      this.tableModel.header[1].display = translations['categories.featured'];\n    }\n  }\n\n  onBeforeSend(json: any) {\n    delete json.id;\n    //Parse\n    json.featured = +json.featured;\n  }\n\n  onParseModel(arg: SimplePanelRowParsingInterface): void {\n    //Get each row from simple panel\n    const category: CategoryModel = new CategoryModel();\n    category.fromJSON(arg.json);\n    // Complete observable\n    arg.callback(category);\n  }\n\n  onBeforeOpen(json: any) {\n    json.featured = json.featured ? '1' : '0';\n    json.orderNumber = json.orderNumber ?? 0;\n  }\n\n  onSaveSuccess(response: ApiResponseModel): void { }\n\n  onError(error: any) {\n    //Display with translations\n    this.errorsHttpService.display(error);\n  }\n\n  onGetJSON(json: any, row: TableRowModel): any {\n    return json;\n  }\n}\n","<div class=\"layout responsive\">\n    <ng-solcre-simple-panel \n        *ngIf=\"tableModel\" \n        (onParseModel)=\"onParseModel($event)\" \n        (onBeforeOpen)=\"onBeforeOpen($event)\" \n        (onBeforeSend)=\"onBeforeSend($event)\" \n        (onSaveSuccess)=\"onSaveSuccess($event)\" \n        (onError)=\"onError($event)\" \n        [breadcrumbs]=\"breadcrumbs\" \n        [options]=\"panelOptions\" \n        [primaryForm]=\"primaryForm\" \n        [tableModel]=\"tableModel\" \n        [onGetJSON]=\"onGetJSON\" \n        [customTableTemplate]=\"customTdTemplate\" \n        [tableOptions]=\"tableOption\">\n\n        <div class=\"primary-form styled-form\" [formGroup]=\"primaryForm\">\n            <ng-solcre-input-holder \n                inputId=\"app-categories-name\" \n                [control]=\"primaryForm.get('name')\">\n\n                <label \n                    class=\"label\" \n                    for=\"app-categories-name\">{{ \"categories.name\" | translate}}</label>\n                <input \n                    type=\"text\" \n                    name=\"name\" \n                    class=\"input\" \n                    formControlName=\"name\" \n                    id=\"app-categories-name\" \n                    [class.error]=\"!primaryForm.get('name')?.valid && primaryForm.get('name')?.touched\" \n                    [placeholder]=\"'categories.namePlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n            <ng-solcre-input-holder \n                inputId=\"app-categories-orderNumber\" \n                [control]=\"primaryForm.get('orderNumber')\">\n\n                <label \n                    class=\"label\" \n                    for=\"app-categories-orderNumber\">{{ \"categories.orderNumber\" | translate}}</label>\n                <input \n                    type=\"number\" \n                    name=\"orderNumber\" \n                    class=\"input\" \n                    formControlName=\"orderNumber\" \n                    id=\"app-categories-orderNumber\" \n                    [class.error]=\"!primaryForm.get('orderNumber')?.valid && primaryForm.get('orderNumber')?.touched\" \n                    [placeholder]=\"'categories.orderNumberPlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n            <ng-solcre-input-holder \n                inputId=\"app-category-featured\" \n                [control]=\"primaryForm.get('featured')\">\n\n                <label\n                    class=\"label\" \n                    for=\"app-category-featured\">{{ 'categories.featured' | translate }}</label>\n                <ng-solcre-select \n                    controlName=\"featured\" \n                    modelId=\"id\" \n                    modelIdKey=\"id\" \n                    modelDisplayKey=\"display\" \n                    [placeholder]=\"'categories.featuredPlaceholder' | translate\" \n                    [models]=\"flags\" \n                    [form]=\"primaryForm\">\n                </ng-solcre-select>\n            </ng-solcre-input-holder>\n        </div>\n    </ng-solcre-simple-panel>\n</div>\n\n<ng-template #customTdTemplate let-model=\"model\" let-field=\"field\">\n    <span [ngSwitch]=\"field\">\n        <ng-container *ngSwitchCase=\"'featured'\">{{ (model.featured ? 'commons.yes' : 'commons.no') | translate }}</ng-container>\n        <ng-container *ngSwitchDefault>{{ model[field] }}</ng-container>\n    </span>\n</ng-template>","import { DateUtility } from '@solcre-org/admin-core';\nimport { DataBaseModelInterface } from '@solcre-org/core';\n\nexport class UserModel implements DataBaseModelInterface {\n  id?: number;\n  isLeaderWorkspace?: boolean;\n  isAdmin?: boolean;\n  name?: string;\n  lastName?: string | null;\n  email?: string;\n  addedAt?: string | null;\n  groups?: number[];\n  workspaces?: number[];\n\n  constructor(json?: any) {\n    if (json) {\n      this.fromJSON(json);\n    }\n  }\n\n  public fromJSON(json: any): void {\n    if (json) {\n      this.id = json.id;\n      this.name = json.name;\n      this.lastName = json.lastName;\n      this.email = json.email;\n      this.isLeaderWorkspace = json.isLeaderWorkspace;\n      this.isAdmin = json.isAdmin;\n      this.addedAt = json.addedAt\n        ? DateUtility.format(json.addedAt.date, 'DD/MM/YYYY')\n        : null;\n      this.groups = json.groups;\n      this.workspaces = json.workspaces;\n    }\n  }\n\n  public toJSON(): any {\n    return {\n      id: this.id,\n      name: this.name,\n      lastName: this.lastName,\n      email: this.email,\n      addedAt: this.addedAt,\n      groups: this.groups,\n      isAdmin: this.isAdmin,\n      isLeaderWorkspace: this.isLeaderWorkspace,\n      workspaces: this.workspaces\n    };\n  }\n\n  public getId(): number {\n    return this.id ?? 0;\n  }\n\n  public getReference(): string {\n    return this.name ?? '';\n  }\n}\n","import {ChangeDetectorRef, Component, OnInit, inject } from '@angular/core';\nimport {\n  BreadcrumbModel,\n  RemoteDataModel,\n  SimplePanelOptions,\n  SimplePanelRowParsingInterface,\n  SimplePanelService,\n  TableHeaderModel,\n  TableModel,\n  TableOptions,\n  TableRowActionModel,\n  TableRowModel,\n} from '@solcre-org/admin-core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { FormBuilder,FormGroup} from '@angular/forms';\nimport { ArrayUtility } from '@solcre-org/core';\n\nimport { UserModel } from '../../models/users.model';\nimport { WorkspaceModel } from '../../models/workspace.model';\nimport { AdminPanelsService } from '../../../shared/services/admin-panels.service';\n\n@Component({\n    selector: 'intranet-users',\n    templateUrl: './users.component.html',\n    providers: [SimplePanelService],\n    standalone: false\n})\nexport class UsersComponent implements OnInit {\n  //Services\n  adminPanelsService: AdminPanelsService = inject(AdminPanelsService);\n\n  //Constant\n  USER_TYPE_USER: number = 1;\n  USER_TYPE_LEADER: number = 2;\n\n  //Models\n  tableModel: TableModel;\n  breadcrumbs: BreadcrumbModel[];\n  panelOptions: SimplePanelOptions;\n  primaryForm: FormGroup;\n  tableOptions: TableOptions;\n  workSpaces: WorkspaceModel[] = [];\n  userTypes:any[] = [\n    { id: this.USER_TYPE_USER, display: 'Usuario' },\n    { id: this.USER_TYPE_LEADER, display: 'Líder de área' }\n  ];\n\n  constructor(\n    private translateService: TranslateService,\n    private formBuilder: FormBuilder,\n    private simplePanelService: SimplePanelService,\n    private cdRef: ChangeDetectorRef\n  ) {\n    // this.IdsSelected = [];\n    //Initialize all models\n    this.tableModel = new TableModel(\n      [\n        new TableHeaderModel('', 'name'),\n        new TableHeaderModel('', 'lastName'),\n        new TableHeaderModel('', 'email'),\n        new TableHeaderModel('', 'workspaces'),\n      ],\n      [\n        new TableRowActionModel(\n          'show',\n          '',\n          'icon-edit',\n          (row: TableRowModel) => {\n            this.onSetWorkspace(row);\n          }\n        ),\n      ]\n    );\n\n    this.breadcrumbs = [new BreadcrumbModel('', ['users'], true)];\n\n    this.panelOptions = {\n      URI: this.adminPanelsService.getApiUrlsConfig().apiIntranetUsersUri,\n      keepIdOnUpdate: true,\n      quickSearch: true,\n      preventProcessHttpErrors: true,\n      title: '',\n      defaultQueryParams: {},\n      disableAdd: true,\n      updateWithPatch: true,\n      remoteData: [\n        new RemoteDataModel('workspace', this.adminPanelsService.getApiUrlsConfig().apiIntranetWorkspacesUri),\n      ],\n    };\n    this.tableOptions = { hideDelete: true, hideEdit: true };\n    this.breadcrumbs = [new BreadcrumbModel('', ['users'], true)];\n\n    this.primaryForm = this.formBuilder.group({\n      id: this.formBuilder.control(null, []),\n      isAdmin: this.formBuilder.control(null, []),\n      workspaces: this.formBuilder.group({}),\n    });\n  }\n\n  async ngOnInit() {\n    const translations: any = await this.translateService\n      .get([\n        'nav.users',\n        'users.panelTitle',\n        'users.name',\n        'users.lastName',\n        'users.email',\n        'users.workspaceSubTitle',\n      ])\n      .toPromise();\n\n    this.panelOptions.title = translations['users.panelTitle'];\n\n    this.breadcrumbs[0].display = translations['nav.users'];\n\n    if (this.tableModel.header) {\n      this.tableModel.header[0].display = translations['users.name'];\n      this.tableModel.header[1].display = translations['users.lastName'];\n      this.tableModel.header[2].display = translations['users.email'];\n      this.tableModel.header[3].display =\n        translations['users.workspaceSubTitle'];\n    }\n  }\n\n  onParseModel(arg: SimplePanelRowParsingInterface): void {\n    const news: UserModel = new UserModel();\n    news.fromJSON(arg.json);\n    arg.callback(news);\n  }\n\n  onBeforeSend(json: any) {\n    delete json.id;\n    json.workspaces = this.parseWorkspacesFormValueToJson(json.workspaces);\n  }\n\n  onSetWorkspace(data: any): void {\n    this.simplePanelService.triggerOnEditRow(data);\n  }\n\n  onError(error: any) {}\n\n  onGetJSON(json: any, row: TableRowModel): any {\n    return json;\n  }\n\n  onRemoteData(datas: any): void {\n    this.workSpaces = datas.workspace.data;\n    this.setupWorkspacesForms(this.workSpaces);\n  }\n\n  onBeforeOpen(json: any) {\n    //Check value isAdmin\n    json.isAdmin = json.isAdmin ? 1 : 0;\n    json.workspaces = this.parseWorkspacesJsonToFormValue(json.workspaces);\n  }\n\n  onSaveSuccess() {\n    this.primaryForm.patchValue({ workspaces: [] });\n    this.simplePanelService.triggerOnRefreshRows();\n  }\n\n  onModalClosed() {\n    this.primaryForm.patchValue({ workspaces: [] });\n  }\n\n  onWorkspaceCheckedChange(workspaceId: number, event: any): void {\n    const workspaceForm: FormGroup = this.getWorkspaceForm(workspaceId);\n\n    //Control instance\n    if(workspaceForm instanceof FormGroup){\n      workspaceForm.patchValue({\n        type: workspaceForm.value.value ? 1 : null\n      })\n    }\n  }\n\n  public getWorkspaceForm(workspaceId: number): FormGroup {\n    return this.primaryForm.get('workspaces.' + workspaceId) as FormGroup;\n  }\n\n  private setupWorkspacesForms(workspaces: WorkspaceModel[]) {\n    const workspaceObj: any = {};\n\n    //Create each workspace form  group\n    workspaces.forEach((workspace: WorkspaceModel) => {\n      workspaceObj[workspace.id] = this.formBuilder.group({\n        value: this.formBuilder.control(false),\n        type: this.formBuilder.control(1)\n      });\n    });\n\n    //Update fg\n    this.primaryForm.setControl('workspaces', this.formBuilder.group(workspaceObj));\n  }\n\n  private parseWorkspacesJsonToFormValue(workspacesJson: any): any {\n    const json: any = {};\n\n    ArrayUtility.each(workspacesJson, (value: any) => {\n      json[value.id] = {\n        value: true,\n        type: value.isLeader ?  this.USER_TYPE_LEADER : this.USER_TYPE_USER\n      }\n    });\n    return json;\n  }\n  private parseWorkspacesFormValueToJson(formValue: any): any {\n    const value: any = [];\n\n    ArrayUtility.each(formValue, (obj: any, id: number) => {\n      if(obj.value){\n        value.push({\n          id,\n          isLeaderWorkspace: obj.type == this.USER_TYPE_LEADER ? 1 : 0\n        })\n      }\n    });\n    return value;\n  }\n\n}\n ","<div class=\"layout responsive\">\n    <ng-solcre-simple-panel [customTableTemplate]=\"customTdTemplate\"  (onModalClosed)=\"onModalClosed()\" (onSaveSuccess)=\"onSaveSuccess()\" (onBeforeOpen)=\"onBeforeOpen($event)\" (onRemoteData)=\"onRemoteData($event)\" [tableOptions]=\"tableOptions\" [breadcrumbs]=\"breadcrumbs\" *ngIf=\"tableModel\" [tableModel]=\"tableModel\" (onParseModel)=\"onParseModel($event)\" (onBeforeSend)=\"onBeforeSend($event)\" (onError)=\"onError($event)\" [options]=\"panelOptions\" [primaryForm]=\"primaryForm\" [onGetJSON]=\"onGetJSON\">\n        <div class=\"primary-form styled-form\" [formGroup]=\"primaryForm\">\n\n            <ng-solcre-input-holder\n                inputId=\"app-users-isAdmin\"\n                [control]=\"primaryForm.get('isAdmin')\">\n                <label \n                    class=\"label\" \n                    for=\"app-users-isAdmin\">{{ 'users.isAdmin' | translate }}</label>\n                \n                <div\n                    class=\"radios-group\">\n                    <label class=\"radio-label clickable\">\n                        <input \n                            class=\"notVisible\" \n                            formControlName=\"isAdmin\"\n                            name=\"isAdmin\"\n                            [value]=\"1\"\n                            type=\"radio\">\n                        <span class=\"radio\"></span>\n                        <span class=\"text\">Si</span>\n                    </label>\n\n                    <label class=\"radio-label clickable\">\n                        <input \n                            class=\"notVisible\" \n                            formControlName=\"isAdmin\"\n                            name=\"isAdmin\"\n                            [value]=\"0\"\n                            type=\"radio\">\n                        <span class=\"radio\"></span>\n                        <span class=\"text\">No</span>\n                    </label>\n                </div>\n            </ng-solcre-input-holder>\n\n            <ng-container>\n                <p class=\"subtitle margin-b-1 margin-t-6\">{{'users.workspaceSubTitle' | translate}}</p>\n                <div formGroupName=\"workspaces\" class=\"select-form-container\">\n                    <div *ngFor=\"let item of workSpaces; let i=index\" [formGroupName]=\"item.id\">\n                        <label class=\"label\">\n                            <input \n                                type=\"checkbox\" \n                                formControlName=\"value\"\n                                [value]=\"true\"\n                                (change)=\"onWorkspaceCheckedChange(item.id, $event)\"/>\n                            {{ item.title }}\n                        </label>\n                        <ng-solcre-input-holder \n                            *ngIf=\"primaryForm.value.workspaces[item.id]?.value\"\n                            inputId=\"app-user-type\" \n                            [control]=\"primaryForm.get('workspaces.' + item.id + '.type')\">\n                            <label \n                                class=\"label\" \n                                for=\"app-users-type\">{{ 'users.type' | translate }}</label>\n                            <ng-solcre-select \n                                controlName=\"type\" \n                                modelId=\"id\" \n                                modelIdKey=\"id\" \n                                modelDisplayKey=\"display\" \n                                [placeholder]=\"'users.type' | translate\" \n                                [models]=\"userTypes\" \n                                [form]=\"getWorkspaceForm(item.id)\">\n                            </ng-solcre-select>\n                        </ng-solcre-input-holder>\n                    </div>\n                </div>\n            </ng-container>\n        </div>\n\n    </ng-solcre-simple-panel>\n</div>\n<ng-template #customTdTemplate let-model=\"model\" let-field=\"field\">\n    <span [ngSwitch]=\"field\">\n        <ng-container *ngSwitchCase=\"'workspaces'\">\n            <ng-container *ngFor=\"let workspace of model.workspaces; let i=index\"><span *ngIf=\"i!==0\">, </span>{{ workspace.id | data: {key: 'title', data: workSpaces} }}</ng-container>\n        </ng-container>\n        <ng-container *ngSwitchDefault>{{ model[field] }}</ng-container>\n    </span>\n</ng-template>","import { Component, OnInit, inject } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { HttpClient, HttpEvent } from '@angular/common/http';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ApiResponseModel, ArrayUtility, AuthService } from '@solcre-org/core';\nimport { BreadcrumbModel, ErrorsHttpService, RemoteDataModel, SimplePanelOptions, SimplePanelRowParsingInterface, SimplePanelService, TableHeaderModel, TableModel, TableOptions, TableRowActionModel, TableRowModel, YoutubeUtils } from '@solcre-org/admin-core';\nimport { Observable } from 'rxjs';\nimport { Router } from '@angular/router';\n\nimport { CategoryModel } from '../../models/category.model';\nimport { WorkspaceModel } from '../../models/workspace.model';\nimport { AdminPanelsService } from '../../../shared/services/admin-panels.service';\n\n@Component({\n    selector: 'intranet-workspace',\n    templateUrl: './workspace.component.html',\n    styleUrls: [],\n    providers: [SimplePanelService],\n    standalone: false\n})\nexport class WorkspaceComponent implements OnInit{\n  //Services\n  adminPanelsService: AdminPanelsService = inject(AdminPanelsService);\n\n  //Models\n  breadcrumbs: BreadcrumbModel[];\n  tableModel: TableModel;\n  panelOptions: SimplePanelOptions;\n  tableOption: TableOptions;\n  primaryForm: FormGroup;\n  imagesUrl: string = this.adminPanelsService.getApiUrlsConfig().apiImagesUrl;\n\n  //Data\n  categories: CategoryModel[] = [];\n\n  constructor(\n    private router: Router,\n    private errorsHttpService: ErrorsHttpService,\n    private httpClient: HttpClient,\n    private formBuilder: FormBuilder,\n    private translateService: TranslateService,\n    public authService: AuthService\n  ) {\n    //Initialize all models\n    this.tableModel = new TableModel(\n      [ new TableHeaderModel('', 'title') ],\n      [ new TableRowActionModel(\n        'documents',\n        '',\n        'icon-folders',\n        (row: TableRowModel) => {\n          const ws: WorkspaceModel = row.model;\n          this.router.navigate(\n            ['workspace', ws.id, 'documents', ws.documentFolder ], \n            { queryParams: { workspace: ws.title } }\n          );\n        }\n      ),]\n    );\n\n    this.panelOptions = {\n      URI: this.adminPanelsService.getApiUrlsConfig().apiIntranetWorkspacesUri,\n      keepIdOnUpdate: true,\n      preventProcessHttpErrors: true,\n      title: 'nav.workspacew',\n      defaultQueryParams: {\n        size: -1,\n      },\n      remoteData: [\n        new RemoteDataModel(\n          'categories', \n          this.adminPanelsService.getApiUrlsConfig().apiIntranetCategoriesUri, \n          { 'sort[orderNumber]': 'ASC' }\n        )\n      ]\n    };\n    //Create breadcrumbs\n    this.breadcrumbs = [ new BreadcrumbModel('', ['workspace'], true) ];\n\n    //Create form\n    this.primaryForm = this.formBuilder.group({\n      id: this.formBuilder.control(null, []),\n      title: this.formBuilder.control(null, [Validators.required]),\n      content: this.formBuilder.control(null, [Validators.required]),\n      file: this.formBuilder.control(null, []),\n      newFile: this.formBuilder.control(null, []),\n      category: this.formBuilder.control(null, [Validators.required]),\n      userGroup: this.formBuilder.control(null, []),\n      userGroupName: this.formBuilder.control(null, []),\n      documentFolder: this.formBuilder.control(null, []),\n      documentFolderName: this.formBuilder.control(null, []),\n    });\n    \n    this.tableOption = { useUnshift: true };\n  }\n\n  async ngOnInit() {\n    //Get translations\n    const translations: any = await this.translateService\n      .get([\n        'workspace.panelTitle',\n        'workspace.title',\n        'nav.workspace',\n      ])\n      .toPromise();\n\n    //Apply translations to panel\n    this.panelOptions.title = translations['workspace.panelTitle'];\n    this.breadcrumbs[0].display = translations['nav.workspace'];\n\n    //Check header\n    if (this.tableModel.header) {\n      this.tableModel.header[0].display = translations['workspace.title'];\n    }\n  }\n\n  onBeforeSend(json: any) {\n    const newFile: File | null = json.newFile;\n    const file: any | null = json.file;\n\n    //Remove keys\n    delete json.newFile;\n    delete json.file;\n\n    //Check id\n    if (!!json.id) {\n      delete json.id;\n    }\n\n    // Load new files\n    if(newFile){\n      json.file = newFile;\n    }\n\n    if(file){\n      json.fileId = file.id;\n    }\n\n    //References to string\n    json.category = json.category?.toString();\n    json.documentFolder = json.documentFolder?.toString();\n    json.userGroup = json.userGroup?.toString();\n  }\n\n  onPicturesSelected($event: any): void {\n    const files: File[] = $event.target.files;\n    this.primaryForm.patchValue({ newFile: files ? files[0] : null });\n  }\n\n  onDeleteFile(): void {\n    //Clear input\n    this.primaryForm.patchValue({ file: null });\n  }\n\n  onDeleteSelectedFile(): void {\n    this.primaryForm.patchValue({ newFile: null });\n  }\n\n  onParseModel(arg: SimplePanelRowParsingInterface): void {\n    //Get each row from simple panel\n    const news: WorkspaceModel = new WorkspaceModel();\n    news.fromJSON(arg.json);\n    // Complete observable\n    arg.callback(news);\n  }\n\n  onBeforeOpen(json: any) { }\n\n  onSaveSuccess(response: ApiResponseModel): void {}\n\n  onError(error: any) {\n    //Display with translations\n    this.errorsHttpService.display(error);\n  }\n\n  onGetJSON(json: any, row: TableRowModel): any {\n    return json;\n  }\n\n  onVideoEditor(executeCommandFn: Function): void {\n    //Display a prompt\n    const link: string | null = window.prompt('Pegue el link del video', '');\n\n    //Control link\n    if (link) {\n      executeCommandFn('insertHtml', YoutubeUtils.getHTML(link));\n    }\n  }\n\n  onTitleBlur(): void {\n    const value: any = this.primaryForm.value;\n\n    if(!value.title || (value.userGroupName && value.documentFolderName)){\n      return;\n    }\n\n    //path names\n    this.primaryForm.patchValue({\n      userGroupName: value.userGroupName ?? value.title,\n      documentFolderName: value.documentFolderName ?? value.title\n    });\n  }\n\n  onRemoteData(data: any): void{\n    const categoryResponse: ApiResponseModel = data.categories;\n\n    //Clear\n    this.categories = [];\n\n    //Check data\n    ArrayUtility.each(categoryResponse?.data, (json: any) => {\n      const cat: CategoryModel = new CategoryModel();\n      cat.fromJSON(json);\n      this.categories.push(cat)\n    })\n  }\n}\n","<div class=\"layout responsive\">\n    <ng-solcre-simple-panel \n        *ngIf=\"tableModel\" \n        (onParseModel)=\"onParseModel($event)\" \n        (onBeforeOpen)=\"onBeforeOpen($event)\" \n        (onBeforeSend)=\"onBeforeSend($event)\" \n        (onSaveSuccess)=\"onSaveSuccess($event)\" \n        (onRemoteData)=\"onRemoteData($event)\"\n        (onError)=\"onError($event)\" \n        [breadcrumbs]=\"breadcrumbs\" \n        [options]=\"panelOptions\" \n        [primaryForm]=\"primaryForm\" \n        [tableModel]=\"tableModel\" \n        [onGetJSON]=\"onGetJSON\" \n        [customTableTemplate]=\"customTdTemplate\" \n        [tableOptions]=\"tableOption\">\n\n        <div class=\"primary-form styled-form\" [formGroup]=\"primaryForm\">\n            <ng-solcre-input-holder \n                inputId=\"app-workspace-title\" \n                [control]=\"primaryForm.get('title')\">\n                <label class=\"label\" for=\"app-workspace-title\">{{ \"workspace.title\" | translate}}</label>\n                <input \n                    type=\"text\" \n                    name=\"title\" \n                    class=\"input\" \n                    formControlName=\"title\" \n                    id=\"app-workspace-title\" \n                    (blur)=\"onTitleBlur()\"\n                    [class.error]=\"!primaryForm.get('title')?.valid && primaryForm.get('title')?.touched\" \n                    [placeholder]=\"'workspace.titlePlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder \n                inputId=\"app-workspace-category\" \n                [control]=\"primaryForm.get('category')\">\n                <label \n                    class=\"label\" \n                    for=\"app-workspace-category\">{{ 'workspace.category' | translate }}</label>\n                <ng-solcre-select \n                    controlName=\"category\" \n                    modelId=\"id\" \n                    modelIdKey=\"id\" \n                    modelDisplayKey=\"name\" \n                    [placeholder]=\"'workspace.categoryPlaceholder' | translate\" \n                    [models]=\"categories\" \n                    [form]=\"primaryForm\">\n                </ng-solcre-select>\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder \n                *ngIf=\"!primaryForm.value.id\"\n                inputId=\"app-workspace-userGroup\" \n                [control]=\"primaryForm.get('userGroup')\">\n                <label class=\"label\" for=\"app-workspace-userGroup\">{{ \"workspace.userGroup\" | translate}}</label>\n                <input \n                    type=\"text\" \n                    name=\"userGroupName\" \n                    class=\"input\" \n                    formControlName=\"userGroupName\" \n                    id=\"app-workspace-userGroup\" \n                    [class.error]=\"!primaryForm.get('userGroup')?.valid && primaryForm.get('userGroup')?.touched\" \n                    [placeholder]=\"'workspace.userGroupPlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder \n                *ngIf=\"!primaryForm.value.id\"\n                inputId=\"app-workspace-documentFolder\" \n                [control]=\"primaryForm.get('documentFolder')\">\n                <label class=\"label\" for=\"app-workspace-documentFolder\">{{ \"workspace.documentFolder\" | translate}}</label>\n                <input \n                    type=\"text\" \n                    name=\"documentFolderName\" \n                    class=\"input\" \n                    formControlName=\"documentFolderName\" \n                    id=\"app-workspace-documentFolder\" \n                    [class.error]=\"!primaryForm.get('documentFolderName')?.valid && primaryForm.get('documentFolderName')?.touched\" \n                    [placeholder]=\"'workspace.documentFolderPlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder \n                inputId=\"app-workspace-file\" \n                [control]=\"primaryForm.get('newFile')\">\n\n                <label \n                    class=\"label\" \n                    for=\"app-news-file\">{{ \"workspace.file\" | translate}}</label>\n                <input \n                    *ngIf=\"!primaryForm.value.newFile && !primaryForm.value.file\"\n                    class=\"input\" \n                    type=\"file\" \n                    accept=\"image/*\" \n                    (change)=\"onPicturesSelected($event)\" />\n\n                <div class=\"row margin-t-3\">\n                    <ng-container  *ngIf=\"primaryForm.value.newFile\">\n                        <div class=\"col-sm-3\">\n                            <ng-solcre-picture-preview \n                                [pictureFile]=\"primaryForm.value.newFile\" \n                                [pictureName]=\"''\" \n                                [imagesUrl]=\"imagesUrl\">\n                            </ng-solcre-picture-preview>\n                        </div>\n                        <div class=\"col-sm-1\">\n                            <button \n                                (click)=\"onDeleteSelectedFile()\" \n                                type=\"button\" \n                                class=\"action action-btn icon-btn icon-delete text-error\"></button>\n                        </div>\n                    </ng-container>\n\n                    <ng-container *ngIf=\"primaryForm.value.file\">\n                        <div class=\"col-sm-3\">\n                            <ng-solcre-picture-preview \n                                [pictureName]=\"primaryForm.value.file.filename\" \n                                [imagesUrl]=\"imagesUrl\">\n                            </ng-solcre-picture-preview>\n                        </div>\n                        <div class=\"col-sm-1\">\n                            <button \n                                (click)=\"onDeleteFile()\" \n                                type=\"button\" \n                                class=\"action action-btn icon-btn icon-delete text-error\"></button>\n                        </div>\n                    </ng-container>\n                </div>\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder \n                inputId=\"app-workspace-content\" \n                [control]=\"primaryForm.get('content')\">\n                <label class=\"label\" for=\"app-workspace-content\">{{ 'workspace.content' | translate }}</label>\n                <solcre-text-editor \n                    name=\"content\" \n                    class=\"input\" \n                    formControlName=\"content\" \n                    id=\"app-workspace-content\" \n                    [apiUrl]=\"adminPanelsService.getApiUrlsConfig().apiUrl\"\n                    [apiUploadImagesUrl]=\"adminPanelsService.getApiUrlsConfig().apiUploadImagesUrl\"\n                    [authToken]=\"authService.getAccessToken()?.token\"\n                    [ngClass]=\"{ error: !primaryForm.get('content')?.valid && primaryForm.get('content')?.touched }\">\n                </solcre-text-editor>\n            </ng-solcre-input-holder>\n\n\n        </div>\n    </ng-solcre-simple-panel>\n</div>\n\n<ng-template #customTdTemplate let-model=\"model\" let-field=\"field\">\n    <span [ngSwitch]=\"field\">\n        <!-- <ng-container *ngSwitchCase=\"'isFeatured'\">{{ (model.isFeatured ? 'commons.yes' : 'commons.no') | translate }}</ng-container>\n        <ng-container *ngSwitchCase=\"'category'\">{{ model.category | data: { key: 'name', data: categories } }}</ng-container>\n        <ng-container *ngSwitchCase=\"'date'\">{{ model.date | date: 'dd/MM/YYYY' }}</ng-container>\n        <ng-container *ngSwitchCase=\"'state'\">\n            <span *ngIf=\"model.date\">{{ 'news.statePublished' | translate }}{{ model.date | date: 'dd/MM/YYYY' }}</span>\n            <span *ngIf=\"!model.date\">{{ 'news.stateNoPublished' | translate }}</span>\n        </ng-container> -->\n        <ng-container *ngSwitchDefault>{{ model[field] }}</ng-container>\n    </span>\n</ng-template>","import { DataBaseModelInterface } from '@solcre-org/core';\n\nexport class DocumentModel implements DataBaseModelInterface {\n\n  constructor(\n    public id?: number,\n    public title?: string,\n    public filename?: string,\n    public extension?: string,\n    public size?: number,\n    public documentFolder?: number,\n    public orderNumber?: number,\n    ) { }\n    \n  public fromJSON(json: any): void {\n    if (json) {\n      this.id = json.id;\n      this.title = json.title;\n      this.filename = json.filename;\n      this.extension = json.extension;\n      this.size = json.size;\n      this.documentFolder = json.documentFolder;\n      this.orderNumber = json.orderNumber;\n    }\n  }\n\n  public toJSON(): any {\n    return {\n      \"id\": this.id,\n      \"title\": this.title,\n      \"filename\": this.filename,\n      \"file\": this.filename,\n      \"extension\": this.extension,\n      \"size\": this.size,\n      \"documentFolder\": this.documentFolder,\n      \"orderNumber\": this.orderNumber,\n    }\n  }\n\n  public getId(): number {\n    return this.id ?? 0;\n  }\n\n  public getReference(): string {\n    return this.title ?? '';\n  }\n\n}\n","import { ArrayUtility, DataBaseModelInterface } from '@solcre-org/core';\nimport { DocumentModel } from './document.model';\n\nexport class DocumentFolderModel implements DataBaseModelInterface {\n\n  public childrens: DocumentFolderModel[] = [];\n  public documents: DocumentModel[] = [];\n\n  constructor(\n    public id?: number,\n    public name?: string,\n    public displayName?: string,\n    public orderNumber?: number,\n    public parent?: number,\n    public displayChildrens?: boolean\n  ) { }\n    \n  public fromJSON(json: any): void {\n    if (json) {\n      this.id = json.id;\n      this.name = json.name;\n      this.displayName = json.displayName;\n      this.orderNumber = json.orderNumber;\n      this.parent = json.parent;\n      this.displayChildrens = json.displayChildrens ?? false;\n      this.childrens = [];\n      this.documents = [];\n\n      //Check embedded\n      if(json._embedded){\n        if(json._embedded.children){\n          //Parse subfolders\n          this.childrens = ArrayUtility.map(json._embedded.children, (json: any) => {\n            const folder: DocumentFolderModel = new DocumentFolderModel();\n            folder.fromJSON(json);\n            return folder;\n          });\n        }\n        if(json._embedded.documents){\n          //Parse documents\n          this.documents = ArrayUtility.map(json._embedded.documents, (json: any) => {\n            const document: DocumentModel = new DocumentModel();\n            document.fromJSON(json);\n            return document;\n          });\n        }\n      }\n    }\n  }\n\n  public toJSON(): any {\n    return {\n      \"id\": this.id,\n      \"name\": this.name,\n      \"displayName\": this.displayName,\n      \"orderNumber\": this.orderNumber,\n      \"parent\": this.parent,\n    }\n  }\n\n  public getId(): number {\n    return this.id ?? 0;\n  }\n\n  public getReference(): string {\n    return this.displayName ?? '';\n  }\n\n}\n","import { DataBaseModelInterface } from '@solcre-org/core';\n\nexport class DocumentFolderAccessModel implements DataBaseModelInterface {\n\n  constructor(\n    public id?: number,\n    public email?: string,\n    public fullName?: string\n  ) { }\n    \n  public fromJSON(json: any): void {\n    if (json) {\n      this.id = json.id;\n      this.email = json.email;\n      this.fullName = json.fullName;\n    }\n  }\n\n  public toJSON(): any {\n    return {}\n  }\n\n  public getId(): number {\n    return this.id ?? 0;\n  }\n\n  public getReference(): string {\n    return this.fullName ?? '';\n  }\n\n}\n","import { DataBaseModelInterface } from '@solcre-org/core';\n\nexport class DocumentFolderMoveDestinationModel implements DataBaseModelInterface {\n\n  constructor(\n    public id?: number,\n    public displayName?: string,\n    public depth: number = 0,\n    public disabled: boolean = false,\n    public isRoot: boolean = false\n  ) { }\n\n  public fromJSON(json: any): void {\n    if (json) {\n      this.id = json.id;\n      this.displayName = json.displayName;\n      this.depth = json.depth ?? 0;\n      this.disabled = json.disabled ?? false;\n      this.isRoot = json.isRoot ?? false;\n    }\n  }\n\n  public toJSON(): any {\n    return {\n      \"id\": this.id,\n      \"displayName\": this.displayName,\n    }\n  }\n\n  public getId(): number {\n    return this.id ?? 0;\n  }\n\n  public getReference(): string {\n    return this.displayName ?? '';\n  }\n\n}\n","import { ArrayUtility } from '@solcre-org/core';\n\nimport { DocumentFolderModel } from '../../models/document-folder.model';\nimport { DocumentFolderMoveDestinationModel } from './document-folder-move-destination.model';\n\nexport class DocumentFolderMoveUtility {\n\n  //Prefix used to keep the tree readable inside a native select\n  public static readonly DEPTH_PREFIX: string = '— ';\n\n  //Folders that can never receive the moved folder: the folder itself and each descendant\n  public static getBlockedIds(folder: DocumentFolderModel): number[] {\n    const blockedIds: number[] = [];\n\n    //Without an id there is nothing safe to block\n    if (!folder || folder.id === null || folder.id === undefined) {\n      return blockedIds;\n    }\n\n    //Block the folder\n    blockedIds.push(folder.id);\n\n    //Block each descendant\n    ArrayUtility.each(folder.childrens, (children: DocumentFolderModel) => {\n      ArrayUtility.each(DocumentFolderMoveUtility.getBlockedIds(children), (id: number) => {\n        blockedIds.push(id);\n      });\n    });\n\n    return blockedIds;\n  }\n\n  //Build every destination of the workspace tree, the root folder included\n  public static buildDestinations(\n    folder: DocumentFolderModel,\n    folders: DocumentFolderModel[],\n    rootId: number,\n    rootDisplayName: string\n  ): DocumentFolderMoveDestinationModel[] {\n    const destinations: DocumentFolderMoveDestinationModel[] = [];\n\n    //Without folder or root reference the ui can not offer a safe destination\n    if (!folder || folder.id === null || folder.id === undefined || !rootId || isNaN(rootId)) {\n      return destinations;\n    }\n\n    const blockedIds: number[] = DocumentFolderMoveUtility.getBlockedIds(folder);\n\n    //The root can receive folders, but it is never movable itself\n    destinations.push(\n      new DocumentFolderMoveDestinationModel(\n        rootId,\n        rootDisplayName,\n        0,\n        DocumentFolderMoveUtility.isSameId(rootId, folder.parent),\n        true\n      )\n    );\n\n    //Walk the tree\n    DocumentFolderMoveUtility.pushDestinations(folders, blockedIds, folder, destinations, 1);\n\n    return destinations;\n  }\n\n  //A destination is usable only when it is not the current parent\n  public static hasEnabledDestinations(destinations: DocumentFolderMoveDestinationModel[]): boolean {\n    return ArrayUtility.filter(destinations, (destination: DocumentFolderMoveDestinationModel) => {\n      return !destination.disabled;\n    }).length > 0;\n  }\n\n  //Check a destination id against the built list, returns null when it is not selectable\n  public static findEnabledDestination(\n    destinations: DocumentFolderMoveDestinationModel[],\n    id: any\n  ): DocumentFolderMoveDestinationModel | null {\n    let found: DocumentFolderMoveDestinationModel | null = null;\n\n    ArrayUtility.each(destinations, (destination: DocumentFolderMoveDestinationModel) => {\n      if (!found && !destination.disabled && DocumentFolderMoveUtility.isSameId(destination.id, id)) {\n        found = destination;\n      }\n    });\n\n    return found;\n  }\n\n  //Ids travel as route params and form values, so they are compared as strings\n  public static isSameId(idA: any, idB: any): boolean {\n    if (idA === null || idA === undefined || idB === null || idB === undefined) {\n      return false;\n    }\n\n    return idA.toString() === idB.toString();\n  }\n\n  private static pushDestinations(\n    folders: DocumentFolderModel[],\n    blockedIds: number[],\n    folder: DocumentFolderModel,\n    destinations: DocumentFolderMoveDestinationModel[],\n    depth: number\n  ): void {\n    const foldersSorted: DocumentFolderModel[] = ArrayUtility.sort((folders ?? []).slice(0), 'orderNumber');\n\n    ArrayUtility.each(foldersSorted, (item: DocumentFolderModel) => {\n      const isBlocked: boolean = ArrayUtility.filter(blockedIds, (blockedId: number) => {\n        return DocumentFolderMoveUtility.isSameId(blockedId, item.id);\n      }).length > 0;\n\n      //Skip the moved folder and its descendants to prevent cycles\n      if (isBlocked) {\n        return;\n      }\n\n      //Push the folder, disabled when it is the current parent\n      destinations.push(\n        new DocumentFolderMoveDestinationModel(\n          item.id,\n          item.displayName ?? item.name,\n          depth,\n          DocumentFolderMoveUtility.isSameId(item.id, folder.parent)\n        )\n      );\n\n      //Push its subfolders\n      DocumentFolderMoveUtility.pushDestinations(item.childrens, blockedIds, folder, destinations, depth + 1);\n    });\n  }\n\n}\n","export class UploadSignuatureModel {\n\n    public key: string;\n    public amzCredential: string;\n    public amzAlgorithm: string;\n    public amzToken: string;\n    public amzDate: string;\n    public amzSignature: string;\n    public policy: string;\n    public method: string;\n    public action: string;\n    public filename: string;\n    public filenameChecked: string;\n    public fileType: string;\n\n    constructor(){\n        this.key = '';\n        this.amzCredential = '';\n        this.amzAlgorithm = '';\n        this.amzDate = '';\n        this.amzSignature = '';\n        this.policy = '';\n        this.method = '';\n        this.action = '';\n        this.filename = '';\n        this.filenameChecked = '';\n        this.fileType = '';\n    }\n\n    public getFilename(): string {\n        return this.filename?.split('/').pop() ?? ''\n    }\n\n    static fromJSON(json: any): UploadSignuatureModel {\n        const obj: UploadSignuatureModel = new UploadSignuatureModel();\n\n        obj.filename = json.filename;\n        obj.filenameChecked = json.file;\n\n        //Check formInputs\n        if(json?.formInputs){\n            obj.key = json?.formInputs.key;\n            obj.amzCredential = json.formInputs['X-Amz-Credential'];\n            obj.amzAlgorithm = json.formInputs['X-Amz-Algorithm'];\n            obj.amzDate = json.formInputs['X-Amz-Date'];\n            obj.amzSignature = json.formInputs['X-Amz-Signature'];\n            obj.amzToken = json.formInputs['X-Amz-Security-Token'];\n            obj.policy = json.formInputs['Policy'];\n        }\n\n        //Check formattributes\n        if(json?.formInputs){\n            obj.method = json?.formAttributes.method;\n            obj.action = json?.formAttributes.action;\n        }\n        return obj;\n    }\n}","import { EventEmitter, Injectable, inject } from '@angular/core';\nimport { Observable, concatMap, forkJoin, map } from 'rxjs';\nimport { ApiResponseModel, ApiService } from '@solcre-org/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { UploadSignuatureModel } from './document-signature.model';\nimport { DocumentFolderModel } from '../../models/document-folder.model';\nimport { DocumentFolderMoveUtility } from './document-folder-move.utility';\nimport { DocumentModel } from '../../models/document.model';\nimport { AdminPanelsService } from '../../../shared/services/admin-panels.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DocumentsService {\n  //Services\n  private adminPanelsService: AdminPanelsService = inject(AdminPanelsService);\n\n  public onCollapseStateChange: EventEmitter<boolean> = new EventEmitter();\n  public onDragStateChange: EventEmitter<DocumentFolderModel> = new EventEmitter();\n\n  //Folder being dragged over the tree and the ids that can not receive it\n  private dragFolder: DocumentFolderModel = null;\n  private dragBlockedIds: number[] = [];\n\n  constructor(\n    private apiService: ApiService,\n    private httpClient: HttpClient) { }\n\n  public uploadToS3(file: File, documentFolder: number): Observable<any>{\n    //Get signature\n    return this.getSignatureFile(file.name, documentFolder).pipe(\n      concatMap((response: UploadSignuatureModel, index: number) => {\n        response.fileType = file.type;\n        //Signature obtained, now upload it\n        return this.uploadToS3Step(file, response)\n      })\n    );\n  }\n\n  public moveDocumentFolder(folderId: number, parentId: number): Observable<ApiResponseModel> {\n    const url: string = this.adminPanelsService.getApiUrlsConfig().apiIntranetDocumentFoldersUri;\n\n    //The backend resolves the move, the ui only sends the new parent\n    return this.apiService.partialUpdateObj(url, folderId, { parent: parentId });\n  }\n\n  public startFolderDrag(folder: DocumentFolderModel): void {\n    //Only folders with a parent can be dragged, the workspace root can not\n    if(!folder || folder.parent === null || folder.parent === undefined){\n      return;\n    }\n\n    this.dragFolder = folder;\n    this.dragBlockedIds = DocumentFolderMoveUtility.getBlockedIds(folder);\n    this.onDragStateChange.emit(folder);\n  }\n\n  public endFolderDrag(): void {\n    this.dragFolder = null;\n    this.dragBlockedIds = [];\n    this.onDragStateChange.emit(null);\n  }\n\n  public getDragFolder(): DocumentFolderModel {\n    return this.dragFolder;\n  }\n\n  public isDragging(folder: DocumentFolderModel): boolean {\n    return !!this.dragFolder && DocumentFolderMoveUtility.isSameId(this.dragFolder.id, folder?.id);\n  }\n\n  //Same rules as the move dialog: no cycles and no drop on the current parent\n  public canDropOn(targetId: any): boolean {\n    if(!this.dragFolder || targetId === null || targetId === undefined){\n      return false;\n    }\n\n    //The folder and its descendants can not receive it\n    const isBlocked: boolean = this.dragBlockedIds.some((blockedId: number) => {\n      return DocumentFolderMoveUtility.isSameId(blockedId, targetId);\n    });\n\n    //The current parent does not change the location\n    return !isBlocked && !DocumentFolderMoveUtility.isSameId(this.dragFolder.parent, targetId);\n  }\n\n  public changeCollapseState(state: boolean): void {\n    this.onCollapseStateChange.emit(state)\n  }\n\n  private getSignatureFile(filename: string, documentFolder: number): Observable<UploadSignuatureModel> {\n    const url: string = this.adminPanelsService.getApiUrlsConfig().apiIntranetDocumentSignaturesUri;\n    return this.apiService.fetchData(url, {\n      filename, parent: documentFolder\n    }).pipe(map((response: ApiResponseModel) => UploadSignuatureModel.fromJSON(response.data)));\n  }\n\n  private uploadToS3Step(file: File, signature: UploadSignuatureModel): Observable<any> {\n    const url: string = signature?.action;\n    const data: FormData = new FormData();\n    \n    //Fill each form data value\n    data.append('acl', 'private');\n    data.append('success_action_status', '201');\n    data.append('key', `${signature.filename}`);\n    data.append('X-Amz-Credential', signature.amzCredential);\n    data.append('X-Amz-Algorithm', signature.amzAlgorithm);\n    data.append('X-Amz-Date', signature.amzDate);\n    data.append('X-Amz-Signature', signature.amzSignature);\n\n    //Must be before policy and other fields\n    if(signature.amzToken){\n      data.append('X-Amz-Security-Token', signature.amzToken);\n    }\n    \n    data.append('Policy', signature.policy);\n    data.append('Content-Type', signature.fileType);\n    data.append('file', file);\n\n    //Do request\n    return this.httpClient.post(url, data, {\n      responseType: 'text'\n    }).pipe(map(() => signature));\n  }\n\n  public downloadDocuments(document: DocumentModel): Observable<string> {\n    const url: string = this.adminPanelsService.getApiUrlsConfig().apiIntranetDocumentFilesUri;\n    const queryObj: any = {\n      'documentFolder': document.documentFolder,\n      'file': document.filename\n    };\n\n    //Do fetch\n    return this.apiService.fetchData(url ?? '', queryObj).pipe(\n      map((response: ApiResponseModel) => {\n          return response.data.signedUrl ?? '';\n      })\n    );\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const WINDOW = new InjectionToken<Window>('Global window object', {\n  factory: () => window\n});","import { Component, EventEmitter, Inject, Input, Output } from '@angular/core';\n\nimport { DocumentModel } from '../../../models/document.model';\nimport { DocumentsService } from '../documents.service';\nimport { WINDOW } from '../../../../shared/injections/window.injection';\n\n@Component({\n    selector: 'intranet-documents-item',\n    templateUrl: './documents-item.component.html',\n    styleUrls: [],\n    standalone: false\n})\nexport class DocumentsItemComponent {\n  @Input() item?: DocumentModel;\n  @Output() onEdit: EventEmitter<DocumentModel> = new EventEmitter();\n  @Output() onDelete: EventEmitter<DocumentModel> = new EventEmitter();\n\n  loading: boolean = false;\n\n  constructor(\n    private documentService: DocumentsService,\n    @Inject(WINDOW) private window: Window\n  ){}\n\n  onEditEmit(obj?: DocumentModel): void {\n    this.onEdit.emit(obj);\n  }\n\n  onDeleteEmit(obj?: DocumentModel): void {\n    this.onDelete.emit(obj);\n  }\n\n  onDownload($event: MouseEvent): void {\n    $event.preventDefault();\n\n    //Prevent click when loading\n    if(this.loading) { return; }\n\n    //Start loading\n    this.loading = true;\n\n    //Get filename\n    this.documentService.downloadDocuments(this.item).subscribe({\n      next: (signedUrl: string) => {\n        //Stop loading\n        this.loading = false;\n\n        //Chec signedUrl\n        if(signedUrl){\n          this.window.open(signedUrl, '_blank');\n        }\n      },\n      error: () => {\n        //Stop loading\n        this.loading = false;\n      }\n    });\n  }\n}\n","<li class=\"menu-item\">\n    <ng-solcre-loader *ngIf=\"loading\"></ng-solcre-loader>\n    <a href=\"#\" (click)=\"onDownload($event)\">\n        <i *ngIf=\"!loading\" class=\"document-icon file\" [fileType]=\"item.extension\" intranetFileClass></i>\n        {{ item?.title ?? item?.filename }} <span class=\"menu-item-order\">({{ item?.size | size }})</span>\n    </a>\n    <span class=\"actions\">\n        <a (click)=\"onEditEmit(item)\" [title]=\"'documents.edit' | translate\" class=\"btn icon-btn icon-editt btn-new-edit text-info\"></a>\n        <a (click)=\"onDeleteEmit(item)\" [title]=\"'documents.delete' | translate\" class=\"btn icon-btn icon-deletee btn-new-delete text-error\"></a>\n    </span>\n</li>","import { Component, EventEmitter, Input, OnDestroy, Output, inject } from '@angular/core';\n\nimport { DocumentFolderModel } from '../../../models/document-folder.model';\nimport { DocumentModel } from '../../../models/document.model';\nimport { DocumentsService } from '../documents.service';\n\n@Component({\n    selector: 'intranet-documents-folders-item',\n    templateUrl: './documents-folders-item.component.html',\n    styleUrls: ['./documents-folders-item.component.scss'],\n    standalone: false\n})\nexport class DocumentsFoldersItemComponent implements OnDestroy {\n  @Input() item?: DocumentFolderModel;\n  @Input() displayChildrens: boolean = false;\n  @Output() onPermissionsDocumentFolder: EventEmitter<DocumentFolderModel | null> = new EventEmitter();\n  @Output() onAddDocumentFolder: EventEmitter<DocumentFolderModel | null> = new EventEmitter();\n  @Output() onEditDocumentFolder: EventEmitter<DocumentFolderModel> = new EventEmitter();\n  @Output() onMoveDocumentFolder: EventEmitter<DocumentFolderModel> = new EventEmitter();\n  @Output() onDeleteDocumentFolder: EventEmitter<DocumentFolderModel> = new EventEmitter();\n  \n  @Output() onAddDocument: EventEmitter<{ folder: DocumentFolderModel }> = new EventEmitter();\n  @Output() onEditDocument: EventEmitter<{ document: DocumentModel, folder: DocumentFolderModel }> = new EventEmitter();\n  @Output() onDeleteDocument: EventEmitter<{ document: DocumentModel, folder: DocumentFolderModel }> = new EventEmitter();\n  @Output() onDropDocumentFolder: EventEmitter<{ folder: DocumentFolderModel, target: DocumentFolderModel }> = new EventEmitter();\n\n  //Time a folder has to be hovered to open it while dragging\n  private static readonly EXPAND_ON_HOVER_TIMEOUT: number = 700;\n\n  isDropTarget: boolean = false;\n  private expandInstance: any = null;\n\n  documentsService: DocumentsService = inject(DocumentsService);\n\n  constructor(){\n    //Watch collapse state\n    this.documentsService.onCollapseStateChange.subscribe((state) => this.item.displayChildrens = state);\n\n    //A finished drag clears the drop state of every item\n    this.documentsService.onDragStateChange.subscribe((folder: DocumentFolderModel) => {\n      if(!folder){ this.clearDropState(); }\n    });\n  }\n\n  ngOnDestroy(): void {\n    clearTimeout(this.expandInstance);\n  }\n\n  onAddDocumentFolderEmit(obj?: DocumentFolderModel): void {\n    this.onAddDocumentFolder.emit(obj ?? null);\n  }\n  onEditDocumentFolderEmit(obj?: DocumentFolderModel): void {\n    this.onEditDocumentFolder.emit(obj);\n  }\n  onMoveDocumentFolderEmit(obj?: DocumentFolderModel): void {\n    //Root folders can not be moved\n    if(!this.canMove()){\n      return;\n    }\n\n    this.onMoveDocumentFolder.emit(obj ?? this.item);\n  }\n  onDeleteDocumentFolderEmit(obj?: DocumentFolderModel): void {\n    this.onDeleteDocumentFolder.emit(obj);\n  }\n  onPermissionsDocumentFolderEmit(obj?: DocumentFolderModel): void {\n    this.onPermissionsDocumentFolder.emit(obj);\n  }\n\n  onAddDocumentEmit(folder?: DocumentFolderModel): void {\n    this.onAddDocument.emit({ folder });\n  }\n  onEditDocumentEmit(folder?: DocumentFolderModel, document?: DocumentModel): void {\n    this.onEditDocument.emit({ folder, document });\n  }\n  onDeleteDocumentEmit(folder?: DocumentFolderModel, document?: DocumentModel): void {\n    this.onDeleteDocument.emit({ folder, document });\n  }\n\n  canMove(): boolean {\n    //Only folders with a parent can be moved, the workspace root can not\n    return this.item?.parent !== null && this.item?.parent !== undefined;\n  }\n\n  isDragging(): boolean {\n    return this.documentsService.isDragging(this.item);\n  }\n\n  onDragStart(event: DragEvent): void {\n    //Root folders can not be moved\n    if(!this.canMove()){\n      event.preventDefault();\n      return;\n    }\n\n    //Keep the drag inside this folder\n    event.stopPropagation();\n\n    //Some browsers need data to start the drag\n    event.dataTransfer?.setData('text/plain', `${this.item?.id}`);\n\n    if(event.dataTransfer){\n      event.dataTransfer.effectAllowed = 'move';\n    }\n\n    this.documentsService.startFolderDrag(this.item);\n  }\n\n  onDragEnd(event: DragEvent): void {\n    event.stopPropagation();\n    this.documentsService.endFolderDrag();\n  }\n\n  onDragOver(event: DragEvent): void {\n    //The deepest folder under the cursor wins\n    event.stopPropagation();\n\n    //An invalid destination keeps the browser default, so the cursor says no drop\n    if(!this.documentsService.canDropOn(this.item?.id)){\n      this.isDropTarget = false;\n      return;\n    }\n\n    event.preventDefault();\n\n    if(event.dataTransfer){\n      event.dataTransfer.dropEffect = 'move';\n    }\n\n    //Already marked, nothing else to do\n    if(this.isDropTarget){\n      return;\n    }\n\n    this.isDropTarget = true;\n\n    //Open the folder when it stays hovered\n    this.startExpandOnHover();\n  }\n\n  onDragLeave(event: DragEvent): void {\n    event.stopPropagation();\n    this.clearDropState();\n  }\n\n  onDrop(event: DragEvent): void {\n    const folder: DocumentFolderModel = this.documentsService.getDragFolder();\n\n    //The deepest folder under the cursor wins\n    event.stopPropagation();\n\n    //Ignore a drop the tree can not resolve\n    if(!folder || !this.documentsService.canDropOn(this.item?.id)){\n      this.clearDropState();\n      return;\n    }\n\n    event.preventDefault();\n    this.clearDropState();\n    this.documentsService.endFolderDrag();\n\n    //The parent asks for the confirmation\n    this.onDropDocumentFolder.emit({ folder, target: this.item });\n  }\n\n  private startExpandOnHover(): void {\n    clearTimeout(this.expandInstance);\n\n    //Nothing to open\n    if(this.item?.displayChildrens || !this.item?.childrens?.length){\n      return;\n    }\n\n    this.expandInstance = setTimeout(() => {\n      if(this.isDropTarget){\n        this.item.displayChildrens = true;\n      }\n    }, DocumentsFoldersItemComponent.EXPAND_ON_HOVER_TIMEOUT);\n  }\n\n  private clearDropState(): void {\n    clearTimeout(this.expandInstance);\n    this.isDropTarget = false;\n  }\n\n  onTottleDisplayChildrens(event: MouseEvent): void {\n    event.preventDefault();\n    this.item.displayChildrens = !this.item.displayChildrens;\n  }\n}\n","<li \n    class=\"menu-item\" \n    [class.has-childrens]=\"!!item?.childrens?.length\" \n    [class.dragging]=\"isDragging()\" \n    [class.drop-target]=\"isDropTarget\" \n    [attr.draggable]=\"canMove()\" \n    (dragstart)=\"onDragStart($event)\" \n    (dragend)=\"onDragEnd($event)\" \n    (dragover)=\"onDragOver($event)\" \n    (dragleave)=\"onDragLeave($event)\" \n    (drop)=\"onDrop($event)\">\n    <a href=\"#\" draggable=\"false\" (click)=\"onTottleDisplayChildrens($event)\">\n        <i\n            class=\"document-icon\"\n            [class.folder]=\"!item.displayChildrens\"\n            [class.folder-open]=\"item.displayChildrens\"></i>\n        <span>{{ item?.displayName }}</span>\n    </a>\n    <span class=\"actions\">\n        <a (click)=\"onPermissionsDocumentFolderEmit(item)\" [title]=\"'documents.access' | translate\" class=\"btn icon-btn icon-widget-headcount text-info\"></a>\n        <a (click)=\"onAddDocumentFolderEmit(item)\" [title]=\"'documents.addFolder' | translate\" class=\"btn icon-btn icon-addd btn-add-folder text-success\"></a>\n        <a (click)=\"onAddDocumentEmit(item)\" [title]=\"'documents.addFile' | translate\" class=\"btn icon-btn icon-uploadd btn-add-file text-warning\"></a>\n        <a (click)=\"onEditDocumentFolderEmit(item)\" [title]=\"'documents.edit' | translate\" class=\"btn icon-btn icon-editt btn-new-edit text-info\"></a>\n        <a *ngIf=\"canMove()\" (click)=\"onMoveDocumentFolderEmit(item)\" [title]=\"'documents.move' | translate\" class=\"btn icon-btn icon-move-tree btn-move-folder text-info\"></a>\n        <a (click)=\"onDeleteDocumentFolderEmit(item)\" [title]=\"'documents.delete' | translate\" class=\"btn icon-btn icon-deletee btn-new-delete text-error\"></a>\n    </span>\n    <ng-container *ngIf=\"(item?.childrens?.length || item?.documents?.length)\">\n        <ul class=\"menu-list\" [class.open]=\"item.displayChildrens\" [class.closed]=\"!item.displayChildrens\">\n            <intranet-documents-folders-item \n                *ngFor=\"let menu of item?.childrens\" \n                [item]=\"menu\" \n                (onPermissionsDocumentFolder)=\"onPermissionsDocumentFolderEmit($event)\" \n                (onAddDocumentFolder)=\"onAddDocumentFolderEmit($event)\" \n                (onEditDocumentFolder)=\"onEditDocumentFolderEmit($event)\" \n                (onMoveDocumentFolder)=\"onMoveDocumentFolder.emit($event)\" \n                (onDropDocumentFolder)=\"onDropDocumentFolder.emit($event)\" \n                (onDeleteDocumentFolder)=\"onDeleteDocumentFolderEmit($event)\"\n\n                (onAddDocument)=\"onAddDocumentEmit($event.folder)\" \n                (onEditDocument)=\"onEditDocumentEmit($event.folder, $event.document)\" \n                (onDeleteDocument)=\"onDeleteDocumentEmit($event.folder, $event.document)\" />\n            <intranet-documents-item \n                *ngFor=\"let document of item.documents\" \n                [item]=\"document\" \n                (onEdit)=\"onEditDocumentEmit(item, $event)\" \n                (onDelete)=\"onDeleteDocumentEmit(item, $event)\" />\n        </ul>\n    </ng-container>\n</li>\n","import { Component, ElementRef, OnInit, ViewChild, inject } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BreadcrumbModel, DialogModel, DialogService, ToastsService, UiEventsService } from '@solcre-org/admin-core';\nimport { ApiResponseModel, ApiService, ArrayUtility, AuthService, FormUtility } from '@solcre-org/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, concatMap } from 'rxjs';\n\nimport { DocumentModel } from '../../models/document.model';\nimport { DocumentFolderModel } from '../../models/document-folder.model';\nimport { DocumentsService } from './documents.service';\nimport { UploadSignuatureModel } from './document-signature.model';\nimport { DocumentFolderAccessModel } from './document-folder-access.model';\nimport { DocumentFolderMoveDestinationModel } from './document-folder-move-destination.model';\nimport { DocumentFolderMoveUtility } from './document-folder-move.utility';\nimport { UserModel } from '../../models/users.model';\nimport { AdminPanelsService } from '../../../shared/services/admin-panels.service';\n\n@Component({\n    selector: 'intranet-documents',\n    templateUrl: './documents.component.html',\n    styleUrls: ['./documents.component.scss'],\n    providers: [DialogService],\n    standalone: false\n})\nexport class DocumentsComponent implements OnInit{\n  //Services\n  private adminPanelsService: AdminPanelsService = inject(AdminPanelsService);\n\n  // Models\n  activeUserId: number = 0;\n  activeWorkspaceId: number = 0;\n  activeWorkspaceTitle: string = '';\n  activeDocumentFolderId: number = 0;\n  globalLoading: boolean = false;\n  breadcrumbs: BreadcrumbModel[] = [];\n  aciveDocumentFolders: DocumentFolderModel[] = [];\n  collapseState: boolean = false;\n\n  //Forms\n  documentFolderActive: DocumentFolderModel = null;\n  documentFolderFormState: boolean = false;\n  documentFolderFormLoading: boolean = false;\n  documentFolderForm: FormGroup = new FormGroup({\n    id: new FormControl('', [ ]),\n    name: new FormControl('', []),\n    displayName: new FormControl('', [ Validators.required ]),\n    parent: new FormControl('', [ ]),\n    orderNumber: new FormControl('', [ Validators.required ]),\n  });\n\n  documentActive: DocumentModel = null;\n  documentFormState: boolean = false;\n  documentFormLoading: boolean = false;\n  documentForm: FormGroup = new FormGroup({\n    id: new FormControl('', [ ]),\n    title: new FormControl('', [ Validators.required ]),\n    file: new FormControl('', [ Validators.required ]),\n    documentFolder: new FormControl('', [ ]),\n    filename: new FormControl('', [ ]),\n    orderNumber: new FormControl('', [ Validators.required ]),\n  });\n\n  moveFolderActive: DocumentFolderModel = null;\n  moveState: boolean = false;\n  moveLoading: boolean = false;\n  moveReloading: boolean = false;\n  moveErrorKey: string = null;\n  moveDestinations: DocumentFolderMoveDestinationModel[] = [];\n  draggingFolder: DocumentFolderModel = null;\n  rootDropTarget: boolean = false;\n  moveForm: FormGroup = new FormGroup({\n    parent: new FormControl(null, [ Validators.required ]),\n  });\n\n  permissionsState: boolean = false;\n  permissionsLoading: boolean = false;\n  permissionsModalLoading: boolean = false;\n  permissionsForm: FormGroup = new FormGroup({\n    id: new FormControl('', [ ]),\n    query: new FormControl('', []),\n    usersIds: new FormGroup({})\n  });\n  activePermissions: DocumentFolderAccessModel[] = [];\n  activeUsers: DocumentFolderAccessModel[] = [];\n  queryChangeInstance: any = null;\n\n  @ViewChild('moveDestinationSelect') moveDestinationSelectRef: ElementRef<HTMLSelectElement>;\n  private moveTriggerElement: HTMLElement = null;\n\n  constructor(\n    private authService: AuthService,\n    private apiService: ApiService,\n    private dialogService: DialogService,\n    private documentsService: DocumentsService,\n    private uiEventsService: UiEventsService,\n    private activatedRoute: ActivatedRoute,\n    private toastService: ToastsService,\n    private translateService: TranslateService,\n  ){\n    //Load vars\n    this.activeWorkspaceId = this.activatedRoute.snapshot.params['workspace'];\n    this.activeDocumentFolderId = this.activatedRoute.snapshot.params['folder'];\n    this.activeWorkspaceTitle = this.activatedRoute.snapshot.queryParams['workspace'];\n  }\n\n  async ngOnInit() {\n    //Get translations\n    const translations: any = await this.translateService.get([\n      'workspace.panelTitle',\n      'documents.panelTitle',\n    ]).toPromise();\n\n    //Create breadcrumbs\n    this.breadcrumbs = [\n      new BreadcrumbModel(translations['workspace.panelTitle'], ['workspace']),\n      new BreadcrumbModel(this.activeWorkspaceTitle),\n      new BreadcrumbModel(translations['documents.panelTitle'])\n    ];\n\n    //Fetch\n    this.fetchDocumentFolders();\n\n    //load user id\n    this.activeUserId = this.authService.getLoggedUser().id;\n\n    //Watch file changes\n    this.watchInputFileChanges();\n\n    //Watch drag state to display the root drop zone\n    this.documentsService.onDragStateChange.subscribe((folder: DocumentFolderModel) => {\n      this.draggingFolder = folder;\n      this.rootDropTarget = false;\n    });\n  }\n\n  onAddDocumentFolderEmit(obj?: DocumentFolderModel): void {\n    const documentFoldersSorted: DocumentFolderModel[] = ArrayUtility.sort(obj ? obj?.childrens : this.aciveDocumentFolders, 'orderNumber');\n\n    //clear form and patch parent id\n    this.documentFolderForm.reset();\n    this.documentFolderForm.patchValue({ \n      parent: obj?.id ?? this.activeDocumentFolderId,\n      orderNumber: documentFoldersSorted && documentFoldersSorted[documentFoldersSorted.length - 1] ? documentFoldersSorted[documentFoldersSorted.length - 1].orderNumber + 1 : 0\n    });\n\n    //Load active document folder\n    this.documentFolderActive = obj ?? null;\n\n    //Open form\n    this.documentFolderFormState = true;\n    this.uiEventsService.internalModalStateChange.emit(true);\n  }\n\n  onEditDocumentFolderEmit(obj: DocumentFolderModel): void {\n    //clear form and patch parent id\n    this.documentFolderForm.reset();\n    this.documentFolderForm.patchValue(obj.toJSON());\n\n    //Load active document folder\n    this.documentFolderActive = obj;\n\n    //Open form\n    this.documentFolderFormState = true;\n    this.uiEventsService.internalModalStateChange.emit(true);\n  }\n\n  onMoveDocumentFolderEmit(obj: DocumentFolderModel): void {\n    //The workspace root folder can not be moved\n    if(!obj || obj.parent === null || obj.parent === undefined){\n      return;\n    }\n\n    //A move is already running\n    if(this.moveLoading){\n      return;\n    }\n\n    //An active upload keeps the folder busy\n    if(this.documentFormLoading){\n      this.toastService.addWarning(this.translateService.instant('documents.moveUploadInProgress'));\n      return;\n    }\n\n    //Keep the control that opened the dialog to give the focus back on close\n    this.moveTriggerElement = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n\n    //Load active folder\n    this.moveFolderActive = obj;\n    this.moveErrorKey = null;\n    this.moveLoading = false;\n    this.moveReloading = false;\n\n    //Clear form and load destinations\n    this.moveForm.reset();\n    this.buildMoveDestinations();\n\n    //Open form\n    this.moveState = true;\n    this.uiEventsService.internalModalStateChange.emit(true);\n\n    //Move the focus into the dialog\n    setTimeout(() => this.moveDestinationSelectRef?.nativeElement?.focus());\n  }\n\n  onDropDocumentFolderEmit(args: { folder: DocumentFolderModel, target: DocumentFolderModel }): void {\n    //Dropping moves the folder right away\n    this.moveDroppedFolder(args?.folder, args?.target?.id);\n  }\n\n  onRootDragOver(event: DragEvent): void {\n    //An invalid destination keeps the browser default, so the cursor says no drop\n    if(!this.rootDropAllowed){\n      this.rootDropTarget = false;\n      return;\n    }\n\n    event.preventDefault();\n\n    if(event.dataTransfer){\n      event.dataTransfer.dropEffect = 'move';\n    }\n\n    this.rootDropTarget = true;\n  }\n\n  onRootDragLeave(): void {\n    this.rootDropTarget = false;\n  }\n\n  onRootDrop(event: DragEvent): void {\n    const folder: DocumentFolderModel = this.documentsService.getDragFolder();\n\n    this.rootDropTarget = false;\n\n    //Ignore a drop the tree can not resolve\n    if(!folder || !this.rootDropAllowed){\n      return;\n    }\n\n    event.preventDefault();\n    this.documentsService.endFolderDrag();\n\n    //Dropping moves the folder right away\n    this.moveDroppedFolder(folder, this.activeDocumentFolderId);\n  }\n\n  get rootDropAllowed(): boolean {\n    return this.documentsService.canDropOn(this.activeDocumentFolderId);\n  }\n\n  onHideMoveForm(): void {\n    //The dialog stays open while the request is active\n    if(this.moveLoading){\n      return;\n    }\n\n    //Clear vars\n    this.moveFolderActive = null;\n    this.moveDestinations = [];\n    this.moveErrorKey = null;\n    this.moveLoading = false;\n    this.moveReloading = false;\n    this.moveForm.reset();\n\n    //Nothing to hide, the move came from a drop\n    if(!this.moveState){\n      return;\n    }\n\n    //Hide form\n    this.moveState = false;\n    this.uiEventsService.internalModalStateChange.emit(false);\n\n    //Give the focus back to the control that opened the dialog\n    this.moveTriggerElement?.focus();\n    this.moveTriggerElement = null;\n  }\n\n  onMoveDestinationChange(): void {\n    //A new destination clears the previous backend error\n    this.moveErrorKey = null;\n  }\n\n  onConfirmMove(): void {\n    //Avoid duplicated confirmations and invalid states\n    if(this.moveConfirmDisabled){\n      return;\n    }\n\n    const destination: DocumentFolderMoveDestinationModel = DocumentFolderMoveUtility.findEnabledDestination(\n      this.moveDestinations,\n      this.moveForm.value.parent\n    );\n\n    //The selected destination is not valid anymore\n    if(!destination){\n      this.moveErrorKey = 'documents.moveErrorInvalid';\n      return;\n    }\n\n    //Do move\n    this.moveDocumentFolder(this.moveFolderActive.id, destination.id);\n  }\n\n  getMoveDestinationLabel(destination: DocumentFolderMoveDestinationModel): string {\n    const prefix: string = DocumentFolderMoveUtility.DEPTH_PREFIX.repeat(destination?.depth ?? 0);\n    const name: string = destination?.displayName ?? '';\n\n    //The current parent stays visible but disabled\n    return destination?.disabled ?\n      `${prefix}${name} (${this.translateService.instant('documents.moveCurrentParent')})` :\n      `${prefix}${name}`;\n  }\n\n  get moveSourceName(): string {\n    return this.moveFolderActive?.displayName ?? this.moveFolderActive?.name ?? '';\n  }\n\n  get moveDestinationName(): string {\n    const destination: DocumentFolderMoveDestinationModel = DocumentFolderMoveUtility.findEnabledDestination(\n      this.moveDestinations,\n      this.moveForm.value.parent\n    );\n\n    return destination?.displayName ?? '';\n  }\n\n  get moveHasDestinations(): boolean {\n    return DocumentFolderMoveUtility.hasEnabledDestinations(this.moveDestinations);\n  }\n\n  get moveConfirmDisabled(): boolean {\n    return this.moveLoading || this.moveReloading || !this.moveHasDestinations || !this.moveForm.value.parent;\n  }\n\n  onDeleteDocumentFolderEmit(obj: DocumentFolderModel): void {\n    const url: string = this.adminPanelsService.getApiUrlsConfig().apiIntranetDocumentFoldersUri;\n    const msg: string = obj.childrens.length || obj.documents.length ? \n      `¿Estás seguro de que deseas borrar la carpeta: ${obj.name}? Tiene subcarpetas o archivos que serán eliminados también.` : \n      `¿Deseas borrar la carpeta: ${obj.name}?`;\n    this.dialogService.open(\n      new DialogModel(msg, () => {\n        //Do delete\n        this.apiService.deleteObj(url, obj.id).subscribe({\n          next: (response: boolean) => {\n            //Remove obj\n            this.findDocumentFolder(obj.id ?? -1, (index: number, item: DocumentFolderModel, items: DocumentFolderModel[]) => {\n              items.splice(index, 1);\n            });\n          },\n        });\n\n        // Close dialog\n        this.dialogService.close();\n      })\n    );\n  }\n\n  onAddDocumentEmit(args: { folder: DocumentFolderModel }): void {\n    const documentSorted: DocumentModel[] = ArrayUtility.sort(args.folder.documents, 'orderNumber');\n\n    //clear form and patch parent id\n    this.documentForm.reset();\n    this.documentForm.patchValue({ \n      documentFolder: args.folder?.id ?? null,\n      orderNumber: documentSorted && documentSorted[documentSorted.length - 1] ? documentSorted[documentSorted.length - 1].orderNumber + 1 : 0\n    });\n\n    //Load active document folder and document\n    this.documentActive = null;\n    this.documentFolderActive = args.folder;\n\n    //Open form\n    this.documentFormState = true;\n    this.uiEventsService.internalModalStateChange.emit(true);\n  }\n\n  onEditDocumentEmit(args: { document: DocumentModel, folder: DocumentFolderModel }): void {\n    //clear form and patch parent id\n    this.documentForm.reset();\n    this.documentForm.patchValue(args.document.toJSON());\n\n    //Load active document folder and document\n    this.documentActive = args.document;\n    this.documentFolderActive = args.folder;\n\n    //Open form\n    this.documentFormState = true;\n    this.uiEventsService.internalModalStateChange.emit(true);\n  }\n\n  onDeleteDocumentEmit(args: { document: DocumentModel, folder: DocumentFolderModel }): void {\n    const url: string = this.adminPanelsService.getApiUrlsConfig().apiIntranetDocumentsUri;\n    this.dialogService.open(\n      new DialogModel(`¿Deseas borrar el archivo: ${args.document.filename}?`, () => {\n        //Do delete\n        this.apiService.deleteObj(url, args.document.id).subscribe({\n          next: (response: boolean) => {\n            //Remove obj\n            ArrayUtility.find(args.folder.documents, args.document.id, (document: DocumentModel, index: number) => {\n              args.folder.documents.splice(index, 1);\n            });\n          },\n        });\n\n        // Close dialog\n        this.dialogService.close();\n      })\n    );\n  }\n\n  onHideDocumentFolderForm(): void {\n    this.documentFolderActive = null;\n    this.documentFolderFormState = false;\n    this.uiEventsService.internalModalStateChange.emit(false);\n  }\n\n  onSaveDocumentFolderForm(): void {\n    // Is valid?\n    if(this.documentFolderForm.valid){\n      //Save it\n      this.saveDocumentFolder(this.documentFolderForm.getRawValue());\n      return;\n    }\n\n    //Not valid\n    FormUtility.validateAllFormFields(this.documentFolderForm);\n  }\n\n  onSaveDocumentForm(): void {\n    if(this.documentForm.valid){\n      const value: any = this.documentForm.getRawValue();\n\n      //Save it\n      this.saveDocument(value);\n      return;\n    }\n    //Not valid\n    FormUtility.validateAllFormFields(this.documentForm);\n  }\n\n  onHideDocumentForm(): void {\n    this.documentFolderActive = null;\n    this.documentFormState = false;\n    this.uiEventsService.internalModalStateChange.emit(false);\n  }\n\n  onPermissionsDocumentFolderEmit(obj?: DocumentFolderModel): void {\n    this.documentFolderActive = obj;\n    this.activeUsers = [];\n\n    //Set form state\n    this.permissionsForm.reset();\n    this.permissionsForm.setControl('usersIds', new FormGroup({}))\n    this.permissionsForm.patchValue({ id: obj.id });\n\n    //Set loaders\n    this.permissionsLoading = false;\n    this.permissionsModalLoading = false;\n\n    //Set modal state\n    this.permissionsState = true;\n    this.uiEventsService.internalModalStateChange.emit(true);\n\n    //Fetch permissions\n    this.fetchDocumentFolderPermissions(obj.id);\n  }\n\n  onHidePermissions(): void {\n    //Clear vars\n    this.documentFolderActive = null;\n    this.permissionsLoading = false;\n    this.permissionsModalLoading = false;\n\n    //Hide form\n    this.permissionsState = false;\n    this.uiEventsService.internalModalStateChange.emit(false);\n  }\n\n  onSavePermissions(): void {\n    this.persistDocumentFolderPermissions();\n  }\n\n  onQueryKeyUp(): void {\n    //Clear previous\n    clearTimeout(this.queryChangeInstance);\n\n    //Start loading \n    this.permissionsModalLoading = true;\n\n    //Wait 1s\n    this.queryChangeInstance = setTimeout(() => {\n      const query: string = this.permissionsForm.value.query;\n\n      //Fetch query\n      this.fetchUsers(query);\n    }, 600);\n  }\n\n  onPermissionChange(user: UserModel): void {\n    let permission: DocumentFolderAccessModel = this.activePermissions.find((value: DocumentFolderAccessModel) => {\n      return user.id === value.id;\n    });\n\n    //Push if not exist\n    if(!permission){\n      permission = new DocumentFolderAccessModel(\n        user.id,\n        user.email,\n        `${user.name} ${user.lastName}`\n      );\n      this.activePermissions.push(permission); \n    }\n  }\n\n  onCollapseStateChange(): void {\n    this.collapseState = !this.collapseState;\n    this.documentsService.changeCollapseState(this.collapseState);\n  }\n\n  //Helper functions\n  private fetchDocumentFolders(onDone?: () => void): void {\n    const url: string = this.adminPanelsService.getApiUrlsConfig().apiIntranetDocumentFoldersUri;\n\n    //Start loading \n    this.globalLoading = true;\n\n    //Clear Document folders\n    this.aciveDocumentFolders = [];\n\n    //Do fecth\n    this.apiService.fetchData(url, {\n      \"parent\": this.activeDocumentFolderId,\n      \"sort[orderNumber]\": \"asc\"\n    }).subscribe({\n      next: (response: ApiResponseModel) => {\n        this.globalLoading = false;\n        this.aciveDocumentFolders = ArrayUtility.map(response.data, (json: any) => {\n          const folder: DocumentFolderModel = new DocumentFolderModel();\n          folder.fromJSON(json);\n          folder.displayChildrens = true;\n          return folder;\n        });\n\n        //Keep each parent in sync with its position on the tree\n        this.normalizeFoldersParent(this.aciveDocumentFolders, this.activeDocumentFolderId);\n\n        //Notify\n        if(onDone){ onDone(); }\n      },\n      error: (error: HttpErrorResponse) => {\n        this.globalLoading = false;\n        this.toastService.showHttpError(error)\n\n        //Notify\n        if(onDone){ onDone(); }\n      }\n    });\n  }\n\n  private normalizeFoldersParent(folders: DocumentFolderModel[], parentId: any): void {\n    ArrayUtility.each(folders, (folder: DocumentFolderModel) => {\n      folder.parent = Number(parentId);\n      this.normalizeFoldersParent(folder.childrens, folder.id);\n    });\n  }\n\n  private moveDroppedFolder(folder: DocumentFolderModel, destinationId: any): void {\n    //The workspace root folder can not be moved\n    if(!folder || folder.parent === null || folder.parent === undefined){\n      return;\n    }\n\n    //A move is already running\n    if(this.moveLoading){\n      return;\n    }\n\n    //An active upload keeps the folder busy\n    if(this.documentFormLoading){\n      this.toastService.addWarning(this.translateService.instant('documents.moveUploadInProgress'));\n      return;\n    }\n\n    //Same checks as the dialog, the drop should never reach an invalid destination\n    const destinations: DocumentFolderMoveDestinationModel[] = DocumentFolderMoveUtility.buildDestinations(\n      folder,\n      this.aciveDocumentFolders,\n      Number(this.activeDocumentFolderId),\n      this.getMoveRootDisplayName()\n    );\n    const destination: DocumentFolderMoveDestinationModel = DocumentFolderMoveUtility.findEnabledDestination(\n      destinations,\n      destinationId\n    );\n\n    if(!destination){\n      this.toastService.addError(this.translateService.instant('documents.moveErrorInvalid'));\n      return;\n    }\n\n    //Do move\n    this.moveDocumentFolder(folder.id, destination.id, true);\n  }\n\n  private buildMoveDestinations(): void {\n    const rootId: number = Number(this.activeDocumentFolderId);\n\n    this.moveDestinations = DocumentFolderMoveUtility.buildDestinations(\n      this.moveFolderActive,\n      this.aciveDocumentFolders,\n      rootId,\n      this.getMoveRootDisplayName()\n    );\n  }\n\n  private getMoveRootDisplayName(): string {\n    const rootName: string = this.translateService.instant('documents.moveRoot');\n\n    //Display the workspace to make the root destination recognizable\n    return this.activeWorkspaceTitle ? `${rootName} (${this.activeWorkspaceTitle})` : rootName;\n  }\n\n  private moveDocumentFolder(folderId: number, parentId: number, fromDrop: boolean = false): void {\n    //Start loading\n    this.moveLoading = true;\n    this.moveErrorKey = null;\n\n    //A drop has no dialog, the tree displays the loader\n    this.globalLoading = fromDrop;\n\n    //Do request\n    this.documentsService.moveDocumentFolder(folderId, parentId).subscribe({\n      next: (response: ApiResponseModel) => {\n        this.moveLoading = false;\n\n        //Success, the backend response is the authority\n        this.toastService.addSuccess(this.translateService.instant('documents.moveSuccess'));\n\n        //Close form and reload the tree, no optimistic update\n        this.onHideMoveForm();\n        this.fetchDocumentFolders();\n      },\n      error: (error: HttpErrorResponse) => {\n        this.moveLoading = false;\n        this.globalLoading = false;\n        this.onMoveError(error);\n      }\n    });\n  }\n\n  private onMoveError(error: HttpErrorResponse): void {\n    switch (error.status) {\n      //Source or destination does not exist anymore\n      case 404:\n        this.toastService.addError(this.translateService.instant('documents.moveErrorNotFound'));\n        this.onHideMoveForm();\n        this.fetchDocumentFolders();\n        break;\n      //Same name on destination, cycle or the parent does not change\n      case 409:\n        this.displayMoveError('documents.moveErrorConflict');\n        break;\n      //Root folder, another workspace or invalid data\n      case 422:\n        this.displayMoveError('documents.moveErrorInvalid');\n        break;\n      //A timeout does not confirm that the move failed, reload before a retry\n      default:\n        this.displayMoveError('documents.moveErrorUnexpected');\n\n        if(this.moveState){\n          this.reloadTreeBeforeRetry();\n          return;\n        }\n\n        this.fetchDocumentFolders();\n    }\n  }\n\n  private displayMoveError(errorKey: string): void {\n    //The dialog displays the error next to the selector, a drop has no dialog\n    if(this.moveState){\n      this.moveErrorKey = errorKey;\n      return;\n    }\n\n    this.toastService.addError(this.translateService.instant(errorKey));\n  }\n\n  private reloadTreeBeforeRetry(): void {\n    const folderId: number = this.moveFolderActive?.id ?? -1;\n\n    //Block the confirmation until the tree is refreshed\n    this.moveReloading = true;\n\n    this.fetchDocumentFolders(() => {\n      this.moveReloading = false;\n\n      //Find the folder again, the backend could have completed the move\n      let folder: DocumentFolderModel = null;\n      this.findDocumentFolder(folderId, (index: number, item: DocumentFolderModel) => {\n        folder = item;\n      });\n\n      //The folder is gone, nothing else can be done from this dialog\n      if(!folder){\n        this.toastService.addError(this.translateService.instant('documents.moveErrorNotFound'));\n        this.onHideMoveForm();\n        return;\n      }\n\n      //Rebuild the destinations over the refreshed tree\n      this.moveFolderActive = folder;\n      this.buildMoveDestinations();\n\n      //Drop a selection that is not valid anymore\n      if(!DocumentFolderMoveUtility.findEnabledDestination(this.moveDestinations, this.moveForm.value.parent)){\n        this.moveForm.reset();\n      }\n    });\n  }\n\n  private saveDocumentFolder(obj: any): void {\n    const url: string = this.adminPanelsService.getApiUrlsConfig().apiIntranetDocumentFoldersUri;\n\n    //Start loading\n    this.documentFolderFormLoading = true;\n\n    //Observable\n    const id: number | null = obj.id ?? null;\n\n    //Delete id\n    delete obj.id;\n\n    //Load ids\n    obj.parent = obj.parent ? obj.parent.toString() : null;\n\n    //Check id to copy displayName to name\n    if(!id){ obj.name = obj.displayName; }\n\n    //Do request\n    const obs: Observable<ApiResponseModel> = id ? \n        this.apiService.partialUpdateObj(url, id, { displayName: obj.displayName, orderNumber: obj.orderNumber }):\n        this.apiService.createObj(url, obj);\n\n    //Post \n    obs.subscribe({\n      next: (response: ApiResponseModel) => {\n        this.documentFolderFormLoading = false;\n\n        const newFolder = new DocumentFolderModel();\n        newFolder.fromJSON(response.data);\n\n        //Keep the parent in sync with the tree position\n        newFolder.parent = obj.parent ? Number(obj.parent) : null;\n\n        //Check active folder\n        if(this.documentFolderActive instanceof DocumentFolderModel){\n          //Has id? are editing\n          if(id){\n            //Update each property editable\n            this.documentFolderActive.name = response.data.name;\n            this.documentFolderActive.displayName = response.data.displayName;\n            this.documentFolderActive.orderNumber = response.data.orderNumber;\n          } else {\n            //Parse folder\n            newFolder.displayChildrens = true; \n            this.documentFolderActive.displayChildrens = true; \n            this.documentFolderActive.childrens.push(newFolder);\n          }\n        } else {\n          //Root folder\n          newFolder.displayChildrens = true; \n          this.aciveDocumentFolders.push(newFolder);\n        }\n\n        //Close form\n        this.onHideDocumentFolderForm();\n      },\n      error: (error: HttpErrorResponse) => {\n        this.documentFolderFormLoading = false;\n        this.toastService.showHttpError(error)\n      }\n    });\n  }\n\n  private saveDocument(obj: any): void {\n    const url: string = this.adminPanelsService.getApiUrlsConfig().apiIntranetDocumentsUri;\n\n    //Start loading\n    this.documentFormLoading = true;\n\n    //Observable\n    const id: number | null = obj.id ?? null;\n\n    //Delete id\n    delete obj.id;\n\n    //Load ids\n    obj.documentFolder = obj.documentFolder ? obj.documentFolder.toString() : null;\n\n    //Do request\n    const obs: Observable<any> = id ? \n        this.apiService.partialUpdateObj(url, id, { title: obj.title, orderNumber: obj.orderNumber }):\n        this.documentsService.uploadToS3(obj.file, obj.documentFolder).pipe(concatMap((response: UploadSignuatureModel, index: number) => {\n          obj.file = response.filenameChecked;\n          return this.apiService.createObj(url, obj);\n      }));\n\n    //Post \n    obs.subscribe({\n      next: (response: ApiResponseModel) => {\n        this.documentFormLoading = false;\n        this.collapseState = true;\n\n        //Check active folder\n        if(this.documentFolderActive instanceof DocumentFolderModel && !id){\n          //Parse folder\n          const fileObj: DocumentModel = new DocumentModel();\n          fileObj.fromJSON(response.data);\n          this.documentFolderActive.documents.push(fileObj);\n        }\n\n        //Check active document\n        if(this.documentFolderActive instanceof DocumentFolderModel && id){\n          //Update each property editable\n          this.documentActive.title = response.data.title;\n          this.documentActive.orderNumber = response.data.orderNumber;\n        }\n\n        //Close form\n        this.onHideDocumentForm();\n      },\n      error: (error: HttpErrorResponse) => {\n        this.documentFormLoading = false;\n        this.toastService.showHttpError(error)\n      }\n    });\n  }\n\n  private findDocumentFolder(id: number, callback: (index: number, item: DocumentFolderModel, items: DocumentFolderModel[]) => void, items?: DocumentFolderModel[]): void {\n    const itemsAux: DocumentFolderModel[] = items ?? this.aciveDocumentFolders;\n\n    ArrayUtility.each(itemsAux, (menu: DocumentFolderModel, index: number) => {\n      if (id == menu.id) {\n        callback(index, menu, itemsAux);\n        return;\n      }\n\n      if (menu.childrens) {\n        this.findDocumentFolder(id, callback, menu.childrens);\n      }\n    });\n  }\n\n  private fetchDocumentFolderPermissions(documentFolderId: number): void {\n    const url: string = this.adminPanelsService.getApiUrlsConfig().apiIntranetDocumentFolderGetPermissionsUri;\n\n    //Start loading \n    this.permissionsModalLoading = true;\n\n    //Clear Document folders\n    this.activePermissions = [];\n\n    //Do fecth\n    this.apiService.fetchData(url.replace(':id', documentFolderId.toString())).subscribe({\n      next: (response: ApiResponseModel) => {\n        const permissions: any[] = ArrayUtility.filter(response.data?.users ?? [], (json: any) => {\n          return json.id != this.activeUserId;\n        })\n\n        //Load permissions\n        this.activePermissions = ArrayUtility.map(permissions, (json: any) => {\n          const permission: DocumentFolderAccessModel = new DocumentFolderAccessModel();\n          permission.fromJSON(json);\n\n          //Check formcontrol is created\n          this.checkUserPermissionFormAndCreate(permission.id, true);\n          return permission;\n        });\n        this.permissionsModalLoading = false;\n      },\n      error: (error: HttpErrorResponse) => {\n        this.permissionsModalLoading = false;\n        this.toastService.showHttpError(error)\n      }\n    });\n  }\n\n  private persistDocumentFolderPermissions(): void {\n    const url: string = this.adminPanelsService.getApiUrlsConfig().apiIntranetDocumentFolderPersitPermissionsUri;\n    const value: any = this.permissionsForm.value;\n    const usersIds: number[] = [];\n    let currentUserWasAddedManually: boolean = false;\n\n    //Filter usersIDs\n    ArrayUtility.each(value.usersIds, (value: boolean, userId: number) => {\n      if(value){\n        usersIds.push(userId)\n\n        //Check current user\n        if(userId == this.activeUserId){\n          currentUserWasAddedManually = true;\n        }\n      }\n    });\n\n    //Check\n    if(!currentUserWasAddedManually && usersIds.length > 0){\n      usersIds.push(this.activeUserId);\n    }\n\n    //Start loading \n    this.permissionsLoading = true;\n\n    //Do fecth\n    this.apiService.createObj(url.replace(':id', value.id), {\n      usersIds\n    }).subscribe({\n      next: (response: ApiResponseModel) => {\n        //Close modal\n        this.onHidePermissions();\n      },\n      error: (error: HttpErrorResponse) => {\n        this.permissionsLoading = false;\n        this.toastService.showHttpError(error)\n      }\n    });\n  }\n\n  private watchInputFileChanges(){\n    this.documentForm.get('file').valueChanges.subscribe((selectedFile: File) => {\n      if(!this.documentActive && selectedFile instanceof File){\n        this.documentForm.patchValue({\n          title: selectedFile.name\n        })\n      }\n    });\n  }\n\n  private fetchUsers(query: string): void {\n    const url: string = this.adminPanelsService.getApiUrlsConfig().apiIntranetUsersUri;\n\n    //Clear Document folders\n    this.activeUsers = [];\n    \n    //Check query\n    if(!query) { \n      //Stop loading \n      this.permissionsModalLoading = false;\n      return; \n    }\n\n    //Start loading \n    this.permissionsModalLoading = true;\n\n    //Do fecth\n    this.apiService.fetchData(url.replace(':id', this.activeWorkspaceId.toString()), { \n      query,\n    }).subscribe({\n      next: (response: ApiResponseModel) => {\n        //For each user\n        this.activeUsers = ArrayUtility.map(response.data, (json: any) => {\n          const user: DocumentFolderAccessModel = new DocumentFolderAccessModel();\n          user.fromJSON(json);\n\n          //Check formcontrol is created\n          this.checkUserPermissionFormAndCreate(user.id);\n          return json;\n        })\n        //Stop loading\n        this.permissionsModalLoading = false;\n        \n      },\n      error: (error: HttpErrorResponse) => {\n        this.permissionsModalLoading = false;\n        this.toastService.showHttpError(error)\n      }\n    });\n  }\n\n  private checkUserPermissionFormAndCreate(userId: number, state?: boolean): void {\n    const formControl: AbstractControl = this.permissionsForm.get('usersIds.' + userId);\n\n    if(!formControl){\n      (<FormGroup> this.permissionsForm.get('usersIds')).addControl(userId.toString(), new FormControl(state ?? false));\n    }\n  }\n}\n","<div class=\"layout responsive\">\n\n    <div class=\"edit-available edit-view\">\n\n        <!-- PANEL CONTENT -->\n        <div class=\"panel-content hideOnInternalModal\">\n\n            <!-- PANEL TOPBAR -->\n            <ng-solcre-topbar \n                [subtitle]=\"activeWorkspaceTitle\" \n                [skipWrapper]=\"true\" \n                [breadcrumbs]=\"breadcrumbs\">\n            </ng-solcre-topbar>\n\n\n            <div class=\"wrapper section\" [class.display-none]=\"!globalLoading\">\n                <ng-solcre-loader></ng-solcre-loader>\n            </div>\n\n            <div class=\"wrapper section\" [class.display-none]=\"globalLoading\">\n\n                <div class=\"topbar\">\n                    <div class=\"holder align-m\"><!--\n\t\t\t\t\t--><div class=\"group wrapper align-m\"><!--\n\t\t\t\t\t\t--><div class=\"align\">\n                                <p class=\"subtitle margin-b-3\">{{ activeWorkspaceTitle }}</p>\n                                <p class=\"drag-hint\">{{ \"documents.moveDropHint\" | translate }}</p>\n                            </div> <!-- .align -->\n                        </div> <!-- .group -->\n                        <div class=\"group wrapper align-m\"><!--\n\t\t\t\t\t\t\t--><div class=\"align\">\n                                <a (click)=\"onCollapseStateChange()\" \n                                    [title]=\"'documents.collapseAll' | translate\" \n                                    [class.active]=\"collapseState\"\n                                    class=\"btn icon-btn icon-collapse-all text-info\"></a>\n                                <a \n                                    (click)=\"onAddDocumentFolderEmit()\" \n                                    [title]=\"'documents.documentFolderTitle' | translate\" \n                                    class=\"btn icon-btn icon-addd btn-add-folder text-success\"></a>\n                            </div> <!-- .align -->\n                        </div> <!-- .group -->\n                    </div>\n                </div>\n\n                <div \n                    class=\"root-drop-zone\" \n                    [class.drop-target]=\"rootDropTarget\" \n                    (dragover)=\"onRootDragOver($event)\" \n                    (dragleave)=\"onRootDragLeave()\" \n                    (drop)=\"onRootDrop($event)\">\n\n                    <ul class=\"menu-list\">\n                        <intranet-documents-folders-item \n                            *ngFor=\"let item of aciveDocumentFolders\" \n                            [item]=\"item\" \n                            [displayChildrens]=\"item.displayChildrens\"\n                            (onAddDocumentFolder)=\"onAddDocumentFolderEmit($event)\" \n                            (onEditDocumentFolder)=\"onEditDocumentFolderEmit($event)\" \n                            (onMoveDocumentFolder)=\"onMoveDocumentFolderEmit($event)\" \n                            (onDropDocumentFolder)=\"onDropDocumentFolderEmit($event)\" \n                            (onDeleteDocumentFolder)=\"onDeleteDocumentFolderEmit($event)\"\n                            (onPermissionsDocumentFolder)=\"onPermissionsDocumentFolderEmit($event)\" \n                            (onAddDocument)=\"onAddDocumentEmit($event)\" \n                            (onEditDocument)=\"onEditDocumentEmit($event)\" \n                            (onDeleteDocument)=\"onDeleteDocumentEmit($event)\" />\n                    </ul>\n\n                    <!-- Only while a folder that can leave its parent is being dragged -->\n                    <p \n                        *ngIf=\"rootDropAllowed\" \n                        class=\"root-drop-hint placeholder-modal\">{{ \"documents.moveDropRoot\" | translate }}</p>\n                </div>\n            </div>\n        </div> <!-- .panel-content -->\n    </div>\n\n    <!-- FOLDER MODAL -->\n    <ng-solcre-modal \n        [state]=\"documentFolderFormState\" \n        [internal]=\"true\">\n    \n        <div class=\"holder\">\n    \n            <div class=\"modal-head align-m\">\n                <div class=\"align\">\n                    <button (click)=\"onHideDocumentFolderForm()\" type=\"button\" class=\"link cancel\">\n                        {{ \"documents.cancel\" | translate }}\n                    </button>\n    \n                    <ng-container *ngIf=\"!!documentFolderForm.value.id\">\n                        <p class=\"text\">{{ documentFolderActive?.displayName }}</p>\n    \n                        <button \n                            [class.loading]=\"documentFolderFormLoading\" \n                            class=\"link confirm\" \n                            type=\"button\" \n                            (click)=\"onSaveDocumentFolderForm()\">\n                            {{ \"documents.edit\" | translate }}\n                        </button>\n                    </ng-container>\n    \n                    <ng-container *ngIf=\"!documentFolderForm.value.id\">\n                        <p class=\"text\">{{ \"documents.documentFolderTitle\" | translate }} {{ documentFolderActive ? '(' + documentFolderActive?.name + ')' : '' }}</p>\n    \n                        <button \n                            [class.loading]=\"documentFolderFormLoading\" \n                            class=\"link confirm\" \n                            type=\"button\" \n                            (click)=\"onSaveDocumentFolderForm()\">\n                            {{ \"documents.add\" | translate }}\n                        </button>\n                    </ng-container>\n    \n                </div>\n    \n            </div>\n    \n    \n            <div class=\"scrollable wrapper section\">\n    \n                <form class=\"primary-form styled-form\" [formGroup]=\"documentFolderForm\">\n\n                    <ng-solcre-input-holder \n                        inputId=\"app-documents-displayName\" \n                        [control]=\"documentFolderForm.get('displayName')\">\n    \n                        <label \n                            class=\"label\" \n                            for=\"app-documents-displayName\">{{ \"documents.documentFolderName\" | translate }}</label>\n                        <input \n                            type=\"text\" \n                            name=\"displayName\" \n                            class=\"input\" \n                            formControlName=\"displayName\" \n                            id=\"app-documents-displayName\" \n                            [class.error]=\"!documentFolderForm.get('displayName')?.valid && documentFolderForm.get('displayName')?.touched\" \n                            [placeholder]=\"'documents.documentFolderNamePlaceholder' | translate\" />\n                    </ng-solcre-input-holder>\n    \n                    <ng-solcre-input-holder inputId=\"app-documents-orderNumber\" [control]=\"documentFolderForm.get('orderNumber')\">\n                        <label \n                            class=\"label\" \n                            for=\"app-documents-orderNumber\">{{ \"documents.documentFolderOrderNamber\" | translate}}</label>\n                        <input \n                            type=\"number\" \n                            name=\"orderNumber\" \n                            class=\"input\" \n                            formControlName=\"orderNumber\" \n                            id=\"app-documents-orderNumber\" \n                            [class.error]=\"!documentFolderForm.get('orderNumber')?.valid && documentFolderForm.get('orderNumber')?.touched\" \n                            [placeholder]=\"'documents.documentFolderOrderNumberPlaceholder' | translate\" />\n                    </ng-solcre-input-holder>\n                </form>\n            </div>\n        </div>\n        <div class=\"overlay\" (click)=\"onHideDocumentFolderForm()\"></div>\n    </ng-solcre-modal>\n\n    <!-- DOCUMENT MODAL -->\n    <ng-solcre-modal \n        [state]=\"documentFormState\" \n        [internal]=\"true\">\n    \n        <div class=\"holder\">\n    \n            <div class=\"modal-head align-m\">\n                <div class=\"align\">\n                    <button (click)=\"onHideDocumentForm()\" type=\"button\" class=\"link cancel\">\n                        {{ \"documents.cancel\" | translate }}\n                    </button>\n    \n                    <ng-container *ngIf=\"!!documentForm.value.id\">\n                        <p class=\"text\">{{ documentForm.value.filename }}</p>\n    \n                        <button \n                            [class.loading]=\"documentFormLoading\" \n                            class=\"link confirm\" \n                            type=\"button\" \n                            (click)=\"onSaveDocumentForm()\">\n                            {{ \"documents.edit\" | translate }}\n                        </button>\n                    </ng-container>\n    \n                    <ng-container *ngIf=\"!documentForm.value.id\">\n                        <p class=\"text\">{{ \"documents.documentTitle\" | translate }}</p>\n    \n                        <button \n                            [class.loading]=\"documentFormLoading\" \n                            class=\"link confirm\" \n                            type=\"button\" \n                            (click)=\"onSaveDocumentForm()\">\n                            {{ \"documents.add\" | translate }}\n                        </button>\n                    </ng-container>\n    \n                </div>\n    \n            </div> \n    \n            <div class=\"scrollable wrapper section\">\n    \n                <form class=\"primary-form styled-form\" [formGroup]=\"documentForm\">\n                    <ng-container *ngIf=\"!documentForm.value.id\">\n                        <ng-solcre-input-holder inputId=\"app-documents-file\" [control]=\"documentForm.get('file')\">\n                            <label \n                                class=\"label\" \n                                for=\"app-documents-file\">{{ \"documents.documentFile\" | translate}}</label>\n                            <ng-solcre-input-file \n                                *ngIf=\"documentFormState\"\n                                accept=\"*/*\"\n                                [fileName]=\"documentForm.value.filename\"\n                                [fileControl]=\"documentForm.get('file')\">\n                            </ng-solcre-input-file>\n                        </ng-solcre-input-holder>\n                    </ng-container>\n\n                    <ng-solcre-input-holder \n                        inputId=\"app-documents-title\" \n                        [control]=\"documentForm.get('title')\">\n    \n                        <label \n                            class=\"label\" \n                            for=\"app-documents-title\">{{ \"documents.documentTitle2\" | translate }}</label>\n                        <input \n                            type=\"text\" \n                            name=\"title\" \n                            class=\"input\" \n                            formControlName=\"title\" \n                            id=\"app-documents-title\" \n                            [class.error]=\"!documentForm.get('title')?.valid && documentForm.get('title')?.touched\" \n                            [placeholder]=\"'documents.documentTitlePlaceholder' | translate\" />\n                    </ng-solcre-input-holder>\n    \n                    <ng-solcre-input-holder inputId=\"app-documents-orderNumber\" [control]=\"documentForm.get('orderNumber')\">\n                        <label \n                            class=\"label\" \n                            for=\"app-documents-orderNumber\">{{ \"documents.documentOrderNamber\" | translate}}</label>\n                        <input \n                            type=\"number\" \n                            name=\"orderNumber\" \n                            class=\"input\" \n                            formControlName=\"orderNumber\" \n                            id=\"app-documents-orderNumber\" \n                            [class.error]=\"!documentForm.get('orderNumber')?.valid && documentForm.get('orderNumber')?.touched\" \n                            [placeholder]=\"'documents.documentOrderNumberPlaceholder' | translate\" />\n                    </ng-solcre-input-holder>\n                </form>\n            </div>\n        </div>\n        <div class=\"overlay\" (click)=\"onHideDocumentForm()\"></div>\n    </ng-solcre-modal>\n\n\n    <!-- MOVE FOLDER MODAL -->\n    <ng-solcre-modal \n        [state]=\"moveState\" \n        [internal]=\"true\">\n\n        <div \n            class=\"holder\" \n            role=\"dialog\" \n            aria-modal=\"true\" \n            aria-labelledby=\"app-documents-move-title\" \n            aria-describedby=\"app-documents-move-description\">\n\n            <div class=\"modal-head align-m\">\n                <div class=\"align\">\n                    <button \n                        (click)=\"onHideMoveForm()\" \n                        [disabled]=\"moveLoading\" \n                        type=\"button\" \n                        class=\"link cancel\">\n                        {{ \"documents.cancel\" | translate }}\n                    </button>\n\n                    <p class=\"text\" id=\"app-documents-move-title\">{{ \"documents.moveTitle\" | translate }} {{ moveSourceName }}</p>\n\n                    <button \n                        [class.loading]=\"moveLoading\" \n                        [disabled]=\"moveConfirmDisabled\" \n                        class=\"link confirm\" \n                        type=\"button\" \n                        (click)=\"onConfirmMove()\">\n                        {{ \"documents.move\" | translate }}\n                    </button>\n                </div>\n            </div>\n\n            <div class=\"scrollable wrapper section\">\n                <form class=\"primary-form styled-form\" [formGroup]=\"moveForm\">\n\n                    <p class=\"placeholder-modal\" id=\"app-documents-move-description\">{{ \"documents.moveDescription\" | translate }}</p>\n\n                    <ng-solcre-input-holder \n                        inputId=\"app-documents-move-parent\" \n                        [control]=\"moveForm.get('parent')\">\n\n                        <label \n                            class=\"label\" \n                            for=\"app-documents-move-parent\">{{ \"documents.moveDestination\" | translate }}</label>\n\n                        <div class=\"select\">\n                            <select \n                                #moveDestinationSelect\n                                id=\"app-documents-move-parent\" \n                                name=\"parent\" \n                                class=\"input\" \n                                formControlName=\"parent\" \n                                [class.error]=\"!!moveErrorKey\" \n                                [class.placeholder]=\"!moveForm.value.parent\" \n                                [attr.aria-invalid]=\"!!moveErrorKey\" \n                                [attr.aria-describedby]=\"moveErrorKey ? 'app-documents-move-error' : 'app-documents-move-description'\" \n                                [attr.disabled]=\"moveLoading || moveReloading || !moveHasDestinations ? '' : null\" \n                                (change)=\"onMoveDestinationChange()\">\n                                <option [ngValue]=\"null\">{{ \"documents.moveDestinationPlaceholder\" | translate }}</option>\n                                <option \n                                    *ngFor=\"let destination of moveDestinations\" \n                                    [ngValue]=\"destination.id\" \n                                    [disabled]=\"destination.disabled\">{{ getMoveDestinationLabel(destination) }}</option>\n                            </select>\n                        </div>\n\n                        <p \n                            *ngIf=\"moveErrorKey\" \n                            id=\"app-documents-move-error\" \n                            role=\"alert\" \n                            class=\"text-error margin-t-2\">{{ moveErrorKey | translate }}</p>\n                    </ng-solcre-input-holder>\n\n                    <!-- No destination can receive the folder -->\n                    <p \n                        *ngIf=\"!moveHasDestinations\" \n                        role=\"alert\" \n                        class=\"placeholder-modal\">{{ \"documents.moveNoDestinations\" | translate }}</p>\n\n                    <!-- Source and destination before confirming -->\n                    <p \n                        *ngIf=\"moveHasDestinations && moveForm.value.parent && !moveLoading && !moveReloading\" \n                        class=\"placeholder-modal\">{{ \"documents.moveSummary\" | translate: { source: moveSourceName, destination: moveDestinationName } }}</p>\n\n                    <!-- Request in progress -->\n                    <div \n                        *ngIf=\"moveLoading || moveReloading\" \n                        class=\"margin-t-4\" \n                        role=\"status\" \n                        aria-live=\"polite\">\n                        <ng-solcre-loader></ng-solcre-loader>\n                        <p class=\"placeholder-modal\">{{ (moveLoading ? 'documents.moveLoading' : 'documents.moveReloading') | translate }}</p>\n                    </div>\n                </form>\n            </div>\n        </div>\n        <div class=\"overlay\" (click)=\"onHideMoveForm()\"></div>\n    </ng-solcre-modal>\n\n    <!-- PERMISSIONS MODAL -->\n    <ng-solcre-modal \n        [state]=\"permissionsState\" \n        [internal]=\"true\">\n    \n        <div class=\"holder\">\n    \n            <div class=\"modal-head align-m\">\n                <div class=\"align\">\n                    <button (click)=\"onHidePermissions()\" type=\"button\" class=\"link cancel\">\n                        {{ \"documents.cancel\" | translate }}\n                    </button>\n    \n                    <p class=\"text\">{{ \"documents.permissions\" | translate }} {{ documentFolderActive?.displayName ?? documentFolderActive?.name }}</p>\n\n                    <button \n                        [class.loading]=\"permissionsLoading\" \n                        [disabled]=\"permissionsModalLoading\"\n                        class=\"link confirm\" \n                        type=\"button\" \n                        (click)=\"onSavePermissions()\">\n                        {{ \"documents.save\" | translate }}\n                    </button>\n                </div>\n            </div>\n    \n            <div class=\"scrollable wrapper section\">\n                <form class=\"primary-form styled-form\" [formGroup]=\"permissionsForm\">\n\n                    <ng-solcre-input-holder \n                        inputId=\"app-documents-query\" \n                        [control]=\"permissionsForm.get('query')\">\n    \n                        <label \n                            class=\"label\" \n                            for=\"app-documents-query\">{{ \"documents.query\" | translate }}</label>\n                        <input \n                            type=\"text\" \n                            name=\"query\" \n                            class=\"input\" \n                            formControlName=\"query\" \n                            id=\"app-documents-query\" \n                            [class.error]=\"!permissionsForm.get('query')?.valid && permissionsForm.get('query')?.touched\" \n                            [placeholder]=\"'documents.queryPlaceholder' | translate\" \n                            (keyup)=\"onQueryKeyUp()\"/>\n                    </ng-solcre-input-holder>\n\n                    <hr />\n                    <!--  -->\n                    <div class=\"margin-t-4\" *ngIf=\"permissionsModalLoading\">\n                        <ng-solcre-loader ></ng-solcre-loader>\n                    </div>\n                    \n                    <ng-container *ngIf=\"!permissionsModalLoading\">\n                        <!-- Active searching -->\n                        <ng-container *ngIf=\"permissionsForm.value.query\">\n                            <!-- Search with results -->\n                            <div formGroupName=\"usersIds\" class=\"select-form-container\" *ngIf=\"activeUsers.length\">\n                                <label class=\"label\" *ngFor=\"let user of activeUsers; let i=index\">\n                                    <input \n                                        type=\"checkbox\" \n                                        [formControlName]=\"user.id\" \n                                        [checked]=\"permissionsForm.value.usersIds[user.id]\" \n                                        [value]=\"true\"\n                                        (change)=\"onPermissionChange(user)\"/>\n                                    {{ user.fullName }} ({{ user.email }})\n                                </label>\n                            </div>\n\n                             <!-- Search without results -->\n                             <ng-container *ngIf=\"!activeUsers.length\">\n                                <p class=\"placeholder-modal\">{{ \"documents.searchUsersPlaceholder\" | translate }}</p>\n                            </ng-container>\n                        </ng-container>\n\n                        <!-- Not searching -->\n                        <ng-container *ngIf=\"!permissionsForm.value.query\">\n                            <!-- No Initial permissions -->\n                            <ng-container *ngIf=\"!activePermissions.length\">\n                                <p class=\"placeholder-modal\">{{ \"documents.permissionsPlaceholder\" | translate }}</p>\n                            </ng-container>\n\n                            <!-- Has Initial permissions -->\n                            <div formGroupName=\"usersIds\" class=\"select-form-container\" *ngIf=\"activePermissions.length\">\n                                <label class=\"label\" *ngFor=\"let permission of activePermissions; let i=index\">\n                                    <input \n                                        type=\"checkbox\" \n                                        [formControlName]=\"permission.id\" \n                                        [checked]=\"permissionsForm.value.usersIds[permission.id]\" \n                                        [value]=\"true\"/>\n                                    {{ permission.fullName }} ({{ permission.email }})\n                                </label>\n                            </div>\n                        </ng-container>\n                    </ng-container>\n                </form>\n            </div>\n        </div>\n        <div class=\"overlay\" (click)=\"onHidePermissions()\"></div>\n    </ng-solcre-modal>\n</div>\n\n<!-- CONFIRM DIALOG -->\n<ng-solcre-dialog></ng-solcre-dialog>","import { DateUtility } from '@solcre-org/admin-core';\nimport { DataBaseModelInterface } from '@solcre-org/core';\n\nexport class NewsModel implements DataBaseModelInterface {\n\n  constructor(\n    public id?: number,\n    public title?: string,\n    public description?: string,\n    public addedAt?: string | null,\n    public date?: string | null,\n    public content?: string,\n    public category?: number | null,\n    public frame?: number | null,\n    public files?: any[]\n  ) { }\n\n  public fromJSON(json: any): void {\n    if (json) {\n      this.id = json.id;\n      this.title = json.title;\n      this.description = json.description;\n      this.content = json.content;\n      this.addedAt = json.addedAt ? DateUtility.format(json.addedAt.date, \"DD/MM/YYYY\") : null;\n      this.date = json.date ? DateUtility.sqlDate(json.date.date) : null;\n      this.category = json.category;\n      this.frame = json.frame;\n      this.files = json.files && json.files.length ? json.files : null;\n    }\n  }\n\n  public toJSON(): any {\n    return {\n      \"id\": this.id,\n      \"title\": this.title,\n      \"description\": this.description,\n      \"content\": this.content,\n      \"addedAt\": this.addedAt,\n      \"date\": this.date,\n      \"category\": this.category,\n      \"frame\": this.frame,\n      \"files\": this.files ?? null,\n      \"newFiles\": []\n    }\n  }\n\n  public getId(): number {\n    return this.id ?? 0;\n  }\n\n  public getReference(): string {\n    return this.title ?? '';\n  }\n\n}\n","import { HttpClient, HttpEvent } from '@angular/common/http';\nimport { Component, OnInit, inject } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n  ApiResponseModel,\n  ArrayUtility,\n  AuthService,\n} from '@solcre-org/core';\nimport { \n  BreadcrumbModel, \n  DateUtility, \n  ErrorsHttpService, \n  SimplePanelOptions, \n  SimplePanelRowParsingInterface, \n  SimplePanelService, \n  TableHeaderModel, \n  TableModel, \n  TableOptions, \n  TableRowModel, \n  YoutubeUtils \n} from '@solcre-org/admin-core';\nimport { Observable } from 'rxjs';\n\nimport { CategoryModel } from '../../models/category.model';\nimport { NewsModel } from '../../models/news.model';\nimport { AdminPanelsService } from '../../../shared/services/admin-panels.service';\n\n@Component({\n  selector: 'intranet-news',\n  templateUrl: './news.component.html',\n  providers: [SimplePanelService],\n  standalone: false,\n})\nexport class NewsComponent implements OnInit {\n  //Services\n  adminPanelsService: AdminPanelsService = inject(AdminPanelsService);\n\n  //Models\n  breadcrumbs: BreadcrumbModel[];\n  tableModel: TableModel;\n  panelOptions: SimplePanelOptions;\n  tableOption: TableOptions;\n  primaryForm: FormGroup;\n  youtube: string =\n    '<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/ztjZso7dVRQ\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen></iframe>';\n  editFace: boolean = false;\n  imagesUrl: string = this.adminPanelsService.getApiUrlsConfig().apiImagesUrl;\n\n  //Data\n  categories: CategoryModel[] = [];\n\n  constructor(\n    private errorsHttpService: ErrorsHttpService,\n    private httpClient: HttpClient,\n    private formBuilder: FormBuilder,\n    private translateService: TranslateService,\n    public authService: AuthService\n  ) {\n    //Initialize all models\n    this.tableModel = new TableModel([\n      new TableHeaderModel('', 'title'),\n      new TableHeaderModel('', 'category'),\n      new TableHeaderModel('', 'date'),\n      new TableHeaderModel('', 'state'),\n    ]);\n\n    this.panelOptions = {\n      URI: this.adminPanelsService.getApiUrlsConfig().apiIntranetNewsUri,\n      keepIdOnUpdate: true,\n      preventProcessHttpErrors: true,\n      title: '',\n      defaultQueryParams: {\n        'sort[addedAt]': 'ASC',\n        size: -1,\n      },\n    };\n\n    //Parse Categories\n    this.parseCategories(this.authService.getLoggedStartData() ?? {});\n\n    //Create breadcrumbs\n    this.breadcrumbs = [new BreadcrumbModel('', ['news'], true)];\n\n    //Create form\n    this.primaryForm = this.formBuilder.group({\n      id: this.formBuilder.control(null, []),\n      title: this.formBuilder.control(null, [Validators.required]),\n      description: this.formBuilder.control(null, []),\n      content: this.formBuilder.control(null, [Validators.required]),\n      category: this.formBuilder.control(null, [Validators.required]),\n      newFiles: this.formBuilder.control(null, []),\n      files: this.formBuilder.control(null, []),\n      date: this.formBuilder.control(null, []),\n      frame: this.formBuilder.control(0),\n    });\n\n    this.tableOption = { useUnshift: true };\n  }\n\n  async ngOnInit() {\n    //Get translations\n    const translations: any = await this.translateService\n      .get([\n        'news.panelTitle',\n        'news.title',\n        'news.date',\n        'news.category',\n        'news.state',\n        'nav.news',\n      ])\n      .toPromise();\n\n    //Apply translations to panel\n    this.panelOptions.title = translations['news.panelTitle'];\n    this.breadcrumbs[0].display = translations['nav.news'];\n\n    //Check header\n    if (this.tableModel.header) {\n      this.tableModel.header[0].display = translations['news.title'];\n      this.tableModel.header[1].display = translations['news.category'];\n      this.tableModel.header[2].display = translations['news.date'];\n      this.tableModel.header[3].display = translations['news.state'];\n    }\n  }\n\n  onBeforeSend(json: any) {\n    const newFiles: File[] | null = json.newFiles;\n    const files: any[] | null = json.files;\n\n    //Remove keys\n    delete json.newFiles;\n    delete json.files;\n\n    //Check id\n    if (!!json.id) {\n      delete json.id;\n    }\n\n    //Fixed date\n    json.date = DateUtility.format(\n      json.date ?? new Date().toString(),\n      'YYYY-MM-DD 00:00'\n    );\n\n    // Load new files\n    let hasFiles = false;\n    ArrayUtility.each(newFiles, (file: File, index: number) => {\n      json[`files[${index}]`] = file;\n      hasFiles = true;\n    });\n\n    //Load old files\n    if (hasFiles) {\n      ArrayUtility.each(files, (file: any, index: number) => {\n        json[`filesIds[${index}]`] = file.id;\n      });\n    } else {\n      json.filesIds = ArrayUtility.map(files ?? [], (file: any) => file.id);\n    }\n\n    if (json.frame === true) {\n      json.frame = 1;\n    }\n\n    //Category to string\n    json.category = json.category?.toString();\n  }\n\n  onPicturesSelected($event: any): void {\n    this.editFace = false;\n    const files: File[] = $event.target.files;\n    const prevFiles: File[] = this.primaryForm.value.newFiles ?? [];\n\n    //Load values\n    this.primaryForm.patchValue({ newFiles: [...files, ...prevFiles] });\n  }\n\n  onDeleteFile(index: number): void {\n    this.editFace = true;\n\n    const files: File[] = [...(this.primaryForm.value.files ?? [])];\n\n    files.splice(index, 1);\n\n    this.primaryForm.patchValue({ files });\n\n    if (!files.length && !this.primaryForm.value.newFiles?.length) {\n      this.primaryForm.patchValue({ newFiles: [] });\n    }\n  }\n\n  onDeleteSelectedFile(index: number): void {\n    this.editFace = true;\n\n    const newFiles: File[] = [...(this.primaryForm.value.newFiles ?? [])];\n    const files: File[] = [...(this.primaryForm.value.files ?? [])];\n\n    if (index < newFiles.length) {\n      newFiles.splice(index, 1);\n    } else {\n      files.splice(index - newFiles.length, 1);\n    }\n\n    this.primaryForm.patchValue({ newFiles, files });\n  }\n\n  onParseModel(arg: SimplePanelRowParsingInterface): void {\n    //Get each row from simple panel\n    const news: NewsModel = new NewsModel();\n    news.fromJSON(arg.json);\n    // Complete observable\n    arg.callback(news);\n  }\n\n  onBeforeOpen(json: any) {\n    this.editFace = true;\n  }\n\n  onSaveSuccess(response: ApiResponseModel): void {}\n\n  onError(error: any) {\n    //Display with translations\n    this.errorsHttpService.display(error);\n  }\n\n  onGetJSON(json: any, row: TableRowModel): any {\n    return json;\n  }\n\n  onVideoEditor(executeCommandFn: Function): void {\n    //Display a prompt\n    const link: string | null = window.prompt('Pegue el link del video', '');\n\n    //Control link\n    if (link) {\n      executeCommandFn('insertHtml', YoutubeUtils.getHTML(link));\n    }\n  }\n\n  private parseCategories(data: any): void {\n    const categories: any[] = data.categories ?? [];\n\n    //Clear\n    this.categories = [];\n\n    //Check data\n    ArrayUtility.each(categories, (json: any) => {\n      const cat: CategoryModel = new CategoryModel();\n      cat.fromJSON(json);\n      this.categories.push(cat);\n    });\n  }\n}\n","<div class=\"layout responsive\">\n    <ng-solcre-simple-panel *ngIf=\"tableModel\" (onParseModel)=\"onParseModel($event)\" (onBeforeOpen)=\"onBeforeOpen($event)\" (onBeforeSend)=\"onBeforeSend($event)\" (onSaveSuccess)=\"onSaveSuccess($event)\" (onError)=\"onError($event)\" [breadcrumbs]=\"breadcrumbs\" [options]=\"panelOptions\" [primaryForm]=\"primaryForm\" [tableModel]=\"tableModel\" [onGetJSON]=\"onGetJSON\" [customTableTemplate]=\"customTdTemplate\" [tableOptions]=\"tableOption\">\n\n        <div class=\"primary-form styled-form\" [formGroup]=\"primaryForm\">\n            <ng-solcre-input-holder inputId=\"app-news-title\" [control]=\"primaryForm.get('title')\">\n\n                <label class=\"label\" for=\"app-news-title\">{{ \"news.title\" | translate}}</label>\n                <input type=\"text\" name=\"title\" class=\"input\" formControlName=\"title\" id=\"app-news-title\" [class.error]=\"!primaryForm.get('title')?.valid && primaryForm.get('title')?.touched\" [placeholder]=\"'news.titlePlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-news-date\" [control]=\"primaryForm.get('date')\">\n\n                <label class=\"label\" for=\"app-news-date\">{{ \"news.date\" | translate}}</label>\n                <input type=\"date\" name=\"date\" class=\"input\" formControlName=\"date\" id=\"app-news-date\" [class.error]=\"!primaryForm.get('date')?.valid && primaryForm.get('date')?.touched\" />\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-news-description\" [control]=\"primaryForm.get('description')\">\n\n                <label class=\"label\" for=\"app-news-description\">{{ \"news.description\" | translate}}</label>\n                <input type=\"text\" name=\"description\" class=\"input\" formControlName=\"description\" id=\"app-news-description\" [class.error]=\"!primaryForm.get('description')?.valid && primaryForm.get('description')?.touched\" [placeholder]=\"'news.descriptionPlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-news-category\" [control]=\"primaryForm.get('category')\">\n\n                <label class=\"label\" for=\"app-news-category\">{{ 'news.category' | translate }}</label>\n\n                <ng-solcre-select controlName=\"category\" modelId=\"id\" modelIdKey=\"id\" modelDisplayKey=\"name\" [placeholder]=\"'news.categoryPlaceholder' | translate\" [models]=\"categories\" [form]=\"primaryForm\">\n                </ng-solcre-select>\n\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-news-album\" [control]=\"primaryForm.get('newFiles')\">\n\n                <label class=\"label\" for=\"app-news-album\">{{ \"news.files\" | translate}}</label>\n                <input *ngIf=\"!(primaryForm.value.newFiles?.length || primaryForm.value.files?.length)\"  class=\"input\" type=\"file\" multiple=\"1\" accept=\"image/*\" (change)=\"onPicturesSelected($event)\" />\n\n                <div class=\"row margin-t-3\">\n                    <ng-container *ngFor=\"let file of primaryForm.value.newFiles; let i=index;\">\n                        <div class=\"col-sm-3\">\n                            <ng-solcre-picture-preview \n                                [pictureFile]=\"file\" \n                                [pictureName]=\"''\" \n                                [imagesUrl]=\"imagesUrl\">\n                            </ng-solcre-picture-preview>\n                        </div>\n                        <div class=\"col-sm-1\">\n                            <button (click)=\"onDeleteSelectedFile(i)\" type=\"button\" class=\"action action-btn icon-btn icon-delete text-error\"></button>\n                        </div>\n                    </ng-container>\n                    <ng-container *ngFor=\"let file of primaryForm.value.files; let i=index;\">\n                        <div class=\"col-sm-3\">\n                            <ng-solcre-picture-preview \n                                [pictureName]=\"file.filename\" \n                                [imagesUrl]=\"imagesUrl\">\n                            </ng-solcre-picture-preview>\n                        </div>\n                        <div class=\"col-sm-1\">\n                            <button (click)=\"onDeleteFile(i)\" type=\"button\" class=\"action action-btn icon-btn icon-delete text-error\"></button>\n                        </div>\n                    </ng-container>\n                </div>\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder *ngIf=\"(primaryForm.value.newFiles?.length || primaryForm.value.files?.length) && !editFace\" class=\"checkbox-group checkbox-container\" inputId=\"app-news-checkbox\" [control]=\"primaryForm.get('frame')\">\n                <label class=\"label\" for=\"app-news-checkbox\">Encuadrar foto</label>\n                <div class=\"radios-group\">\n                    <label class=\"checkbox-label clickable\" for=\"app-news-checkbox\">\n                        <input type=\"checkbox\" name=\"frame\" class=\"notVisible validate-required\" formControlName=\"frame\" id=\"app-news-checkbox\" />\n                        <span class=\"checkbox\"></span>\n                        <span class=\"text-tocheck\">Si</span>\n                    </label>\n                </div>\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-news-content\" [control]=\"primaryForm.get('content')\">\n                <label class=\"label\" for=\"app-news-content\">{{ 'news.content' | translate }}</label>\n\n            <solcre-text-editor \n                id=\"app-news-content\" \n                name=\"content\" \n                class=\"input\" \n                formControlName=\"content\"\n                [apiUrl]=\"adminPanelsService.getApiUrlsConfig().apiUrl\"\n                [apiUploadImagesUrl]=\"adminPanelsService.getApiUrlsConfig().apiUploadImagesUrl\"\n                [authToken]=\"authService.getAccessToken()?.token\"\n                [ngClass]=\"{ error: !primaryForm.get('content')?.valid && primaryForm.get('content')?.touched }\">\n\n            </solcre-text-editor>\n            </ng-solcre-input-holder>\n\n        </div>\n    </ng-solcre-simple-panel>\n</div>\n\n<ng-template #customTdTemplate let-model=\"model\" let-field=\"field\">\n    <span [ngSwitch]=\"field\">\n        <ng-container *ngSwitchCase=\"'isFeatured'\">{{ (model.isFeatured ? 'commons.yes' : 'commons.no') | translate }}</ng-container>\n        <ng-container *ngSwitchCase=\"'category'\">{{ model.category | data: { key: 'name', data: categories } }}</ng-container>\n        <ng-container *ngSwitchCase=\"'date'\">{{ model.date | date: 'dd/MM/YYYY' }}</ng-container>\n        <ng-container *ngSwitchCase=\"'state'\">\n            <span *ngIf=\"model.date\">{{ 'news.statePublished' | translate }}{{ model.date | date: 'dd/MM/YYYY' }}</span>\n            <span *ngIf=\"!model.date\">{{ 'news.stateNoPublished' | translate }}</span>\n        </ng-container>\n        <ng-container *ngSwitchDefault>{{ model[field] }}</ng-container>\n    </span>\n</ng-template>","import { DateUtility } from \"@solcre-org/admin-core\";\nimport { DataBaseModelInterface } from \"@solcre-org/core\";\n\nexport class MediaModel implements DataBaseModelInterface {\n  constructor(\n    public id?: number,\n    public title?: string,\n    public description?: string,\n    public content?: string,\n    public addedAt?: string | null,\n    public createdBy?: string | null,\n    public status?: boolean | null,\n    public files?: any[]\n  ) {}\n\n  public fromJSON(json: any): void {\n    if (json) {\n      this.id = json.id;\n      this.title = json.title;\n      this.description = json.description;\n      this.content = json.content;\n      this.status = json.status === 'approved';\n      this.createdBy = '';\n      this.addedAt = json.addedAt\n        ? DateUtility.format(json.addedAt.date, 'DD/MM/YYYY')\n        : null;\n      this.files = json.files && json.files.length ? json.files : null;\n\n      if (json._embedded && json._embedded.createdBy) {\n        const name = json._embedded.createdBy.name || '';\n        const lastName = json._embedded.createdBy.lastName || '';\n        this.createdBy = name + (lastName ? ` ${lastName}` : '');\n      }\n    }\n  }\n\n  public toJSON(): any {\n    return {\n      id: this.id,\n      title: this.title,\n      description: this.description,\n      content: this.content,\n      addedAt: this.addedAt,\n      createdBy: this.createdBy,\n      status: this.status,\n      files: this.files ?? null,\n    };\n  }\n\n  public getId(): number {\n    return this.id ?? 0;\n  }\n\n  public getReference(): string {\n    return this.title ?? '';\n  }\n}","import { Component, inject, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\n\n// import { ErrorsService } from 'src/app/shared/errors.service';\nimport { MediaModel } from './media.model';\nimport { SimplePanelService, DialogService, BreadcrumbModel, TableModel, SimplePanelOptions, TableOptions, TableHeaderModel, TableRowActionModel, TableRowModel, SimplePanelRowParsingInterface, DialogModel } from '@solcre-org/admin-core';\nimport { ApiService, ArrayUtility, ApiResponseModel } from '@solcre-org/core';\nimport { AdminPanelsService } from '../../../../public-api';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n  selector: 'app-media',\n  templateUrl: './media.component.html',\n  styleUrls: ['./media.component.scss'],\n  providers: [SimplePanelService, DialogService, CommonModule],\n  standalone: false\n})\nexport class MediaComponent implements OnInit {\n  //Services\n  adminPanelsService: AdminPanelsService = inject(AdminPanelsService);\n\n  //Models\n  breadcrumbs: BreadcrumbModel[];\n  tableModel: TableModel;\n  panelOptions: SimplePanelOptions;\n  primaryForm: FormGroup = new FormGroup({});\n  approving: boolean = false;\n  tableOption: TableOptions;\n  imagesUrl: string = this.adminPanelsService.getApiUrlsConfig().apiImagesUrl;\n\n  constructor(\n    private apiService: ApiService,\n    private dialogService: DialogService,\n    private translateService: TranslateService,\n    // private errorsService: ErrorsService,\n    private formBuilder: FormBuilder\n  ) {\n    //Initialize all models\n    this.tableModel = new TableModel(\n      [\n        new TableHeaderModel('', 'title'),\n        new TableHeaderModel('', 'addedAt'),\n        new TableHeaderModel('', 'status'),\n        new TableHeaderModel('', 'createdBy'),\n      ],\n      [\n        new TableRowActionModel(\n          'approve',\n          '',\n          'icon-tick',\n          (row: TableRowModel) => {\n            this.approveMediaAction(row);\n          }\n        ),\n      ]\n    );\n\n    this.panelOptions = {\n      URI: this.adminPanelsService.getApiUrlsConfig().apiIntranetMediaUri,\n      keepIdOnUpdate: true,\n      preventProcessHttpErrors: true,\n      title: '',\n      disableAdd: true,\n      defaultQueryParams: {\n        'sort[addedAt]': 'DESC',\n      },\n    };\n\n    this.primaryForm = this.formBuilder.group({\n      id: this.formBuilder.control(null, []),\n      title: this.formBuilder.control(null, []),\n      description: this.formBuilder.control(null, []),\n      content: this.formBuilder.control(null, []),\n      newFiles: this.formBuilder.control(null, []),\n      files: this.formBuilder.control(null, []),\n      createdBy: this.formBuilder.control(null, []),\n      status: this.formBuilder.control(null, []),\n    });\n\n    this.tableOption = { useUnshift: false };\n\n    //Create breadcrumbs\n    this.breadcrumbs = [new BreadcrumbModel('', ['media'], true)];\n  }\n\n  async ngOnInit() {\n    //Get translations\n    const translations: any = await this.translateService\n      .get([\n        'media.panelTitle',\n        'media.title',\n        'media.createdAt',\n        'media.createdBy',\n        'media.status',\n        'nav.media',\n      ])\n      .toPromise();\n\n    //Apply translations to panel\n    this.panelOptions.title = translations['media.panelTitle'];\n    this.breadcrumbs[0].display = translations['nav.media'];\n\n    //Check header\n    if (this.tableModel.header) {\n      this.tableModel.header[0].display = translations['media.title'];\n      this.tableModel.header[1].display = translations['media.createdAt'];\n      this.tableModel.header[2].display = translations['media.status'];\n      this.tableModel.header[3].display = translations['media.createdBy'];\n    }\n  }\n\n  onBeforeSend(json: any) {\n    \n    const newFiles: File[] | null = json.newFiles;\n    const files: any[] | null = json.files;\n\n    //Remove keys\n    delete json.newFiles;\n    delete json.files;\n\n    //Check id\n    if (!json.id) {\n      delete json.id;\n    }\n\n    let hasFiles = false;\n    ArrayUtility.each(newFiles, (file: File, index: number) => {\n      json[`files[${index}]`] = file;\n      hasFiles = true;\n    });\n\n    //Load old files\n    if (hasFiles) {\n      ArrayUtility.each(files, (file: any, index: number) => {\n        json[`filesIds[${index}]`] = file.id;\n      });\n    } else {\n      json.filesIds = ArrayUtility.map(files ?? [], (file: any) => file.id);\n    }\n  }\n\n  onParseModel(arg: SimplePanelRowParsingInterface): void {\n    //Get each row from simple panel\n    const media: MediaModel = new MediaModel();\n    media.fromJSON(arg.json);\n    // Complete observable\n    arg.callback(media);\n  }\n\n  onBeforeOpen(json: any) {\n    this.primaryForm.patchValue({\n      addedAt: json.addedAt,\n      createdBy: json.createdBy,\n      status: json.status,\n    });\n  }\n\n  onSaveSuccess(response: ApiResponseModel): void {}\n\n  onFetchRowsEnds(rows: TableRowModel[]): void {\n    ArrayUtility.each(rows, (row: TableRowModel) =>\n      this.calculateRowStatus(row)\n    );\n  }\n\n  onError(error: any) {\n    //Display with translations\n    // this.errorsService.displayHttp(error);\n  }\n\n  onGetJSON(json: any, row: TableRowModel): any {\n    return json;\n  }\n\n  private approveMediaAction(row: TableRowModel): void {\n    const media: MediaModel = <MediaModel>row.model;\n    //Check not approve\n    if (!media.status) {\n      this.dialogService.open(\n        new DialogModel('¿Deseas aprobar la multimedia?', () => {\n          this.approveMedia(row);\n        })\n      );\n    }\n  }\n\n  private calculateRowStatus(row: TableRowModel): void {\n    const media: MediaModel = <MediaModel>row.model;\n\n    //Sett action visiblity\n    row.options = {\n      actionsVisibility: { approve: !media.status },\n    };\n  }\n\n  private approveMedia(row: TableRowModel): void {\n    const media: MediaModel = <MediaModel>row.model;\n    //set loading\n    this.approving = true;\n\n    //Do patch\n    this.apiService\n      .partialUpdateObj(this.adminPanelsService.getApiUrlsConfig().apiIntranetMediaUri, media.id, {\n        approve: 1,\n      })\n      .subscribe({\n        next: (response: ApiResponseModel) => {\n          media.status = true;\n\n          //Calculate\n          this.calculateRowStatus(row);\n\n          //Stop loading\n          this.approving = false;\n\n          //Close dialog\n          this.dialogService.close();\n        },\n        error: () => {\n          //Stop loading\n          this.approving = false;\n        },\n      });\n  }\n\n  onDeleteFile(index: number): void {\n    const files: File[] = this.primaryForm.value.files ?? [];\n\n    //Remove\n    files.splice(index, 1);\n\n    //Clear input\n    this.primaryForm.patchValue({ files });\n  }\n\n  onDeleteSelectedFile(index: number): void {\n    const newFiles: File[] = this.primaryForm.value.newFiles ?? [];\n\n    //Remove\n    newFiles.splice(index, 1);\n\n    //Clear input\n    this.primaryForm.patchValue({ newFiles });\n  }\n\n  onPicturesSelected($event: any): void {\n    const files: File[] = $event.target.files;\n    const prevFiles: File[] = this.primaryForm.value.newFiles ?? [];\n\n    //Load values\n    this.primaryForm.patchValue({ newFiles: [...files, ...prevFiles] });\n  }\n}\n","<div class=\"layout responsive\">\n    <ng-solcre-simple-panel \n        *ngIf=\"tableModel\" \n        (onParseModel)=\"onParseModel($event)\" \n        (onBeforeOpen)=\"onBeforeOpen($event)\"\n        (onBeforeSend)=\"onBeforeSend($event)\"\n        (onSaveSuccess)=\"onSaveSuccess($event)\"\n        (onError)=\"onError($event)\"\n        (onFetchRowsEnds)=\"onFetchRowsEnds($event)\"\n        [breadcrumbs]=\"breadcrumbs\" \n        [options]=\"panelOptions\"\n        [primaryForm]=\"primaryForm\" \n        [tableModel]=\"tableModel\" \n        [tableOptions]=\"tableOption\"\n        [onGetJSON]=\"onGetJSON\"\n        [customTableTemplate]=\"customTdTemplate\">\n\n        <div class=\"primary-form styled-form\" [formGroup]=\"primaryForm\">\n            <ng-solcre-input-holder inputId=\"app-news-title\" [control]=\"primaryForm.get('title')\">\n        \n                <label class=\"label\" for=\"app-news-title\">{{ \"news.title\" | translate}}</label>\n                <input type=\"text\" name=\"title\" class=\"input\" formControlName=\"title\" id=\"app-news-title\" [class.error]=\"!primaryForm.get('title')?.valid && primaryForm.get('title')?.touched\" [placeholder]=\"'news.titlePlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n        \n            <ng-solcre-input-holder inputId=\"app-news-description\" [control]=\"primaryForm.get('description')\">\n        \n                <label class=\"label\" for=\"app-news-description\">{{ \"news.description\" | translate}}</label>\n                <textarea \n                    name=\"description\" \n                    class=\"input\"\n                    formControlName=\"description\" \n                    id=\"app-news-description\"\n                    [class.error]=\"!primaryForm.get('description')?.valid && primaryForm.get('description')?.touched\" \n                    [placeholder]=\"'news.descriptionPlaceholder' | translate\"\n                    rows=\"3\">\n                </textarea>\n\n            </ng-solcre-input-holder>\n            \n            <ng-solcre-input-holder inputId=\"app-news-content\" [control]=\"primaryForm.get('content')\">\n            \n                <label class=\"label\" for=\"app-news-content\">{{ \"news.content\" | translate}}</label>\n                <textarea \n                    name=\"content\" \n                    class=\"input\"\n                    formControlName=\"content\" \n                    id=\"app-news-content\"\n                    [class.error]=\"!primaryForm.get('content')?.valid && primaryForm.get('content')?.touched\" \n                    [placeholder]=\"'news.contentPlaceholder' | translate\"\n                    rows=\"6\">\n                </textarea>\n            </ng-solcre-input-holder>\n\n            \n            <ng-solcre-input-holder inputId=\"app-news-album\" [control]=\"primaryForm.get('newFiles')\">\n            \n                <label class=\"label\" for=\"app-news-album\">{{ \"news.files\" | translate}}</label>\n                <input class=\"input\" type=\"file\" multiple=\"1\" accept=\"image/*\" (change)=\"onPicturesSelected($event)\" />\n            \n                <div class=\"row margin-t-3\">\n                    <ng-container *ngFor=\"let file of primaryForm.value.newFiles; let i=index;\">\n                        <div class=\"col-sm-3\">\n                            <ng-solcre-picture-preview [pictureFile]=\"file\" [pictureName]=\"''\" [imagesUrl]=\"imagesUrl\">\n                            </ng-solcre-picture-preview>\n                        </div>\n                        <div class=\"col-sm-1\">\n                            <button (click)=\"onDeleteSelectedFile(i)\" type=\"button\" class=\"action action-btn icon-btn icon-delete text-error\"></button>\n                        </div>\n                    </ng-container>\n                    <ng-container *ngFor=\"let file of primaryForm.value.files; let i=index;\">\n                        <div class=\"col-sm-3\">\n                            <ng-solcre-picture-preview [pictureName]=\"file.filename\" [imagesUrl]=\"imagesUrl\">\n                            </ng-solcre-picture-preview >\n                        </div>\n                        <div class=\"col-sm-1\">\n                            <button (click)=\"onDeleteFile(i)\" type=\"button\" class=\"action action-btn icon-btn icon-delete text-error\"></button>\n                        </div>\n                    </ng-container>\n                </div>\n            </ng-solcre-input-holder>\n            \n        </div>\n    </ng-solcre-simple-panel>\n</div>\n\n<ng-template #customTdTemplate let-model=\"model\" let-field=\"field\">\n    <span [ngSwitch]=\"field\">\n        <ng-container *ngSwitchCase=\"'status'\">{{ model.status ? \"Aprobado\" : \"Pendiente\"  }}</ng-container>\n        <ng-container *ngSwitchDefault>{{ model[field] }}</ng-container>\n    </span>\n</ng-template>\n<ng-solcre-dialog [loading]=\"approving\"></ng-solcre-dialog>","import { DateUtility } from \"@solcre-org/admin-core\";\nimport { DataBaseModelInterface } from \"@solcre-org/core\";\n\n\nexport class EventsModel implements DataBaseModelInterface {\n  constructor(\n    public id?: number,\n    public name?: string,\n    public content?: string,\n    public modality?: number,\n    public isSoon?: boolean,\n    public duration?: string,\n    public eventDate?: string | null,\n    public addedAt?: string | null,\n    public eventType?: number\n  ) {}\n\n  public fromJSON(json: any): void {\n    if (json) {\n      this.id = json.id;\n      this.name = json.name;\n      this.content = json.content;\n      this.modality = json.modality;\n      this.isSoon = json.isSoon;\n      this.duration = json.duration;\n      this.eventType = json.eventType;\n      this.addedAt = null;\n      this.eventDate = null;\n\n      if(json.eventDate?.date){\n        this.eventDate = DateUtility.format(json.eventDate.date, \"YYYY-MM\");\n      }\n      if(json.addedAt?.date){\n        this.addedAt = json.addedAt.date;\n      }\n    }\n  }\n\n  public toJSON(): any {\n    return {\n      id: this.id,\n      name: this.name,\n      content: this.content,\n      modality: this.modality,\n      isSoon: this.isSoon,\n      duration: this.duration,\n      addedAt: this.addedAt,\n      eventType: this.eventType,\n      eventDate: this.eventDate,\n    };\n  }\n\n  public getId(): number {\n    return this.id ?? 0;\n  }\n\n  public getReference(): string {\n    return this.name ?? '';\n  }\n}\n","import { DataBaseModelInterface } from \"@solcre-org/core\";\n\nexport class EventsTypeModel implements DataBaseModelInterface {\n  constructor(\n    public id?: number,\n    public name?: string,\n    public position?: number | null\n  ) {}\n\n  public fromJSON(json: any): void {\n    if (json) {\n      this.id = json.id;\n      this.name = json.name;\n      this.position = json.position;\n    }\n  }\n\n  public toJSON(): any {\n    return {\n      id: this.id,\n      name: this.name,\n      position: this.position,\n    };\n  }\n\n  public getId(): number {\n    return this.id ?? 0;\n  }\n\n  public getReference(): string {\n    return this.name ?? '';\n  }\n}\n","import { HttpClient, HttpEvent } from '@angular/common/http';\nimport { Component } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { AngularEditorConfig, UploadResponse } from '@kolkov/angular-editor';\nimport { TranslateService } from '@ngx-translate/core';\nimport { map, Observable } from 'rxjs';\nimport { EventsModel } from './events.model';\nimport { EventsTypeModel } from './events-type.model';\nimport { BreadcrumbModel, DateUtility, RemoteDataModel, SimplePanelOptions, SimplePanelRowParsingInterface, SimplePanelService, TableHeaderModel, TableModel, TableOptions, TableRowModel } from '@solcre-org/admin-core';\nimport { ApiResponseModel, ArrayUtility, AuthService } from '@solcre-org/core';\nimport { AdminPanelsService } from '../../../shared/services/admin-panels.service';\n\n@Component({\n  selector: 'app-events',\n  templateUrl: './events.component.html',\n  styleUrls: ['./events.component.scss'],\n  providers: [SimplePanelService],\n  standalone: false\n})\nexport class EventsComponent {\n  //Models\n  breadcrumbs: BreadcrumbModel[];\n  tableModel: TableModel;\n  panelOptions: SimplePanelOptions;\n  tableOption: TableOptions;\n  primaryForm: FormGroup;\n\n  //Data\n  eventsTypes: EventsTypeModel[] = [];\n\n  //CKEDITOR\n  editorConfig: AngularEditorConfig = {\n    minHeight: '150px',\n    editable: true,\n    sanitize: false,\n    defaultParagraphSeparator: 'p',\n    upload: (file: File) => {\n      return this.uploadEditorPicture(file);\n    },\n    toolbarHiddenButtons: [\n      ['undo', 'redo', 'subscript', 'superscript', 'fontName'],\n      ['customClasses', 'insertVideo'],\n    ],\n  };\n\n  modalityArr = [\n    { id: 0, name: 'Presencial' },\n    { id: 1, name: 'Virtual' },\n    { id: 2, name: 'Hibrido' },\n  ];\n\n  constructor(\n    private router: Router,\n    private httpClient: HttpClient,\n    private formBuilder: FormBuilder,\n    private translateService: TranslateService,\n    private authService: AuthService,\n    private adminPanelsService: AdminPanelsService\n  ) {\n    //   //Initialize all models\n    this.tableModel = new TableModel([\n      new TableHeaderModel('', 'name'),\n      new TableHeaderModel('', 'eventDate'),\n      new TableHeaderModel('', 'eventType'),\n    ]);\n\n    this.panelOptions = {\n      URI: this.adminPanelsService.getApiUrlsConfig().apiIntranetEventsUri || '/events',\n      keepIdOnUpdate: true,\n      preventProcessHttpErrors: true,\n      title: '',\n      defaultQueryParams: {\n        'sort[addedAt]': 'ASC',\n      },\n      remoteData: [\n        new RemoteDataModel('eventsTypes', this.adminPanelsService.getApiUrlsConfig().apiIntranetEventsTypeUri || '/events-type', {\n          'sort[position]': 'ASC',\n          size: -1,\n        }),\n      ],\n    };\n    // Create breadcrumbs\n    this.breadcrumbs = [new BreadcrumbModel('', ['events'], true)];\n\n    //Create form\n    this.primaryForm = this.formBuilder.group({\n      id: this.formBuilder.control(null, []),\n      name: this.formBuilder.control(null, [Validators.required]),\n      eventType: this.formBuilder.control(null, [Validators.required]),\n      eventDate: this.formBuilder.control(null, [Validators.required]),\n      modality: this.formBuilder.control(0, []),\n      isSoon: this.formBuilder.control(null, []),\n      content: this.formBuilder.control(null, []),\n      duration: this.formBuilder.control(null, []),\n    });\n\n    this.tableOption = { useUnshift: true };\n  }\n\n  async ngOnInit() {\n    //Get translations\n    const translations: any = await this.translateService\n      .get([\n        'events.panelTitle',\n        'events.name',\n        'events.eventType',\n        'events.date',\n        'nav.events',\n      ])\n      .toPromise();\n\n    //Apply translations to panel\n    this.panelOptions.title = translations['events.panelTitle'];\n    this.breadcrumbs[0].display = translations['nav.events'];\n\n    //Check header\n    if (this.tableModel.header) {\n      this.tableModel.header[0].display = translations['events.name'];\n      this.tableModel.header[1].display = translations['events.date'];\n      this.tableModel.header[2].display = translations['events.eventType'];\n    }\n  }\n\n  onBeforeSend(json: any) {\n    //Check id\n    if (!json.id) {\n      delete json.id;\n    }\n\n    //Fixed date\n    json.eventDate = DateUtility.format(json.eventDate);\n\n    // json.endDate = null;\n\n    // const files: any[] | null = json.files;\n\n    // if (files && files?.length <= 0) {\n    //   json.files = null;\n    // }\n\n    // if (this.gotFile) {\n    //   ArrayUtility.each(files, (file: any, index: number) => {\n    //     json[`filesIds[${index}]`] = file.id;\n    //   });\n    // }\n  }\n\n  onParseModel(arg: SimplePanelRowParsingInterface): void {\n    const event: EventsModel = new EventsModel();\n    event.fromJSON(arg.json);\n    arg.callback(event);\n  }\n\n  onRemoteData(data: any): void {\n    const eventsTypes: ApiResponseModel = data.eventsTypes;\n\n    //Check data\n    ArrayUtility.each(eventsTypes?.data, (data: any) => {\n      const eventType: EventsTypeModel = new EventsTypeModel();\n      eventType.fromJSON(data);\n      this.eventsTypes.push(eventType);\n    });\n  }\n\n  onPicturesSelected($event: any): void {\n    // this.onDeleteFile(0)\n  }\n\n  onDeleteFile(index: number): void {\n    // const files: File[] = this.primaryForm.value.files ?? [];\n    // //Remove\n    // files.splice(index, 1);\n    // //Clear input\n    // this.primaryForm.patchValue({ files });\n  }\n\n  onDeleteSelectedFile(index: number): void {\n    // const newFiles: File[] = this.primaryForm.value.files ?? [];\n    // //Remove\n    // newFiles.splice(index, 1);\n    // //Clear input\n    // this.primaryForm.patchValue({ files: newFiles });\n  }\n\n  onBeforeOpen(json: any) {\n    // if (json.files && json.files.length <= 0) {\n    //   this.gotFile = true;\n    // }\n    // this.primaryForm.patchValue({ endDate: json.endDate.date });\n  }\n\n  onError(error: any) {\n    //Display with translations\n    // this.errorsService.displayHttp(error);\n  }\n\n  onGetJSON(json: any, row: TableRowModel): any {\n    return json;\n  }\n\n  private uploadEditorPicture(\n    file: File\n  ): Observable<HttpEvent<UploadResponse>> {\n    const config = this.adminPanelsService.getApiUrlsConfig();\n    const url: string = (config.apiUrl || '') + (config.apiUploadImagesUrl || '/upload-image');\n    const formData: FormData = new FormData();\n    formData.append('file', file);\n    return this.httpClient.post<UploadResponse>(url, formData, {\n      headers: {\n        Authorization: `Bearer ${this.authService.getAccessToken().token}`,\n      },\n      observe: 'events',\n    });\n  }\n}\n","<div class=\"layout responsive\">\n    <ng-solcre-simple-panel *ngIf=\"tableModel\" (onParseModel)=\"onParseModel($event)\" (onBeforeOpen)=\"onBeforeOpen($event)\" (onBeforeSend)=\"onBeforeSend($event)\" (onRemoteData)=\"onRemoteData($event)\" (onError)=\"onError($event)\" [breadcrumbs]=\"breadcrumbs\" [options]=\"panelOptions\" [primaryForm]=\"primaryForm\" [tableModel]=\"tableModel\" [onGetJSON]=\"onGetJSON\" [customTableTemplate]=\"customTdTemplate\" [tableOptions]=\"tableOption\">\n        <div class=\"primary-form styled-form\" [formGroup]=\"primaryForm\">\n            <ng-solcre-input-holder inputId=\"app-events-name\" [control]=\"primaryForm.get('name')\">\n\n                <label class=\"label\" for=\"app-events-name\">{{ \"events.name\" | translate}}</label>\n                <input type=\"text\" name=\"name\" class=\"input\" formControlName=\"name\" id=\"app-events-name\" [class.error]=\"!primaryForm.get('name')?.valid && primaryForm.get('name')?.touched\" [placeholder]=\"'events.namePlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-events-eventType\" [control]=\"primaryForm.get('eventType')\">\n\n                <label class=\"label\" for=\"app-events-eventType\">{{ 'events.eventType' | translate }}</label>\n\n                <ng-solcre-select controlName=\"eventType\" modelId=\"id\" modelIdKey=\"id\" modelDisplayKey=\"name\" [placeholder]=\"'events.eventTypePlaceholder' | translate\" [models]=\"eventsTypes\" [form]=\"primaryForm\">\n                </ng-solcre-select>\n\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-events-eventDate\" [control]=\"primaryForm.get('eventDate')\">\n\n                <label class=\"label\" for=\"app-events-date\">{{ \"events.date\" | translate}}</label>\n                <input type=\"month\" name=\"eventDate\" class=\"input\" formControlName=\"eventDate\" id=\"app-events-eventDate\" [class.error]=\"!primaryForm.get('eventDate')?.valid && primaryForm.get('eventDate')?.touched\" />\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-events-duration\" [control]=\"primaryForm.get('duration')\">\n\n                <label class=\"label\" for=\"app-events-duration\">{{ \"events.duration\" | translate}}</label>\n                <input type=\"text\" name=\"duration\" class=\"input\" formControlName=\"duration\" id=\"app-events-description\" [class.error]=\"!primaryForm.get('duration')?.valid && primaryForm.get('duration')?.touched\" [placeholder]=\"'events.durationPlaceholder' | translate\" />\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-events-modality\" [control]=\"primaryForm.get('modality')\">\n\n                <label class=\"label\" for=\"app-events-modality\">{{ \"events.modality\" | translate}}</label>\n                <ng-solcre-select controlName=\"modality\" modelId=\"id\" modelIdKey=\"id\" modelDisplayKey=\"name\" [placeholder]=\"'events.eventTypePlaceholder' | translate\" [models]=\"modalityArr\" [form]=\"primaryForm\">\n                </ng-solcre-select>\n            </ng-solcre-input-holder>\n\n            <ng-solcre-input-holder inputId=\"app-events-content\" [control]=\"primaryForm.get('content')\">\n                <label class=\"label\" for=\"app-events-content\">{{ 'events.content' | translate }}</label>\n\n                <angular-editor [config]=\"editorConfig\" name=\"content\" class=\"input\" formControlName=\"content\" id=\"app-events-content\" [class.error]=\"!primaryForm.get('content')?.valid && primaryForm.get('content')?.touched\" [placeholder]=\"'events.contentPlaceholder' | translate\"></angular-editor>\n            </ng-solcre-input-holder>\n\n        </div>\n    </ng-solcre-simple-panel>\n</div>\n\n<ng-template #customTdTemplate let-model=\"model\" let-field=\"field\">\n    <span [ngSwitch]=\"field\">\n        <ng-container *ngSwitchCase=\"'eventType'\">{{ model.eventType | data: { key: 'name', data: eventsTypes } }}</ng-container>\n        <ng-container *ngSwitchCase=\"'eventDate'\">{{ model.eventDate | date: 'MM/YYYY' }}</ng-container>\n        <ng-container *ngSwitchDefault>{{ model[field] }}</ng-container>\n    </span>\n</ng-template>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { SolcreCoreModule } from '@solcre-org/core';\nimport { SolcreAdminCoreModule } from '@solcre-org/admin-core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AngularEditorModule } from '@kolkov/angular-editor';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CKEditorModule } from '@ckeditor/ckeditor5-angular';\n\n//Panels\nimport { SolcreAdminSharedModule } from '../shared/admin-shared.module';\nimport { AnnouncementsComponent } from './panels/announcements/announcements.component';\nimport { BannersComponent } from './panels/banners/banners.component';\nimport { MenuComponent } from './panels/menu/menu.component';\nimport { MenuItemComponent } from './panels/menu/menu-item/menu-item.component';\nimport { CategoriesComponent } from './panels/categories/categories.component';\nimport { UsersComponent } from './panels/users/users.component';\nimport { WorkspaceComponent } from './panels/workspace/workspace.component';\nimport { DocumentsComponent } from './panels/documents/documents.component';\nimport { DocumentsItemComponent } from './panels/documents/documents-item/documents-item.component';\nimport { DocumentsFoldersItemComponent } from './panels/documents/documents-folders-item/documents-folders-item.component';\nimport { NewsComponent } from './panels/news/news.component';\nimport { MediaComponent } from './panels/media/media.component';\nimport { EventsComponent } from './panels/events/events.component';\n\n@NgModule({\n  declarations: [\n    AnnouncementsComponent,\n    BannersComponent,\n    MenuComponent,\n    MenuItemComponent,\n    CategoriesComponent,\n    UsersComponent,\n    WorkspaceComponent,\n    DocumentsComponent,\n    DocumentsItemComponent,\n    DocumentsFoldersItemComponent,\n    NewsComponent,\n    MediaComponent,\n    EventsComponent\n  ],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    TranslateModule.forChild(),\n    AngularEditorModule,\n    SolcreCoreModule,\n    SolcreAdminCoreModule,\n    SolcreAdminSharedModule,\n    CKEditorModule,\n  ],\n  exports: [\n    AnnouncementsComponent,\n    BannersComponent,\n    MenuComponent,\n    MenuItemComponent,\n    CategoriesComponent,\n    UsersComponent,\n    WorkspaceComponent,\n    DocumentsComponent,\n    NewsComponent,\n    MediaComponent,\n    EventsComponent\n  ],\n  providers: [],\n})\nexport class SolcreAdminIntranetPanelsModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { SolcreCoreModule } from '@solcre-org/core';\nimport { SolcreAdminCoreModule } from '@solcre-org/admin-core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AngularEditorModule } from '@kolkov/angular-editor';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { SolcreAdminIntranetPanelsModule } from './intranet/admin-intranet-panels.module';\nimport { SolcreAdminSharedModule } from './shared/admin-shared.module';\n\n@NgModule({\n  declarations: [],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    TranslateModule,\n    AngularEditorModule,\n    SolcreCoreModule,\n    SolcreAdminCoreModule,\n    SolcreAdminIntranetPanelsModule,\n    SolcreAdminSharedModule\n  ],\n  exports: [],\n  providers: [],\n})\nexport class SolcreAdminPanelsModule {}","// Este archivo es generado automáticamente por scripts/update-version.js\n// No edites manualmente este archivo\n\nexport const VERSION = {\n  full: '18.4.0',\n  major: 18,\n  minor: 4,\n  patch: 0,\n  timestamp: '2026-09-11T13:51:38.511Z',\n  buildDate: '11/9/2026'\n};\n","//Modules\nexport * from './lib/admin-panels.module';\nexport * from './lib/shared/admin-shared.module';\nexport * from './lib/intranet/admin-intranet-panels.module';\n\n//Intranet\nexport * from './lib/intranet/panels/announcements/announcements.component'; \nexport * from './lib/intranet/panels/banners/banners.component'; \nexport * from './lib/intranet/panels/menu/menu.component';\nexport * from './lib/intranet/panels/menu/menu-item/menu-item.component';\nexport * from './lib/intranet/panels/categories/categories.component';\nexport * from './lib/intranet/panels/users/users.component';\nexport * from './lib/intranet/panels/workspace/workspace.component';\nexport * from './lib/intranet/panels/documents/documents.component';\nexport * from './lib/intranet/panels/documents/documents.service';\nexport * from './lib/intranet/panels/documents/document-signature.model';\nexport * from './lib/intranet/panels/documents/document-folder-access.model';\nexport * from './lib/intranet/panels/documents/document-folder-move-destination.model';\nexport * from './lib/intranet/panels/documents/document-folder-move.utility';\nexport * from './lib/intranet/panels/news/news.component';\nexport * from './lib/intranet/panels/media/media.component';\nexport * from './lib/intranet/panels/events/events.component';\n\n//Intranet models\nexport * from './lib/intranet/models/announcement.model'; \nexport * from './lib/intranet/models/menu.model';\nexport * from './lib/intranet/models/banner.model'; \nexport * from './lib/intranet/models/workspace.model'; \nexport * from './lib/intranet/models/category.model'; \nexport * from './lib/intranet/models/users.model'; \nexport * from './lib/intranet/models/document.model'; \nexport * from './lib/intranet/models/document-folder.model'; \nexport * from './lib/intranet/panels/media/media.model'; \n\n//Others\nexport * from './lib/shared/injections/window.injection'; \nexport * from './lib/shared/pipes/size.pipe'; \nexport * from './lib/shared/directives/file-class.directive';\nexport * from './lib/shared/components/ng-solcre-editor/ng-solcre-editor.component'; \n\n//models\nexport * from './lib/shared/models/configs/admin-panels-config.interface'; \nexport * from './lib/shared/models/configs/admin-panels-url-config.interface';\n\n//Services\nexport * from './lib/shared/services/admin-panels.service'; \nexport * from './lib/constants/version';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.AdminPanelsService","i3","i4","i6","i5","i7.NgSolcreEditorComponent","i2","i6.MenuItemComponent","i7","i8.NgSolcreEditorComponent","i4.FileClassDirective","i6.SizePipe","i2.DocumentsItemComponent","i3.DocumentsService","i8.DocumentsFoldersItemComponent","i6.AdminPanelsService","i9"],"mappings":"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"}