From de7776e1285bd99a9d8c1902e242eb1c4256f449 Mon Sep 17 00:00:00 2001
From: William Newman <3382274+newmanw@users.noreply.github.com>
Date: Fri, 13 Sep 2024 14:50:50 -0600
Subject: [PATCH] Swagger module
---
web-app/src/app/routing.module.ts | 3 ++
.../src/app/swagger/swagger.component.html | 11 +++++
.../src/app/swagger/swagger.component.scss | 10 ++++
.../src/app/swagger/swagger.component.spec.ts | 25 ++++++++++
web-app/src/app/swagger/swagger.component.ts | 46 +++++++++++++++++++
web-app/src/app/swagger/swagger.module.ts | 37 +++++++++++++++
6 files changed, 132 insertions(+)
create mode 100644 web-app/src/app/swagger/swagger.component.html
create mode 100644 web-app/src/app/swagger/swagger.component.scss
create mode 100644 web-app/src/app/swagger/swagger.component.spec.ts
create mode 100644 web-app/src/app/swagger/swagger.component.ts
create mode 100644 web-app/src/app/swagger/swagger.module.ts
diff --git a/web-app/src/app/routing.module.ts b/web-app/src/app/routing.module.ts
index ae6908c07..7658db64f 100644
--- a/web-app/src/app/routing.module.ts
+++ b/web-app/src/app/routing.module.ts
@@ -13,6 +13,9 @@ const appRoutes: Routes =[{
},{
path: 'profile',
loadChildren: () => import('./user/profile/profile.module').then(m => m.ProfileModule)
+ },{
+ path: 'swagger',
+ loadChildren: () => import('./swagger/swagger.module').then(m => m.SwaggerModule)
},{
path: '',
redirectTo: 'landing',
diff --git a/web-app/src/app/swagger/swagger.component.html b/web-app/src/app/swagger/swagger.component.html
new file mode 100644
index 000000000..4e191d82d
--- /dev/null
+++ b/web-app/src/app/swagger/swagger.component.html
@@ -0,0 +1,11 @@
+
+
+
+
+ Mage Swagger API
+
+
+
+
\ No newline at end of file
diff --git a/web-app/src/app/swagger/swagger.component.scss b/web-app/src/app/swagger/swagger.component.scss
new file mode 100644
index 000000000..9f5c34782
--- /dev/null
+++ b/web-app/src/app/swagger/swagger.component.scss
@@ -0,0 +1,10 @@
+.container {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+}
+
+.title {
+ margin-left: 16px;
+}
\ No newline at end of file
diff --git a/web-app/src/app/swagger/swagger.component.spec.ts b/web-app/src/app/swagger/swagger.component.spec.ts
new file mode 100644
index 000000000..864b41402
--- /dev/null
+++ b/web-app/src/app/swagger/swagger.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { SwaggerComponent } from './swagger.component';
+
+describe('SwaggerComponent', () => {
+ let component: SwaggerComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [SwaggerComponent]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(SwaggerComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
\ No newline at end of file
diff --git a/web-app/src/app/swagger/swagger.component.ts b/web-app/src/app/swagger/swagger.component.ts
new file mode 100644
index 000000000..420a2902d
--- /dev/null
+++ b/web-app/src/app/swagger/swagger.component.ts
@@ -0,0 +1,46 @@
+import { AfterViewInit, Component, ElementRef } from '@angular/core';
+import { LocalStorageService } from '../http/local-storage.service';
+import SwaggerUI from 'swagger-ui';
+import { Router } from '@angular/router';
+
+const DisableAuthorizePlugin = function () {
+ return {
+ wrapComponents: {
+ AuthorizeBtnContainer: () => () => null,
+ ServersContainer: () => () => null,
+ authorizeOperationBtn: () => () => null
+ }
+ };
+};
+
+@Component({
+ selector: 'swagger',
+ templateUrl: './swagger.component.html',
+ styleUrls: ['./swagger.component.scss']
+})
+export class SwaggerComponent implements AfterViewInit {
+
+ constructor(
+ private el: ElementRef,
+ private router: Router,
+ private localStorageService: LocalStorageService
+ ) {
+ }
+
+ ngAfterViewInit() {
+ SwaggerUI({
+ url: '/api/docs/openapi.yaml',
+ domNode: this.el.nativeElement.querySelector('.swagger-container'),
+ deepLinking: false,
+ plugins: [DisableAuthorizePlugin],
+ requestInterceptor: (request) => {
+ request.headers['Authorization'] = `Bearer ${this.localStorageService.getToken()}`
+ return request
+ },
+ });
+ }
+
+ onBack() : void {
+ this.router.navigate(['about']);
+ }
+}
\ No newline at end of file
diff --git a/web-app/src/app/swagger/swagger.module.ts b/web-app/src/app/swagger/swagger.module.ts
new file mode 100644
index 000000000..5b15cc371
--- /dev/null
+++ b/web-app/src/app/swagger/swagger.module.ts
@@ -0,0 +1,37 @@
+import { NgModule } from "@angular/core";
+import { SwaggerComponent } from "./swagger.component";
+import { RouterModule, Routes } from "@angular/router";
+import { MatIconModule } from "@angular/material/icon";
+import { CommonModule } from "@angular/common";
+import { MatButtonModule } from "@angular/material/button";
+import { MatToolbarModule } from "@angular/material/toolbar";
+
+const routes: Routes = [{
+ path: '',
+ component: SwaggerComponent
+}];
+
+@NgModule({
+ declarations: [],
+ imports: [],
+ exports: [
+ CommonModule,
+ MatButtonModule,
+ MatIconModule,
+ MatToolbarModule
+ ]
+})
+class AngularModule { }
+
+@NgModule({
+ declarations: [
+ SwaggerComponent
+ ],
+ imports: [
+ AngularModule,
+ RouterModule.forChild(routes)
+ ],
+ exports: [ RouterModule ]
+})
+export class SwaggerModule {
+}
\ No newline at end of file