Files
showbridge-webui/src/app/components/route-list/route-list.ts
T
2026-05-17 16:39:26 -05:00

68 lines
1.9 KiB
TypeScript

import { Component, inject, input, model } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
import { MatMenuModule } from '@angular/material/menu';
import { MatSnackBar } from '@angular/material/snack-bar';
import { MatTooltipModule } from '@angular/material/tooltip';
import { RouteConfig } from '../../models/config';
import { SchemaService } from '../../services/schema';
import { RouteComponent } from '../route/route';
@Component({
selector: 'app-route-list',
imports: [RouteComponent, MatMenuModule, MatIconModule, MatButtonModule, MatTooltipModule],
templateUrl: './route-list.html',
styleUrl: './route-list.css',
})
export class RouteListComponent {
routes = model<RouteConfig[]>();
moduleIds = input<string[]>();
public schemaService = inject(SchemaService);
private snackBar = inject(MatSnackBar);
deleteRoute(index: number) {
this.routes.update((routes) => {
if (routes) {
routes?.splice(index, 1);
return [...routes];
}
return routes;
});
this.snackBar.open('Route Removed', 'Dismiss', {
duration: 3000,
});
}
routeUpdated(index: number, route: RouteConfig | undefined) {
if (route === undefined) {
console.error('route is undefined, not updating');
return;
}
this.routes.update((routes) => {
if (routes) {
routes[index].input = route.input;
if (route.processors) {
routes[index].processors = [...route.processors];
}
return [...routes];
}
return routes;
});
}
addRoute() {
const routeTemplate = this.schemaService.getSkeletonForRoute();
this.routes.update((routes) => {
if (!routes) {
routes = [];
}
routes?.push(routeTemplate);
return [...routes];
});
this.snackBar.open('Route Added', 'Dismiss', {
duration: 3000,
});
}
}