diff --git a/.github/workflows/dev.yaml b/.github/workflows/dev.yaml index a814edc0..2ae00b55 100644 --- a/.github/workflows/dev.yaml +++ b/.github/workflows/dev.yaml @@ -133,16 +133,6 @@ jobs: path: | nuxeo-admin-console-package/target/nuxeo-admin-console-*.zip - - name: Delete & Update .npmrc - working-directory: nuxeo-admin-console-web/angular-app - run: | - rm .npmrc - echo " - @hylandsoftware:registry=https://npm.pkg.github.com - @nuxeo:registry=https://packages.nuxeo.com/repository/npm-public - registry=https://registry.npmjs.org/ - " >> .npmrc - - name: Tag run: | git add nuxeo-admin-console-web/angular-app/package-lock.json diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index bc1b32d9..f88e7f33 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -40,12 +40,6 @@ jobs: node-version: 20 scope: '@nuxeo' - - name: Configure Additional Registries - run: | - npm config set @hylandsoftware:registry https://npm.pkg.github.com --global - npm config set //npm.pkg.github.com/:_authToken=${{ secrets.GIT_TOKEN }} --global - npm config set registry https://registry.npmjs.org/ --global - - name: Cache node modules id: cache-npm uses: actions/cache@v4 diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 4d22116a..7b5a9adc 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -132,17 +132,7 @@ jobs: name: packages path: | nuxeo-admin-console-package/target/nuxeo-admin-console-*.zip - - - name: Delete & Update .npmrc - working-directory: nuxeo-admin-console-web/angular-app - run: | - rm .npmrc - echo " - @hylandsoftware:registry=https://npm.pkg.github.com - @nuxeo:registry=https://packages.nuxeo.com/repository/npm-public - registry=https://registry.npmjs.org/ - " >> .npmrc - + - name: Tag run: | git add nuxeo-admin-console-web/angular-app/package-lock.json diff --git a/.github/workflows/utest.yaml b/.github/workflows/utest.yaml index 359a0909..03336df0 100644 --- a/.github/workflows/utest.yaml +++ b/.github/workflows/utest.yaml @@ -40,11 +40,6 @@ jobs: node-version: 20 scope: '@nuxeo' - - name: Configure Additional Registries - run: | - npm config set @hylandsoftware:registry https://npm.pkg.github.com --global - npm config set //npm.pkg.github.com/:_authToken=${{ secrets.GIT_TOKEN }} --global - npm config set registry https://registry.npmjs.org/ --global - name: Cache node modules id: cache-npm diff --git a/README.md b/README.md index 1b0a03ff..cb2cd749 100644 --- a/README.md +++ b/README.md @@ -22,14 +22,6 @@ Once you have it, just add the following lines to your Maven settings.xml : ``` -And those lines to your NPM .npmrc : -```bash -@hylandsoftware:registry=https://npm.pkg.github.com -@nuxeo:registry=https://packages.nuxeo.com/repository/npm-public -registry=https://registry.npmjs.org/ -//npm.pkg.github.com/:_authToken=GITHUB_TOKEN -``` - ## Naviagte to Working Directory ```bash diff --git a/nuxeo-admin-console-package/pom.xml b/nuxeo-admin-console-package/pom.xml index 5c5640d2..0bb17fd1 100644 --- a/nuxeo-admin-console-package/pom.xml +++ b/nuxeo-admin-console-package/pom.xml @@ -3,7 +3,7 @@ org.nuxeo.admin.console nuxeoadmin - 23.0.5-SNAPSHOT + 23.0.6-SNAPSHOT ../pom.xml diff --git a/nuxeo-admin-console-package/src/main/resources/package.xml b/nuxeo-admin-console-package/src/main/resources/package.xml index 94e044c6..416a9936 100644 --- a/nuxeo-admin-console-package/src/main/resources/package.xml +++ b/nuxeo-admin-console-package/src/main/resources/package.xml @@ -1,5 +1,5 @@ - + Nuxeo Admin Console

The Nuxeo admin console provides a dedicated UI for system administrators to get an overview of the system and perform common tasks like reindexing documents.

diff --git a/nuxeo-admin-console-web/angular-app/.npmrc b/nuxeo-admin-console-web/angular-app/.npmrc deleted file mode 100644 index 58575ad0..00000000 --- a/nuxeo-admin-console-web/angular-app/.npmrc +++ /dev/null @@ -1,3 +0,0 @@ -@hylandsoftware:registry=https://npm.pkg.github.com -@nuxeo:registry=https://packages.nuxeo.com/repository/npm-public -registry=https://registry.npmjs.org/ diff --git a/nuxeo-admin-console-web/angular-app/angular.json b/nuxeo-admin-console-web/angular-app/angular.json index 533efe27..09a4b4b1 100644 --- a/nuxeo-admin-console-web/angular-app/angular.json +++ b/nuxeo-admin-console-web/angular-app/angular.json @@ -11,37 +11,19 @@ "prefix": "app", "architect": { "build": { - "builder": "@hylandsoftware/hy-ui-devkit:browser", + "builder": "@angular-devkit/build-angular:browser", "options": { "outputPath": "dist/admin_console_ui", "index": "src/index.jsp", "main": "src/main.ts", - "polyfills": "src/polyfills.ts", + "polyfills": ["zone.js"], "tsConfig": "tsconfig.app.json", "assets": [ - "src/assets", - { - "glob": "**/*", - "input": "./node_modules/@hyland/ui/assets/public", - "output": "./" - } - ], - "styles": [ - "src/styles.scss" - ], - "scripts": [], - "i18nPaths": [ - "src/app" - ], - "i18nModules": [ - "@hyland/ui", - "@hyland/ui-shell" + "src/favicon.svg", + "src/assets" ], - "stylePreprocessorOptions": { - "includePaths": [ - "node_modules" - ] - } + "styles": ["node_modules/@angular/material/prebuilt-themes/indigo-pink.css","src/styles.scss"], + "scripts": [] }, "configurations": { "production": { @@ -63,8 +45,7 @@ "maximumError": "5mb" } ], - "outputHashing": "all", - "silentRefresh": true + "outputHashing": "all" }, "development": { "buildOptimizer": false, @@ -83,14 +64,13 @@ "replace": "src/devtools/ngrx-devtools.ts", "with": "src/devtools/ngrx-devtools.development.ts" } - ], - "silentRefresh": true + ] } }, "defaultConfiguration": "production" }, "serve": { - "builder": "@hylandsoftware/hy-ui-devkit:dev-server", + "builder": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { "browserTarget": "admin_console_ui:build:production" @@ -110,34 +90,17 @@ "test": { "builder": "@angular-devkit/build-angular:karma", "options": { - "polyfills": [ - "src/polyfills.ts", - "zone.js", - "zone.js/testing" - ], + "polyfills": ["zone.js", "zone.js/testing"], "tsConfig": "tsconfig.spec.json", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "src/styles.scss" - ], - "scripts": [], - "stylePreprocessorOptions": { - "includePaths": [ - "node_modules" - ] - } + "assets": ["src/favicon.svg", "src/assets"], + "styles": ["src/styles.scss"], + "scripts": [] } }, "lint": { "builder": "@angular-eslint/builder:lint", "options": { - "lintFilePatterns": [ - "src/**/*.ts", - "src/**/*.html" - ] + "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"] } } } @@ -149,4 +112,4 @@ "cli": { "analytics": "bac8daa6-35ed-405f-89f7-031d9cd916f4" } -} \ No newline at end of file +} diff --git a/nuxeo-admin-console-web/angular-app/package.json b/nuxeo-admin-console-web/angular-app/package.json index a8a7f8bb..e0c618eb 100644 --- a/nuxeo-admin-console-web/angular-app/package.json +++ b/nuxeo-admin-console-web/angular-app/package.json @@ -1,6 +1,6 @@ { "name": "nuxeo-admin-console-ui", - "version": "23.0.5-SNAPSHOT", + "version": "23.0.6-SNAPSHOT", "scripts": { "ng": "ng", "start": "ng serve", @@ -13,23 +13,22 @@ }, "dependencies": { "@angular/animations": "^16.2.0", + "@angular/cdk": "^16.2.14", "@angular/common": "^16.2.0", "@angular/compiler": "^16.2.0", "@angular/core": "^16.2.0", "@angular/forms": "^16.2.0", + "@angular/material": "^16.2.14", "@angular/platform-browser": "^16.2.0", "@angular/platform-browser-dynamic": "^16.2.0", "@angular/router": "^16.2.0", - "@hyland/ui": "npm:@hylandsoftware/hy-ui@^8.0.0", - "@hyland/ui-shell": "npm:@hylandsoftware/hy-ui-shell@^8.0.0", - "@hylandsoftware/hy-ui-icons": "^4.0.2", "@ngneat/transloco": "^6.0.0", "@ngrx/effects": "^16.0.0", "@ngrx/router-store": "^16.0.0", "@ngrx/store": "^16.0.0", "@ngrx/store-devtools": "^16.0.0", "angular-oauth2-oidc": "^15.0.1", - "hammerjs": "^2.0.8", + "material-symbols": "^0.26.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.13.0" @@ -51,8 +50,6 @@ "@angular-eslint/template-parser": "16.3.1", "@angular/cli": "^16.2.14", "@angular/compiler-cli": "^16.2.0", - "@hylandsoftware/hy-ui-devkit": "^6.0.1", - "@hylandsoftware/hy-ui-standards": "^6.0.1", "@types/jasmine": "~4.3.0", "@types/node": "^20.14.8", "@typescript-eslint/eslint-plugin": "5.62.0", diff --git a/nuxeo-admin-console-web/angular-app/src/app/app-routing.module.ts b/nuxeo-admin-console-web/angular-app/src/app/app-routing.module.ts index 64906972..c0e6e4c3 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/app-routing.module.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/app-routing.module.ts @@ -55,8 +55,11 @@ export const appRoutes: Route[] = [ ).then((m) => m.GenericMultiFeatureLayoutModule), }, { - path: "auth", - loadChildren: () => import("./auth/auth.module").then((m) => m.AuthModule), + path: "fulltext-reindex", + loadChildren: () => + import( + "./features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.module" + ).then((m) => m.GenericMultiFeatureLayoutModule), }, { path: "**", redirectTo: "" }, ]; diff --git a/nuxeo-admin-console-web/angular-app/src/app/app.component.html b/nuxeo-admin-console-web/angular-app/src/app/app.component.html index dc60aca9..91de2c14 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/app.component.html +++ b/nuxeo-admin-console-web/angular-app/src/app/app.component.html @@ -1,7 +1,7 @@

{{ UNAUTHORIZED_MESSAGE }}

