From 3c95e3c14c40122050c5886c487010f770a8a0c4 Mon Sep 17 00:00:00 2001 From: Max Novelli Date: Sat, 17 May 2025 22:11:28 +0200 Subject: [PATCH 01/18] changed header and breadcrumb --- .../_layout/app-header/_app-header-theme.scss | 7 ++-- .../app-header/app-header.component.html | 33 +++++++++++++++--- .../app-header/app-header.component.scss | 8 +++-- .../app-header/app-header.component.ts | 3 +- src/app/app-config.service.ts | 2 ++ .../full-text-search-bar.component.scss | 3 +- .../breadcrumb/breadcrumb.component.scss | 4 +-- ...r-logo.png => scicat-header-logo-full.png} | Bin src/assets/images/scicat-header-logo-icon.png | Bin 0 -> 41869 bytes 9 files changed, 46 insertions(+), 14 deletions(-) rename src/assets/images/{scicat-header-logo.png => scicat-header-logo-full.png} (100%) create mode 100644 src/assets/images/scicat-header-logo-icon.png diff --git a/src/app/_layout/app-header/_app-header-theme.scss b/src/app/_layout/app-header/_app-header-theme.scss index 046d393f3b..75d1c5cdfe 100644 --- a/src/app/_layout/app-header/_app-header-theme.scss +++ b/src/app/_layout/app-header/_app-header-theme.scss @@ -7,10 +7,11 @@ .header { mat-toolbar { - background-color: mat.m2-get-color-from-palette($primary, "darker"); + background-color: mat.m2-get-color-from-palette($primary, "default-contrast"); + border-bottom: 2px solid mat.m2-get-color-from-palette($primary, "default"); } - a { - color: mat.m2-get-color-from-palette($primary, "default-contrast"); + a, h3 { + color: mat.m2-get-color-from-palette($primary, "default"); } } } diff --git a/src/app/_layout/app-header/app-header.component.html b/src/app/_layout/app-header/app-header.component.html index c19064f561..d646d646dd 100644 --- a/src/app/_layout/app-header/app-header.component.html +++ b/src/app/_layout/app-header/app-header.component.html @@ -1,5 +1,5 @@
- + + + diff --git a/src/app/_layout/app-header/app-header.component.scss b/src/app/_layout/app-header/app-header.component.scss index 1e4dd4f469..274ce53eea 100644 --- a/src/app/_layout/app-header/app-header.component.scss +++ b/src/app/_layout/app-header/app-header.component.scss @@ -7,7 +7,7 @@ mat-toolbar { height: 3.5rem; - a { + a, .main-menu { height: 2.5rem; padding: 0.5rem; @@ -17,10 +17,14 @@ } } - .spacer { + .spacer, .title { flex: 1 1 auto; } + .title h3 { + text-align: center; + } + .toplink { padding: 0.5rem 1rem; font: bold; diff --git a/src/app/_layout/app-header/app-header.component.ts b/src/app/_layout/app-header/app-header.component.ts index dd1db860f0..6f88c8f098 100644 --- a/src/app/_layout/app-header/app-header.component.ts +++ b/src/app/_layout/app-header/app-header.component.ts @@ -24,7 +24,8 @@ import { Router } from "@angular/router"; export class AppHeaderComponent implements OnInit { config = this.appConfigService.getConfig(); facility = this.config.facility ?? ""; - status = this.appConfig.production ? "" : "test"; + siteTitle = this.config.siteTitle ?? "Vanilla SciCat"; + siteSciCatLogo = this.config.siteSciCatLogo == "icon" ? "scicat-header-logo-icon.png" : "scicat-header-logo-full.png"; siteHeaderLogo = this.config.siteHeaderLogo ?? "site-header-logo.png"; oAuth2Endpoints: OAuth2Endpoint[] = []; diff --git a/src/app/app-config.service.ts b/src/app/app-config.service.ts index c906f8a982..6eeb180dc9 100644 --- a/src/app/app-config.service.ts +++ b/src/app/app-config.service.ts @@ -89,6 +89,8 @@ export interface AppConfig { shareEnabled: boolean; shoppingCartEnabled: boolean; shoppingCartOnHeader: boolean; + siteTitle: string | null; + siteSciCatLogo: string | null; siteHeaderLogo: string | null; siteLoginBackground: string | null; siteLoginLogo: string | null; diff --git a/src/app/datasets/dashboard/full-text-search/full-text-search-bar.component.scss b/src/app/datasets/dashboard/full-text-search/full-text-search-bar.component.scss index 2404756ede..c01453aeb2 100644 --- a/src/app/datasets/dashboard/full-text-search/full-text-search-bar.component.scss +++ b/src/app/datasets/dashboard/full-text-search/full-text-search-bar.component.scss @@ -1,6 +1,6 @@ mat-card { padding: 0.4em; - margin: 1.5em 0.5em 0.5em; + margin: 0.5em 0.5em 0.5em; .search-card-container { display: flex; @@ -20,4 +20,5 @@ mat-card { .full-text-clear-button { margin:0 2px; } + } diff --git a/src/app/shared/modules/breadcrumb/breadcrumb.component.scss b/src/app/shared/modules/breadcrumb/breadcrumb.component.scss index 428fc94066..6868502e78 100644 --- a/src/app/shared/modules/breadcrumb/breadcrumb.component.scss +++ b/src/app/shared/modules/breadcrumb/breadcrumb.component.scss @@ -1,11 +1,11 @@ .breadcrumb { - margin: 1rem 0; + margin: 0.1rem 0; padding-left: 1rem; .container { border-top: 1px solid; border-bottom: 1px solid; - padding: 0.3em 0; + padding: 0.1em 0; .active { font-weight: bold; diff --git a/src/assets/images/scicat-header-logo.png b/src/assets/images/scicat-header-logo-full.png similarity index 100% rename from src/assets/images/scicat-header-logo.png rename to src/assets/images/scicat-header-logo-full.png diff --git a/src/assets/images/scicat-header-logo-icon.png b/src/assets/images/scicat-header-logo-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a861292374fafcff09b859beadd635d0f9aeb8e8 GIT binary patch literal 41869 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

-#TV24i8U<2sw{DD|A3PDQ|hdZqu09Ak&-0l{@d z7q#Bl-WJ?$>uSl9{G)`Yz;Wt4T&NP_OwHyupqUlzx~***v>HZ2W2|Hg7W;C+xfo$B z3yx;~VBV96baIPT-(G{PeokbH+(xj?dx)WED}t3(97MNeD)-ET;<@JECdx*@gb zx3K{k=5smT&v1Xn zd$YDU&@UIh#Mc$ZAO*p5#{{}Ckf)szMPX4GmsviO-4P;ok=ADAk`)(soT`Y7N>a8C`X6h7{fGbn literal 0 HcmV?d00001 From 51c04c721d96c009a1a521a9f7e6b1f760b68d0a Mon Sep 17 00:00:00 2001 From: Max Novelli Date: Sat, 17 May 2025 22:11:51 +0200 Subject: [PATCH 02/18] changed configuration --- src/assets/config.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/assets/config.json b/src/assets/config.json index 38eee0ed18..b12c6b888b 100644 --- a/src/assets/config.json +++ b/src/assets/config.json @@ -11,6 +11,8 @@ "externalAuthEndpoint": "/auth/msad", "facility": "Local", "siteIcon": "site-header-logo.png", + "sitetitle" : "", + "siteSciCatLogo" : "", "loginFacilityLabel": "ESS", "loginLdapLabel": "Ldap", "loginLocalLabel": "Local", From 8b536d52f599ac54b48156651149aa2392118479 Mon Sep 17 00:00:00 2001 From: Max Novelli Date: Fri, 23 May 2025 17:19:43 +0200 Subject: [PATCH 03/18] updated selection and user graphic, standardized sarch and reset buttons --- .../_layout/app-header/_app-header-theme.scss | 2 +- .../app-header/app-header.component.html | 13 +++--------- .../full-text-search-bar.component.html | 20 +++++++++--------- .../datasets-filter.component.html | 20 +++++++++--------- .../selectors/user.selectors.ts | 2 +- src/assets/images/user_main_color.png | Bin 0 -> 17468 bytes 6 files changed, 25 insertions(+), 32 deletions(-) create mode 100644 src/assets/images/user_main_color.png diff --git a/src/app/_layout/app-header/_app-header-theme.scss b/src/app/_layout/app-header/_app-header-theme.scss index 75d1c5cdfe..604d21c036 100644 --- a/src/app/_layout/app-header/_app-header-theme.scss +++ b/src/app/_layout/app-header/_app-header-theme.scss @@ -10,7 +10,7 @@ background-color: mat.m2-get-color-from-palette($primary, "default-contrast"); border-bottom: 2px solid mat.m2-get-color-from-palette($primary, "default"); } - a, h3 { + a, h3, div { color: mat.m2-get-color-from-palette($primary, "default"); } } diff --git a/src/app/_layout/app-header/app-header.component.html b/src/app/_layout/app-header/app-header.component.html index d646d646dd..e7f86332b0 100644 --- a/src/app/_layout/app-header/app-header.component.html +++ b/src/app/_layout/app-header/app-header.component.html @@ -110,20 +110,13 @@

@@ -134,7 +127,7 @@
diff --git a/src/app/datasets/dashboard/full-text-search/full-text-search-bar.component.html b/src/app/datasets/dashboard/full-text-search/full-text-search-bar.component.html index c312895391..8c95a1dc87 100644 --- a/src/app/datasets/dashboard/full-text-search/full-text-search-bar.component.html +++ b/src/app/datasets/dashboard/full-text-search/full-text-search-bar.component.html @@ -13,6 +13,16 @@ />
+ -
diff --git a/src/app/datasets/datasets-filter/datasets-filter.component.html b/src/app/datasets/datasets-filter/datasets-filter.component.html index 7886cfd337..3f7d8ba37b 100644 --- a/src/app/datasets/datasets-filter/datasets-filter.component.html +++ b/src/app/datasets/datasets-filter/datasets-filter.component.html @@ -41,23 +41,23 @@
diff --git a/src/app/state-management/selectors/user.selectors.ts b/src/app/state-management/selectors/user.selectors.ts index 422ebb8d85..1c2c836ef6 100644 --- a/src/app/state-management/selectors/user.selectors.ts +++ b/src/app/state-management/selectors/user.selectors.ts @@ -40,7 +40,7 @@ export const selectThumbnailPhoto = createSelector(selectProfile, (profile) => { return profile.thumbnailPhoto; } - return "assets/images/user.png"; + return "assets/images/user_main_color.png"; }); export const selectIsAdmin = createSelector( diff --git a/src/assets/images/user_main_color.png b/src/assets/images/user_main_color.png new file mode 100644 index 0000000000000000000000000000000000000000..b4ebb1781dfbd88dada5e166ec28f9f2e3b734ed GIT binary patch literal 17468 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 K{Z7&(^#1@`TewmH literal 0 HcmV?d00001 From a44d95386fc89c8a7e0d1b61efd513bd2edd6768 Mon Sep 17 00:00:00 2001 From: Max Novelli Date: Mon, 26 May 2025 14:36:09 +0200 Subject: [PATCH 04/18] added hamburger icon --- .../_layout/app-header/app-header.component.html | 15 ++++++++------- .../_layout/app-header/app-header.component.scss | 4 ++++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/app/_layout/app-header/app-header.component.html b/src/app/_layout/app-header/app-header.component.html index e7f86332b0..db24d02514 100644 --- a/src/app/_layout/app-header/app-header.component.html +++ b/src/app/_layout/app-header/app-header.component.html @@ -58,19 +58,20 @@ - +
---> + diff --git a/src/app/_layout/app-header/app-header.component.scss b/src/app/_layout/app-header/app-header.component.scss index 274ce53eea..9a751f1d69 100644 --- a/src/app/_layout/app-header/app-header.component.scss +++ b/src/app/_layout/app-header/app-header.component.scss @@ -16,6 +16,10 @@ margin-right: 0.5rem; } } + .main-menu mat-icon { + font-size: 32px; + padding-top: 5px; + } .spacer, .title { flex: 1 1 auto; From 910c003d03954be17dbe0552893245178b4d8bf8 Mon Sep 17 00:00:00 2001 From: Max Novelli Date: Mon, 23 Jun 2025 14:08:35 +0200 Subject: [PATCH 05/18] fixed hamburger menu --- src/app/_layout/app-header/app-header.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/_layout/app-header/app-header.component.html b/src/app/_layout/app-header/app-header.component.html index db24d02514..78c0efe66b 100644 --- a/src/app/_layout/app-header/app-header.component.html +++ b/src/app/_layout/app-header/app-header.component.html @@ -58,7 +58,7 @@ - - - - - - + + + + + + + + + +

{{ siteTitle }}

diff --git a/src/app/_layout/app-header/app-header.component.scss b/src/app/_layout/app-header/app-header.component.scss index 9a751f1d69..a064ecd304 100644 --- a/src/app/_layout/app-header/app-header.component.scss +++ b/src/app/_layout/app-header/app-header.component.scss @@ -19,6 +19,7 @@ .main-menu mat-icon { font-size: 32px; padding-top: 5px; + cursor: pointer; } .spacer, .title { diff --git a/src/app/_layout/app-header/app-header.component.ts b/src/app/_layout/app-header/app-header.component.ts index caec25e321..00b7c74aca 100644 --- a/src/app/_layout/app-header/app-header.component.ts +++ b/src/app/_layout/app-header/app-header.component.ts @@ -50,7 +50,8 @@ export class AppHeaderComponent implements OnInit, OnDestroy { mainMenuConfig: MainMenuOptions | null = this.config.mainMenu?.nonAuthenticatedUser || null; defaultMainPage: MainPageOptions = MainPageOptions.DATASETS; - headerLogoLink = "/datasets"; + siteHeaderLogoUrl = "/datasets"; + isSiteHeaderLogoUrlExternal = false; constructor( public appConfigService: AppConfigService, @@ -95,13 +96,18 @@ export class AppHeaderComponent implements OnInit, OnDestroy { this.config.defaultMainPage?.nonAuthenticatedUser || "DATASETS" ]; } - this.headerLogoLink = this.config.headerSiteLogoLink - ? this.config.headerSiteLogoLink + this.siteHeaderLogoUrl = this.config.siteHeaderLogoUrl + ? this.config.siteHeaderLogoUrl : this.defaultMainPage; + this.isSiteHeaderLogoUrlExternal = this.isFullUrl(this.siteHeaderLogoUrl); }); } ngOnDestroy(): void { this.sub.unsubscribe(); } + + isFullUrl(url: string): boolean { + return url.startsWith('http://') || url.startsWith('https://'); + } } diff --git a/src/app/app-config.service.ts b/src/app/app-config.service.ts index f7e61d8f73..a31c5e63af 100644 --- a/src/app/app-config.service.ts +++ b/src/app/app-config.service.ts @@ -138,7 +138,7 @@ export interface AppConfigInterface { labelsLocalization?: LabelsLocalization; dateFormat?: string; defaultMainPage?: MainPageConfiguration; - headerSiteLogoLink?: string; + siteHeaderLogoUrl?: string; mainMenu?: MainMenuConfiguration; supportEmail?: string; } From 20aa50296aa49fa847389b5ff4178a55cfa5c47d Mon Sep 17 00:00:00 2001 From: Max Novelli Date: Thu, 31 Jul 2025 11:27:15 +0200 Subject: [PATCH 13/18] Fixed linting --- src/app/_layout/app-header/app-header.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/_layout/app-header/app-header.component.ts b/src/app/_layout/app-header/app-header.component.ts index 00b7c74aca..570d79351f 100644 --- a/src/app/_layout/app-header/app-header.component.ts +++ b/src/app/_layout/app-header/app-header.component.ts @@ -108,6 +108,6 @@ export class AppHeaderComponent implements OnInit, OnDestroy { } isFullUrl(url: string): boolean { - return url.startsWith('http://') || url.startsWith('https://'); + return url.startsWith("http://") || url.startsWith("https://"); } } From 8e277e54e8590ca3464e5f03230c93f5e75d9ead Mon Sep 17 00:00:00 2001 From: Max Novelli Date: Thu, 31 Jul 2025 11:33:15 +0200 Subject: [PATCH 14/18] Added E2E tests --- cypress/e2e/mainPage/main-page.cy.js | 84 ++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 cypress/e2e/mainPage/main-page.cy.js diff --git a/cypress/e2e/mainPage/main-page.cy.js b/cypress/e2e/mainPage/main-page.cy.js new file mode 100644 index 0000000000..5257b14414 --- /dev/null +++ b/cypress/e2e/mainPage/main-page.cy.js @@ -0,0 +1,84 @@ +import { testData } from "../../fixtures/testData"; + +describe("Main Page", () => { + beforeEach(() => { + cy.login(Cypress.env("username"), Cypress.env("password")); + cy.createDataset( + "raw", + "Main Page Dataset Public", + "20150729", + "small", + true, + ); + cy.createDataset( + "raw", + "Main Page Dataset Non Public", + "20150729", + "small", + false, + ); + }); + + after(() => { + cy.removeDatasets(); + }); + + describe("Main page configuration as non authenticated user", () => { + it("should visit main page correctly configured", () => { + cy.visit("http://localhost:3000"); + + cy.finishedLoading(); + + cy.get("breadcrumb div span a").should('contain', "Datasets"); + + cy.get("div.header mat-toolbar.mat-toolbar.mat-elevation-z1.mat-primary.mat-toolbar-single-row a").eq(0).should('have.attr','href','/datasets'); + cy.get("div.header mat-toolbar.mat-toolbar.mat-elevation-z1.mat-primary.mat-toolbar-single-row a").eq(1).should('have.attr','href','https://my.facility.eu'); + + cy.get('#mat-mdc-menu-panel-0 mat-mdc-menu-content div mat-mdc-menu-item-text span').eq(0).should('contain','Datasets') + cy.get('#mat-mdc-menu-panel-0 mat-mdc-menu-content div mat-mdc-menu-item-text span').eq(1).should('contain','Instruments') + cy.get('#mat-mdc-menu-panel-0 mat-mdc-menu-content div mat-mdc-menu-item-text span').eq(0).should('contain','Proposals') + cy.get('#mat-mdc-menu-panel-0 mat-mdc-menu-content div mat-mdc-menu-item-text span').eq(0).should('contain','Published Data') + + cy.get('[data-cy="login-button"]').should('exists'); + + //cy.get("mat-row").contains("Main Page Dataset Public").click(); + }); + }); + + describe("Main page configuration as authenticated user", () => { + it("should visit main page correctly configured", () => { + const username = Cypress.env("username"); + const password = Cypress.env("password"); + + cy.visit("/login"); + + cy.finishedLoading(); + + cy.url().should("include", "/login"); + + cy.get('mat-tab-group [role="tab"]').contains("Local").click(); + + cy.get("#usernameInput").type(username).should("have.value", username); + cy.get("#passwordInput").type(password).should("have.value", password); + + cy.get("button[type=submit]").click(); + + cy.url().should("include", "/proposals"); + + cy.finishedLoading(); + + cy.get("breadcrumb div span a").should('contain', "Proposals"); + + cy.get("div.header mat-toolbar.mat-toolbar.mat-elevation-z1.mat-primary.mat-toolbar-single-row a").eq(0).should('have.attr','href','/proposals'); + cy.get("div.header mat-toolbar.mat-toolbar.mat-elevation-z1.mat-primary.mat-toolbar-single-row a").eq(1).should('have.attr','href','my.facility.eu'); + + cy.get('#mat-mdc-menu-panel-0 mat-mdc-menu-content div mat-mdc-menu-item-text span').eq(1).should('contain','Files') + + cy.get('[data-cy="login-button"]').should('not exists'); + cy.get('user-button').should('exists'); + + //cy.get("mat-row").contains("Main Page Dataset Non Public").click(); + }); + }); + +}); From 6c00b58db37d45bca29acaf0f753cc7b805586c4 Mon Sep 17 00:00:00 2001 From: Max Novelli Date: Thu, 31 Jul 2025 12:55:48 +0200 Subject: [PATCH 15/18] Fixed tests --- cypress/e2e/mainPage/main-page.cy.js | 64 +++++++++++++++++----------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/cypress/e2e/mainPage/main-page.cy.js b/cypress/e2e/mainPage/main-page.cy.js index 5257b14414..ee8705c521 100644 --- a/cypress/e2e/mainPage/main-page.cy.js +++ b/cypress/e2e/mainPage/main-page.cy.js @@ -25,21 +25,31 @@ describe("Main Page", () => { describe("Main page configuration as non authenticated user", () => { it("should visit main page correctly configured", () => { - cy.visit("http://localhost:3000"); + const username = Cypress.env("username"); + + cy.visit("/"); + cy.finishedLoading(); + + cy.get(".user-button").should("contain.text", username).click(); + + cy.get("[data-cy=logout-button]").click(); cy.finishedLoading(); + cy.visit("/"); - cy.get("breadcrumb div span a").should('contain', "Datasets"); + cy.finishedLoading(); + + cy.get("breadcrumb > div > span > a").should('contain', "Datasets"); cy.get("div.header mat-toolbar.mat-toolbar.mat-elevation-z1.mat-primary.mat-toolbar-single-row a").eq(0).should('have.attr','href','/datasets'); - cy.get("div.header mat-toolbar.mat-toolbar.mat-elevation-z1.mat-primary.mat-toolbar-single-row a").eq(1).should('have.attr','href','https://my.facility.eu'); - - cy.get('#mat-mdc-menu-panel-0 mat-mdc-menu-content div mat-mdc-menu-item-text span').eq(0).should('contain','Datasets') - cy.get('#mat-mdc-menu-panel-0 mat-mdc-menu-content div mat-mdc-menu-item-text span').eq(1).should('contain','Instruments') - cy.get('#mat-mdc-menu-panel-0 mat-mdc-menu-content div mat-mdc-menu-item-text span').eq(0).should('contain','Proposals') - cy.get('#mat-mdc-menu-panel-0 mat-mdc-menu-content div mat-mdc-menu-item-text span').eq(0).should('contain','Published Data') + cy.get("div.header mat-toolbar.mat-toolbar.mat-elevation-z1.mat-primary.mat-toolbar-single-row a").eq(1).should('have.attr','href','https://my.facility.site'); + + cy.get("div.main-menu").click() + + cy.get('button.mat-mdc-menu-item:nth-child(1) > span:nth-child(2) > span:nth-child(1)').should('contain','Datasets') + cy.get('button.mat-mdc-menu-item:nth-child(4) > span:nth-child(2) > span:nth-child(1)').should('contain','Published Data') - cy.get('[data-cy="login-button"]').should('exists'); + cy.get('[data-cy="login-button"]').should('exist'); //cy.get("mat-row").contains("Main Page Dataset Public").click(); }); @@ -50,34 +60,38 @@ describe("Main Page", () => { const username = Cypress.env("username"); const password = Cypress.env("password"); - cy.visit("/login"); + // cy.visit("/login"); - cy.finishedLoading(); - - cy.url().should("include", "/login"); + // cy.finishedLoading(); - cy.get('mat-tab-group [role="tab"]').contains("Local").click(); + // cy.url().should("include", "/login"); - cy.get("#usernameInput").type(username).should("have.value", username); - cy.get("#passwordInput").type(password).should("have.value", password); + // cy.get('mat-tab-group [role="tab"]').contains("Local").click(); - cy.get("button[type=submit]").click(); + // cy.get("#usernameInput").type(username).should("have.value", username); + // cy.get("#passwordInput").type(password).should("have.value", password); - cy.url().should("include", "/proposals"); + // cy.get("button[type=submit]").click(); + cy.visit("/"); cy.finishedLoading(); - cy.get("breadcrumb div span a").should('contain', "Proposals"); + cy.url().should("include", "/proposals"); + + cy.get("breadcrumb > div > span > a").should('contain', "Proposals"); cy.get("div.header mat-toolbar.mat-toolbar.mat-elevation-z1.mat-primary.mat-toolbar-single-row a").eq(0).should('have.attr','href','/proposals'); - cy.get("div.header mat-toolbar.mat-toolbar.mat-elevation-z1.mat-primary.mat-toolbar-single-row a").eq(1).should('have.attr','href','my.facility.eu'); - - cy.get('#mat-mdc-menu-panel-0 mat-mdc-menu-content div mat-mdc-menu-item-text span').eq(1).should('contain','Files') + cy.get("div.header mat-toolbar.mat-toolbar.mat-elevation-z1.mat-primary.mat-toolbar-single-row a").eq(1).should('have.attr','href','https://my.facility.site'); + + cy.get("div.main-menu").click() + + cy.get('button.mat-mdc-menu-item:nth-child(2) > span:nth-child(2) > span:nth-child(1)').should('contain','Files') + + cy.get("div.main-menu").click() - cy.get('[data-cy="login-button"]').should('not exists'); - cy.get('user-button').should('exists'); + cy.get('[data-cy="login-button"]').should('not.exist'); + cy.get('.user-button').should('exist'); - //cy.get("mat-row").contains("Main Page Dataset Non Public").click(); }); }); From 01cff630d36262a1b436aa21e06ee93d2d1b81cb Mon Sep 17 00:00:00 2001 From: Max Novelli Date: Thu, 31 Jul 2025 15:29:32 +0200 Subject: [PATCH 16/18] Updated E2E FE configuration --- CI/e2e/frontend.config.e2e.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CI/e2e/frontend.config.e2e.json b/CI/e2e/frontend.config.e2e.json index 9a97056089..0933d852b6 100644 --- a/CI/e2e/frontend.config.e2e.json +++ b/CI/e2e/frontend.config.e2e.json @@ -237,7 +237,7 @@ } }, "dateFormat": "yyyy-MM-dd HH:mm", - "datasetDetailComponent": { + "datasetDetailComponent": { "enableCustomizedComponent": false, "customization": [ { @@ -426,7 +426,7 @@ "nonAuthenticatedUser": "DATASETS", "authenticatedUser": "PROPOSALS" }, - "headerSiteLogoLink": "https://my.facility.eu", + "headerSiteLogoURL": "https://my.facility.site", "mainMenu": { "nonAuthenticatedUser": { "datasets": true, From cf3791577d1bb7adc2c2d9371edbd53bad93dbde Mon Sep 17 00:00:00 2001 From: Max Novelli Date: Thu, 31 Jul 2025 15:41:55 +0200 Subject: [PATCH 17/18] Fixing wrong name on configuration --- CI/e2e/frontend.config.e2e.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CI/e2e/frontend.config.e2e.json b/CI/e2e/frontend.config.e2e.json index 0933d852b6..7bdad6c8de 100644 --- a/CI/e2e/frontend.config.e2e.json +++ b/CI/e2e/frontend.config.e2e.json @@ -426,7 +426,7 @@ "nonAuthenticatedUser": "DATASETS", "authenticatedUser": "PROPOSALS" }, - "headerSiteLogoURL": "https://my.facility.site", + "siteHeaderLogoUrl": "https://my.facility.site", "mainMenu": { "nonAuthenticatedUser": { "datasets": true, From f1d305ed38ed10871e5e556cec52fd683ff569d3 Mon Sep 17 00:00:00 2001 From: Max Novelli Date: Thu, 31 Jul 2025 16:47:48 +0200 Subject: [PATCH 18/18] First draft of FE configuration documentation --- docs/configuration/configuration.md | 307 ++++++++++++++++++++++++++++ 1 file changed, 307 insertions(+) create mode 100644 docs/configuration/configuration.md diff --git a/docs/configuration/configuration.md b/docs/configuration/configuration.md new file mode 100644 index 0000000000..6b8b9bee9d --- /dev/null +++ b/docs/configuration/configuration.md @@ -0,0 +1,307 @@ +# SciCat Frontend Configuration +SciCat frontend can be configured using a json object containing the entries listed below. +The json configuration object can be provided together with the app or through a URL. +Most of the time it is provided upon request directly from SciCat BE through the endpoint `/admin/config` + +## Configuration Options +- skipSciCatLoginPageEnabled: + - Type: boolean; + - Description: +- accessTokenPrefix: + - Type: string; + - Description: +- addDatasetEnabled: + - Type: boolean; + - Description: +- archiveWorkflowEnabled: + - Type: boolean; + - Description: +- datasetJsonScientificMetadata: + - Type: boolean; + - Description: +- datasetReduceEnabled: + - Type: boolean; + - Description: +- datasetDetailsShowMissingProposalId: + - Type: boolean; + - Description: +- datafilesActionsEnabled: + - Type: boolean; + - Description: +- datafilesActions: + - Type: any[]; + - Description: +- editDatasetEnabled: + - Type: boolean; + - Description: +- editDatasetSampleEnabled: + - Type: boolean; + - Description: +- editMetadataEnabled: + - Type: boolean; + - Description: +- editPublishedData: + - Type: boolean; + - Description: +- addSampleEnabled: + - Type: boolean; + - Description: +- externalAuthEndpoint: + - Type: string | null; + - Description: +- facility: + - Type: string | null; + - Description: +- loginFacilityLabel: + - Type: string | null; + - Description: +- loginLdapLabel: + - Type: string | null; + - Description: +- loginLocalLabel: + - Type: string | null; + - Description: +- loginFacilityEnabled: + - Type: boolean; + - Description: +- loginLdapEnabled: + - Type: boolean; + - Description: +- loginLocalEnabled: + - Type: boolean; + - Description: +- fileColorEnabled: + - Type: boolean; + - Description: +- fileDownloadEnabled: + - Type: boolean; + - Description: +- gettingStarted: + - Type: string | null; + - Description: +- ingestManual: + - Type: string | null; + - Description: +- jobsEnabled: + - Type: boolean; + - Description: +- jsonMetadataEnabled: + - Type: boolean; + - Description: +- jupyterHubUrl: + - Type: string | null; + - Description: +- landingPage: + - Type: string | null; + - Description: +- lbBaseURL: + - Type: string; + - Description: +- localColumns?: + - Type: TableColumn[]; // localColumns is deprecated and should be removed in the future + - Description: +- logbookEnabled: + - Type: boolean; + - Description: +- loginFormEnabled: + - Type: boolean; + - Description: +- maxDirectDownloadSize: + - Type: number | null; + - Description: +- metadataPreviewEnabled: + - Type: boolean; + - Description: +- metadataStructure: + - Type: string; + - Description: +- multipleDownloadAction: + - Type: string | null; + - Description: +- multipleDownloadEnabled: + - Type: boolean; + - Description: +- multipleDownloadUseAuthToken: + - Type: boolean; + - Description: +- oAuth2Endpoints: + - Type: OAuth2Endpoint[]; + - Description: +- policiesEnabled: + - Type: boolean; + - Description: +- retrieveDestinations?: + - Type: RetrieveDestinations[]; + - Description: +- riotBaseUrl: + - Type: string | null; + - Description: +- scienceSearchEnabled: + - Type: boolean; + - Description: +- scienceSearchUnitsEnabled: + - Type: boolean; + - Description: +- searchPublicDataEnabled: + - Type: boolean; + - Description: +- searchSamples: + - Type: boolean; + - Description: +- sftpHost: + - Type: string | null; + - Description: +- sourceFolder?: + - Type: string; + - Description: +- maxFileSizeWarning?: + - Type: string; + - Description: +- shareEnabled: + - Type: boolean; + - Description: +- shoppingCartEnabled: + - Type: boolean; + - Description: +- shoppingCartOnHeader: + - Type: boolean; + - Description: +### siteTitle: + - Type: string | null; + - Description: String shown at the center of the header. If left empty, no string is presented. + - Default: None +### siteSciCatLogo: + - Type: string | null; + - Options: icon, full + - Description: Type of SciCat logo shown in the app header. + If `icon` is selected, the compact logo of SciCat is shown, which is contained in the file `src/assets/images/scicat-header-logo-icon.png`. + If `full` is selected, the full SciCat logo is shown. The full logo is saved in the file `src/assets/images/scicat-header-logo-full.png`. + - Required +### siteHeaderLogo: + - Type: string | null; + - Description: Name of the file with that contains the logo of the facility/lab/company/legal entity that runs the instance of scicat. This shuld be only the name of the file. The path is relative to _`src/assets/images`_. + If SciCat FE is run in a container using the official release image, the file should be mounted in the container under the path just mentioned. + - Example: assets/images/ess-logo-small.png + - Default: None + - Required +### siteHeaderLogoLink: + - Type: string; + - Description: This string will tell which url should be shown when th euser click on the side logo in the header. It can be an in-app path or a full URL. + - Examples: + If we want to show the datasets list when the user click on the site logo, the value should be set to _`/datasets`_. + If we want to link to the main facility web site, the value should be set to the public facing website of the facility: _`https://my.facility.site`_ + - Optional +- siteLoginBackground: + - Type: string | null; + - Description: +- siteLoginLogo: + - Type: string | null; + - Description: +- tableSciDataEnabled: + - Type: boolean; + - Description: +- fileserverBaseURL: + - Type: string; + - Description: +- fileserverButtonLabel: + - Type: string | undefined; + - Description: +- helpMessages?: + - Type: HelpMessages; + - Description: +- notificationInterceptorEnabled: + - Type: boolean; + - Description: +- pidSearchMethod?: + - Type: string; + - Description: +- metadataEditingUnitListDisabled?: + - Type: boolean; + - Description: +- defaultDatasetsListSettings: + - Type: DatasetsListSettings; + - Description: +- labelMaps: + - Type: LabelMaps; + - Description: +- thumbnailFetchLimitPerPage: + - Type: number; + - Description: +- maxFileUploadSizeInMb?: + - Type: string; + - Description: +- datasetDetailComponent?: + - Type: DatasetDetailComponentConfig; + - Description: +- labelsLocalization?: + - Type: LabelsLocalization; + - Description: +- dateFormat?: + - Type: string; + - Description: +### defaultMainPage: + - Type: MainPageConfiguration; + - Definition: + ``` + { + nonAuthenticatedUser: keyof typeof MainPageOptions; + authenticatedUser: keyof typeof MainPageOptions; + } + ``` + - Description: esplicitly configure which is the in-app page that the users are redirected to when visiting the main FE url. As you can see from the structure, sites can define different main pages for authenticated and non-authenticated users. + - Options: DATASETS, PROPOSALS, INSTRUMENTS, SAMPLES (as defined in enum `MainPagesOptions`) + - Default: DATASETS + - Optional +### mainMenu: + - Type: MainMenuConfiguration; + - Definitions: + ``` + MainMenuConfiguration { + nonAuthenticatedUser: MainMenuOptions; + authenticatedUser: MainMenuOptions; + } + + MainMenuOptions { + datasets: boolean; + files: boolean; + instruments: boolean; + jobs: boolean; + policies: boolean; + proposals: boolean; + publishedData: boolean; + samples: boolean; + } + ``` + - Description: + Main menu configuration which controls which menu items are active. There are two configurations, one for authenticated and one for non-auhtenticated users. If not configured, the FE will show a `No menu items configured` element. Each menu item might have additional conditions to be visible. + - Example: + The following example will instruct the FE to show a menu with items datasets, instruments, proposals, and samples to non authenticated users. While for authenticated users, the menu will have all the items enabled, except for policies. + ``` + "mainMenu": { + "nonAuthenticatedUser": { + "datasets": true, + "files": false, + "instruments": true, + "jobs": false, + "policies": false, + "proposals": true, + "publishedData": true, + "samples": false + }, + "authenticatedUser": { + "datasets": true, + "files": true, + "instruments": true, + "jobs": true, + "policies": false, + "proposals": true, + "publishedData": true, + "samples": true + } + } + ``` + - Optional +### supportEmail: + - Type: string; + - Description: + - Optional \ No newline at end of file