diff --git a/cypress/e2e/right-panel/notification-panel.spec.ts b/cypress/e2e/right-panel/notification-panel.spec.ts new file mode 100644 index 00000000000..4068285070b --- /dev/null +++ b/cypress/e2e/right-panel/notification-panel.spec.ts @@ -0,0 +1,52 @@ +/* +Copyright 2023 Suguru Hirahara + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/// + +import { HomeserverInstance } from "../../plugins/utils/homeserver"; + +const ROOM_NAME = "Test room"; +const NAME = "Alice"; + +describe("NotificationPanel", () => { + let homeserver: HomeserverInstance; + + beforeEach(() => { + cy.startHomeserver("default").then((data) => { + homeserver = data; + cy.initTestUser(homeserver, NAME).then(() => { + cy.createRoom({ name: ROOM_NAME }); + }); + }); + }); + + afterEach(() => { + cy.stopHomeserver(homeserver); + }); + + it("should render empty state", () => { + cy.viewRoomByName(ROOM_NAME); + cy.findByRole("button", { name: "Notifications" }).click(); + + // Wait until the information about the empty state is rendered + cy.get(".mx_NotificationPanel_empty").should("exist"); + + // Take a snapshot of RightPanel + cy.get(".mx_RightPanel").percySnapshotElement("Notification Panel - empty", { + widths: [264], // Emulate the UI. The value is based on minWidth specified on MainSplit.tsx + }); + }); +}); diff --git a/res/css/_components.pcss b/res/css/_components.pcss index 345c2cd08ef..9c223d873b9 100644 --- a/res/css/_components.pcss +++ b/res/css/_components.pcss @@ -69,6 +69,7 @@ @import "./structures/_MainSplit.pcss"; @import "./structures/_MatrixChat.pcss"; @import "./structures/_NonUrgentToastContainer.pcss"; +@import "./structures/_NotificationPanel.pcss"; @import "./structures/_QuickSettingsButton.pcss"; @import "./structures/_RightPanel.pcss"; @import "./structures/_RoomSearch.pcss"; diff --git a/res/css/structures/_FilePanel.pcss b/res/css/structures/_FilePanel.pcss index e3f9f2d4d90..99de3d32965 100644 --- a/res/css/structures/_FilePanel.pcss +++ b/res/css/structures/_FilePanel.pcss @@ -113,5 +113,5 @@ limitations under the License. } .mx_FilePanel_empty::before { - mask-image: url("$(res)/img/element-icons/room/files.svg"); + --maskImage: url("$(res)/img/element-icons/room/files.svg"); /* See: _RightPanel.pcss */ } diff --git a/res/css/structures/_NotificationPanel.pcss b/res/css/structures/_NotificationPanel.pcss new file mode 100644 index 00000000000..7a3ede9e503 --- /dev/null +++ b/res/css/structures/_NotificationPanel.pcss @@ -0,0 +1,19 @@ +/* +Copyright 2015, 2016 OpenMarket Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.mx_NotificationPanel_empty::before { + --maskImage: url("$(res)/img/element-icons/notifications.svg"); /* See: _RightPanel.pcss */ +} diff --git a/res/css/structures/_RightPanel.pcss b/res/css/structures/_RightPanel.pcss index 78a0f717797..f76388296b3 100644 --- a/res/css/structures/_RightPanel.pcss +++ b/res/css/structures/_RightPanel.pcss @@ -179,6 +179,7 @@ $pulse-color: $alert; height: 42px; width: 42px; background-color: $header-panel-text-primary-color; + mask-image: var(--maskImage); mask-repeat: no-repeat; mask-size: contain; mask-position: center;