import { NgModule, CUSTOM_ELEMENTS_SCHEMA, LOCALE_ID, APP_INITIALIZER, Injectable } from '@angular/core'; import { MatPaginatorIntl } from '@angular/material/paginator'; @Injectable() class SpanishPaginatorIntl extends MatPaginatorIntl { override itemsPerPageLabel = 'Elementos por página:'; override nextPageLabel = 'Siguiente'; override previousPageLabel = 'Anterior'; override firstPageLabel = 'Primera página'; override lastPageLabel = 'Última página'; override getRangeLabel = (page: number, pageSize: number, length: number) => { if (length === 0 || pageSize === 0) return `0 de ${length}`; const startIndex = page * pageSize; const endIndex = Math.min(startIndex + pageSize, length); return `${startIndex + 1} – ${endIndex} de ${length}`; }; } import { ConfigService } from './services/config.service'; import { BrowserModule } from '@angular/platform-browser'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { AuthLayoutComponent } from './layout/auth-layout/auth-layout.component'; import { MainLayoutComponent } from './layout/main-layout/main-layout.component'; import { HeaderComponent } from './layout/header/header.component'; import { SidebarComponent } from './layout/sidebar/sidebar.component'; import { LoginComponent } from './components/login/login.component'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { HTTP_INTERCEPTORS, HttpClient, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; import { CustomInterceptor } from './core/services/custom.interceptor'; import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; import { MatToolbarModule } from '@angular/material/toolbar'; import { MatIconModule } from '@angular/material/icon'; import { MatButtonModule } from '@angular/material/button'; import { MatSidenavModule } from '@angular/material/sidenav'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { MatListModule } from '@angular/material/list'; import { UsersComponent } from './components/admin/users/users/users.component'; import { RolesComponent } from './components/admin/roles/roles/roles.component'; import { MatTableModule } from '@angular/material/table'; import { MatButtonToggleModule } from '@angular/material/button-toggle'; import { MatDialogModule } from '@angular/material/dialog'; import { AddUserModalComponent } from './components/admin/users/users/add-user-modal/add-user-modal.component'; import { MatSelectModule } from '@angular/material/select'; import { AddRoleModalComponent } from './components/admin/roles/roles/add-role-modal/add-role-modal.component'; import { ChangePasswordModalComponent } from './components/admin/users/users/change-password-modal/change-password-modal.component'; import { GroupsComponent } from './components/groups/groups.component'; import { MatDividerModule } from '@angular/material/divider'; import { MatStepperModule } from '@angular/material/stepper'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { DeleteModalComponent } from './shared/delete_modal/delete-modal/delete-modal.component'; import { DeleteResultsModalComponent } from './components/groups/shared/delete-results-modal/delete-results-modal.component'; import { ClassroomViewComponent } from './components/groups/shared/classroom-view/classroom-view.component'; import { MatProgressSpinner } from "@angular/material/progress-spinner"; import { MatProgressBarModule } from '@angular/material/progress-bar'; import { MatMenu, MatMenuItem, MatMenuTrigger } from "@angular/material/menu"; import { MatAutocomplete, MatAutocompleteTrigger } from "@angular/material/autocomplete"; import { MatChipsModule } from "@angular/material/chips"; import { ClientViewComponent } from './components/groups/shared/client-view/client-view.component'; import { MatTabsModule } from "@angular/material/tabs"; import { MatTooltipModule } from "@angular/material/tooltip"; import { MatExpansionModule } from '@angular/material/expansion'; import { DragDropModule } from '@angular/cdk/drag-drop'; import { ToastrModule } from 'ngx-toastr'; import { ShowOrganizationalUnitComponent } from './components/groups/shared/organizational-units/show-organizational-unit/show-organizational-unit.component'; import { MatGridList, MatGridTile } from "@angular/material/grid-list"; import { MatNestedTreeNode, MatTree, MatTreeNode, MatTreeNodeDef, MatTreeNodeOutlet, MatTreeNodePadding, MatTreeNodeToggle } from "@angular/material/tree"; import { LegendComponent } from './components/groups/shared/legend/legend.component'; import { ClassroomViewDialogComponent } from './components/groups/shared/classroom-view/classroom-view-modal'; import { MatPaginator } from "@angular/material/paginator"; import { SaveFiltersDialogComponent } from './components/groups/shared/save-filters-dialog/save-filters-dialog.component'; import { PXEimagesComponent } from './components/ogboot/pxe-images/pxe-images.component'; import { CreatePXEImageComponent } from './components/ogboot/pxe-images/create-image/create-image/create-image.component'; import { InfoImageComponent } from './components/ogboot/pxe-images/info-image/info-image/info-image.component'; import { PxeComponent } from './components/ogboot/pxe/pxe.component'; import { CreatePxeTemplateComponent } from './components/ogboot/pxe/manage-pxeTemplate/create-pxe-template.component'; import { PxeBootFilesComponent } from './components/ogboot/pxe-boot-files/pxe-boot-files.component'; import { MatExpansionPanel, MatExpansionPanelDescription, MatExpansionPanelTitle } from "@angular/material/expansion"; import { OgbootStatusComponent } from './components/ogboot/ogboot-status/ogboot-status.component'; import { NgxChartsModule } from '@swimlane/ngx-charts'; import { CommandsComponent } from './components/commands/main-commands/commands.component'; import { CommandDetailComponent } from './components/commands/main-commands/detail-command/command-detail.component'; import { CreateCommandComponent } from './components/commands/main-commands/create-command/create-command.component'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatNativeDateModule } from '@angular/material/core'; import { CalendarComponent } from './components/calendar/calendar.component'; import { CreateCalendarComponent } from './components/calendar/create-calendar/create-calendar.component'; import { MatRadioButton, MatRadioGroup } from "@angular/material/radio"; import { CreateCalendarRuleComponent } from './components/calendar/create-calendar-rule/create-calendar-rule.component'; import { CommandsGroupsComponent } from './components/commands/commands-groups/commands-groups.component'; import { CommandsTaskComponent } from './components/commands/commands-task/commands-task.component'; import { CreateCommandGroupComponent } from './components/commands/commands-groups/create-command-group/create-command-group.component'; import { DetailCommandGroupComponent } from './components/commands/commands-groups/detail-command-group/detail-command-group.component'; import { CreateTaskComponent } from './components/commands/commands-task/create-task/create-task.component'; import { DetailTaskComponent } from './components/commands/commands-task/detail-task/detail-task.component'; import { TaskLogsComponent } from './components/task-logs/task-logs.component'; import { MatSliderModule } from '@angular/material/slider'; import { ImagesComponent } from './components/images/images.component'; import { CreateImageComponent } from './components/images/create-image/create-image.component'; import { CreateClientImageComponent } from './components/groups/components/client-main-view/create-image/create-image.component'; import { CreateRepositoryModalComponent } from './components/groups/components/client-main-view/create-image/create-repository-modal/create-repository-modal.component'; import { PartitionAssistantComponent } from './components/groups/components/client-main-view/partition-assistant/partition-assistant.component'; import { SoftwareComponent } from './components/software/software.component'; import { CreateSoftwareComponent } from './components/software/create-software/create-software.component'; import { SoftwareProfileComponent } from './components/software-profile/software-profile.component'; import { CreateSoftwareProfileComponent } from './components/software-profile/create-software-profile/create-software-profile.component'; import { OperativeSystemComponent } from './components/operative-system/operative-system.component'; import { SafePipe } from './shared/pipes/safe.pipe'; import { CreateOperativeSystemComponent } from './components/operative-system/create-operative-system/create-operative-system.component'; import { ShowTemplateContentComponent } from './components/ogboot/pxe/show-template-content/show-template-content.component'; import { RepositoriesComponent } from './components/repositories/repositories.component'; import { ManageRepositoryComponent } from './components/repositories/manage-repository/manage-repository.component'; import { ExecuteCommandComponent } from './components/commands/main-commands/execute-command/execute-command.component'; import { DeployImageComponent } from './components/groups/components/client-main-view/deploy-image/deploy-image.component'; import { DeployMethodConfigDialogComponent } from './components/groups/components/client-main-view/deploy-image/deploy-method-config-dialog/deploy-method-config-dialog.component'; import { MainRepositoryViewComponent } from './components/repositories/main-repository-view/main-repository-view.component'; import { ExecuteCommandOuComponent } from './components/groups/shared/execute-command-ou/execute-command-ou.component'; import { JoyrideModule } from 'ngx-joyride'; import { TranslateModule, TranslateLoader } from '@ngx-translate/core'; import { TranslateHttpLoader } from '@ngx-translate/http-loader'; import { EnvVarsComponent } from './components/admin/env-vars/env-vars.component'; import { MatSortModule } from '@angular/material/sort'; import { MenusComponent } from './components/menus/menus.component'; import { AssetManagerModalComponent } from './components/menus/asset-manager-modal/asset-manager-modal.component'; import { CreateMenuComponent } from './components/menus/create-menu/create-menu.component'; import { CreateMultipleClientComponent } from './components/groups/shared/clients/create-multiple-client/create-multiple-client.component'; import { ExportImageComponent } from './components/images/export-image/export-image.component'; import { ImportImageComponent } from "./components/repositories/import-image/import-image.component"; import { LoadingComponent } from './shared/loading/loading.component'; import { InputDialogComponent } from './components/task-logs/input-dialog/input-dialog.component'; import { ManageOrganizationalUnitComponent } from './components/groups/shared/organizational-units/manage-organizational-unit/manage-organizational-unit.component'; import { BackupImageComponent } from './components/repositories/backup-image/backup-image.component'; import { ServerInfoDialogComponent } from "./components/ogdhcp/server-info-dialog/server-info-dialog.component"; import { OgDhcpSubnetsComponent } from "./components/ogdhcp/og-dhcp-subnets.component"; import { SyncSubnetDialogComponent } from "./components/ogdhcp/sync-subnet-dialog/sync-subnet-dialog.component"; import { SyncResultDialogComponent } from "./components/ogdhcp/sync-result-dialog/sync-result-dialog.component"; import { CreateSubnetComponent } from "./components/ogdhcp/create-subnet/create-subnet.component"; import { AddClientsToSubnetComponent } from "./components/ogdhcp/add-clients-to-subnet/add-clients-to-subnet.component"; import { ShowClientsComponent } from './components/ogdhcp/show-clients/show-clients.component'; import { OperationResultDialogComponent } from './components/ogdhcp/operation-result-dialog/operation-result-dialog.component'; import { ManageClientComponent } from './components/groups/shared/clients/manage-client/manage-client.component'; import { ConvertImageComponent } from './components/repositories/convert-image/convert-image.component'; import { DhcpServersComponent } from './components/ogdhcp/dhcp-servers/dhcp-servers.component'; import { ManageDhcpServerComponent } from './components/ogdhcp/manage-dhcp-server/manage-dhcp-server.component'; import {NgOptimizedImage, registerLocaleData} from '@angular/common'; import localeEs from '@angular/common/locales/es'; import { GlobalStatusComponent } from './components/global-status/global-status.component'; import { ShowMonoliticImagesComponent } from './components/repositories/show-monolitic-images/show-monolitic-images.component'; import { StatusTabComponent } from './components/global-status/status-tab/status-tab.component'; import { ConvertImageToVirtualComponent } from './components/repositories/convert-image-to-virtual/convert-image-to-virtual.component'; import { RunScriptAssistantComponent } from './components/groups/components/client-main-view/run-script-assistant/run-script-assistant.component'; import { SaveScriptComponent } from "./components/groups/components/client-main-view/run-script-assistant/save-script/save-script.component"; import { EditImageComponent } from './components/repositories/edit-image/edit-image.component'; import { ShowGitCommitsComponent } from './components/repositories/show-git-images/show-git-images.component'; import { RenameImageComponent } from './components/repositories/rename-image/rename-image.component'; import { ClientDetailsComponent } from './components/groups/shared/client-details/client-details.component'; import { PartitionTypeOrganizatorComponent } from './components/groups/shared/partition-type-organizator/partition-type-organizator.component'; import { CreateTaskScheduleComponent } from './components/commands/commands-task/create-task-schedule/create-task-schedule.component'; import { ShowTaskScheduleComponent } from './components/commands/commands-task/show-task-schedule/show-task-schedule.component'; import { ShowTaskScriptComponent } from './components/commands/commands-task/show-task-script/show-task-script.component'; import { CreateTaskScriptComponent } from './components/commands/commands-task/create-task-script/create-task-script.component'; import { ViewParametersModalComponent } from './components/commands/commands-task/show-task-script/view-parameters-modal/view-parameters-modal.component'; import { OutputDialogComponent } from './components/task-logs/output-dialog/output-dialog.component'; import { ClientTaskLogsComponent } from './components/task-logs/client-task-logs/client-task-logs.component'; import { BootSoPartitionComponent } from './components/commands/main-commands/execute-command/boot-so-partition/boot-so-partition.component'; import { RemoveCacheImageComponent } from './components/commands/main-commands/execute-command/remove-cache-image/remove-cache-image.component'; import { ChangeParentComponent } from './components/groups/shared/change-parent/change-parent.component'; import { SoftwareProfilePartitionComponent } from './components/commands/main-commands/execute-command/software-profile-partition/software-profile-partition.component'; import { ClientPendingTasksComponent } from './components/task-logs/client-pending-tasks/client-pending-tasks.component'; import { QueueConfirmationModalComponent } from './shared/queue-confirmation-modal/queue-confirmation-modal.component'; import { ModalOverlayComponent } from './shared/modal-overlay/modal-overlay.component'; import { ScrollToTopComponent } from './shared/scroll-to-top/scroll-to-top.component'; import { CreateTagModalComponent } from './components/repositories/show-git-images/create-tag-modal/create-tag-modal.component'; import { CreateBranchModalComponent } from './components/repositories/show-git-images/create-branch-modal/create-branch-modal.component'; import { ClientLogsModalComponent } from './components/groups/shared/client-logs-modal/client-logs-modal.component'; import { ClientDiskLogsModalComponent } from './components/groups/shared/client-disk-logs-modal/client-disk-logs-modal.component'; import { BackupRepositoryModalComponent } from './components/repositories/show-git-images/backup-repository-modal/backup-repository-modal.component'; import { HardwareComponent } from './components/hardware/hardware.component'; import { CreateHardwareComponent } from './components/hardware/create-hardware/create-hardware.component'; import { HardwareProfileComponent } from './components/hardware-profile/hardware-profile.component'; import { HardwareCollectionModalComponent } from './components/hardware-profile/hardware-collection-modal/hardware-collection-modal.component'; import { HardwareTypeComponent } from './components/hardware-type/hardware-type.component'; import { ShowDetailsComponent } from './components/hardware-type/show-details/show-details.component'; import { DiskPartitionSelectorComponent } from './components/groups/shared/disk-partition-selector/disk-partition-selector.component'; import { BootServersComponent } from './components/ogboot/boot-servers/boot-servers.component'; import { ManageBootServerComponent } from './components/ogboot/manage-boot-server/manage-boot-server.component'; import { BootServerDashboardComponent } from './components/ogboot/boot-server-dashboard/boot-server-dashboard.component'; import { OgcoreStatusComponent } from './components/global-status/ogcore-status/ogcore-status.component'; import { GlobalOgbootStatusComponent } from './components/global-status/ogboot-status/ogboot-status.component'; import { OgrepositoryStatusComponent } from './components/global-status/ogrepository-status/ogrepository-status.component'; import { OgdhcpStatusComponent } from './components/global-status/ogdhcp-status/ogdhcp-status.component'; export function HttpLoaderFactory(http: HttpClient) { return new TranslateHttpLoader(http, './locale/', '.json'); } import { PageNotFoundComponent } from './shared/page-not-found/page-not-found.component'; export function initializeApp(configService: ConfigService) { return () => configService.loadConfig(); } registerLocaleData(localeEs, 'es-ES'); @NgModule({ declarations: [ AppComponent, AuthLayoutComponent, MainLayoutComponent, HeaderComponent, SidebarComponent, LoginComponent, MainLayoutComponent, UsersComponent, RolesComponent, AddUserModalComponent, AddRoleModalComponent, ChangePasswordModalComponent, GroupsComponent, ManageClientComponent, DeleteModalComponent, DeleteResultsModalComponent, QueueConfirmationModalComponent, ClassroomViewComponent, ClientViewComponent, ShowOrganizationalUnitComponent, LegendComponent, ClassroomViewDialogComponent, SaveFiltersDialogComponent, PXEimagesComponent, CreatePXEImageComponent, InfoImageComponent, PxeComponent, CreatePxeTemplateComponent, PxeBootFilesComponent, OgbootStatusComponent, OgDhcpSubnetsComponent, CreateSubnetComponent, DhcpServersComponent, ManageDhcpServerComponent, AddClientsToSubnetComponent, CommandsComponent, CommandDetailComponent, CreateCommandComponent, CalendarComponent, CreateCalendarComponent, CreateClientImageComponent, CreateRepositoryModalComponent, PartitionAssistantComponent, CreateCalendarRuleComponent, CommandsGroupsComponent, CommandsTaskComponent, CreateCommandGroupComponent, DetailCommandGroupComponent, CreateTaskComponent, DetailTaskComponent, TaskLogsComponent, ServerInfoDialogComponent, SyncSubnetDialogComponent, SyncResultDialogComponent, ImagesComponent, CreateImageComponent, SoftwareComponent, CreateSoftwareComponent, SoftwareProfileComponent, CreateSoftwareProfileComponent, OperativeSystemComponent, CreateOperativeSystemComponent, ShowTemplateContentComponent, RepositoriesComponent, ManageRepositoryComponent, ExecuteCommandComponent, ExecuteCommandOuComponent, DeployImageComponent, DeployMethodConfigDialogComponent, MainRepositoryViewComponent, EnvVarsComponent, MenusComponent, CreateMenuComponent, CreateMultipleClientComponent, ExportImageComponent, ImportImageComponent, LoadingComponent, InputDialogComponent, ManageOrganizationalUnitComponent, BackupImageComponent, ShowClientsComponent, OperationResultDialogComponent, ConvertImageComponent, GlobalStatusComponent, ShowMonoliticImagesComponent, StatusTabComponent, ConvertImageToVirtualComponent, RunScriptAssistantComponent, SaveScriptComponent, EditImageComponent, ShowGitCommitsComponent, RenameImageComponent, ClientDetailsComponent, PartitionTypeOrganizatorComponent, CreateTaskScheduleComponent, ShowTaskScheduleComponent, ShowTaskScriptComponent, CreateTaskScriptComponent, ViewParametersModalComponent, OutputDialogComponent, ClientTaskLogsComponent, BootSoPartitionComponent, RemoveCacheImageComponent, ChangeParentComponent, SoftwareProfilePartitionComponent, ClientPendingTasksComponent, ModalOverlayComponent, ScrollToTopComponent, CreateTagModalComponent, CreateBranchModalComponent, ClientLogsModalComponent, ClientDiskLogsModalComponent, SafePipe, BackupRepositoryModalComponent, HardwareComponent, CreateHardwareComponent, HardwareProfileComponent, HardwareCollectionModalComponent, HardwareTypeComponent, ShowDetailsComponent, AssetManagerModalComponent, BootServersComponent, ManageBootServerComponent, BootServerDashboardComponent, OgcoreStatusComponent, GlobalOgbootStatusComponent, OgrepositoryStatusComponent, OgdhcpStatusComponent, PageNotFoundComponent ], bootstrap: [AppComponent], imports: [BrowserModule, AppRoutingModule, FormsModule, ReactiveFormsModule, MatToolbarModule, MatIconModule, MatButtonToggleModule, MatButtonModule, MatSidenavModule, NoopAnimationsModule, MatCardModule, MatCheckboxModule, MatFormFieldModule, MatInputModule, MatListModule, MatTableModule, MatDialogModule, MatSelectModule, MatDividerModule, MatProgressBarModule, MatStepperModule, DragDropModule, MatSlideToggleModule, MatMenu, MatMenuTrigger, MatMenuItem, MatAutocomplete, MatChipsModule, MatProgressSpinner, MatTabsModule, MatTooltipModule, MatExpansionModule, NgxChartsModule, MatDatepickerModule, MatNativeDateModule, MatSliderModule, MatSortModule, TranslateModule.forRoot({ loader: { provide: TranslateLoader, useFactory: HttpLoaderFactory, deps: [HttpClient] } }), JoyrideModule.forRoot(), ToastrModule.forRoot( { timeOut: 5000, positionClass: 'toast-bottom-right', preventDuplicates: true, progressBar: true, progressAnimation: 'increasing', closeButton: true } ), MatGridList, MatTree, MatTreeNode, MatNestedTreeNode, MatTreeNodeToggle, MatTreeNodeDef, MatTreeNodePadding, MatTreeNodeOutlet, MatPaginator, MatGridTile, MatExpansionPanel, MatExpansionPanelTitle, MatExpansionPanelDescription, MatRadioGroup, MatRadioButton, MatAutocompleteTrigger, NgOptimizedImage, DiskPartitionSelectorComponent ], schemas: [ CUSTOM_ELEMENTS_SCHEMA, ], providers: [ { provide: HTTP_INTERCEPTORS, useClass: CustomInterceptor, multi: true }, { provide: LOCALE_ID, useValue: 'es-ES' }, { provide: MatPaginatorIntl, useClass: SpanishPaginatorIntl }, provideAnimationsAsync(), provideHttpClient(withInterceptorsFromDi()), ConfigService, { provide: APP_INITIALIZER, useFactory: initializeApp, deps: [ConfigService], multi: true } ], }) export class AppModule { }