diff --git a/nuxeo-admin-console-web/angular-app/src/app/app.component.scss b/nuxeo-admin-console-web/angular-app/src/app/app.component.scss index 67d45d45..aa9fc475 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/app.component.scss +++ b/nuxeo-admin-console-web/angular-app/src/app/app.component.scss @@ -1,4 +1,3 @@ -@import '~@hylandsoftware/hy-ui-icons/index.css'; .unauthorized{ display: flex; flex-direction: column; diff --git a/nuxeo-admin-console-web/angular-app/src/app/app.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/app.component.spec.ts index 190a7820..4731b58b 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/app.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/app.component.spec.ts @@ -6,21 +6,21 @@ import { PersistenceService } from "./shared/services/persistence.service"; import { WarningComponent } from "./features/warning/warning.component"; import { CommonService } from "./shared/services/common.service"; import { EventEmitter } from "@angular/core"; -import { provideMockStore, MockStore } from '@ngrx/store/testing'; -import { AuthStateInterface } from './auth/types/authState.interface'; -import { UserInterface } from './shared/types/user.interface'; -import { APP_CONSTANTS } from './app.constants'; -import { By } from '@angular/platform-browser'; -import { authActions } from './auth/store/actions'; -import { ActivatedRoute, RouterModule } from '@angular/router'; +import { provideMockStore, MockStore } from "@ngrx/store/testing"; +import { AuthStateInterface } from "./auth/types/authState.interface"; +import { UserInterface } from "./shared/types/user.interface"; +import { APP_CONSTANTS } from "./app.constants"; +import { By } from "@angular/platform-browser"; +import { authActions } from "./auth/store/actions"; +import { ActivatedRoute, RouterModule } from "@angular/router"; import { BaseLayoutModule } from "./layouts/base-layout/base-layout.module"; -import { BaseLayoutComponent } from "./layouts/base-layout/components/base-layout.component" -import { HyMaterialIconModule } from "@hyland/ui"; +import { BaseLayoutComponent } from "./layouts/base-layout/components/base-layout.component"; import { HeaderBarComponent } from "./layouts/header-bar/header-bar.component"; import { MenuBarComponent } from "./layouts/menu-bar/menu-bar.component"; -import { MatListModule } from '@angular/material/list'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatListModule } from "@angular/material/list"; +import { MatSidenavModule } from "@angular/material/sidenav"; +import { MatToolbarModule } from "@angular/material/toolbar"; +import { MatIconModule } from "@angular/material/icon"; describe("AppComponent", () => { let component: AppComponent; @@ -28,26 +28,26 @@ describe("AppComponent", () => { const mockActivatedRoute = { snapshot: { paramMap: { - get: () => 'Administrator' - } - } + get: () => "Administrator", + }, + }, }; let store: MockStore<{ auth: AuthStateInterface }>; const initialAuthState: AuthStateInterface = { isSubmitting: false, currentUser: { - id: 'Administrator', + id: "Administrator", isAdministrator: true, properties: { firstName: "nco", lastName: "admin", email: "nco-admin@nuxeo.com", - username: "Administrator" - } + username: "Administrator", + }, } as UserInterface, isLoading: false, - validationErrors: null + validationErrors: null, }; class persistenceServiceStub { @@ -64,11 +64,24 @@ describe("AppComponent", () => { loadApp = new EventEmitter(); } - beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [AppComponent, BaseLayoutComponent, HeaderBarComponent, MenuBarComponent], - imports: [CommonModule, MatDialogModule, BaseLayoutModule, HyMaterialIconModule, RouterModule, MatToolbarModule, MatListModule, MatSidenavModule], + declarations: [ + AppComponent, + BaseLayoutComponent, + HeaderBarComponent, + MenuBarComponent, + ], + imports: [ + CommonModule, + MatDialogModule, + BaseLayoutModule, + RouterModule, + MatToolbarModule, + MatListModule, + MatSidenavModule, + MatIconModule, + ], providers: [ { provide: PersistenceService, useClass: persistenceServiceStub }, { provide: CommonService, useClass: commonServiceStub }, @@ -88,10 +101,12 @@ describe("AppComponent", () => { describe("ngOnInit", () => { it("should initiate JS client and subscribe to currentUser$", () => { - spyOn(component['nuxeoJsClientService'], 'initiateJSClient'); - spyOn(component.currentUser$, 'subscribe').and.callThrough(); + spyOn(component["nuxeoJsClientService"], "initiateJSClient"); + spyOn(component.currentUser$, "subscribe").and.callThrough(); component.ngOnInit(); - expect(component['nuxeoJsClientService'].initiateJSClient).toHaveBeenCalledWith(component.baseUrl); + expect( + component["nuxeoJsClientService"].initiateJSClient + ).toHaveBeenCalledWith(component.baseUrl); expect(component.currentUser$.subscribe).toHaveBeenCalled(); }); @@ -100,7 +115,10 @@ describe("AppComponent", () => { spyOn(component.persistenceService, "get").and.returnValue(null); component.ngOnInit(); expect(component.persistenceService.get).toHaveBeenCalled(); - expect(component.dialogService.open).toHaveBeenCalledWith(WarningComponent, { disableClose: true }); + expect(component.dialogService.open).toHaveBeenCalledWith( + WarningComponent, + { disableClose: true, hasBackdrop: true } + ); }); it("should not open the warning dialog if warning preference is set", () => { @@ -140,33 +158,39 @@ describe("AppComponent", () => { expect(store.dispatch).toHaveBeenCalledWith(authActions.signOut()); }); }); - describe("DOM", () => { it("should display unauthorized message if currentUser is not administrator", () => { store.setState({ auth: { - ...initialAuthState, currentUser: { - id: 'Administrator', isAdministrator: false, properties: { + ...initialAuthState, + currentUser: { + id: "Administrator", + isAdministrator: false, + properties: { firstName: "nco", lastName: "admin", email: "nco-admin@nuxeo.com", - username: "Administrator" - } - } - } + username: "Administrator", + }, + }, + }, }); fixture.detectChanges(); - const unauthorizedMessage = fixture.debugElement.query(By.css('.unauthorized')); + const unauthorizedMessage = fixture.debugElement.query( + By.css(".unauthorized") + ); expect(unauthorizedMessage).toBeTruthy(); - expect(unauthorizedMessage.nativeElement.textContent).toContain(APP_CONSTANTS.UNAUTHORIZED_MESSAGE); + expect(unauthorizedMessage.nativeElement.textContent).toContain( + APP_CONSTANTS.UNAUTHORIZED_MESSAGE + ); }); it("should display base-layout if loadApp is true and currentUser is administrator", () => { component.loadApp = true; fixture.detectChanges(); - const baseLayout = fixture.debugElement.query(By.css('base-layout')); + const baseLayout = fixture.debugElement.query(By.css("base-layout")); expect(baseLayout).toBeTruthy(); }); }); -}); \ No newline at end of file +}); diff --git a/nuxeo-admin-console-web/angular-app/src/app/app.component.ts b/nuxeo-admin-console-web/angular-app/src/app/app.component.ts index 67a158b2..811c6131 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/app.component.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/app.component.ts @@ -48,6 +48,7 @@ export class AppComponent implements OnInit, OnDestroy { if (!doNotWarn) { this.dialogService.open(WarningComponent, { disableClose: true, + hasBackdrop: true }); this.loadAppSubscription = this.commonService.loadApp.subscribe(load => { this.loadApp = load; diff --git a/nuxeo-admin-console-web/angular-app/src/app/app.module.ts b/nuxeo-admin-console-web/angular-app/src/app/app.module.ts index d1f8ae65..d92257fb 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/app.module.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/app.module.ts @@ -1,3 +1,4 @@ +import { MatTooltipModule } from "@angular/material/tooltip"; import { GenericMultiFeatureLayoutModule } from "./features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.module"; import { GenericModalComponent } from "./features/sub-features/generic-multi-feature-layout/components/generic-modal/generic-modal.component"; import { bulkActionMonitoringReducer } from "./features/bulk-action-monitoring/store/reducers"; @@ -14,13 +15,10 @@ import { CommonModule } from "@angular/common"; import { MatIconModule } from "@angular/material/icon"; import { MatToolbarModule } from "@angular/material/toolbar"; import { AppRoutingModule } from "./app-routing.module"; -import { AuthRoutingModule } from "./auth/auth-routing.module"; import { HomeModule } from "./features/home/home.module"; import { WarningComponent } from "./features/warning/warning.component"; -import { HylandSSOManagerComponent } from "./auth/components/SSO/hylandSSOManager.component"; import { BackendErrorMessagesComponent } from "./shared/components/backendErrorMessages/backendErrorMessages.component"; import { AppComponent } from "./app.component"; -import { AuthInterceptorService } from "./auth/services/auth-interceptor.service"; import { authReducer } from "./auth/store/reducers"; import * as authEffects from "./auth/store/effects"; import { ngrxDevtools } from "../devtools/ngrx-devtools"; @@ -30,11 +28,6 @@ import { MatButtonModule } from "@angular/material/button"; import { MatSidenavModule } from "@angular/material/sidenav"; import { HeaderBarComponent } from "./layouts/header-bar/header-bar.component"; import { MenuBarComponent } from "./layouts/menu-bar/menu-bar.component"; -import { - HyDialogBoxModule, - HyDialogModule, - HyMaterialIconModule, -} from "@hyland/ui"; import { MatCheckboxModule } from "@angular/material/checkbox"; import { MatListModule } from "@angular/material/list"; import { homeReducer } from "./features/home/store/reducers"; @@ -48,10 +41,15 @@ import { documentActionReducer, nxqlActionReducer, } from "./features/sub-features/generic-multi-feature-layout/store/reducers"; -import { HyKeyboardFocusService } from "@hyland/ui/keyboard-focus"; import { BulkActionMonitoringModule } from "./features/bulk-action-monitoring/bulk-action-monitoring.module"; import { ErrorModalComponent } from "./features/sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component"; import { ProbesDataModule } from "./features/sub-features/probes-data/probes-data.module"; +import { + MAT_DIALOG_DEFAULT_OPTIONS, + MatDialogModule, +} from "@angular/material/dialog"; +import { CustomSnackBarComponent } from "./shared/components/custom-snack-bar/custom-snack-bar.component"; +import { AuthInterceptorService } from "./auth/services/auth-interceptor.service"; @NgModule({ declarations: [ @@ -60,10 +58,10 @@ import { ProbesDataModule } from "./features/sub-features/probes-data/probes-dat MenuBarComponent, WarningComponent, BackendErrorMessagesComponent, - HylandSSOManagerComponent, BaseLayoutComponent, GenericModalComponent, ErrorModalComponent, + CustomSnackBarComponent, ], imports: [ BrowserModule, @@ -72,7 +70,6 @@ import { ProbesDataModule } from "./features/sub-features/probes-data/probes-dat RouterModule, CommonModule, AppRoutingModule, - AuthRoutingModule, StoreModule.forRoot({ router: routerReducer, auth: authReducer, @@ -92,22 +89,21 @@ import { ProbesDataModule } from "./features/sub-features/probes-data/probes-dat ProbesEffects ), MatIconModule, + MatTooltipModule, MatToolbarModule, MatButtonModule, MatSidenavModule, HomeModule, MatListModule, BaseLayoutModule, - HyDialogModule, MatSidenavModule, MatButtonModule, - HyDialogBoxModule, FormsModule, MatCheckboxModule, - HyMaterialIconModule, BulkActionMonitoringModule, ProbesDataModule, GenericMultiFeatureLayoutModule, + MatDialogModule, ], providers: [ { @@ -115,10 +111,9 @@ import { ProbesDataModule } from "./features/sub-features/probes-data/probes-dat useClass: AuthInterceptorService, multi: true, }, + { provide: MAT_DIALOG_DEFAULT_OPTIONS, useValue: { hasBackdrop: false } }, ngrxDevtools, ], bootstrap: [AppComponent], }) -export class AppModule { - constructor(private _hyKeyboardFocusService: HyKeyboardFocusService) {} -} +export class AppModule {} diff --git a/nuxeo-admin-console-web/angular-app/src/app/auth/auth-routing.module.ts b/nuxeo-admin-console-web/angular-app/src/app/auth/auth-routing.module.ts deleted file mode 100644 index 42e98416..00000000 --- a/nuxeo-admin-console-web/angular-app/src/app/auth/auth-routing.module.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { NgModule } from "@angular/core"; -import { RouterModule } from "@angular/router"; -import { Route } from "@angular/router"; -import { HylandSSOManagerComponent } from "./components/SSO/hylandSSOManager.component"; - -export const authRoutes: Route[] = [ - { - path: '', - component: HylandSSOManagerComponent, - }, -]; - -@NgModule({ - imports: [RouterModule.forChild(authRoutes)], - exports: [RouterModule], -}) -export class AuthRoutingModule {} diff --git a/nuxeo-admin-console-web/angular-app/src/app/auth/auth.module.ts b/nuxeo-admin-console-web/angular-app/src/app/auth/auth.module.ts deleted file mode 100644 index e607d82a..00000000 --- a/nuxeo-admin-console-web/angular-app/src/app/auth/auth.module.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { NgModule } from "@angular/core"; -import { AuthRoutingModule } from "./auth-routing.module"; - -@NgModule({ - declarations: [], - imports: [AuthRoutingModule], -}) -export class AuthModule {} diff --git a/nuxeo-admin-console-web/angular-app/src/app/auth/components/SSO/hylandSSOManager.component.html b/nuxeo-admin-console-web/angular-app/src/app/auth/components/SSO/hylandSSOManager.component.html deleted file mode 100644 index 8c057e48..00000000 --- a/nuxeo-admin-console-web/angular-app/src/app/auth/components/SSO/hylandSSOManager.component.html +++ /dev/null @@ -1,13 +0,0 @@ - -
-
-
-
-

- Initiating Hyland SSO... -

-
-
-
-
-
\ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/auth/components/SSO/hylandSSOManager.component.ts b/nuxeo-admin-console-web/angular-app/src/app/auth/components/SSO/hylandSSOManager.component.ts deleted file mode 100644 index fb379429..00000000 --- a/nuxeo-admin-console-web/angular-app/src/app/auth/components/SSO/hylandSSOManager.component.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Component, OnInit } from "@angular/core"; -import { FormBuilder } from "@angular/forms"; -import { Store } from "@ngrx/store"; -import { combineLatest } from "rxjs"; -import { authActions } from "../../store/actions"; -import { - selectIsSubmitting, - selectValidationErrors, -} from "../../store/reducers"; -import { HylandSSORequestInterface } from "../../types/hylandSSORequest.interface"; - -@Component({ - selector: "ssomanager", - templateUrl: "./hylandSSOManager.component.html", -}) -export class HylandSSOManagerComponent implements OnInit { - data$ = combineLatest({ - isSubmitting: this.store.select(selectIsSubmitting), - backendErrors: this.store.select(selectValidationErrors), - }); - - constructor(private fb: FormBuilder, private store: Store) {} - - initSSO() { - const request: HylandSSORequestInterface = { - app: { appID: "AdminPanel" }, - }; - this.store.dispatch(authActions.sso({ request })); - } - - ngOnInit() { - this.initSSO(); - } -} diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/bulk-action-monitoring.module.ts b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/bulk-action-monitoring.module.ts index 280c2acf..49b66a6f 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/bulk-action-monitoring.module.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/bulk-action-monitoring.module.ts @@ -2,23 +2,19 @@ import { BulkActionMonitoringDetailsComponent } from "./components/bulk-action-m import { BulkActionMonitoringSummaryComponent } from "./components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component"; import { BulkActionMonitoringResultComponent } from "./components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-result.component"; import { BulkActionMonitoringFormComponent } from "./components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component"; -import { MatTooltipModule } from "@angular/material/tooltip"; import { MatCardModule } from "@angular/material/card"; import { MatIconModule } from "@angular/material/icon"; import { BulkActionMonitoringRoutingModule } from "./bulk-action-monitoring-routing.module"; import { MatButtonModule } from "@angular/material/button"; import { NgModule } from "@angular/core"; import { CommonModule } from "@angular/common"; -import { - HyFormContainerModule, - HyMaterialModule, - HyToastModule, -} from "@hyland/ui"; import { ReactiveFormsModule } from "@angular/forms"; import { MatFormFieldModule } from "@angular/material/form-field"; import { MatInputModule } from "@angular/material/input"; -import { HyContentListModule } from "@hyland/ui/content-list"; import { BulkActionMonitoringComponent } from "./components/bulk-action-monitoring/bulk-action-monitoring.component"; +import { MatTooltipModule } from "@angular/material/tooltip"; +import { MatSnackBarModule } from "@angular/material/snack-bar"; +import { MatTableModule } from "@angular/material/table"; @NgModule({ declarations: [ @@ -30,8 +26,6 @@ import { BulkActionMonitoringComponent } from "./components/bulk-action-monitori ], imports: [ CommonModule, - HyMaterialModule, - HyFormContainerModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, @@ -39,9 +33,9 @@ import { BulkActionMonitoringComponent } from "./components/bulk-action-monitori BulkActionMonitoringRoutingModule, MatIconModule, MatCardModule, - HyContentListModule, - HyToastModule, MatTooltipModule, + MatSnackBarModule, + MatTableModule, ], }) export class BulkActionMonitoringModule {} diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.html b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.html index 912299e9..9a95f92c 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.html +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.html @@ -1,8 +1,8 @@

{{ GENERIC_LABELS.REQUIRED_FIELD_INDICATOR }}

- - {{ BULK_ACTION_LABELS.BULK_ACTION_ID }} +

{{ BULK_ACTION_LABELS.BULK_ACTION_ID }}*

+ diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.scss b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.scss index 57e38fd7..b3d73429 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.scss +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.scss @@ -5,10 +5,21 @@ margin: 0px; padding: 10px 0px 0px 10px; #requiredField { - font-size: 12px; - color: #da1500; - font-weight: 400; + font-size: 14px; + color: rgb(218, 21, 0); font-family: "Open Sans"; + line-height: 1; + } + .required-indicator { + color: rgb(218, 21, 0); + font-family: "Open Sans", sans-serif; + padding-left: 2px; + } + #label { + line-height: 1; + margin: 5px; + font-size: 14px; + font-weight: 400; } &__button { border-radius: 4px !important; @@ -18,10 +29,10 @@ left: 20px; font-size: 16px; bottom: 3px; + font-family: "Open Sans", sans-serif; + background-color: #0a60ce !important; + font-weight: 550; + letter-spacing: normal; + color: #fff; } } -mat-form-field.hy-form-field { - margin-top: 10px; - max-width: 350px; - width: 80%; -} diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.spec.ts index 38f08ad2..034eb978 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.spec.ts @@ -134,6 +134,7 @@ describe("BulkActionMonitoringFormComponent", () => { component.showBulkActionErrorModal(error); expect(mockDialog.open).toHaveBeenCalledWith(ErrorModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { error }, diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.ts b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.ts index f5ebe705..ad49c8bd 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-form/bulk-action-monitoring-form.component.ts @@ -1,10 +1,14 @@ -import { ERROR_MODAL_LABELS, GENERIC_LABELS, MODAL_DIMENSIONS } from './../../../../sub-features/generic-multi-feature-layout/generic-multi-feature-layout.constants'; -import { GenericMultiFeatureUtilitiesService } from './../../../../sub-features/generic-multi-feature-layout/services/generic-multi-feature-utilities.service'; -import { CommonService } from './../../../../../shared/services/common.service'; -import { BULK_ACTION_LABELS } from './../../../bulk-action-monitoring.constants'; -import { ErrorModalComponent } from '../../../../sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component'; -import { ErrorModalClosedInfo } from './../../../../../shared/types/common.interface'; -import { BulkActionMonitoringInfo } from './../../../bulk-action-monitoring.interface'; +import { + ERROR_MODAL_LABELS, + GENERIC_LABELS, + MODAL_DIMENSIONS, +} from "./../../../../sub-features/generic-multi-feature-layout/generic-multi-feature-layout.constants"; +import { GenericMultiFeatureUtilitiesService } from "./../../../../sub-features/generic-multi-feature-layout/services/generic-multi-feature-utilities.service"; +import { CommonService } from "./../../../../../shared/services/common.service"; +import { BULK_ACTION_LABELS } from "./../../../bulk-action-monitoring.constants"; +import { ErrorModalComponent } from "../../../../sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component"; +import { ErrorModalClosedInfo } from "./../../../../../shared/types/common.interface"; +import { BulkActionMonitoringInfo } from "./../../../bulk-action-monitoring.interface"; import { MatDialog, MatDialogRef } from "@angular/material/dialog"; import { Component, @@ -19,8 +23,8 @@ import { Observable, Subscription } from "rxjs"; import * as BulkActionMonitoringActions from "../../../store/actions"; import { HttpErrorResponse } from "@angular/common/http"; import { BulkActionMonitoringState } from "../../../store/reducers"; -import { ActivatedRoute } from '@angular/router'; -import { ErrorDetails } from '../../../../sub-features/generic-multi-feature-layout/generic-multi-feature-layout.interface'; +import { ActivatedRoute } from "@angular/router"; +import { ErrorDetails } from "../../../../sub-features/generic-multi-feature-layout/generic-multi-feature-layout.interface"; @Component({ selector: "bulk-action-monitoring-form", @@ -28,13 +32,15 @@ import { ErrorDetails } from '../../../../sub-features/generic-multi-feature-lay styleUrls: ["./bulk-action-monitoring-form.component.scss"], }) export class BulkActionMonitoringFormComponent implements OnInit, OnDestroy { - @Output() setBulkActionResponse = new EventEmitter(); + @Output() setBulkActionResponse = + new EventEmitter(); bulkActionMonitoringForm: FormGroup; bulkActionError$: Observable; bulkActionErrorSubscription = new Subscription(); bulkActionLaunchedSubscription = new Subscription(); errorDialogClosedSubscription = new Subscription(); - errorDialogRef: MatDialogRef = {} as MatDialogRef; + errorDialogRef: MatDialogRef = + {} as MatDialogRef; bulkActionMonitoringLaunched$: Observable; BULK_ACTION_LABELS = BULK_ACTION_LABELS; isBulkActionBtnDisabled = false; @@ -64,24 +70,25 @@ export class BulkActionMonitoringFormComponent implements OnInit, OnDestroy { } ngOnInit(): void { - this.route.paramMap.subscribe(params => { + this.route.paramMap.subscribe((params) => { const bulkActionId = params.get("bulkActionId"); if (bulkActionId) { this.bulkActionMonitoringForm.patchValue({ bulkActionId }); - this.onBulkActionFormSubmit(); + this.onBulkActionFormSubmit(); } }); - this.bulkActionLaunchedSubscription = this.bulkActionMonitoringLaunched$.subscribe((data) => { - if (data?.commandId) { - this.bulkActionResponse = data; - this.setBulkActionResponse.emit(this.bulkActionResponse); - this.isBulkActionBtnDisabled = false; - this.bulkActionMonitoringForm.reset(); - } else { - this.bulkActionResponse = {} as BulkActionMonitoringInfo; - } - }); + this.bulkActionLaunchedSubscription = + this.bulkActionMonitoringLaunched$.subscribe((data) => { + if (data?.commandId) { + this.bulkActionResponse = data; + this.setBulkActionResponse.emit(this.bulkActionResponse); + this.isBulkActionBtnDisabled = false; + this.bulkActionMonitoringForm.reset(); + } else { + this.bulkActionResponse = {} as BulkActionMonitoringInfo; + } + }); this.bulkActionErrorSubscription = this.bulkActionError$.subscribe( (error) => { @@ -105,6 +112,7 @@ export class BulkActionMonitoringFormComponent implements OnInit, OnDestroy { ); this.errorDialogRef = this.dialogService.open(ErrorModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -135,9 +143,10 @@ export class BulkActionMonitoringFormComponent implements OnInit, OnDestroy { onBulkActionFormSubmit(): void { if (this.bulkActionMonitoringForm?.valid && !this.isBulkActionBtnDisabled) { this.isBulkActionBtnDisabled = true; - this.userInput = this.genericMultiFeatureUtilitiesService.removeLeadingCharacters( - this.bulkActionMonitoringForm?.get("bulkActionId")?.value.trim() - ); + this.userInput = + this.genericMultiFeatureUtilitiesService.removeLeadingCharacters( + this.bulkActionMonitoringForm?.get("bulkActionId")?.value.trim() + ); this.store.dispatch( BulkActionMonitoringActions.performBulkActionMonitor({ id: this.userInput, diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.html b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.html index fdd0645a..80a67696 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.html +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.html @@ -15,62 +15,62 @@

{{BULK_ACTION_LABELS.ADDITIONAL_INFORMATION}}

- - - - {{BULK_ACTION_LABELS.SCROLL_START}} +
+ + + + - - {{row.scrollStart ? (row.scrollStart | date:'MMM d, h:mm:ss a \'UTC\'' : 'UTC') : - 'NA'}} + + + - - - - {{BULK_ACTION_LABELS.SCROLL_END}} + + + - - {{row.scrollEnd ? (row.scrollEnd | date:'MMM d, h:mm:ss a \'UTC\'' : 'UTC') : - 'NA'}} + + + - - - - {{BULK_ACTION_LABELS.PROCESSING_START}} + + + - - {{row.processingStart ? (row.processingStart | date:'MMM d, h:mm:ss a \'UTC\'' : 'UTC') : - 'NA' }} + + + - - - - {{BULK_ACTION_LABELS.PROCESSING_END}} - - - {{row.processingEnd ? (row.processingEnd | date:'MMM d, h:mm:ss a \'UTC\'' : 'UTC') : - 'NA'}} - - - - - {{BULK_ACTION_LABELS.COMPLETED_ON}} - - - {{row.completed ? (row.completed | date:'MMM d, h:mm:ss a \'UTC\'' : 'UTC') : - 'NA'}} - - - - - {{BULK_ACTION_LABELS.PROCESSING_TIME}} - - - {{row.processingMillis}} - - - + + +
{{ BULK_ACTION_LABELS.SCROLL_START }} + + {{row.scrollStart ? (row.scrollStart | date:'MMM d, h:mm:ss a \'UTC\'' : 'UTC') : + 'NA'}} + {{ BULK_ACTION_LABELS.SCROLL_END }} + + {{row.scrollEnd ? (row.scrollEnd | date:'MMM d, h:mm:ss a \'UTC\'' : 'UTC') : + 'NA'}} + {{ BULK_ACTION_LABELS.PROCESSING_START + }} + + {{row.processingStart ? (row.processingStart | date:'MMM d, h:mm:ss a \'UTC\'' : + 'UTC') : + 'NA' }} + {{ BULK_ACTION_LABELS.PROCESSING_END }} + + {{row.processingEnd ? (row.processingEnd | date:'MMM d, h:mm:ss a \'UTC\'' : 'UTC') : + 'NA'}} + {{ BULK_ACTION_LABELS.COMPLETED_ON }} + + {{row.completed ? (row.completed | date:'MMM d, h:mm:ss a \'UTC\'' : 'UTC') : + 'NA'}} + {{ BULK_ACTION_LABELS.PROCESSING_TIME }} + + {{row.processingMillis}} +
+
\ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.scss b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.scss index 6826a830..b518adde 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.scss +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.scss @@ -29,26 +29,16 @@ &__additional-info { margin-left: 10px; - width: 74%; + width: 75%; height: 220px; - } - .mat-mdc-card-content { - width: 100%; - height: 100%; - padding: 0; + .title { + margin-top: -17px; + } } } -::ng-deep .hy-content-list__custom-cell { - max-height: none !important; - height: auto; -} -::ng-deep .hy-content-list__virtual-scroll-viewport { - height: 90% !important; -} - -@media (max-width: 962px) { +@media (max-width: 1024px) { .bulk-action-details { flex-direction: column; align-items: center; diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.spec.ts index ea1f7780..78f5591a 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.spec.ts @@ -3,7 +3,7 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { MatCardModule } from "@angular/material/card"; import { ComponentFixture, TestBed } from "@angular/core/testing"; import { BulkActionMonitoringDetailsComponent } from "./bulk-action-monitoring-details.component"; -import { HyContentListModule } from "@hyland/ui"; +import { MatTableModule } from '@angular/material/table'; describe("BulkActionMonitoringDetailsComponent", () => { let component: BulkActionMonitoringDetailsComponent; @@ -12,7 +12,7 @@ describe("BulkActionMonitoringDetailsComponent", () => { beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [BulkActionMonitoringDetailsComponent], - imports: [MatCardModule, HyContentListModule, NoopAnimationsModule], + imports: [MatCardModule, NoopAnimationsModule, MatTableModule], }).compileComponents(); fixture = TestBed.createComponent(BulkActionMonitoringDetailsComponent); diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.ts b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.ts index 1aba9dc5..9fb55252 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-details/bulk-action-monitoring-details.component.ts @@ -1,5 +1,5 @@ -import { BULK_ACTION_LABELS } from './../../../../bulk-action-monitoring.constants'; -import { BulkActionInfoDetails } from './../../../../bulk-action-monitoring.interface'; +import { BULK_ACTION_LABELS } from "./../../../../bulk-action-monitoring.constants"; +import { BulkActionInfoDetails } from "./../../../../bulk-action-monitoring.interface"; import { Component, Input, OnChanges } from "@angular/core"; @Component({ @@ -15,9 +15,18 @@ export class BulkActionMonitoringDetailsComponent implements OnChanges { docsProcessedText = ""; errorsFoundText = ""; docsSkippedText = ""; + columnsToDisplay: string[] = []; ngOnChanges(): void { this.additionalInfoDataSrc = [this.bulkActionDetails]; + this.columnsToDisplay = [ + "scrollStart", + "scrollEnd", + "processingStart", + "processingEnd", + "completed", + "processingMillis", + ]; if (this.bulkActionDetails) { this.replacePlaceholderValues(); } diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-result.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-result.component.spec.ts index 271e31c4..87030ee6 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-result.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-result.component.spec.ts @@ -1,17 +1,15 @@ import { BulkActionMonitoringInfo, BulkActionInfoSummary, BulkActionInfoDetails } from './../../../bulk-action-monitoring.interface'; import { NoopAnimationsModule } from "@angular/platform-browser/animations"; -import { MatTooltipModule } from "@angular/material/tooltip"; import { MatCardModule } from "@angular/material/card"; import { BulkActionMonitoringSummaryComponent } from "./bulk-action-monitoring-summary/bulk-action-monitoring-summary.component"; import { BulkActionMonitoringDetailsComponent } from "./bulk-action-monitoring-details/bulk-action-monitoring-details.component"; import { ComponentFixture, TestBed } from "@angular/core/testing"; import { BulkActionMonitoringResultComponent } from "./bulk-action-monitoring-result.component"; -import { - HyContentListModule, - HyMaterialModule, - HyToastService, -} from "@hyland/ui"; import { provideMockStore } from "@ngrx/store/testing"; +import { MatSnackBarModule } from '@angular/material/snack-bar'; +import { MatIconModule } from '@angular/material/icon'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { MatTableModule } from '@angular/material/table'; describe("BulkActionMonitoringResultComponent", () => { let component: BulkActionMonitoringResultComponent; @@ -40,7 +38,6 @@ describe("BulkActionMonitoringResultComponent", () => { }; beforeEach(async () => { - const toastServiceSpy = jasmine.createSpyObj("HyToastService", ["success"]); await TestBed.configureTestingModule({ declarations: [ BulkActionMonitoringResultComponent, @@ -48,14 +45,14 @@ describe("BulkActionMonitoringResultComponent", () => { BulkActionMonitoringSummaryComponent, ], imports: [ - HyMaterialModule, MatCardModule, - HyContentListModule, + MatSnackBarModule, + MatIconModule, MatTooltipModule, + MatTableModule, NoopAnimationsModule, ], providers: [ - { provide: HyToastService, useValue: toastServiceSpy }, provideMockStore({ initialState }), ], }).compileComponents(); diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.html b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.html index 4abb42b2..b6e4a1e5 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.html +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.html @@ -10,12 +10,12 @@ {{getRunningStatusText()}} - info + info

-

{{statusText}} diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.scss b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.scss index 563bcdfd..2379a96c 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.scss +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.scss @@ -1,20 +1,17 @@ .bulk-action-summary { margin-top: 30px; - &__header { display: flex; flex-direction: row; .action-details { .info-icon { position: relative; - top: 3px; + top: 10px; cursor: pointer; - margin-left: 4px; + margin-left: 5px; width: auto; } } - - .action-name { font-weight: 550; font-size: 20px; @@ -32,17 +29,28 @@ button { margin-left: 30px; - margin-top: 2px; + margin-top: 4px; + border-radius: 8px; + padding: 0 16px; + border-color: #6b7280; + font-family: "Open Sans", sans-serif; } } } +mat-icon { + font-size: 16px; +} + +#refreshResultsBtn:focus-visible { + background-color: #E0E1E0; +} + @media (max-width: 962px) { .bulk-action-summary__header { flex-direction: column; align-items: flex-start; padding-top: 10px; - button { margin-left: 0; margin-top: 6px; diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.spec.ts index 6f210565..0b032b8b 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.spec.ts @@ -1,19 +1,25 @@ -import { BULK_ACTION_LABELS } from './../../../../bulk-action-monitoring.constants'; -import { BulkActionInfoSummary } from './../../../../bulk-action-monitoring.interface'; +import { CustomSnackBarComponent } from "./../../../../../../shared/components/custom-snack-bar/custom-snack-bar.component"; +import { NoopAnimationsModule } from "@angular/platform-browser/animations"; import { MatTooltipModule } from "@angular/material/tooltip"; +import { MatIconModule } from "@angular/material/icon"; +import { BULK_ACTION_LABELS } from "./../../../../bulk-action-monitoring.constants"; +import { BulkActionInfoSummary } from "./../../../../bulk-action-monitoring.interface"; import { ComponentFixture, TestBed } from "@angular/core/testing"; import { BulkActionMonitoringSummaryComponent } from "./bulk-action-monitoring-summary.component"; import { StoreModule } from "@ngrx/store"; -import { HyMaterialModule, HyToastService } from "@hyland/ui"; import * as BulkActionMonitoringActions from "../../../../store/actions"; import * as fromReducer from "../../../../store/reducers"; import { MockStore, provideMockStore } from "@ngrx/store/testing"; +import { MatSnackBar, MatSnackBarModule } from "@angular/material/snack-bar"; describe("BulkActionMonitoringSummaryComponent", () => { let component: BulkActionMonitoringSummaryComponent; let fixture: ComponentFixture; - let toastService: jasmine.SpyObj; let store: MockStore; + let snackBar: jasmine.SpyObj; + const snackBarSpy = jasmine.createSpyObj("MatSnackBar", [ + "openFromComponent", + ]); const initialState = { bulkActionMonitoringInfo: { "entity-type": null, @@ -38,27 +44,25 @@ describe("BulkActionMonitoringSummaryComponent", () => { }; beforeEach(async () => { - const toastServiceSpy = jasmine.createSpyObj("HyToastService", ["success"]); await TestBed.configureTestingModule({ declarations: [BulkActionMonitoringSummaryComponent], providers: [ - { provide: HyToastService, useValue: toastServiceSpy }, provideMockStore({ initialState }), + { provide: MatSnackBar, useValue: snackBarSpy }, ], imports: [ - HyMaterialModule, - StoreModule.forRoot(provideMockStore), + MatSnackBarModule, + MatIconModule, MatTooltipModule, + NoopAnimationsModule, + StoreModule.forRoot(provideMockStore), ], }).compileComponents(); fixture = TestBed.createComponent(BulkActionMonitoringSummaryComponent); component = fixture.componentInstance; - toastService = TestBed.inject( - HyToastService - ) as jasmine.SpyObj; store = TestBed.inject(MockStore); - + snackBar = TestBed.inject(MatSnackBar) as jasmine.SpyObj; fixture.detectChanges(); }); @@ -133,10 +137,15 @@ describe("BulkActionMonitoringSummaryComponent", () => { } as BulkActionInfoSummary; spyOn(store, "dispatch"); component.onRefresh(); - expect(toastService.success).toHaveBeenCalledWith( - BULK_ACTION_LABELS.INFORMATION_UPDATED, + expect(snackBar.openFromComponent).toHaveBeenCalledWith( + CustomSnackBarComponent, { - canBeDismissed: true, + data: { + message: BULK_ACTION_LABELS.INFORMATION_UPDATED, + panelClass: "success-snack", + }, + duration: 5000, + panelClass: ["success-snack"], } ); expect(store.dispatch).toHaveBeenCalledWith( diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.ts b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.ts index 5d972381..72314b96 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/components/bulk-action-monitoring/bulk-action-monitoring-result/bulk-action-monitoring-summary/bulk-action-monitoring-summary.component.ts @@ -1,10 +1,11 @@ +import { CustomSnackBarComponent } from "./../../../../../../shared/components/custom-snack-bar/custom-snack-bar.component"; import { BULK_ACTION_LABELS } from "./../../../../bulk-action-monitoring.constants"; import { BulkActionInfoSummary } from "./../../../../bulk-action-monitoring.interface"; import { Component, Input, OnChanges } from "@angular/core"; -import { HyToastService } from "@hyland/ui"; import * as BulkActionMonitoringActions from "../../../../store/actions"; import { Store } from "@ngrx/store"; import { BulkActionMonitoringState } from "../../../../store/reducers"; +import { MatSnackBar } from "@angular/material/snack-bar"; @Component({ selector: "bulk-action-monitoring-summary", @@ -17,14 +18,23 @@ export class BulkActionMonitoringSummaryComponent implements OnChanges { statusText = ""; nonRunningText = ""; BULK_ACTION_LABELS = BULK_ACTION_LABELS; + constructor( - private toastService: HyToastService, - private store: Store<{ bulkActionMonitoring: BulkActionMonitoringState }> + private store: Store<{ bulkActionMonitoring: BulkActionMonitoringState }>, + private _snackBar: MatSnackBar ) {} + ngOnChanges(): void { if (this.bulkActionSummary) { this.replacePlaceholderValues(); } + + const refreshBtn = document.querySelector( + "#refreshResultsBtn" + ) as HTMLElement; + if (refreshBtn) { + refreshBtn.focus(); + } } replacePlaceholderValues(): void { this.statusText = BULK_ACTION_LABELS.BULK_ACTION_SUMMARY_TEXT.replace( @@ -92,9 +102,15 @@ export class BulkActionMonitoringSummaryComponent implements OnChanges { } onRefresh(): void { - this.toastService.success(BULK_ACTION_LABELS.INFORMATION_UPDATED, { - canBeDismissed: true, + this._snackBar.openFromComponent(CustomSnackBarComponent, { + data: { + message: BULK_ACTION_LABELS.INFORMATION_UPDATED, + panelClass: "success-snack", + }, + duration: 5000, + panelClass: ["success-snack"], }); + this.store.dispatch( BulkActionMonitoringActions.performBulkActionMonitor({ id: this.bulkActionSummary?.commandId, diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/store/effects.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/store/effects.spec.ts index 9af1613a..351c554b 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/store/effects.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/store/effects.spec.ts @@ -7,8 +7,7 @@ import * as BulkActionMonitoringActions from "./actions"; import { HttpErrorResponse } from "@angular/common/http"; import { BulkActionMonitoringService } from "../services/bulk-action-monitoring.service"; -// TODO: Remove this once testing is complete for different bulk action states for different action IDs -xdescribe("ElasticSearch Reindex Effects", () => { +describe("ElasticSearch Reindex Effects", () => { const bulkActionMonitoringServiceSpy = jasmine.createSpyObj( "BulkActionMonitoringService", ["performBulkActionMonitoring"] diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/store/effects.ts b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/store/effects.ts index c49af3c3..300b6a97 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/store/effects.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/bulk-action-monitoring/store/effects.ts @@ -1,4 +1,4 @@ -import { HttpClient, HttpErrorResponse } from "@angular/common/http"; +import { HttpErrorResponse } from "@angular/common/http"; import { of } from "rxjs"; import { catchError, map, switchMap } from "rxjs/operators"; import { createEffect } from "@ngrx/effects"; @@ -6,65 +6,23 @@ import { Actions, ofType } from "@ngrx/effects"; import { BulkActionMonitoringService } from "../services/bulk-action-monitoring.service"; import * as BulkActionMonitoringActions from "../store/actions"; import { inject } from "@angular/core"; -import { BulkActionMonitoringInfo } from "../bulk-action-monitoring.interface"; -import { NuxeoJSClientService } from "../../../shared/services/nuxeo-js-client.service"; - -// TODO: Remove this once testing is complete for different bulk action states for different action IDs -const jsonMap = [ - { - id: "a703f6r8-7H19-062c-120d-8ea50f1aa6c8", - filename: "/assets/bulk-state1.json", - }, - { - id: "b703q4b8-OH1f-w62c-950d-8ea30f1aa6c8", - filename: "/assets/bulk-state2.json", - }, - { - id: "c703fmb8-7I1f-062c-92ld-8ea20f1aa6c8", - filename: "/assets/bulk-state3.json", - }, - { - id: "d703f2b8-7H1f-962c-250d-8wa50f1ma6c8", - filename: "/assets/bulk-state4.json", - }, - { - id: "e723f4b8-7P1f-062J-950d-82a30f1aa6c8", - filename: "/assets/bulk-state5.json", - }, - { - id: "f723f4b8-7H1f-062c-050d-8ea50effaa6c8", - filename: "/assets/bulk-state6.json", - }, - { - id: "g703f4b8-7H1f-062c-950d-8ea50f1aa6c8", - filename: "/assets/bulk-state7.json", - }, -]; - export const loadPerformBulkActionMonitoringEffect = createEffect( ( actions$ = inject(Actions), - bulkActionMonitoringService = inject(BulkActionMonitoringService), - httpClient = inject(HttpClient), - nuxeoJsClientService = inject(NuxeoJSClientService) + bulkActionMonitoringService = inject(BulkActionMonitoringService) ) => { return actions$.pipe( ofType(BulkActionMonitoringActions.performBulkActionMonitor), switchMap((action) => { - // TODO: Remove this once testing is complete for different bulk action states for different action IDs - const isTestId = jsonMap.some((map) => action.id === map.id); - if (isTestId) { - let fileName = jsonMap.find( - (item) => item.id === action.id - )?.filename; - fileName= `${nuxeoJsClientService.getBaseUrl()}/nuxeoadmin${fileName}`; - return httpClient.get(fileName as string).pipe( + return bulkActionMonitoringService + .performBulkActionMonitoring(action?.id) + .pipe( map((data) => { return BulkActionMonitoringActions.onBulkActionMonitorLaunch({ - bulkActionMonitoringInfo: data as BulkActionMonitoringInfo, + bulkActionMonitoringInfo: data, }); }), - catchError((error) => { + catchError((error: HttpErrorResponse) => { return of( BulkActionMonitoringActions.onBulkActionMonitorFailure({ error, @@ -72,24 +30,6 @@ export const loadPerformBulkActionMonitoringEffect = createEffect( ); }) ); - } else { - return bulkActionMonitoringService - .performBulkActionMonitoring(action?.id) - .pipe( - map((data) => { - return BulkActionMonitoringActions.onBulkActionMonitorLaunch({ - bulkActionMonitoringInfo: data, - }); - }), - catchError((error: HttpErrorResponse) => { - return of( - BulkActionMonitoringActions.onBulkActionMonitorFailure({ - error, - }) - ); - }) - ); - } }) ); }, diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/fulltext-reindex/fulltext-reindex.constants.ts b/nuxeo-admin-console-web/angular-app/src/app/features/fulltext-reindex/fulltext-reindex.constants.ts new file mode 100644 index 00000000..d7098a4d --- /dev/null +++ b/nuxeo-admin-console-web/angular-app/src/app/features/fulltext-reindex/fulltext-reindex.constants.ts @@ -0,0 +1,19 @@ +export const FULLTEXT_REINDEX_LABELS = { + FOLDER_REINDEX_TITLE: "Reindex the fulltext of a document and all of its children", + DOCUMENT_REINDEX_TITLE: "Reindex the fulltext of a single document", + NXQL_QUERY_REINDEX_TITLE: "Reindex the fulltext of the documents returned by a NXQL query", + REINDEX_BUTTON_LABEL: "Reindex", + DOCUMENT_QUERY: + "ecm:path='{query}' AND ecm:mixinType = 'Downloadable' AND ecm:isProxy = 0 AND ecm:mixinType != 'HiddenInNavigation' AND ecm:isVersion = 0 AND ecm:isTrashed = 0", + FOLDER_QUERY: + "(ecm:uuid='{query}' OR ecm:ancestorId='{query}') AND ecm:mixinType = 'Downloadable' AND ecm:isProxy = 0 AND ecm:mixinType != 'HiddenInNavigation' AND ecm:isVersion = 0 AND ecm:isTrashed = 0", + NXQL_QUERY: + "(ecm:uuid='{query}' OR ecm:ancestorId='{query}') AND ecm:mixinType = 'Downloadable' AND ecm:isProxy = 0 AND ecm:mixinType != 'HiddenInNavigation' AND ecm:isVersion = 0 AND ecm:isTrashed = 0", + NXQL_QUERY_DEFAULT_VALUE: + "SELECT * FROM Document WHERE ecm:mixinType != 'HiddenInNavigation' AND ecm:isProxy = 0 AND ecm:isVersion = 0 AND ecm:isTrashed = 0 AND ecm:mixinType = 'Downloadable' AND dc:title = 'A document to reindex'", + FORCE: "force", + FORCE_TITLE: "Empty fulltext index of binaries for excluded documents", + TRUE: "True", + FALSE: "False", + FORCE_HELPER_TEXT: "Use this option if you changed your fulltext configuration to exclude additional documents. This will remove the content of the files they hold from the fulltext index." +} diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/home/components/probes-summary/probes-summary.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/features/home/components/probes-summary/probes-summary.component.spec.ts index 682f9af4..db45a5fb 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/home/components/probes-summary/probes-summary.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/home/components/probes-summary/probes-summary.component.spec.ts @@ -4,23 +4,18 @@ import { StoreModule } from '@ngrx/store'; import { ProbeDataReducer } from '../../../sub-features/probes-data/store/reducers'; import { HttpClientTestingModule } from '@angular/common/http/testing'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { HyContentListModule } from '@hyland/ui/content-list'; -import { MatTooltipModule } from '@angular/material/tooltip'; import { MatCardModule } from '@angular/material/card'; import { CommonModule } from '@angular/common'; import { By } from '@angular/platform-browser'; import { ProbesDataComponent } from '../../../sub-features/probes-data/components/probes-data.component'; -import { HyToastService } from '@hyland/ui'; +import { MatSnackBarModule } from '@angular/material/snack-bar'; +import { MatTableModule } from '@angular/material/table'; describe('ProbesSummaryComponent', () => { let component: ProbesSummaryComponent; let fixture: ComponentFixture; beforeEach(async () => { - const toastServiceSpy = jasmine.createSpyObj("HyToastService", [ - "success", - "error", - ]); await TestBed.configureTestingModule({ declarations: [ProbesSummaryComponent, ProbesDataComponent], imports: [ @@ -28,11 +23,10 @@ describe('ProbesSummaryComponent', () => { HttpClientTestingModule, CommonModule, MatCardModule, - HyContentListModule, - MatTooltipModule, + MatSnackBarModule, + MatTableModule, BrowserAnimationsModule, ], - providers: [{ provide: HyToastService, useValue: toastServiceSpy }], }).compileComponents(); fixture = TestBed.createComponent(ProbesSummaryComponent); diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/home/components/registration-version/registration-version.component.scss b/nuxeo-admin-console-web/angular-app/src/app/features/home/components/registration-version/registration-version.component.scss index 88f3c1de..7097864a 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/home/components/registration-version/registration-version.component.scss +++ b/nuxeo-admin-console-web/angular-app/src/app/features/home/components/registration-version/registration-version.component.scss @@ -1,5 +1,12 @@ .registration-version { height: 100%; + &.mdc-card { + border-radius: 12px; + padding: 24px; + background: white; + border: 1px solid #d1d5db; + box-shadow: none; + } } .registration-version__button { diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/home/home.module.ts b/nuxeo-admin-console-web/angular-app/src/app/features/home/home.module.ts index 9dcb721a..a6aa9422 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/home/home.module.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/home/home.module.ts @@ -7,8 +7,6 @@ import { HomeComponent } from "./components/home.component"; import { ProbesSummaryComponent } from "./components/probes-summary/probes-summary.component"; import { RegistrationVersionComponent } from "./components/registration-version/registration-version.component"; import { HomeRoutingModule } from "./home-routing.module"; -import { HyContentListModule } from "@hyland/ui/content-list"; -import { MatTooltipModule } from "@angular/material/tooltip"; import { ProbesDataModule } from "../sub-features/probes-data/probes-data.module"; @NgModule({ @@ -22,9 +20,7 @@ import { ProbesDataModule } from "../sub-features/probes-data/probes-data.module MatCardModule, MatButtonModule, HomeRoutingModule, - HyContentListModule, MatProgressSpinnerModule, - MatTooltipModule, ProbesDataModule, ], }) diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/probes/probes.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/features/probes/probes.component.spec.ts index aeb4f686..4961426b 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/probes/probes.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/probes/probes.component.spec.ts @@ -4,23 +4,18 @@ import { StoreModule } from "@ngrx/store"; import { ProbeDataReducer } from "../sub-features/probes-data/store/reducers"; import { HttpClientTestingModule } from "@angular/common/http/testing"; import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; -import { HyContentListModule } from "@hyland/ui/content-list"; -import { MatTooltipModule } from "@angular/material/tooltip"; import { MatCardModule } from "@angular/material/card"; import { CommonModule } from "@angular/common"; import { By } from "@angular/platform-browser"; import { ProbesDataComponent } from "../sub-features/probes-data/components/probes-data.component"; -import { HyToastService } from "@hyland/ui"; +import { MatSnackBarModule } from "@angular/material/snack-bar"; +import { MatTableModule } from "@angular/material/table"; describe("ProbesComponent", () => { let component: ProbesComponent; let fixture: ComponentFixture; beforeEach(async () => { - const toastServiceSpy = jasmine.createSpyObj("HyToastService", [ - "success", - "error", - ]); await TestBed.configureTestingModule({ declarations: [ProbesComponent, ProbesDataComponent], imports: [ @@ -28,11 +23,10 @@ describe("ProbesComponent", () => { HttpClientTestingModule, CommonModule, MatCardModule, - HyContentListModule, - MatTooltipModule, + MatSnackBarModule, + MatTableModule, BrowserAnimationsModule, ], - providers: [{ provide: HyToastService, useValue: toastServiceSpy }], }).compileComponents(); fixture = TestBed.createComponent(ProbesComponent); diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/probes/probes.module.ts b/nuxeo-admin-console-web/angular-app/src/app/features/probes/probes.module.ts index 174ebdc7..9958ffae 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/probes/probes.module.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/probes/probes.module.ts @@ -4,8 +4,6 @@ import { MatCardModule } from "@angular/material/card"; import { MatButtonModule } from "@angular/material/button"; import { ProbesComponent } from "./probes.component"; import { ProbesRoutingModule } from "./probes-routing-module"; -import { HyContentListModule } from "@hyland/ui/content-list"; -import { MatTooltipModule } from "@angular/material/tooltip"; import { ProbesDataModule } from "../sub-features/probes-data/probes-data.module"; @NgModule({ @@ -15,8 +13,6 @@ import { ProbesDataModule } from "../sub-features/probes-data/probes-data.module MatCardModule, MatButtonModule, ProbesRoutingModule, - HyContentListModule, - MatTooltipModule, ProbesDataModule ], exports: [ diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.html b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.html index 0432cfd9..7b04a547 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.html +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.html @@ -1,31 +1,50 @@ -

{{ GENERIC_LABELS.REQUIRED_FIELD_INDICATOR }}

- - {{ GENERIC_LABELS.DOCUMENT_ID_OR_PATH }} + [ngClass]="{'vertical-flex': isFeatureVideoRenditions() || isFeatureFullTextReindex()}"> +

{{ GENERIC_LABELS.REQUIRED_FIELD_INDICATOR }}

+

{{ GENERIC_LABELS.DOCUMENT_ID_OR_PATH }}*

+ - {{getErrorMessage()}} + {{ getErrorMessage() }} + + - - {{VIDEO_RENDITIONS_LABELS.CONVERSION_NAMES}} +

{{ VIDEO_RENDITIONS_LABELS.CONVERSION_NAMES }}

+ -

{{VIDEO_RENDITIONS_LABELS.CONVERSION_NAMES_HELPER_TEXT}}

- - {{VIDEO_RENDITIONS_LABELS.RECOMPUTE_VIDEO_INFO}} - +

{{ VIDEO_RENDITIONS_LABELS.CONVERSION_NAMES_HELPER_TEXT }}

+

{{ VIDEO_RENDITIONS_LABELS.RECOMPUTE_VIDEO_INFO }}

+ + + {{ VIDEO_RENDITIONS_LABELS.RECOMPUTE_MISSING_ONLY }} + {{ VIDEO_RENDITIONS_LABELS.RECOMPUTE_ALL }} +
+ +
+ + + {{ FULLTEXT_REINDEX_LABELS.FORCE_TITLE }} +
+

{{ FULLTEXT_REINDEX_LABELS.FORCE_HELPER_TEXT }}

+
\ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.scss b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.scss index 5c7b2343..8521aa43 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.scss +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.scss @@ -1,15 +1,27 @@ .document-tab-container { padding: 10px 0px 0px 10px; + .required-indicator { + color: rgb(218, 21, 0); + font-family: "Open Sans", sans-serif; + padding-left: 2px; + } &.vertical-flex { display: flex; flex-direction: column; align-items: stretch; } #requiredField { - font-size: 12px; - color: #da1500; - font-weight: 400; + font-size: 14px; + color: rgb(218, 21, 0); font-family: "Open Sans"; + line-height: 1; + } + .label { + line-height: 1; + margin: 5px; + font-size: 14px; + font-weight: 400; + font-family: "Open Sans", sans-serif; } &__button { border-radius: 4px !important; @@ -18,22 +30,40 @@ position: relative; left: 20px; font-size: 16px; - bottom: 3px; + bottom: 4px; + font-family: "Open Sans", sans-serif; + font-weight: 550; + letter-spacing: normal; + background-color: #0a60ce !important; + color: #fff; &.video-renditions { left: 0; bottom: 0; } - } - mat-form-field.hy-form-field { - margin-top: 10px; - max-width: 350px; - width: 80%; - &.video-renditions { - margin-top: 30px; + &.fulltext-reindex { + left: 0; + bottom: 0; } } .conversion-helper-text { font-size: 14px; margin-top: -15px; + color: #666666; + } + .force-checkbox-container { + display: flex; + align-items: center; + margin: 0 0 10px; + } + + .force-conversion-helper-text { + max-width: 600px; + white-space: normal; + word-wrap: break-word; + font-size: 13px; + margin-top: -15px; + color: #666666; } + + } diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.spec.ts index db5fea0d..775b718e 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.spec.ts @@ -4,11 +4,6 @@ import { MatTabsModule } from "@angular/material/tabs"; import { MatButtonModule } from "@angular/material/button"; import { MatInputModule } from "@angular/material/input"; import { MatFormFieldModule } from "@angular/material/form-field"; -import { - HyFormContainerModule, - HyMaterialModule, - HyMaterialTabsModule, -} from "@hyland/ui"; import { MatDialog, MatDialogRef, @@ -35,6 +30,7 @@ import { ErrorModalComponent } from "../error-modal/error-modal.component"; import { featureMap, FEATURES } from "../../generic-multi-feature-layout.mapping"; import { PICTURE_RENDITIONS_LABELS } from "../../../../pictures/pictures-renditions.constants"; import { THUMBNAIL_GENERATION_LABELS } from "../../../../thumbnail-generation/thumbnail-generation.constants"; +import { FULLTEXT_REINDEX_LABELS } from "../../../../fulltext-reindex/fulltext-reindex.constants"; describe("DocumentTabComponent", () => { let component: DocumentTabComponent; @@ -83,8 +79,9 @@ describe("DocumentTabComponent", () => { }, error: null, }; - mockDialogRef = jasmine.createSpyObj("MatDialogRef", ["afterClosed"]); + mockDialogRef = jasmine.createSpyObj("MatDialogRef", ["afterClosed", "afterOpened"]); mockDialogRef.afterClosed.and.returnValue(of({})); + mockDialogRef.afterOpened.and.returnValue(of()); dialogService = jasmine.createSpyObj("MatDialog", ["open"]); dialogService.open.and.returnValue(mockDialogRef); @@ -94,13 +91,10 @@ describe("DocumentTabComponent", () => { BrowserAnimationsModule, CommonModule, MatTabsModule, - HyMaterialModule, - HyFormContainerModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule, - HyMaterialTabsModule, MatDialogModule, StoreModule.forRoot(provideMockStore), ], @@ -156,6 +150,7 @@ describe("DocumentTabComponent", () => { expect(showActionLaunchedModalSpy).toHaveBeenCalledWith(commandId); expect(dialogService.open).toHaveBeenCalledWith(GenericModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -284,6 +279,7 @@ describe("DocumentTabComponent", () => { expect(dialogService.open).toHaveBeenCalledWith(ErrorModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -308,8 +304,14 @@ describe("DocumentTabComponent", () => { const result = featureMap()[FEATURES.THUMBNAIL_GENERATION](GENERIC_LABELS.DOCUMENT); expect(result.labels.pageTitle).toBe(THUMBNAIL_GENERATION_LABELS.DOCUMENT_THUMBNAIL_GENERATION_TITLE); expect(result.labels.submitBtnLabel).toBe(THUMBNAIL_GENERATION_LABELS.THUMBNAIL_GENERATION_BUTTON_LABEL); - expect(result.data.bodyParam.query).toBe(THUMBNAIL_GENERATION_LABELS.DOCUMENT_QUERY); }); }); + describe('FEATURES.FULLTEXT_REINDEX', () => { + it('should return correct labels and data for DOCUMENT tabType', () => { + const result = featureMap()[FEATURES.FULLTEXT_REINDEX](GENERIC_LABELS.DOCUMENT); + expect(result.labels.pageTitle).toBe(FULLTEXT_REINDEX_LABELS.DOCUMENT_REINDEX_TITLE); + expect(result.labels.submitBtnLabel).toBe(FULLTEXT_REINDEX_LABELS.REINDEX_BUTTON_LABEL); + }); + }); }); \ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.ts index 0748686b..a1c693d4 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/document-tab/document-tab.component.ts @@ -1,4 +1,5 @@ import { VIDEO_RENDITIONS_LABELS } from "./../../../../video-renditions-generation/video-renditions-generation.constants"; +import { FULLTEXT_REINDEX_LABELS } from "src/app/features/fulltext-reindex/fulltext-reindex.constants"; import { REST_END_POINTS } from "./../../../../../shared/constants/rest-end-ponts.constants"; import { GenericMultiFeatureUtilitiesService } from "./../../services/generic-multi-feature-utilities.service"; import { NuxeoJSClientService } from "./../../../../../shared/services/nuxeo-js-client.service"; @@ -54,9 +55,10 @@ export class DocumentTabComponent implements OnInit, OnDestroy { documentActionLaunchedSubscription = new Subscription(); documentActionErrorSubscription = new Subscription(); actionDialogClosedSubscription = new Subscription(); - confirmDialogClosedSubscription = new Subscription(); launchedDialogClosedSubscription = new Subscription(); errorDialogClosedSubscription = new Subscription(); + launchedDialogOpenedSubscription = new Subscription(); + errorDialogOpenedSubscription = new Subscription(); launchedDialogRef: MatDialogRef< GenericModalComponent, GenericModalClosedInfo @@ -72,6 +74,7 @@ export class DocumentTabComponent implements OnInit, OnDestroy { activeFeature: FeaturesKey = {} as FeaturesKey; requestQuery = ""; VIDEO_RENDITIONS_LABELS = VIDEO_RENDITIONS_LABELS; + FULLTEXT_REINDEX_LABELS = FULLTEXT_REINDEX_LABELS; FEATURES = FEATURES; constructor( public dialogService: MatDialog, @@ -82,6 +85,7 @@ export class DocumentTabComponent implements OnInit, OnDestroy { ) { this.inputForm = this.fb.group({ inputIdentifier: ["", Validators.required], + force: [false], }); this.nuxeo = this.nuxeoJSClientService.getNuxeoInstance(); this.documentActionLaunched$ = this.store.pipe( @@ -113,7 +117,13 @@ export class DocumentTabComponent implements OnInit, OnDestroy { ); this.inputForm.addControl( VIDEO_RENDITIONS_LABELS.RECOMPUTE_ALL_VIDEO_INFO_KEY, - new FormControl("true") + new FormControl("false") + ); + } + if (this.isFeatureFullTextReindex()) { + this.inputForm.addControl( + FULLTEXT_REINDEX_LABELS.FORCE, + new FormControl("false") ); } } @@ -140,6 +150,7 @@ export class DocumentTabComponent implements OnInit, OnDestroy { showActionErrorModal(error: ErrorDetails): void { this.errorDialogRef = this.dialogService.open(ErrorModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -151,6 +162,17 @@ export class DocumentTabComponent implements OnInit, OnDestroy { ?.subscribe(() => { this.onActionErrorModalClose(); }); + + this.errorDialogOpenedSubscription = this.errorDialogRef + .afterOpened() + .subscribe(() => { + const dialogElement = document.querySelector( + ".cdk-dialog-container" + ) as HTMLElement; + if (dialogElement) { + dialogElement.focus(); + } + }); } onActionErrorModalClose(): void { @@ -161,6 +183,7 @@ export class DocumentTabComponent implements OnInit, OnDestroy { showActionLaunchedModal(commandId: string | null): void { this.launchedDialogRef = this.dialogService.open(GenericModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -176,14 +199,29 @@ export class DocumentTabComponent implements OnInit, OnDestroy { .subscribe(() => { this.onActionLaunchedModalClose(); }); + + this.launchedDialogOpenedSubscription = this.launchedDialogRef + .afterOpened() + .subscribe(() => { + const dialogElement = document.querySelector( + ".cdk-dialog-container" + ) as HTMLElement; + if (dialogElement) { + dialogElement.focus(); + } + }); } onActionLaunchedModalClose(): void { this.isSubmitBtnDisabled = false; - this.inputForm?.get('inputIdentifier')?.reset(); + this.inputForm?.get("inputIdentifier")?.reset(); if (this.isFeatureVideoRenditions()) { - this.inputForm?.get('conversionNames')?.reset(); + this.inputForm?.get("conversionNames")?.reset(); + } + if (this.isFeatureFullTextReindex()) { + this.inputForm?.get("force")?.reset(); } + document.getElementById("inputIdentifier")?.focus(); } @@ -294,6 +332,13 @@ export class DocumentTabComponent implements OnInit, OnDestroy { ); } + isFeatureFullTextReindex(): boolean { + return ( + this.activeFeature === + (FEATURES.FULLTEXT_REINDEX as FeaturesKey) + ); + } + ngOnDestroy(): void { this.store.dispatch(FeatureActions.resetDocumentActionState()); this.documentActionLaunchedSubscription?.unsubscribe(); @@ -301,5 +346,7 @@ export class DocumentTabComponent implements OnInit, OnDestroy { this.actionDialogClosedSubscription?.unsubscribe(); this.launchedDialogClosedSubscription?.unsubscribe(); this.errorDialogClosedSubscription?.unsubscribe(); + this.launchedDialogOpenedSubscription?.unsubscribe(); + this.errorDialogOpenedSubscription?.unsubscribe(); } -} +} \ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component.html b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component.html index 4dd9f182..0bbed1aa 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component.html +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component.html @@ -1,26 +1,18 @@ - - - - {{ ERROR_MODAL_LABELS.ERROR_MODAL_TITLE }} - - - - -
-

{{ERROR_MODAL_LABELS.ERROR_SUBHEADING}}

-

{{ERROR_MODAL_LABELS.ERROR_STATUS}} {{data.error.details.status}}

-

{{ERROR_MODAL_LABELS.ERROR_DETAILS}} {{data.error.details.message}}

-
- -

{{getCustomErrorMessage()}}

-
-
- - - - - - -
\ No newline at end of file +

{{ ERROR_MODAL_LABELS.ERROR_MODAL_TITLE }}

+
+ +
+

{{ERROR_MODAL_LABELS.ERROR_SUBHEADING}}

+

{{ERROR_MODAL_LABELS.ERROR_STATUS}} {{data.error.details.status}}

+

{{ERROR_MODAL_LABELS.ERROR_DETAILS}} {{data.error.details.message}}

+
+ +

{{getCustomErrorMessage()}}

+
+
+
+ + + \ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component.scss b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component.scss index 2f83a285..9b6fbd6f 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component.scss +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component.scss @@ -1,3 +1,3 @@ -:host ::ng-deep hy-dialog-box-title .mat-title { - font-weight: 300; -} +.separator { + margin-top: 1.5rem; +} \ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component.spec.ts index 9da110ce..c8c465cd 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/error-modal/error-modal.component.spec.ts @@ -1,6 +1,5 @@ import { ErrorModalComponent } from '../error-modal/error-modal.component'; -import { HyDialogBoxModule } from "@hyland/ui"; -import { MatDialogRef } from "@angular/material/dialog"; +import { MatDialogModule, MatDialogRef } from "@angular/material/dialog"; import { ComponentFixture, TestBed } from "@angular/core/testing"; import { MAT_DIALOG_DATA } from "@angular/material/dialog"; import { CommonModule } from "@angular/common"; @@ -44,7 +43,7 @@ describe("ErrorModalComponent", () => { const dialogRefSpy = jasmine.createSpyObj("MatDialogRef", ["close"]); TestBed.configureTestingModule({ declarations: [ErrorModalComponent], - imports: [CommonModule, HyDialogBoxModule], + imports: [CommonModule, MatDialogModule], providers: [ { provide: MatDialogRef, useValue: dialogRefSpy }, { provide: MAT_DIALOG_DATA, useValue: {} }, diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.html b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.html index 660373d7..6d595962 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.html +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.html @@ -1,9 +1,9 @@
+[ngClass]="{'vertical-flex': isFeatureVideoRenditions() || isFeatureFullTextReindex()}">

{{ GENERIC_LABELS.REQUIRED_FIELD_INDICATOR }}

- - {{ isIdAndPathRequired(activeFeature) ? GENERIC_LABELS.DOCUMENT_ID_OR_PATH : - GENERIC_LABELS.DOCUMENT_ID }} +

{{ isIdAndPathRequired(activeFeature) ? GENERIC_LABELS.DOCUMENT_ID_OR_PATH : + GENERIC_LABELS.DOCUMENT_ID }}*

+ @@ -13,23 +13,40 @@ - - {{VIDEO_RENDITIONS_LABELS.CONVERSION_NAMES}} +

{{VIDEO_RENDITIONS_LABELS.CONVERSION_NAMES}}

+

{{VIDEO_RENDITIONS_LABELS.CONVERSION_NAMES_HELPER_TEXT}}

- - {{VIDEO_RENDITIONS_LABELS.RECOMPUTE_VIDEO_INFO}} - +

{{VIDEO_RENDITIONS_LABELS.RECOMPUTE_VIDEO_INFO}}

+ + + {{VIDEO_RENDITIONS_LABELS.RECOMPUTE_MISSING_ONLY}} + {{VIDEO_RENDITIONS_LABELS.RECOMPUTE_ALL}} +
+ +
+ + + {{ FULLTEXT_REINDEX_LABELS.FORCE_TITLE }} +
+

{{ FULLTEXT_REINDEX_LABELS.FORCE_HELPER_TEXT }}

+
diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.scss b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.scss index 4dc47963..193a25a3 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.scss +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.scss @@ -1,15 +1,27 @@ .folder-tab-container { padding: 10px 0px 0px 10px; + .required-indicator { + color: rgb(218, 21, 0); + font-family: "Open Sans", sans-serif; + padding-left: 2px; + } &.vertical-flex { display: flex; flex-direction: column; align-items: stretch; } #requiredField { - font-size: 12px; - color: #da1500; - font-weight: 400; + font-size: 14px; + color: rgb(218, 21, 0); font-family: "Open Sans"; + line-height: 1; + } + .label { + line-height: 1; + margin: 5px; + font-size: 14px; + font-weight: 400; + font-family: "Open Sans", sans-serif; } &__button { border-radius: 4px !important; @@ -18,7 +30,11 @@ position: relative; left: 20px; font-size: 16px; - bottom: 3px; + bottom: 4px; + font-weight: 550; + letter-spacing: normal; + background-color: #0a60ce !important; + color: #fff; &.video-renditions { left: 0; bottom: 0; @@ -45,16 +61,27 @@ stroke-width: 5px !important; } -mat-form-field.hy-form-field { - margin-top: 10px; - max-width: 350px; - width: 80%; - &.video-renditions { - margin-top: 30px; - } +.conversion-helper-text { + font-size: 14px; + margin-top: -15px; + color: #666666; } .conversion-helper-text { font-size: 14px; margin-top: -15px; } +.force-checkbox-container { + display: flex; + align-items: center; + margin: 0 0 10px; +} + +.force-conversion-helper-text { + max-width: 600px; /* Adjust as needed */ + white-space: normal; + word-wrap: break-word; + font-size: 13px; + margin-top: -15px; + color: #666666; +} \ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.spec.ts index 21aa7405..06d655e6 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.spec.ts @@ -6,11 +6,6 @@ import { MatProgressSpinnerModule } from "@angular/material/progress-spinner"; import { MatButtonModule } from "@angular/material/button"; import { MatInputModule } from "@angular/material/input"; import { MatFormFieldModule } from "@angular/material/form-field"; -import { - HyFormContainerModule, - HyMaterialModule, - HyMaterialTabsModule, -} from "@hyland/ui"; import { MatDialog, MatDialogRef, @@ -37,6 +32,7 @@ import { ErrorModalComponent } from "../error-modal/error-modal.component"; import { featureMap, FEATURES } from "../../generic-multi-feature-layout.mapping"; import { PICTURE_RENDITIONS_LABELS } from "../../../../pictures/pictures-renditions.constants"; import { THUMBNAIL_GENERATION_LABELS } from "../../../../thumbnail-generation/thumbnail-generation.constants"; +import { FULLTEXT_REINDEX_LABELS } from "../../../../fulltext-reindex/fulltext-reindex.constants"; describe("FolderTabComponent", () => { let component: FolderTabComponent; @@ -78,9 +74,9 @@ describe("FolderTabComponent", () => { }, error: null, }; - mockDialogRef = jasmine.createSpyObj("MatDialogRef", ["afterClosed"]); + mockDialogRef = jasmine.createSpyObj("MatDialogRef", ["afterClosed", "afterOpened"]); mockDialogRef.afterClosed.and.returnValue(of({})); - + mockDialogRef.afterOpened.and.returnValue(of()); dialogService = jasmine.createSpyObj("MatDialog", ["open"]); dialogService.open.and.returnValue(mockDialogRef); await TestBed.configureTestingModule({ @@ -89,13 +85,10 @@ describe("FolderTabComponent", () => { BrowserAnimationsModule, CommonModule, MatTabsModule, - HyMaterialModule, - HyFormContainerModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule, - HyMaterialTabsModule, MatProgressSpinnerModule, MatDialogModule, StoreModule.forRoot(provideMockStore), @@ -155,6 +148,7 @@ describe("FolderTabComponent", () => { expect(dialogService.open).toHaveBeenCalledWith(ErrorModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -191,6 +185,7 @@ describe("FolderTabComponent", () => { expect(showActionLaunchedModalSpy).toHaveBeenCalledWith(commandId); expect(dialogService.open).toHaveBeenCalledWith(GenericModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -258,6 +253,7 @@ describe("FolderTabComponent", () => { component.showConfirmationModal(2); expect(dialogService.open).toHaveBeenCalledWith(GenericModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -300,7 +296,14 @@ describe("FolderTabComponent", () => { const result = featureMap()[FEATURES.THUMBNAIL_GENERATION](GENERIC_LABELS.FOLDER); expect(result.labels.pageTitle).toBe(THUMBNAIL_GENERATION_LABELS.FOLDER_THUMBNAIL_GENERATION_TITLE); expect(result.labels.submitBtnLabel).toBe(THUMBNAIL_GENERATION_LABELS.THUMBNAIL_GENERATION_BUTTON_LABEL); - expect(result.data.bodyParam.query).toBe(THUMBNAIL_GENERATION_LABELS.FOLDER_QUERY); + }); + }); + + describe('FEATURES.FULLTEXT_REINDEX', () => { + it('should return correct labels and data for FOLDER tabType', () => { + const result = featureMap()[FEATURES.FULLTEXT_REINDEX](GENERIC_LABELS.FOLDER); + expect(result.labels.pageTitle).toBe(FULLTEXT_REINDEX_LABELS.FOLDER_REINDEX_TITLE); + expect(result.labels.submitBtnLabel).toBe(FULLTEXT_REINDEX_LABELS.REINDEX_BUTTON_LABEL); }); }); }); \ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.ts index 7ab9e0ca..0ceb7be2 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/folder-tab/folder-tab.component.ts @@ -1,9 +1,15 @@ import { VIDEO_RENDITIONS_LABELS } from "./../../../../video-renditions-generation/video-renditions-generation.constants"; +import { FULLTEXT_REINDEX_LABELS } from "src/app/features/fulltext-reindex/fulltext-reindex.constants"; import { REST_END_POINTS } from "./../../../../../shared/constants/rest-end-ponts.constants"; import { MatDialog } from "@angular/material/dialog"; import { MatDialogRef } from "@angular/material/dialog"; import { Component, OnDestroy, OnInit } from "@angular/core"; -import { FormBuilder, FormControl, FormGroup, Validators } from "@angular/forms"; +import { + FormBuilder, + FormControl, + FormGroup, + Validators, +} from "@angular/forms"; import { Store, select } from "@ngrx/store"; import { Observable, Subscription } from "rxjs"; import { HttpErrorResponse } from "@angular/common/http"; @@ -56,6 +62,9 @@ export class FolderTabComponent implements OnInit, OnDestroy { confirmDialogClosedSubscription = new Subscription(); launchedDialogClosedSubscription = new Subscription(); errorDialogClosedSubscription = new Subscription(); + confirmDialogOpenedSubscription = new Subscription(); + launchedDialogOpenedSubscription = new Subscription(); + errorDialogOpenedSubscription = new Subscription(); launchedDialogRef: MatDialogRef< GenericModalComponent, GenericModalClosedInfo @@ -68,6 +77,7 @@ export class FolderTabComponent implements OnInit, OnDestroy { > = {} as MatDialogRef; GENERIC_LABELS = GENERIC_LABELS; VIDEO_RENDITIONS_LABELS = VIDEO_RENDITIONS_LABELS; + FULLTEXT_REINDEX_LABELS = FULLTEXT_REINDEX_LABELS nuxeo: Nuxeo; isSubmitBtnDisabled = false; templateConfigData: FeatureData = {} as FeatureData; @@ -84,6 +94,7 @@ export class FolderTabComponent implements OnInit, OnDestroy { ) { this.inputForm = this.fb.group({ inputIdentifier: ["", Validators.required], + force: [false], }); this.nuxeo = this.nuxeoJSClientService.getNuxeoInstance(); this.folderActionLaunched$ = this.store.pipe( @@ -115,7 +126,12 @@ export class FolderTabComponent implements OnInit, OnDestroy { this.templateLabels.pageTitle ); } - + if(this.isFeatureFullTextReindex()) { + this.inputForm.addControl( + FULLTEXT_REINDEX_LABELS.FORCE, + new FormControl("false") + ); + } if (this.isFeatureVideoRenditions()) { this.inputForm.addControl( VIDEO_RENDITIONS_LABELS.CONVERSION_NAME_KEY, @@ -123,10 +139,12 @@ export class FolderTabComponent implements OnInit, OnDestroy { ); this.inputForm.addControl( VIDEO_RENDITIONS_LABELS.RECOMPUTE_ALL_VIDEO_INFO_KEY, - new FormControl("true") + new FormControl("false") ); } + + this.folderActionLaunchedSubscription = this.folderActionLaunched$.subscribe((data) => { if (data?.commandId) { @@ -150,6 +168,7 @@ export class FolderTabComponent implements OnInit, OnDestroy { this.genericMultiFeatureUtilitiesService.spinnerStatus.next(false); this.errorDialogRef = this.dialogService.open(ErrorModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -162,6 +181,17 @@ export class FolderTabComponent implements OnInit, OnDestroy { ?.subscribe(() => { this.onActionErrorModalClose(); }); + + this.errorDialogOpenedSubscription = this.errorDialogRef + .afterOpened() + .subscribe(() => { + const dialogElement = document.querySelector( + ".cdk-dialog-container" + ) as HTMLElement; + if (dialogElement) { + dialogElement.focus(); + } + }); } onActionErrorModalClose(): void { @@ -173,6 +203,7 @@ export class FolderTabComponent implements OnInit, OnDestroy { showActionLaunchedModal(commandId: string | null): void { this.launchedDialogRef = this.dialogService.open(GenericModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -188,13 +219,24 @@ export class FolderTabComponent implements OnInit, OnDestroy { .subscribe(() => { this.onActionLaunchedModalClose(); }); + + this.launchedDialogOpenedSubscription = this.launchedDialogRef + .afterOpened() + .subscribe(() => { + const dialogElement = document.querySelector( + ".cdk-dialog-container" + ) as HTMLElement; + if (dialogElement) { + dialogElement.focus(); + } + }); } onActionLaunchedModalClose(): void { this.isSubmitBtnDisabled = false; - this.inputForm?.get('inputIdentifier')?.reset(); + this.inputForm?.get("inputIdentifier")?.reset(); if (this.isFeatureVideoRenditions()) { - this.inputForm?.get('conversionNames')?.reset(); + this.inputForm?.get("conversionNames")?.reset(); } document.getElementById("inputIdentifier")?.focus(); } @@ -349,6 +391,7 @@ export class FolderTabComponent implements OnInit, OnDestroy { showConfirmationModal(documentCount: number): void { this.confirmDialogRef = this.dialogService.open(GenericModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -367,6 +410,17 @@ export class FolderTabComponent implements OnInit, OnDestroy { .subscribe((data) => { this.onConfirmationModalClose(data); }); + + this.confirmDialogOpenedSubscription = this.confirmDialogRef + .afterOpened() + .subscribe(() => { + const dialogElement = document.querySelector( + ".cdk-dialog-container" + ) as HTMLElement; + if (dialogElement) { + dialogElement.focus(); + } + }); } onConfirmationModalClose(modalData: unknown): void { @@ -412,6 +466,13 @@ export class FolderTabComponent implements OnInit, OnDestroy { ); } + isFeatureFullTextReindex(): boolean { + return ( + this.activeFeature === + (FEATURES.FULLTEXT_REINDEX as FeaturesKey) + ); + } + ngOnDestroy(): void { this.store.dispatch(FeatureActions.resetFolderActionState()); this.folderActionLaunchedSubscription?.unsubscribe(); @@ -420,5 +481,8 @@ export class FolderTabComponent implements OnInit, OnDestroy { this.launchedDialogClosedSubscription?.unsubscribe(); this.errorDialogClosedSubscription?.unsubscribe(); this.spinnerStatusSubscription?.unsubscribe(); + this.confirmDialogOpenedSubscription?.unsubscribe(); + this.launchedDialogOpenedSubscription?.unsubscribe(); + this.errorDialogOpenedSubscription?.unsubscribe(); } } diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/generic-modal/generic-modal.component.html b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/generic-modal/generic-modal.component.html index c3bab3ae..487c4366 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/generic-modal/generic-modal.component.html +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/generic-modal/generic-modal.component.html @@ -1,54 +1,49 @@ - - - - {{ data.title }} - - - - -
-
-

- {{ GENERIC_LABELS.IMPACT_MESSAGE }} -

-

This action will impact {{data.documentCount}} - {{data.documentCount === 1 ? 'document' : 'documents'}} - and could take approximately {{data.timeTakenForAction}}. {{ GENERIC_LABELS.CONTINUE_CONFIRMATION }} -

+

{{ data.title }}

+
+ +
+
+

+ {{ GENERIC_LABELS.IMPACT_MESSAGE }} +

+

This action will impact {{data.documentCount}} + {{data.documentCount === 1 ? 'document' : 'documents'}} + and could take approximately {{data.timeTakenForAction}}. {{ GENERIC_LABELS.CONTINUE_CONFIRMATION }} +

+
+
+ +

{{ data.launchedMessage }}

+
+
+ +
+
+
+
- -

{{ data.launchedMessage }}

-
-
- -
-
- -
-
-
- - -
- - -
+
+
+ +
+ + +
- - - - - \ No newline at end of file + + + +
\ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/generic-modal/generic-modal.component.scss b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/generic-modal/generic-modal.component.scss index 43cc1b35..6984ea3c 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/generic-modal/generic-modal.component.scss +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/generic-modal/generic-modal.component.scss @@ -1,19 +1,10 @@ -:host ::ng-deep hy-dialog-box-title .mat-title { - font-weight: 300; -} - #action-buttons-container { display: flex; - gap: 15px; - margin-top: 20px; + gap: 15px; + margin-top: 20px; } .action-button-group { display: flex; - align-items: center; -} - -.hy-dialog-box__button-group { - display: flex; - gap: 10px; + align-items: center; } \ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/generic-modal/generic-modal.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/generic-modal/generic-modal.component.spec.ts index d0bb52c3..ecb4eee9 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/generic-modal/generic-modal.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/generic-modal/generic-modal.component.spec.ts @@ -2,8 +2,7 @@ import { GenericModalComponent } from './generic-modal.component'; import { GENERIC_LABELS } from './../../generic-multi-feature-layout.constants'; import { GenericModalData } from './../../generic-multi-feature-layout.interface'; import { CommonService } from './../../../../../shared/services/common.service'; -import { HyDialogBoxModule } from "@hyland/ui"; -import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material/dialog"; +import { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from "@angular/material/dialog"; import { ComponentFixture, ComponentFixtureAutoDetect, @@ -53,7 +52,7 @@ describe("GenericModalComponent", () => { declarations: [GenericModalComponent], imports: [ CommonModule, - HyDialogBoxModule, + MatDialogModule, StoreModule.forRoot(provideMockStore), ], providers: [ diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.html b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.html index 2cc180e1..e228a88c 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.html +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.html @@ -1,7 +1,8 @@ - +

{{ GENERIC_LABELS.REQUIRED_FIELD_INDICATOR }}

- - {{ GENERIC_LABELS.NXQL_QUERY }} +

{{ GENERIC_LABELS.NXQL_QUERY }}*

+ @@ -9,23 +10,40 @@ - - {{VIDEO_RENDITIONS_LABELS.CONVERSION_NAMES}} +

{{VIDEO_RENDITIONS_LABELS.CONVERSION_NAMES}}

+

{{VIDEO_RENDITIONS_LABELS.CONVERSION_NAMES_HELPER_TEXT}}

- - {{VIDEO_RENDITIONS_LABELS.RECOMPUTE_VIDEO_INFO}} - +

{{VIDEO_RENDITIONS_LABELS.RECOMPUTE_VIDEO_INFO}}

+ + + {{VIDEO_RENDITIONS_LABELS.RECOMPUTE_MISSING_ONLY}} + {{VIDEO_RENDITIONS_LABELS.RECOMPUTE_ALL}} +
+ +
+ + + {{ FULLTEXT_REINDEX_LABELS.FORCE_TITLE }} +
+

{{ FULLTEXT_REINDEX_LABELS.FORCE_HELPER_TEXT }}

+
diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.scss b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.scss index 7ba9c669..91211a4b 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.scss +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.scss @@ -1,10 +1,22 @@ .nxql-tab-container { padding: 10px 0px 0px 10px; + .required-indicator { + color: rgb(218, 21, 0); + font-family: "Open Sans", sans-serif; + padding-left: 2px; + } #requiredField { - font-size: 12px; - color: #da1500; - font-weight: 400; + font-size: 14px; + color: rgb(218, 21, 0); font-family: "Open Sans"; + line-height: 1; + } + .label { + line-height: 1; + margin: 5px; + font-size: 14px; + font-weight: 400; + font-family: "Open Sans", sans-serif; } &.vertical-flex { display: flex; @@ -18,9 +30,15 @@ position: relative; left: 20px; font-size: 16px; + top: -20px; + background-color: #0a60ce !important; + font-weight: 550; + letter-spacing: normal; + color: #fff; &.video-renditions { left: 0; bottom: 0; + top: 0; } } } @@ -43,16 +61,6 @@ stroke-width: 5px !important; } -mat-form-field.hy-form-field { - margin-top: 10px; - margin-bottom: 20px; - max-width: 600px; - width: 80%; - &.video-renditions { - margin-top: 30px; - } -} - .resizable-textarea { resize: vertical; overflow: auto; @@ -66,3 +74,32 @@ mat-form-field.hy-form-field { font-size: 14px; margin-top: -15px; } + +@media (max-width: 1024px) { + .nxql-tab-container { + &__button { + top: 0; + } + } +} + +.conversion-helper-text { + font-size: 14px; + margin-top: -15px; + color: #666666; +} + +.force-checkbox-container { + display: flex; + align-items: center; + margin: 0 0 10px; +} + +.force-conversion-helper-text { + max-width: 600px; /* Adjust as needed */ + white-space: normal; + word-wrap: break-word; + font-size: 13px; + margin-top: -15px; + color: #666666; +} diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.spec.ts index ce413164..028b3c0d 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.spec.ts @@ -5,11 +5,6 @@ import { MatProgressSpinnerModule } from "@angular/material/progress-spinner"; import { MatButtonModule } from "@angular/material/button"; import { MatInputModule } from "@angular/material/input"; import { MatFormFieldModule } from "@angular/material/form-field"; -import { - HyFormContainerModule, - HyMaterialModule, - HyMaterialTabsModule, -} from "@hyland/ui"; import { MatDialog, MatDialogRef, @@ -37,6 +32,7 @@ import { featureMap, FEATURES } from "../../generic-multi-feature-layout.mapping import { PICTURE_RENDITIONS_LABELS } from "../../../../pictures/pictures-renditions.constants"; import { THUMBNAIL_GENERATION_LABELS } from "../../../../thumbnail-generation/thumbnail-generation.constants"; import { VIDEO_RENDITIONS_LABELS } from "../../../../video-renditions-generation/video-renditions-generation.constants"; +import { FULLTEXT_REINDEX_LABELS } from "../../../../fulltext-reindex/fulltext-reindex.constants"; describe("NXQLTabComponent", () => { @@ -71,9 +67,9 @@ describe("NXQLTabComponent", () => { }, error: null, }; - mockDialogRef = jasmine.createSpyObj("MatDialogRef", ["afterClosed"]); + mockDialogRef = jasmine.createSpyObj("MatDialogRef", ["afterClosed", "afterOpened"]); mockDialogRef.afterClosed.and.returnValue(of({})); - + mockDialogRef.afterOpened.and.returnValue(of()); dialogService = jasmine.createSpyObj("MatDialog", ["open"]); dialogService.open.and.returnValue(mockDialogRef); await TestBed.configureTestingModule({ @@ -82,13 +78,10 @@ describe("NXQLTabComponent", () => { BrowserAnimationsModule, CommonModule, MatTabsModule, - HyMaterialModule, - HyFormContainerModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule, - HyMaterialTabsModule, MatProgressSpinnerModule, MatDialogModule, StoreModule.forRoot(provideMockStore), @@ -148,6 +141,7 @@ describe("NXQLTabComponent", () => { expect(dialogService.open).toHaveBeenCalledWith(ErrorModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -180,6 +174,7 @@ describe("NXQLTabComponent", () => { expect(showActionLaunchedModalSpy).toHaveBeenCalledWith(commandId); expect(dialogService.open).toHaveBeenCalledWith(GenericModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -293,6 +288,7 @@ describe("NXQLTabComponent", () => { expect(showConfirmationModalSpy).toHaveBeenCalledWith(2, documentId); expect(dialogService.open).toHaveBeenCalledWith(GenericModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -352,7 +348,6 @@ describe("NXQLTabComponent", () => { const result = featureMap()[FEATURES.THUMBNAIL_GENERATION](GENERIC_LABELS.NXQL); expect(result.labels.pageTitle).toBe(THUMBNAIL_GENERATION_LABELS.NXQL_THUMBNAIL_GENERATION_TITLE); expect(result.labels.submitBtnLabel).toBe(THUMBNAIL_GENERATION_LABELS.THUMBNAIL_GENERATION_BUTTON_LABEL); - expect(result.data.bodyParam.query).toBe(THUMBNAIL_GENERATION_LABELS.NXQL_QUERY); }); }); @@ -373,4 +368,12 @@ describe("NXQLTabComponent", () => { expect(component.inputForm.contains(VIDEO_RENDITIONS_LABELS.CONVERSION_NAME_KEY)).toBe(false); expect(component.inputForm.contains(VIDEO_RENDITIONS_LABELS.RECOMPUTE_ALL_VIDEO_INFO_KEY)).toBe(false); }); + + describe('FEATURES.FULLTEXT_REINDEX', () => { + it('should return correct labels and data for NXQL tabType', () => { + const result = featureMap()[FEATURES.FULLTEXT_REINDEX](GENERIC_LABELS.NXQL); + expect(result.labels.pageTitle).toBe(FULLTEXT_REINDEX_LABELS.NXQL_QUERY_REINDEX_TITLE); + expect(result.labels.submitBtnLabel).toBe(FULLTEXT_REINDEX_LABELS.REINDEX_BUTTON_LABEL); + }); + }); }); diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.ts index 42e384b8..81529126 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.ts @@ -1,8 +1,14 @@ -import { VIDEO_RENDITIONS_LABELS } from './../../../../video-renditions-generation/video-renditions-generation.constants'; +import { VIDEO_RENDITIONS_LABELS } from "./../../../../video-renditions-generation/video-renditions-generation.constants"; +import { FULLTEXT_REINDEX_LABELS } from "src/app/features/fulltext-reindex/fulltext-reindex.constants"; import { REST_END_POINTS } from "./../../../../../shared/constants/rest-end-ponts.constants"; import { MatDialog, MatDialogRef } from "@angular/material/dialog"; import { Component, OnDestroy, OnInit } from "@angular/core"; -import { FormBuilder, FormControl, FormGroup, Validators } from "@angular/forms"; +import { + FormBuilder, + FormControl, + FormGroup, + Validators, +} from "@angular/forms"; import { Store, select } from "@ngrx/store"; import { Observable, Subscription } from "rxjs"; import { DomSanitizer, SafeHtml } from "@angular/platform-browser"; @@ -57,6 +63,9 @@ export class NXQLTabComponent implements OnInit, OnDestroy { confirmDialogClosedSubscription = new Subscription(); launchedDialogClosedSubscription = new Subscription(); errorDialogClosedSubscription = new Subscription(); + confirmDialogOpenedSubscription = new Subscription(); + launchedDialogOpenedSubscription = new Subscription(); + errorDialogOpenedSubscription = new Subscription(); launchedDialogRef: MatDialogRef< GenericModalComponent, GenericModalClosedInfo @@ -69,6 +78,7 @@ export class NXQLTabComponent implements OnInit, OnDestroy { > = {} as MatDialogRef; GENERIC_LABELS = GENERIC_LABELS; VIDEO_RENDITIONS_LABELS = VIDEO_RENDITIONS_LABELS; + FULLTEXT_REINDEX_LABELS = FULLTEXT_REINDEX_LABELS; nuxeo: Nuxeo; isSubmitBtnDisabled = false; templateConfigData: FeatureData = {} as FeatureData; @@ -89,6 +99,7 @@ export class NXQLTabComponent implements OnInit, OnDestroy { ) { this.inputForm = this.fb.group({ inputIdentifier: ["", Validators.required], + force: [false], }); this.nxqlActionLaunched$ = this.store.pipe( @@ -126,7 +137,6 @@ export class NXQLTabComponent implements OnInit, OnDestroy { this.spinnerVisible = status; } ); - if (this.isFeatureVideoRenditions()) { this.inputForm.addControl( VIDEO_RENDITIONS_LABELS.CONVERSION_NAME_KEY, @@ -134,7 +144,13 @@ export class NXQLTabComponent implements OnInit, OnDestroy { ); this.inputForm.addControl( VIDEO_RENDITIONS_LABELS.RECOMPUTE_ALL_VIDEO_INFO_KEY, - new FormControl("true") + new FormControl("false") + ); + } + if(this.isFeatureFullTextReindex()) { + this.inputForm.addControl( + FULLTEXT_REINDEX_LABELS.FORCE, + new FormControl("false") ); } this.nxqlActionLaunchedSubscription = this.nxqlActionLaunched$.subscribe( @@ -164,10 +180,18 @@ export class NXQLTabComponent implements OnInit, OnDestroy { ); } + isFeatureFullTextReindex(): boolean { + return ( + this.activeFeature === + (FEATURES.FULLTEXT_REINDEX as FeaturesKey) + ); + } + showActionErrorModal(error: ErrorDetails): void { this.genericMultiFeatureUtilitiesService.spinnerStatus.next(false); this.errorDialogRef = this.dialogService.open(ErrorModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -179,6 +203,17 @@ export class NXQLTabComponent implements OnInit, OnDestroy { ?.subscribe(() => { this.onActionErrorModalClose(); }); + + this.errorDialogOpenedSubscription = this.errorDialogRef + .afterOpened() + .subscribe(() => { + const dialogElement = document.querySelector( + ".cdk-dialog-container" + ) as HTMLElement; + if (dialogElement) { + dialogElement.focus(); + } + }); } onActionErrorModalClose(): void { @@ -190,6 +225,7 @@ export class NXQLTabComponent implements OnInit, OnDestroy { showActionLaunchedModal(commandId: string | null): void { this.launchedDialogRef = this.dialogService.open(GenericModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -205,13 +241,24 @@ export class NXQLTabComponent implements OnInit, OnDestroy { .subscribe(() => { this.onActionLaunchedModalClose(); }); + + this.launchedDialogOpenedSubscription = this.launchedDialogRef + .afterOpened() + .subscribe(() => { + const dialogElement = document.querySelector( + ".cdk-dialog-container" + ) as HTMLElement; + if (dialogElement) { + dialogElement.focus(); + } + }); } onActionLaunchedModalClose(): void { this.isSubmitBtnDisabled = false; - this.inputForm?.get('inputIdentifier')?.reset(); + this.inputForm?.get("inputIdentifier")?.reset(); if (this.isFeatureVideoRenditions()) { - this.inputForm?.get('conversionNames')?.reset(); + this.inputForm?.get("conversionNames")?.reset(); } document.getElementById("inputIdentifier")?.focus(); } @@ -302,6 +349,7 @@ export class NXQLTabComponent implements OnInit, OnDestroy { showConfirmationModal(documentCount: number, query: string): void { this.confirmDialogRef = this.dialogService.open(GenericModalComponent, { disableClose: true, + hasBackdrop: true, height: MODAL_DIMENSIONS.HEIGHT, width: MODAL_DIMENSIONS.WIDTH, data: { @@ -320,6 +368,17 @@ export class NXQLTabComponent implements OnInit, OnDestroy { .subscribe((data) => { this.onConfirmationModalClose(data as GenericModalClosedInfo, query); }); + + this.confirmDialogOpenedSubscription = this.confirmDialogRef + .afterOpened() + .subscribe(() => { + const dialogElement = document.querySelector( + ".cdk-dialog-container" + ) as HTMLElement; + if (dialogElement) { + dialogElement.focus(); + } + }); } onConfirmationModalClose(data: GenericModalClosedInfo, query: string): void { @@ -395,5 +454,8 @@ export class NXQLTabComponent implements OnInit, OnDestroy { this.confirmDialogClosedSubscription?.unsubscribe(); this.launchedDialogClosedSubscription?.unsubscribe(); this.errorDialogClosedSubscription?.unsubscribe(); + this.confirmDialogOpenedSubscription?.unsubscribe(); + this.launchedDialogOpenedSubscription?.unsubscribe(); + this.errorDialogOpenedSubscription?.unsubscribe(); } } diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.constants.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.constants.ts index e8676d0e..3fe26f5c 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.constants.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.constants.ts @@ -71,7 +71,7 @@ export const ERROR_MESSAGES = { "Invalid document ID or path. Please enter a valid ID or path.", INVALID_DOC_ID_MESSAGE: "Invalid document ID. Please enter a valid ID.", INVALID_QUERY_MESSAGE: "Invalid query. Please enter a valid query.", - NO_DOCUMENT_ID_FOUND_MESSAGE: "Document with ID was not found.", + NO_DOCUMENT_ID_FOUND_MESSAGE: "No documents were found to be processed.", NO_MATCHING_QUERY_MESSAGE: "No document matches that query. Please try again with a different query.", UNKNOWN_ERROR_MESSAGE: "An unknown error occured.", diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.mapping.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.mapping.ts index 73ac0fe8..0bac6ef4 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.mapping.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.mapping.ts @@ -4,13 +4,14 @@ import { GENERIC_LABELS } from "./generic-multi-feature-layout.constants"; import { THUMBNAIL_GENERATION_LABELS } from "../../thumbnail-generation/thumbnail-generation.constants"; import { labelsList } from "./generic-multi-feature-layout.interface"; import { PICTURE_RENDITIONS_LABELS } from "../../pictures/pictures-renditions.constants"; +import { FULLTEXT_REINDEX_LABELS } from "../../fulltext-reindex/fulltext-reindex.constants"; export const FEATURES = { ELASTIC_SEARCH_REINDEX: "elasticsearch-reindex", THUMBNAIL_GENERATION: "thumbnail-generation", PICTURE_RENDITIONS: "picture-renditions", VIDEO_RENDITIONS_GENERATION: "video-renditions-generation", - // Add other features here. Value MUST match route name + FULLTEXT_REINDEX: "fulltext-reindex" } as const; export type FeaturesKey = keyof typeof FEATURES; @@ -77,11 +78,7 @@ export const featureMap = () => ({ }, [FEATURES.THUMBNAIL_GENERATION]: (tabType: string) => { let labels: labelsList; - let data = { - bodyParam: { - query: "" - } - }; + let data = {}; switch (tabType) { case GENERIC_LABELS.DOCUMENT: labels = { @@ -92,6 +89,9 @@ export const featureMap = () => ({ }; data = { bodyParam: { query: `${THUMBNAIL_GENERATION_LABELS.DOCUMENT_QUERY}` }, + requestHeaders: { + "Content-Type": "application/x-www-form-urlencoded", + }, }; break; @@ -104,6 +104,9 @@ export const featureMap = () => ({ bodyParam: { query: `${THUMBNAIL_GENERATION_LABELS.FOLDER_QUERY}`, }, + requestHeaders: { + "Content-Type": "application/x-www-form-urlencoded", + }, }; break; @@ -118,6 +121,9 @@ export const featureMap = () => ({ }; data = { bodyParam: { query: `${THUMBNAIL_GENERATION_LABELS.NXQL_QUERY}` }, + requestHeaders: { + "Content-Type": "application/x-www-form-urlencoded", + }, }; break; @@ -143,6 +149,9 @@ export const featureMap = () => ({ bodyParam: { query: `${PICTURE_RENDITIONS_LABELS.DOCUMENT_QUERY}`, }, + requestHeaders: { + "Content-Type": "application/x-www-form-urlencoded", + }, }; break; @@ -155,6 +164,9 @@ export const featureMap = () => ({ bodyParam: { query: `${PICTURE_RENDITIONS_LABELS.FOLDER_QUERY}`, }, + requestHeaders: { + "Content-Type": "application/x-www-form-urlencoded", + }, }; break; @@ -169,6 +181,9 @@ export const featureMap = () => ({ bodyParam: { query: `${PICTURE_RENDITIONS_LABELS.NXQL_QUERY}`, }, + requestHeaders: { + "Content-Type": "application/x-www-form-urlencoded", + }, }; break; @@ -211,7 +226,7 @@ export const featureMap = () => ({ bodyParam: { query: `${VIDEO_RENDITIONS_LABELS.FOLDER_QUERY}`, [VIDEO_RENDITIONS_LABELS.CONVERSION_NAME_KEY]: `{conversionNames}`, - recomputeVideoInfo: `{recomputeVideoInfo}`, + [VIDEO_RENDITIONS_LABELS.RECOMPUTE_ALL_VIDEO_INFO_KEY]: `{recomputeAllVideoInfo}`, }, requestHeaders: { "Content-Type": "application/x-www-form-urlencoded", @@ -246,4 +261,66 @@ export const featureMap = () => ({ data, }; }, + [FEATURES.FULLTEXT_REINDEX]: (tabType: string) => { + let labels: labelsList; + let data = {}; + switch (tabType) { + case GENERIC_LABELS.DOCUMENT: + labels = { + pageTitle: FULLTEXT_REINDEX_LABELS.DOCUMENT_REINDEX_TITLE, + submitBtnLabel: FULLTEXT_REINDEX_LABELS.REINDEX_BUTTON_LABEL, + }; + data = { + bodyParam: { + query: `${FULLTEXT_REINDEX_LABELS.DOCUMENT_QUERY}`, + [FULLTEXT_REINDEX_LABELS.FORCE]: `{force}`, + }, + requestHeaders: { + "Content-Type": "application/x-www-form-urlencoded", + }, + }; + break; + + case GENERIC_LABELS.FOLDER: + labels = { + pageTitle: FULLTEXT_REINDEX_LABELS.FOLDER_REINDEX_TITLE, + submitBtnLabel: FULLTEXT_REINDEX_LABELS.REINDEX_BUTTON_LABEL, + }; + data = { + bodyParam: { + query: `${FULLTEXT_REINDEX_LABELS.FOLDER_QUERY}`, + [FULLTEXT_REINDEX_LABELS.FORCE]: `{force}`, + }, + requestHeaders: { + "Content-Type": "application/x-www-form-urlencoded", + }, + }; + break; + + case GENERIC_LABELS.NXQL: + labels = { + pageTitle: FULLTEXT_REINDEX_LABELS.NXQL_QUERY_REINDEX_TITLE, + submitBtnLabel: FULLTEXT_REINDEX_LABELS.REINDEX_BUTTON_LABEL, + nxqlQueryPlaceholder: + FULLTEXT_REINDEX_LABELS.NXQL_QUERY_DEFAULT_VALUE, + }; + data = { + bodyParam: { + query: `${FULLTEXT_REINDEX_LABELS.NXQL_QUERY}`, + [FULLTEXT_REINDEX_LABELS.FORCE]: `{force}`, + }, + requestHeaders: { + "Content-Type": "application/x-www-form-urlencoded", + }, + }; + break; + + default: + throw new Error(`Unsupported type: ${tabType}`); + } + return { + labels, + data, + }; + }, }); diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.module.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.module.ts index 6e2bd511..32f72784 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.module.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.module.ts @@ -4,6 +4,7 @@ import { NXQLTabComponent } from "./components/nxql-tab/nxql-tab.component"; import { FolderTabComponent } from "./components/folder-tab/folder-tab.component"; import { MatFormFieldModule } from "@angular/material/form-field"; import { MatInputModule } from "@angular/material/input"; +import { MatSelectModule } from '@angular/material/select'; import { MatProgressSpinnerModule } from "@angular/material/progress-spinner"; import { MatTabsModule } from "@angular/material/tabs"; import { NgModule } from "@angular/core"; @@ -11,12 +12,9 @@ import { CommonModule } from "@angular/common"; import { MatButtonModule } from "@angular/material/button"; import { GenericMultiFeatureLayoutComponent } from "./generic-multi-feature-layout.component"; import { RouterModule } from "@angular/router"; -import { - HyFormContainerModule, - HyMaterialModule, - HyMaterialTabsModule, -} from "@hyland/ui"; import { ReactiveFormsModule } from "@angular/forms"; +import { MatDialogModule } from "@angular/material/dialog"; +import { MatCheckboxModule } from '@angular/material/checkbox'; @NgModule({ declarations: [ @@ -28,16 +26,16 @@ import { ReactiveFormsModule } from "@angular/forms"; imports: [ CommonModule, MatTabsModule, - HyMaterialModule, - HyFormContainerModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule, - HyMaterialTabsModule, MatProgressSpinnerModule, RouterModule, genericMultiFeatureLayoutRoutingModule, + MatDialogModule, + MatSelectModule, + MatCheckboxModule ], exports: [GenericMultiFeatureLayoutComponent], }) diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.html b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.html index 88901e2e..b43285a4 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.html +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.html @@ -1,146 +1,152 @@
- +
{{ PROBES_LABELS.PROBE_TITLE }}
- - - - - - {{ PROBES_LABELS.COLUMN_HEADERS.PROBE }} - - - {{ deriveProbeDisplayName(row?.name) }} +
+ + + + + - - - - - - {{ PROBES_LABELS.COLUMN_HEADERS.SUCCESS }} - - - + + + + + - - - - - - {{ PROBES_LABELS.COLUMN_HEADERS.LAST_EXECUTED }} - - - - {{ row?.status?.neverExecuted ? PROBES_LABELS.NEVER_EXECUTED : (row?.history?.lastRun | - date: 'MMMM d, yyyy') }} - + + + + + - - - - - - {{ PROBES_LABELS.COLUMN_HEADERS.INFORMATION }} - - - {{ row?.status?.infos?.info }} + + + + + - - - - - - - {{ PROBES_LABELS.COLUMN_HEADERS.RUN }} - - - {{ row?.counts?.run }} + + + + + - - - - - - {{ PROBES_LABELS.COLUMN_HEADERS.SUCCESS_COUNT }} - - - {{ row?.counts?.success }} + + + + + - - - - - - {{ PROBES_LABELS.COLUMN_HEADERS.FAILURE_COUNT }} - - - {{ row?.counts?.failure }} + + + + + - - - - - - {{ PROBES_LABELS.COLUMN_HEADERS.TIME }} - - - {{ row?.time }} + + + + + - - - - - - {{ PROBES_LABELS.COLUMN_HEADERS.HISTORY }} - - -
- Last Run: - {{ row?.history?.lastRun ? (row?.history?.lastRun | date: 'MMMM d, yyyy') : - PROBES_LABELS.NOT_RUN }} -
-
- Last Success: - {{ row?.history?.lastSuccess ? (row?.history?.lastSuccess | date: 'MMMM d, yyyy') - : PROBES_LABELS.NOT_RUN }} -
-
- Last Fail: - {{ row?.history?.lastFail ? (row?.history?.lastFail | date: 'MMMM d, yyyy') : - PROBES_LABELS.NOT_RUN }} -
+
+ + +
+ - - - - - {{ PROBES_LABELS.COLUMN_HEADERS.ACTIONS }} + - - + + + - - + + + +
{{ PROBES_LABELS.COLUMN_HEADERS.PROBE + }} + + {{ deriveProbeDisplayName(row?.name) }} + {{ PROBES_LABELS.COLUMN_HEADERS.SUCCESS + }} + + + {{ PROBES_LABELS.COLUMN_HEADERS.LAST_EXECUTED + }} + + {{ row?.status?.neverExecuted ? PROBES_LABELS.NEVER_EXECUTED : + (row?.history?.lastRun | + date: 'MMMM d, yyyy') }} + + {{ PROBES_LABELS.COLUMN_HEADERS.INFORMATION + }} + {{ row?.status?.infos?.info }} + {{ PROBES_LABELS.COLUMN_HEADERS.RUN + }} + + {{ row?.counts?.run }} + {{ PROBES_LABELS.COLUMN_HEADERS.SUCCESS_COUNT + }} + {{ row?.counts?.success }} + {{ PROBES_LABELS.COLUMN_HEADERS.FAILURE_COUNT + }} + {{ row?.counts?.failure }} + {{ PROBES_LABELS.COLUMN_HEADERS.TIME + }} + + {{ row?.time }} + {{ PROBES_LABELS.COLUMN_HEADERS.HISTORY + }} + +
+ Last Run: + {{ row?.history?.lastRun ? (row?.history?.lastRun | date: 'MMMM d, yyyy') : + PROBES_LABELS.NOT_RUN }} +
+
+ Last Success: + {{ row?.history?.lastSuccess ? (row?.history?.lastSuccess | date: 'MMMM d, + yyyy') + : PROBES_LABELS.NOT_RUN }} +
+
+ Last Fail: + {{ row?.history?.lastFail ? (row?.history?.lastFail | date: 'MMMM d, yyyy') : + PROBES_LABELS.NOT_RUN }} +
+
{{ PROBES_LABELS.COLUMN_HEADERS.ACTIONS + }} + + +
+
+
-
+
\ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.scss b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.scss index 762dd530..9093017a 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.scss +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.scss @@ -1,57 +1,93 @@ mat-card { - height: 97%; - min-height: 300px ; - min-width: 400px; - } - - .mat-mdc-card-content:first-child { - padding-top: 0; - } - - .mat-mdc-card-content { - height: 100%; - width: 100%; - } - - .probes-title { - margin-left: 21px; - color: black; - } - - ::ng-deep .hy-content-list__custom-cell { - max-height: max-content !important; + height: 97%; + min-height: 300px; + min-width: 400px; + + &.mdc-card { + border-radius: 12px; + padding: 24px; + background: white; + border: 1px solid #d1d5db; + box-shadow: none; } +} + +.mat-mdc-card-content:first-child { + padding-top: 0; +} + +.mat-mdc-card-content { + height: 100%; + width: 100%; +} - .probes-data { - height: 100%; - h1 { - font-size: 20px; - font-weight: 500; - width: fit-content; - } +.probes-title { + margin-left: 15px; + color: black; +} + +.probes-data { + height: 100%; + h1 { + font-size: 20px; + font-weight: 500; + width: fit-content; } +} + +.redirect-details-btn { + border-radius: 4px; + width: 100px; + height: 36px; + position: relative; + left: 85%; + top: 30%; + margin-bottom: 20px; + background-color: #0a60ce !important; + font-family: "Open Sans", sans-serif; + font-weight: 550; + letter-spacing: normal; +} + +.launch-probe-btn.mdc-button.mat-mdc-button-base { + line-height: 16px !important; + height: 40px !important; + border-color: #767b88; + color: #0a60ce !important; + font-family: "Open Sans", sans-serif; + font-weight: 550; +} +mat-card-footer { + margin-top: 30px; +} + +.table-container-summary { + height: 100%; + overflow: auto; + will-change: scroll-position; + contain: strict; + -webkit-overflow-scrolling: touch; +} +.table-container-detail { + max-height: 550px; + overflow: auto; +} +@media (width < 800px) { .redirect-details-btn { - border-radius: 4px; - width: 100px; - height: 36px; - position: relative; - left: 85%; - top: 40%; - margin-bottom: 20px; + left: 75%; } +} - .launch-probe-btn.mdc-button.mat-mdc-button-base { - line-height: 16px !important; - height: 40px !important - } +table { + width: 100%; +} - mat-card-footer { - margin-top: 30px; - } +.highlight { + background: #e5effb; + border-left: 4px solid #0560cb; +} - @media (width < 800px) { - .redirect-details-btn { - left: 75%; - } - } \ No newline at end of file +tr:focus { + outline: none; +} diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.spec.ts index 8c9632cf..e3b93f6b 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.spec.ts @@ -8,7 +8,7 @@ import { ProbeDataService } from "../services/probes-data.service"; import { PROBES_LABELS } from "../probes-data.constants"; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { CommonService } from "../../../../shared/services/common.service"; -import { HyToastService } from "@hyland/ui"; +import { MatSnackBarModule } from "@angular/material/snack-bar"; describe("ProbesDataComponent", () => { let component: ProbesDataComponent; @@ -30,18 +30,17 @@ describe("ProbesDataComponent", () => { } beforeEach(async () => { - const toastServiceSpy = jasmine.createSpyObj("HyToastService", ["success", "error"]); probeServiceSpy = jasmine.createSpyObj("ProbeDataService", [ "formatToTitleCase", ]); await TestBed.configureTestingModule({ declarations: [ProbesDataComponent], + imports: [MatSnackBarModule], providers: [ provideMockStore({ initialState }), { provide: CommonService, useClass: CommonServiceStub }, { provide: ProbeDataService, useValue: probeServiceSpy }, - { provide: HyToastService, useValue: toastServiceSpy }, ], schemas: [NO_ERRORS_SCHEMA], }).compileComponents(); diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.ts index 85437295..7cf51bb5 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/components/probes-data.component.ts @@ -1,3 +1,4 @@ +import { CustomSnackBarComponent } from "./../../../../shared/components/custom-snack-bar/custom-snack-bar.component"; import { CommonService } from "../../../../shared/services/common.service"; import { PROBES, PROBES_LABELS } from "../probes-data.constants"; import { Component, Input, OnDestroy, OnInit } from "@angular/core"; @@ -6,8 +7,8 @@ import { Store, select } from "@ngrx/store"; import { ProbeState, ProbesInfo } from "../store/reducers"; import * as ProbeActions from "../store/actions"; import { ProbeDataService } from "../services/probes-data.service"; -import { HyToastService } from "@hyland/ui"; import { HttpErrorResponse } from "@angular/common/http"; +import { MatSnackBar } from "@angular/material/snack-bar"; @Component({ selector: "probes-data", @@ -20,7 +21,8 @@ export class ProbesDataComponent implements OnInit, OnDestroy { fetchProbesSubscription = new Subscription(); fetchProbes$: Observable; PROBES_LABELS = PROBES_LABELS; - columnsToDisplay: { propertyName: string; label: string }[] = []; + columnsToDisplay: string[] = []; + selectedRowIndex = -1; defaultColumns = [ { propertyName: "probe", label: "Probe", summaryOnly: true }, @@ -44,6 +46,7 @@ export class ProbesDataComponent implements OnInit, OnDestroy { }, { propertyName: "time", label: "Time", summaryOnly: false }, { propertyName: "history", label: "History", summaryOnly: false }, + { propertyName: "actions", label: "Actions", summaryOnly: false }, ]; hideTitle = true; probeLaunchedSuccessSubscription = new Subscription(); @@ -56,7 +59,7 @@ export class ProbesDataComponent implements OnInit, OnDestroy { private store: Store<{ probes: ProbeState }>, private probeService: ProbeDataService, private commonService: CommonService, - private toastService: HyToastService + private _snackBar: MatSnackBar ) { this.fetchProbes$ = this.store.pipe( select((state) => state.probes?.probesInfo) @@ -69,9 +72,9 @@ export class ProbesDataComponent implements OnInit, OnDestroy { ); } ngOnInit(): void { - this.columnsToDisplay = this.defaultColumns.filter((column) => - this.summary ? column.summaryOnly : true - ); + this.columnsToDisplay = this.defaultColumns + .filter((column) => (this.summary ? column.summaryOnly : true)) + .map((column) => column.propertyName); this.hideTitle = !this.defaultColumns.some( (col) => col.summaryOnly && this.summary ); @@ -93,30 +96,34 @@ export class ProbesDataComponent implements OnInit, OnDestroy { data?.length > 0 && Object.entries(this.probeLaunched).length > 0 ) { - this.toastService.success( - PROBES_LABELS.PROBE_LAUNCHED_SUCCESS.replaceAll( - "{probeName}", - this.probeLaunched?.name - ), - { - canBeDismissed: true, - } - ); + this._snackBar.openFromComponent(CustomSnackBarComponent, { + data: { + message: PROBES_LABELS.PROBE_LAUNCHED_SUCCESS.replaceAll( + "{probeName}", + this.probeLaunched?.name + ), + panelClass: "success-snack", + }, + duration: 5000, + panelClass: ["success-snack"], + }); } }); this.probeLaunchedErrorSubscription = this.probeLaunchedError$.subscribe( (error) => { if (error) { - this.toastService.error( - PROBES_LABELS.PROBE_LAUNCHED_ERROR.replaceAll( - "{probeName}", - this.probeLaunched?.name - ), - { - canBeDismissed: true, - } - ); + this._snackBar.openFromComponent(CustomSnackBarComponent, { + data: { + message: PROBES_LABELS.PROBE_LAUNCHED_ERROR.replaceAll( + "{probeName}", + this.probeLaunched?.name + ), + panelClass: "error-snack", + }, + duration: 5000, + panelClass: ["error-snack"], + }); } } ); @@ -141,9 +148,7 @@ export class ProbesDataComponent implements OnInit, OnDestroy { } isColumnVisible(propertyName: string): boolean { - return this.columnsToDisplay.some( - (column) => column.propertyName === propertyName - ); + return this.columnsToDisplay.some((column) => column === propertyName); } viewDetails(): void { @@ -155,6 +160,10 @@ export class ProbesDataComponent implements OnInit, OnDestroy { this.store.dispatch(ProbeActions.launchProbe({ probeName: probe.name })); } + highlightRow(index: number): void { + this.selectedRowIndex = index; + } + ngOnDestroy(): void { this.fetchProbesSubscription?.unsubscribe(); this.probeLaunchedSuccessSubscription?.unsubscribe(); diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/probes-data.module.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/probes-data.module.ts index ade92c10..48066461 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/probes-data.module.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/probes-data/probes-data.module.ts @@ -3,9 +3,8 @@ import { CommonModule } from "@angular/common"; import { MatCardModule } from "@angular/material/card"; import { MatButtonModule } from "@angular/material/button"; import { ProbesDataComponent } from "./components/probes-data.component"; - -import { HyContentListModule } from "@hyland/ui/content-list"; import { MatTooltipModule } from "@angular/material/tooltip"; +import {MatTableModule} from '@angular/material/table'; @NgModule({ declarations: [ @@ -15,8 +14,8 @@ import { MatTooltipModule } from "@angular/material/tooltip"; CommonModule, MatCardModule, MatButtonModule, - HyContentListModule, MatTooltipModule, + MatTableModule ], exports: [ ProbesDataComponent, diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.html b/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.html index 23db753c..93296d19 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.html +++ b/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.html @@ -1,18 +1,14 @@ - - - {{ WARNING_LABELS.TITLE }} - +
+

{{ WARNING_LABELS.TITLE }}

+
+ +

+ {{ WARNING_LABELS.CONTENT }}

+

{{ WARNING_LABELS.SUBHEADING_CAPTION }}

- - - {{ WARNING_LABELS.CONTENT }} - - {{ WARNING_LABELS.SUBHEADING_CAPTION }} - - - - - +
+
+
{{ WARNING_LABELS.CHECKBOX_LABEL }}
@@ -20,5 +16,5 @@
- - \ No newline at end of file +
+
\ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.scss b/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.scss index 5423a392..34ec3830 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.scss +++ b/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.scss @@ -1,17 +1,35 @@ .warning-dialog { width: 564px; + max-height: 300px; &__title { font-style: normal; - font-weight: 300; - font-size: 1.7rem !important; + font-weight: 500; line-height: 20px; letter-spacing: 0.011em; + color: rgb(55, 58, 60); + font-size: 26px; + margin-top: 30px; + margin-left: 20px; + padding-bottom: 10px; } - &__content { - padding-bottom: 5px; + &__subheading-text { + font-weight: 400; + font-size: 14px; + line-height: 32px; + font-family: "Open Sans", sans-serif; + color: rgb(55, 58, 60); + letter-spacing: normal; + margin-top: -10px; + } + &__subheading-caption { + padding-top: 5px; + font-weight: bold; + color: #4b5563; + font-size: 14px; } &__checkbox-container { margin-right: auto; + padding-left: 5px; } &__button-container { @@ -19,28 +37,11 @@ } } -.hy-dialog-box-subheading-caption { - padding-top: 15px; - font-weight: bold; -} - -:host ::ng-deep hy-dialog-box-subheading .hy-text-subhead { - font-weight: 200; - font-size: 14px; -} -:host ::ng-deep hy-dialog-box-title .mat-title { - font-size: 26px; -} - -:host ::ng-deep hy-dialog-box-subheading-caption { - font-size: 14px !important; +.separator { + width: 100%; + background-color: #d1d5db; } -:host - ::ng-deep - hy-dialog-box-footer - .warning-dialog__checkbox-container - .mdc-form-field - .mdc-label { - padding-top: 6px; +.warning-dialog__content { + padding-bottom: 5px !important; } diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.spec.ts index 682f825c..6d6b1404 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.spec.ts @@ -1,5 +1,4 @@ import { MatCheckboxModule } from "@angular/material/checkbox"; -import { HyDialogBoxModule } from "@hyland/ui"; import { MatDialogModule } from "@angular/material/dialog"; import { WarningComponent } from "./warning.component"; import { ComponentFixture, TestBed } from "@angular/core/testing"; @@ -44,7 +43,6 @@ describe("WarningComponent", () => { imports: [ CommonModule, MatDialogModule, - HyDialogBoxModule, MatCheckboxModule, ], schemas: [CUSTOM_ELEMENTS_SCHEMA], diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.ts b/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.ts index 9e69a1f8..7d9dddf8 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.component.ts @@ -6,7 +6,7 @@ import { Store, select } from '@ngrx/store'; import { Observable } from 'rxjs'; import { AuthStateInterface } from '../../auth/types/authState.interface'; import { UserInterface } from '../../shared/types/user.interface'; -import { WARNING_DIALOG_CONSTANTS } from './warning,constants'; +import { WARNING_DIALOG_CONSTANTS } from './warning.constants'; @Component({ selector: "warning", diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning,constants.ts b/nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.constants.ts similarity index 100% rename from nuxeo-admin-console-web/angular-app/src/app/features/warning/warning,constants.ts rename to nuxeo-admin-console-web/angular-app/src/app/features/warning/warning.constants.ts diff --git a/nuxeo-admin-console-web/angular-app/src/app/layouts/base-layout/components/base-layout.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/layouts/base-layout/components/base-layout.component.spec.ts index cd4229e1..d7e50d77 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/layouts/base-layout/components/base-layout.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/layouts/base-layout/components/base-layout.component.spec.ts @@ -1,13 +1,13 @@ -import { MatListModule } from '@angular/material/list'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatToolbarModule } from '@angular/material/toolbar'; -import { RouterModule } from '@angular/router'; +import { MatIconModule } from "@angular/material/icon"; +import { MatListModule } from "@angular/material/list"; +import { MatSidenavModule } from "@angular/material/sidenav"; +import { MatToolbarModule } from "@angular/material/toolbar"; +import { RouterModule } from "@angular/router"; import { MenuBarComponent } from "../../menu-bar/menu-bar.component"; import { HeaderBarComponent } from "../../header-bar/header-bar.component"; import { BaseLayoutComponent } from "./base-layout.component"; -import { provideMockStore } from '@ngrx/store/testing'; -import { StoreModule } from '@ngrx/store'; -import { HyMaterialIconModule } from "@hyland/ui"; +import { provideMockStore } from "@ngrx/store/testing"; +import { StoreModule } from "@ngrx/store"; import { ComponentFixture, @@ -22,12 +22,16 @@ describe("BaseLayoutComponent", () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ - BaseLayoutComponent, - HeaderBarComponent, - MenuBarComponent, + declarations: [BaseLayoutComponent, HeaderBarComponent, MenuBarComponent], + imports: [ + CommonModule, + RouterModule, + MatToolbarModule, + MatListModule, + MatSidenavModule, + MatIconModule, + StoreModule.forRoot(provideMockStore), ], - imports: [CommonModule, HyMaterialIconModule,RouterModule, MatToolbarModule, MatListModule, MatSidenavModule,StoreModule.forRoot(provideMockStore)], providers: [{ provide: ComponentFixtureAutoDetect, useValue: true }], }).compileComponents(); fixture = TestBed.createComponent(BaseLayoutComponent); diff --git a/nuxeo-admin-console-web/angular-app/src/app/layouts/header-bar/header-bar.component.html b/nuxeo-admin-console-web/angular-app/src/app/layouts/header-bar/header-bar.component.html index 6fbc0377..b39824da 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/layouts/header-bar/header-bar.component.html +++ b/nuxeo-admin-console-web/angular-app/src/app/layouts/header-bar/header-bar.component.html @@ -1,8 +1,8 @@
- + {{ BRAND_TITLE }}
@@ -10,8 +10,8 @@ {{ displayName }} -
\ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/layouts/header-bar/header-bar.component.scss b/nuxeo-admin-console-web/angular-app/src/app/layouts/header-bar/header-bar.component.scss index 2f1cbf1a..277bdd61 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/layouts/header-bar/header-bar.component.scss +++ b/nuxeo-admin-console-web/angular-app/src/app/layouts/header-bar/header-bar.component.scss @@ -7,28 +7,23 @@ justify-content: space-between; &__branding { display: flex; - align-items: baseline; + align-items: center; gap: 10px; - margin-bottom: 5px; - margin-top: 5px; - button { - width: auto; - height: auto; - } - button:focus, - button:hover { - background-color: transparent; - cursor: pointer; - border-radius: 0; + margin: 5px 0 5px 2px; + .brand-button { + padding: 10px; } + img { width: 112px; height: 36px; } + &__title { color: #212121; font-size: 20px; } + &__username { color: #212121; font-size: 14px; @@ -41,17 +36,25 @@ margin-right: 15px; } } + &__profile-icon { height: 58px !important; width: 58px !important; + img { width: 40px; height: 40px; } } } -} + & .logout-btn { + border-radius: 8px; + padding: 0 16px; + border-color: #6b7280; + font-family: "Open Sans", sans-serif; + } +} @media (width < 600px) { .header-bar { min-width:160svw; diff --git a/nuxeo-admin-console-web/angular-app/src/app/layouts/header-bar/header-bar.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/layouts/header-bar/header-bar.component.spec.ts index 01eae826..60f97bcc 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/layouts/header-bar/header-bar.component.spec.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/layouts/header-bar/header-bar.component.spec.ts @@ -1,7 +1,6 @@ import { HeaderBarComponent } from "./header-bar.component"; import { MatToolbarModule } from "@angular/material/toolbar"; import { provideMockStore, MockStore } from '@ngrx/store/testing'; -import { HyMaterialIconModule } from "@hyland/ui"; import { NuxeoJSClientService } from "../../shared/services/nuxeo-js-client.service"; import { Router } from "@angular/router"; import { RouterTestingModule } from '@angular/router/testing'; @@ -13,6 +12,7 @@ import { import { CommonModule } from "@angular/common"; import { UserInterface } from "../../shared/types/user.interface"; import { authActions } from "../../auth/store/actions"; +import { MatIconModule } from "@angular/material/icon"; describe("HeaderBarComponent", () => { let component: HeaderBarComponent; @@ -43,9 +43,9 @@ describe("HeaderBarComponent", () => { declarations: [HeaderBarComponent], imports: [ CommonModule, - HyMaterialIconModule, MatToolbarModule, RouterTestingModule, + MatIconModule ], providers: [ provideMockStore({ initialState: initialAuthState }), diff --git a/nuxeo-admin-console-web/angular-app/src/app/layouts/menu-bar/menu-bar.component.scss b/nuxeo-admin-console-web/angular-app/src/app/layouts/menu-bar/menu-bar.component.scss index b1a6cb3e..5cc54741 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/layouts/menu-bar/menu-bar.component.scss +++ b/nuxeo-admin-console-web/angular-app/src/app/layouts/menu-bar/menu-bar.component.scss @@ -11,9 +11,17 @@ $selected-line-bg-color: #0c6bd4; margin-bottom: 5px; cursor: pointer; - &:hover, - &:focus { + &:hover { background-color: $sidenav-list-item-selected-bg-color; + + .menu-bar__line { + background-color: $selected-line-bg-color; + } + } + + &:focus-visible { + outline: 2px solid $selected-line-bg-color; + outline-offset: -2px; .menu-bar__line { background-color: $selected-line-bg-color; } diff --git a/nuxeo-admin-console-web/angular-app/src/app/layouts/menu-bar/menu-bar.constants.ts b/nuxeo-admin-console-web/angular-app/src/app/layouts/menu-bar/menu-bar.constants.ts index 94195865..7a25b3ae 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/layouts/menu-bar/menu-bar.constants.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/layouts/menu-bar/menu-bar.constants.ts @@ -39,6 +39,12 @@ export const ADMIN_MENU: Menu[] = [ }, { id: 6, + name: "Fulltext Reindex", + path: "fulltext-reindex", + isSelected: false, + }, + { + id: 7, name: "Bulk Action Monitoring", path: "bulk-action-monitoring", isSelected: false, diff --git a/nuxeo-admin-console-web/angular-app/src/app/shared/components/custom-snack-bar/custom-snack-bar.component.html b/nuxeo-admin-console-web/angular-app/src/app/shared/components/custom-snack-bar/custom-snack-bar.component.html new file mode 100644 index 00000000..735cb58d --- /dev/null +++ b/nuxeo-admin-console-web/angular-app/src/app/shared/components/custom-snack-bar/custom-snack-bar.component.html @@ -0,0 +1,10 @@ +
+ check + + error + + {{data.message}} + +
\ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/app/shared/components/custom-snack-bar/custom-snack-bar.component.scss b/nuxeo-admin-console-web/angular-app/src/app/shared/components/custom-snack-bar/custom-snack-bar.component.scss new file mode 100644 index 00000000..b2a401f0 --- /dev/null +++ b/nuxeo-admin-console-web/angular-app/src/app/shared/components/custom-snack-bar/custom-snack-bar.component.scss @@ -0,0 +1,18 @@ +.success-icon { + color: green; +} + +.error-icon { + color: red; +} + +.icon-text-container { + display: flex; + align-items: center; + gap: 8px; + button { + background: none; + border: none; + margin-top: 5px; + } +} diff --git a/nuxeo-admin-console-web/angular-app/src/app/shared/components/custom-snack-bar/custom-snack-bar.component.spec.ts b/nuxeo-admin-console-web/angular-app/src/app/shared/components/custom-snack-bar/custom-snack-bar.component.spec.ts new file mode 100644 index 00000000..9c36d004 --- /dev/null +++ b/nuxeo-admin-console-web/angular-app/src/app/shared/components/custom-snack-bar/custom-snack-bar.component.spec.ts @@ -0,0 +1,50 @@ +import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { CustomSnackBarComponent } from "./custom-snack-bar.component"; +import { + MAT_SNACK_BAR_DATA, + MatSnackBarRef, +} from "@angular/material/snack-bar"; +import { BULK_ACTION_LABELS } from "./../../../features/bulk-action-monitoring/bulk-action-monitoring.constants"; +import { SnackBarData } from "../../types/common.interface"; +import { MatIconModule } from "@angular/material/icon"; + +describe("CustomSnackBarComponent", () => { + let component: CustomSnackBarComponent; + let fixture: ComponentFixture; + let mockSnackBarRef: jasmine.SpyObj>; + const mockData: SnackBarData = { message: "Test message", panelClass: 'success-snack' }; + + beforeEach(async () => { + mockSnackBarRef = jasmine.createSpyObj("MatSnackBarRef", ["dismiss"]); + + await TestBed.configureTestingModule({ + declarations: [CustomSnackBarComponent], + imports: [MatIconModule], + providers: [ + { provide: MatSnackBarRef, useValue: mockSnackBarRef }, + { provide: MAT_SNACK_BAR_DATA, useValue: mockData }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(CustomSnackBarComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it("should create the component", () => { + expect(component).toBeTruthy(); + }); + + it("should have BULK_ACTION_LABELS defined", () => { + expect(component.BULK_ACTION_LABELS).toBe(BULK_ACTION_LABELS); + }); + + it("should inject MAT_SNACK_BAR_DATA as data", () => { + expect(component.data).toEqual(mockData); + }); + + it("should close the snackbar when close method is called", () => { + component.close(); + expect(mockSnackBarRef.dismiss).toHaveBeenCalled(); + }); +}); diff --git a/nuxeo-admin-console-web/angular-app/src/app/shared/components/custom-snack-bar/custom-snack-bar.component.ts b/nuxeo-admin-console-web/angular-app/src/app/shared/components/custom-snack-bar/custom-snack-bar.component.ts new file mode 100644 index 00000000..fb4f83ff --- /dev/null +++ b/nuxeo-admin-console-web/angular-app/src/app/shared/components/custom-snack-bar/custom-snack-bar.component.ts @@ -0,0 +1,24 @@ +import { + MAT_SNACK_BAR_DATA, + MatSnackBarRef, +} from "@angular/material/snack-bar"; +import { BULK_ACTION_LABELS } from "./../../../features/bulk-action-monitoring/bulk-action-monitoring.constants"; +import { Component, Inject } from "@angular/core"; +import { SnackBarData } from "../../types/common.interface"; + +@Component({ + selector: "custom-snack-bar", + templateUrl: "./custom-snack-bar.component.html", + styleUrls: ["./custom-snack-bar.component.scss"], +}) +export class CustomSnackBarComponent { + BULK_ACTION_LABELS = BULK_ACTION_LABELS; + constructor( + private snackBarRef: MatSnackBarRef, + @Inject(MAT_SNACK_BAR_DATA) public data: SnackBarData + ) {} + + close() { + this.snackBarRef.dismiss(); + } +} diff --git a/nuxeo-admin-console-web/angular-app/src/app/shared/constants/rest-end-ponts.constants.ts b/nuxeo-admin-console-web/angular-app/src/app/shared/constants/rest-end-ponts.constants.ts index a389a692..31d10980 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/shared/constants/rest-end-ponts.constants.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/shared/constants/rest-end-ponts.constants.ts @@ -9,6 +9,7 @@ export const REST_END_POINTS = { THUMBNAIL_GENERATION: "THUMBNAIL_GENERATION", PICTURE_RENDITIONS: "PICTURE_RENDITIONS", VIDEO_RENDITIONS_GENERATION: "VIDEO_RENDITIONS_GENERATION", + FULLTEXT_REINDEX: "FULLTEXT_REINDEX", } as const; type RestEndpointKey = keyof typeof REST_END_POINTS; @@ -62,4 +63,8 @@ export const REST_END_POINT_CONFIG: Record< endpoint: "/management/videos/recompute", method: "POST", }, + FULLTEXT_REINDEX: { + endpoint: "/management/fulltext/extract", + method: "POST" + } }; diff --git a/nuxeo-admin-console-web/angular-app/src/app/shared/types/common.interface.ts b/nuxeo-admin-console-web/angular-app/src/app/shared/types/common.interface.ts index b1c31454..eb14e5df 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/shared/types/common.interface.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/shared/types/common.interface.ts @@ -1,20 +1,25 @@ export interface ErrorModalData { - error: ErrorDetails; - userInput?: string; - } - - export interface ErrorDetails { - type: string; - details: ErrorStatus; - } - - export interface ErrorStatus { - status?: number; - message: string; - } - - export interface ErrorModalClosedInfo { - isClosed: boolean; - continue?: boolean; - event: unknown; - } \ No newline at end of file + error: ErrorDetails; + userInput?: string; +} + +export interface ErrorDetails { + type: string; + details: ErrorStatus; +} + +export interface ErrorStatus { + status?: number; + message: string; +} + +export interface ErrorModalClosedInfo { + isClosed: boolean; + continue?: boolean; + event: unknown; +} + +export interface SnackBarData { + message: string; + panelClass: string; +} diff --git a/nuxeo-admin-console-web/angular-app/src/assets/bulk-state1.json b/nuxeo-admin-console-web/angular-app/src/assets/bulk-state1.json deleted file mode 100644 index fc8171ba..00000000 --- a/nuxeo-admin-console-web/angular-app/src/assets/bulk-state1.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "entity-type": "bulkStatus", - "commandId": "a703f6r8-7H19-062c-120d-8ea50f1aa6c8", - "state": "UNKNOWN", - "processed": 2, - "skipCount": 0, - "error": true, - "errorCount": 3, - "total": 8, - "action": "index", - "username": "system", - "submitted": "2024-08-14T07:44:16.364Z", - "scrollStart": "2024-08-14T07:44:16.399Z", - "scrollEnd": "2024-08-14T07:44:16.400Z", - "processingStart": "2024-08-14T07:44:16.464Z", - "processingEnd": "2024-08-14T07:44:16.550Z", - "completed": "2024-08-14T07:44:19.394Z", - "processingMillis": 7 -} diff --git a/nuxeo-admin-console-web/angular-app/src/assets/bulk-state2.json b/nuxeo-admin-console-web/angular-app/src/assets/bulk-state2.json deleted file mode 100644 index 6df849ed..00000000 --- a/nuxeo-admin-console-web/angular-app/src/assets/bulk-state2.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "entity-type": "bulkStatus", - "commandId": "b703q4b8-OH1f-w62c-950d-8ea30f1aa6c8", - "state": "SCHEDULED", - "processed": 1, - "skipCount": 0, - "error": true, - "errorCount": 3, - "total": 1, - "action": "index", - "username": "system", - "submitted": "2024-08-14T07:44:16.364Z", - "scrollStart": "2024-08-14T07:44:16.399Z", - "scrollEnd": "2024-08-14T07:44:16.400Z", - "processingStart": "2024-08-14T07:44:16.464Z", - "processingEnd": "2024-08-14T07:44:16.550Z", - "completed": "2024-08-14T07:44:19.394Z", - "processingMillis": 7 -} diff --git a/nuxeo-admin-console-web/angular-app/src/assets/bulk-state3.json b/nuxeo-admin-console-web/angular-app/src/assets/bulk-state3.json deleted file mode 100644 index ae5181f5..00000000 --- a/nuxeo-admin-console-web/angular-app/src/assets/bulk-state3.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "entity-type": "bulkStatus", - "commandId": "c703fmb8-7I1f-062c-92ld-8ea20f1aa6c8", - "state": "SCROLLING_RUNNING", - "processed": 4, - "skipCount": 2, - "error": false, - "errorCount": 0, - "total": 8, - "action": "index", - "username": "system", - "submitted": "2024-08-14T07:44:16.364Z", - "scrollStart": "2024-08-14T07:44:16.399Z", - "scrollEnd": "2024-08-14T07:44:16.400Z", - "processingStart": "2024-08-14T07:44:16.464Z", - "processingEnd": "2024-08-14T07:44:16.550Z", - "completed": "2024-08-14T07:44:19.394Z", - "processingMillis": 7 -} diff --git a/nuxeo-admin-console-web/angular-app/src/assets/bulk-state4.json b/nuxeo-admin-console-web/angular-app/src/assets/bulk-state4.json deleted file mode 100644 index 355536b1..00000000 --- a/nuxeo-admin-console-web/angular-app/src/assets/bulk-state4.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "entity-type": "bulkStatus", - "commandId": "d703f2b8-7H1f-962c-250d-8wa50f1ma6c8", - "state": "RUNNING", - "processed": 1, - "skipCount": 0, - "error": false, - "errorCount": 0, - "total": 1, - "action": "index", - "username": "system", - "submitted": "2024-08-14T07:44:16.364Z", - "scrollStart": "2024-08-14T07:44:16.399Z", - "scrollEnd": "2024-08-14T07:44:16.400Z", - "processingStart": "2024-08-14T07:44:16.464Z", - "processingEnd": "2024-08-14T07:44:16.550Z", - "completed": "2024-08-14T07:44:19.394Z", - "processingMillis": 7 -} diff --git a/nuxeo-admin-console-web/angular-app/src/assets/bulk-state5.json b/nuxeo-admin-console-web/angular-app/src/assets/bulk-state5.json deleted file mode 100644 index 95a34299..00000000 --- a/nuxeo-admin-console-web/angular-app/src/assets/bulk-state5.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "entity-type": "bulkStatus", - "commandId": "e723f4b8-7P1f-062J-950d-82a30f1aa6c8", - "state": "COMPLETED", - "processed": 2, - "skipCount": 1, - "error": true, - "errorCount": 1, - "total": 8, - "action": "index", - "username": "system", - "submitted": "2024-08-14T07:44:16.364Z", - "scrollStart": "2024-08-14T07:44:16.399Z", - "scrollEnd": "2024-08-14T07:44:16.400Z", - "processingStart": "2024-08-14T07:44:16.464Z", - "processingEnd": "2024-08-14T07:44:16.550Z", - "completed": "2024-08-14T07:44:19.394Z", - "processingMillis": 7 -} diff --git a/nuxeo-admin-console-web/angular-app/src/assets/bulk-state6.json b/nuxeo-admin-console-web/angular-app/src/assets/bulk-state6.json deleted file mode 100644 index 2034777d..00000000 --- a/nuxeo-admin-console-web/angular-app/src/assets/bulk-state6.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "entity-type": "bulkStatus", - "commandId": "f723f4b8-7H1f-062c-050d-8ea50effaa6c8", - "state": "ABORTED", - "processed": 4, - "skipCount": 7, - "error": true, - "errorCount": 2, - "total": 11, - "action": "index", - "username": "system", - "submitted": "2024-08-14T07:44:16.364Z", - "scrollStart": "2024-08-14T07:44:16.399Z", - "scrollEnd": "2024-08-14T07:44:16.400Z", - "processingStart": "2024-08-14T07:44:16.464Z", - "processingEnd": "2024-08-14T07:44:16.550Z", - "completed": "2024-08-14T07:44:19.394Z", - "processingMillis": 7 -} diff --git a/nuxeo-admin-console-web/angular-app/src/assets/bulk-state7.json b/nuxeo-admin-console-web/angular-app/src/assets/bulk-state7.json deleted file mode 100644 index d90f2058..00000000 --- a/nuxeo-admin-console-web/angular-app/src/assets/bulk-state7.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "entity-type": "bulkStatus", - "commandId": "g703f4b8-7H1f-062c-950d-8ea50f1aa6c8", - "state": "COMPLETED", - "processed": 2, - "skipCount": 0, - "error": false, - "errorCount": 0, - "total": 6, - "action": "index", - "username": "system", - "submitted": "2024-08-14T07:44:16.364Z", - "scrollStart": "2024-08-14T07:44:16.399Z", - "scrollEnd": "2024-08-14T07:44:16.400Z", - "processingStart": "2024-08-14T07:44:16.464Z", - "processingEnd": "2024-08-14T07:44:16.550Z", - "completed": "2024-08-14T07:44:19.394Z", - "processingMillis": 7 -} diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/OFL.txt b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/OFL.txt deleted file mode 100644 index cb7002a8..00000000 --- a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2020 The Open Sans Project Authors (https://github.com/googlefonts/opensans) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -https://openfontlicense.org - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/OpenSans-Italic-VariableFont_wdth,wght.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/OpenSans-Italic-VariableFont_wdth,wght.ttf deleted file mode 100644 index 8312b2ce..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/OpenSans-Italic-VariableFont_wdth,wght.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf deleted file mode 100644 index ac587b48..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/README.txt b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/README.txt deleted file mode 100644 index 2548322c..00000000 --- a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/README.txt +++ /dev/null @@ -1,100 +0,0 @@ -Open Sans Variable Font -======================= - -This download contains Open Sans as both variable fonts and static fonts. - -Open Sans is a variable font with these axes: - wdth - wght - -This means all the styles are contained in these files: - OpenSans-VariableFont_wdth,wght.ttf - OpenSans-Italic-VariableFont_wdth,wght.ttf - -If your app fully supports variable fonts, you can now pick intermediate styles -that aren’t available as static fonts. Not all apps support variable fonts, and -in those cases you can use the static font files for Open Sans: - static/OpenSans_Condensed-Light.ttf - static/OpenSans_Condensed-Regular.ttf - static/OpenSans_Condensed-Medium.ttf - static/OpenSans_Condensed-SemiBold.ttf - static/OpenSans_Condensed-Bold.ttf - static/OpenSans_Condensed-ExtraBold.ttf - static/OpenSans_SemiCondensed-Light.ttf - static/OpenSans_SemiCondensed-Regular.ttf - static/OpenSans_SemiCondensed-Medium.ttf - static/OpenSans_SemiCondensed-SemiBold.ttf - static/OpenSans_SemiCondensed-Bold.ttf - static/OpenSans_SemiCondensed-ExtraBold.ttf - static/OpenSans-Light.ttf - static/OpenSans-Regular.ttf - static/OpenSans-Medium.ttf - static/OpenSans-SemiBold.ttf - static/OpenSans-Bold.ttf - static/OpenSans-ExtraBold.ttf - static/OpenSans_Condensed-LightItalic.ttf - static/OpenSans_Condensed-Italic.ttf - static/OpenSans_Condensed-MediumItalic.ttf - static/OpenSans_Condensed-SemiBoldItalic.ttf - static/OpenSans_Condensed-BoldItalic.ttf - static/OpenSans_Condensed-ExtraBoldItalic.ttf - static/OpenSans_SemiCondensed-LightItalic.ttf - static/OpenSans_SemiCondensed-Italic.ttf - static/OpenSans_SemiCondensed-MediumItalic.ttf - static/OpenSans_SemiCondensed-SemiBoldItalic.ttf - static/OpenSans_SemiCondensed-BoldItalic.ttf - static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf - static/OpenSans-LightItalic.ttf - static/OpenSans-Italic.ttf - static/OpenSans-MediumItalic.ttf - static/OpenSans-SemiBoldItalic.ttf - static/OpenSans-BoldItalic.ttf - static/OpenSans-ExtraBoldItalic.ttf - -Get started ------------ - -1. Install the font files you want to use - -2. Use your app's font picker to view the font family and all the -available styles - -Learn more about variable fonts -------------------------------- - - https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts - https://variablefonts.typenetwork.com - https://medium.com/variable-fonts - -In desktop apps - - https://theblog.adobe.com/can-variable-fonts-illustrator-cc - https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts - -Online - - https://developers.google.com/fonts/docs/getting_started - https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide - https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts - -Installing fonts - - MacOS: https://support.apple.com/en-us/HT201749 - Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux - Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows - -Android Apps - - https://developers.google.com/fonts/docs/android - https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts - -License -------- -Please read the full license text (OFL.txt) to understand the permissions, -restrictions and requirements for usage, redistribution, and modification. - -You can use them in your products & projects – print or digital, -commercial or otherwise. - -This isn't legal advice, please consider consulting a lawyer and see the full -license for all details. diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Bold.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Bold.ttf deleted file mode 100644 index 98c74e0a..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Bold.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-BoldItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-BoldItalic.ttf deleted file mode 100644 index 85589283..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-BoldItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-ExtraBold.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-ExtraBold.ttf deleted file mode 100644 index 4eb33935..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-ExtraBold.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-ExtraBoldItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-ExtraBoldItalic.ttf deleted file mode 100644 index 75789b42..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-ExtraBoldItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Italic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Italic.ttf deleted file mode 100644 index 29ff6938..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Italic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Light.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Light.ttf deleted file mode 100644 index ea175cc3..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Light.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-LightItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-LightItalic.ttf deleted file mode 100644 index edbfe0b7..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-LightItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Medium.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Medium.ttf deleted file mode 100644 index ae716936..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Medium.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-MediumItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-MediumItalic.ttf deleted file mode 100644 index 6d1e09b2..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-MediumItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Regular.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Regular.ttf deleted file mode 100644 index 67803bb6..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-Regular.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-SemiBold.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-SemiBold.ttf deleted file mode 100644 index e5ab4644..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-SemiBold.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-SemiBoldItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-SemiBoldItalic.ttf deleted file mode 100644 index cd23e154..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans-SemiBoldItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Bold.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Bold.ttf deleted file mode 100644 index 525397da..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Bold.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-BoldItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-BoldItalic.ttf deleted file mode 100644 index d6c9bc0a..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-BoldItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-ExtraBold.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-ExtraBold.ttf deleted file mode 100644 index 3e600b9a..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-ExtraBold.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf deleted file mode 100644 index 03936508..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Italic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Italic.ttf deleted file mode 100644 index fdf0a52e..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Italic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Light.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Light.ttf deleted file mode 100644 index 459be7b4..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Light.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-LightItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-LightItalic.ttf deleted file mode 100644 index 5f05d08e..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-LightItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Medium.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Medium.ttf deleted file mode 100644 index 802200d2..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Medium.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-MediumItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-MediumItalic.ttf deleted file mode 100644 index b43786bb..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-MediumItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Regular.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Regular.ttf deleted file mode 100644 index a2a83ac6..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-Regular.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-SemiBold.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-SemiBold.ttf deleted file mode 100644 index 75bcd43c..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-SemiBold.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-SemiBoldItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-SemiBoldItalic.ttf deleted file mode 100644 index 9fcaa52e..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_Condensed-SemiBoldItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Bold.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Bold.ttf deleted file mode 100644 index dc927fc9..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Bold.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-BoldItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-BoldItalic.ttf deleted file mode 100644 index 7601048e..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-BoldItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-ExtraBold.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-ExtraBold.ttf deleted file mode 100644 index d6864b1d..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-ExtraBold.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf deleted file mode 100644 index ec7ade58..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Italic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Italic.ttf deleted file mode 100644 index 7fc00c82..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Italic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Light.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Light.ttf deleted file mode 100644 index 5936496a..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Light.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-LightItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-LightItalic.ttf deleted file mode 100644 index 7ced21a7..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-LightItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Medium.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Medium.ttf deleted file mode 100644 index 25b1aadf..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Medium.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-MediumItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-MediumItalic.ttf deleted file mode 100644 index fd87f785..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-MediumItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Regular.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Regular.ttf deleted file mode 100644 index 5b09b35b..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-Regular.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-SemiBold.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-SemiBold.ttf deleted file mode 100644 index fff3a372..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-SemiBold.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf b/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf deleted file mode 100644 index 3874205d..00000000 Binary files a/nuxeo-admin-console-web/angular-app/src/assets/fonts/Open_Sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf and /dev/null differ diff --git a/nuxeo-admin-console-web/angular-app/src/favicon.svg b/nuxeo-admin-console-web/angular-app/src/favicon.svg new file mode 100644 index 00000000..614ecf09 --- /dev/null +++ b/nuxeo-admin-console-web/angular-app/src/favicon.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + diff --git a/nuxeo-admin-console-web/angular-app/src/polyfills.ts b/nuxeo-admin-console-web/angular-app/src/polyfills.ts deleted file mode 100644 index fd47e4c8..00000000 --- a/nuxeo-admin-console-web/angular-app/src/polyfills.ts +++ /dev/null @@ -1 +0,0 @@ -import 'zone.js'; \ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/src/styles.scss b/nuxeo-admin-console-web/angular-app/src/styles.scss index cf172c08..a08e6de9 100644 --- a/nuxeo-admin-console-web/angular-app/src/styles.scss +++ b/nuxeo-admin-console-web/angular-app/src/styles.scss @@ -1,23 +1,4 @@ -@use "@angular/material" as mat; -@use "@hyland/ui" as hy; -@use "@hyland/ui/theming/hy-palette.theme"; -@use "@hyland/ui-shell" as hy-shell; -@use "sass:map"; - -@import "@hylandsoftware/hy-ui-icons/index.css"; - -@include hy.typography(); -@include hy.core(); - -@font-face { - font-family: "Open Sans"; - src: url("assets/fonts/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf") - format("truetype support variations"), - url("assets/fonts/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf") - format("truetype-variations"); - font-weight: 400 700; - font-display: swap; -} +@import "material-symbols/outlined.css"; html { position: relative; @@ -42,6 +23,7 @@ body { color: #373a3c; background-color: #f4f4f4; height: 100%; + letter-spacing: normal; } a { @@ -297,3 +279,219 @@ footer { .material-icons { font-feature-settings: "liga"; } + +$openSansFont: "Open Sans", sans-serif; +$sourceSansFont: "source sans pro", sans-serif; +$primaryBtn: #0a60ce !important; + +/* Snackbar */ +.mdc-snackbar.mat-mdc-snack-bar-container .mdc-snackbar__surface { + border-radius: 10px; + color: #000; + min-width: 250px; + width: auto; +} +.mdc-snackbar.mat-mdc-snack-bar-container .mdc-snackbar__label { + color: #000 !important; + text-align: center; + font-size: 16px; + font-family: $openSansFont; +} +.mdc-snackbar.mat-mdc-snack-bar-container.success-snack .mdc-snackbar__surface { + background-color: #e3f9e3; + border: 2px solid #46a829; +} +.mdc-snackbar.mat-mdc-snack-bar-container.error-snack .mdc-snackbar__surface { + background-color: #fff; + border: 2px solid red; +} + +/* Dialog */ + +.mat-mdc-dialog-content .mat-mdc-outlined-button:not(:disabled) { + border-color: #767b88; +} + +.mdc-dialog h2 { + font-weight: 300; + font-size: 32px; + font-family: $sourceSansFont; + margin-left: 22px; + margin-top: 20px; +} + +.mat-mdc-dialog-actions.mdc-dialog__actions { + justify-content: end; + padding-right: 25px; + margin-top: -6px; + button { + color: #fff; + border-radius: 8px; + min-width: 68px; + font-family: $openSansFont; + font-weight: 550; + letter-spacing: normal; + background-color: $primaryBtn; + } + button.mdc-button--outlined { + border-color: #767b88; + } + .abort-btn { + background-color: #fff !important; + color: #0a60ce; + } +} +.mat-mdc-dialog-container .mdc-dialog__container .mdc-dialog__surface { + border-radius: 12px; +} + +.mat-mdc-dialog-content.generic-modal p, +.mat-mdc-dialog-content.error-modal p { + font-family: $sourceSansFont; + color: #373a3c; + letter-spacing: normal; +} + +.mat-mdc-dialog-content .mat-mdc-outlined-button:not(:disabled) { + font-family: $openSansFont; + font-weight: 510; + letter-spacing: normal; + border-radius: 8px; + color: $primaryBtn; +} + +.mdc-dialog .mdc-dialog__content.generic-modal, +.mdc-dialog .mdc-dialog__content.error-modal { + padding: 5px 24px 8px 24px !important; + max-height: 140px; + .separator { + width: 100%; + background-color: #d1d5db; + } +} + +.mdc-dialog .mdc-dialog__content.error-modal { + height: 125px; +} +.mat-mdc-dialog-actions.mdc-dialog__actions.warning-dialog__actions { + padding-bottom: 15px; +} +.mdc-dialog .mdc-dialog__content.warning-dialog__content { + padding: 0px 24px 10px 24px !important; +} +.warning-dialog .mdc-label { + margin-bottom: 0; +} + +/* Form fields */ + +mat-form-field.input-field { + max-width: 350px; + width: 100%; + border-radius: 5px; + line-height: 10px; + p { + font-size: 14px; + } + mat-error { + margin-left: -18px; + margin-top: -2px; + } + .mat-mdc-text-field-wrapper { + height: 45px !important; + .mat-mdc-form-field-flex .mat-mdc-floating-label { + top: 20px; + } + } + button { + font-family: $openSansFont; + font-size: 16px; + } + .mdc-text-field--no-label:not(.mdc-text-field--textarea) + .mat-mdc-form-field-input-control.mdc-text-field__input, + .mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control, + .mat-mdc-select { + font-size: 14px; + font-family: $openSansFont; + } +} + +mat-form-field.input-field.nxql { + max-width: 600px; + width: 100%; + min-height: 60px; + height: auto; + + .mat-mdc-select { + color: #000; + } + + .mat-mdc-text-field-wrapper.mdc-text-field--outlined + .mat-mdc-form-field-infix { + padding-top: 10px; + padding-bottom: 10px; + min-height: 0; + } + + .mat-mdc-text-field-wrapper { + .mat-mdc-form-field-flex { + font-size: 14px; + font-weight: 400; + line-height: 23px; + font-family: Open Sans, sans-serif; + letter-spacing: normal; + } + } + + mat-error { + margin-left: -18px; + margin-top: -2px; + } + + button.mdc-button { + background-color: $primaryBtn; + } + .mdc-text-field--no-label:not(.mdc-text-field--textarea) + .mat-mdc-form-field-input-control.mdc-text-field__input, + .mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control { + font-size: 14px; + font-family: $openSansFont; + } +} + +mat-form-field.input-field.nxql .mat-mdc-text-field-wrapper { + height: auto !important; +} + +mat-form-field.input-field.recompute + .mat-mdc-text-field-wrapper.mdc-text-field--outlined + .mat-mdc-form-field-infix { + padding-top: 10px; +} +/* mat card */ + +.bulk-action-details { + mat-card.mat-mdc-card { + border-radius: 12px; + border: 1px solid #d1d5db; + box-shadow: none; + padding: 25px; + } + + .mat-mdc-card-content { + width: 100%; + height: 100%; + padding: 0; + } +} + +.mat-mdc-tab-link-container + .mat-mdc-tab-links + .mdc-tab__content + .mdc-tab__text-label { + font-family: $openSansFont; + font-size: 14px; + font-weight: 500; + color: #173e65; + letter-spacing: normal; +} \ No newline at end of file diff --git a/nuxeo-admin-console-web/angular-app/tsconfig.app.json b/nuxeo-admin-console-web/angular-app/tsconfig.app.json index 82d91dc4..374cc9d2 100644 --- a/nuxeo-admin-console-web/angular-app/tsconfig.app.json +++ b/nuxeo-admin-console-web/angular-app/tsconfig.app.json @@ -6,8 +6,7 @@ "types": [] }, "files": [ - "src/main.ts", - "src/polyfills.ts" + "src/main.ts" ], "include": [ "src/**/*.d.ts" diff --git a/nuxeo-admin-console-web/angular-app/tsconfig.json b/nuxeo-admin-console-web/angular-app/tsconfig.json index 709bcd91..155e9d98 100644 --- a/nuxeo-admin-console-web/angular-app/tsconfig.json +++ b/nuxeo-admin-console-web/angular-app/tsconfig.json @@ -1,6 +1,5 @@ /* To learn more about this file see: https://angular.io/config/tsconfig. */ { - "extends": "./node_modules/@hylandsoftware/hy-ui-standards/angular/tsconfig.json", "compileOnSave": false, "compilerOptions": { "baseUrl": "./", @@ -28,7 +27,5 @@ "strictInputAccessModifiers": true, "strictTemplates": true }, - "include": ["src/main.ts", "src/polyfills.ts"], - "files": ["src/polyfills.ts"], "styles": ["src/styles.scss"] } diff --git a/nuxeo-admin-console-web/pom.xml b/nuxeo-admin-console-web/pom.xml index 47d81ac6..b6a174d8 100644 --- a/nuxeo-admin-console-web/pom.xml +++ b/nuxeo-admin-console-web/pom.xml @@ -3,13 +3,13 @@ org.nuxeo.admin.console nuxeoadmin - 23.0.5-SNAPSHOT + 23.0.6-SNAPSHOT ../pom.xml nuxeo-admin-console-web Admin console - 23.0.5-SNAPSHOT + 23.0.6-SNAPSHOT diff --git a/pom.xml b/pom.xml index bb03e97a..bf31b8cb 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ org.nuxeo.admin.console nuxeoadmin - 23.0.5-SNAPSHOT + 23.0.6-SNAPSHOT Admin Console UI Nuxeo Admin console UI is a standard base web application for Nuxeo admin users. pom