From 38b045ee88e8a59b487cddbd59c052a158551f48 Mon Sep 17 00:00:00 2001 From: Lukas Maurer Date: Wed, 8 Mar 2023 13:37:43 +0100 Subject: [PATCH 1/4] feat(core/toast): add position top-right --- .../src/preview-examples/toast-position.ts | 38 +++++++++ packages/angular/src/toast/toast.service.ts | 16 +++- packages/core/component-doc.json | 7 +- packages/core/src/components.d.ts | 4 +- .../toast/styles/toast-container.scss | 5 ++ .../src/components/toast/toast-container.tsx | 27 +++++- .../core/src/components/toast/toast-utils.ts | 2 +- packages/core/src/index.ts | 1 + .../core/src/tests/toast/position/index.html | 78 ++++++++++++++++++ packages/core/src/tests/toast/toast.e2e.ts | 6 ++ ...-1-chromium---theme-classic-dark-linux.png | Bin 0 -> 24623 bytes ...1-chromium---theme-classic-light-linux.png | Bin 0 -> 22452 bytes packages/documentation/docs/controls/toast.md | 14 ++++ .../src/preview-examples/toast-position.html | 34 ++++++++ .../src/preview-examples/toast-position.tsx | 30 +++++++ 15 files changed, 253 insertions(+), 9 deletions(-) create mode 100644 packages/angular-test-app/src/preview-examples/toast-position.ts create mode 100644 packages/core/src/tests/toast/position/index.html create mode 100644 packages/core/src/tests/toast/toast.e2e.ts-snapshots/toast-position-1-chromium---theme-classic-dark-linux.png create mode 100644 packages/core/src/tests/toast/toast.e2e.ts-snapshots/toast-position-1-chromium---theme-classic-light-linux.png create mode 100644 packages/html-test-app/src/preview-examples/toast-position.html create mode 100644 packages/react-test-app/src/preview-examples/toast-position.tsx diff --git a/packages/angular-test-app/src/preview-examples/toast-position.ts b/packages/angular-test-app/src/preview-examples/toast-position.ts new file mode 100644 index 00000000000..f7d54a13737 --- /dev/null +++ b/packages/angular-test-app/src/preview-examples/toast-position.ts @@ -0,0 +1,38 @@ +/* + * SPDX-FileCopyrightText: 2023 Siemens AG + * + * SPDX-License-Identifier: MIT + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { Component, TemplateRef, ViewChild } from '@angular/core'; +import { ToastService } from '@siemens/ix-angular'; + +@Component({ + selector: 'app-example', + template: ` +
+ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy + eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam + voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet + clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit + amet. +
+ Show Toast + `, +}) +export default class Toast { + @ViewChild('customToast', { read: TemplateRef }) + customModalRef!: TemplateRef; + + constructor(private readonly toastService: ToastService) {} + + async showToastMessage() { + this.toastService.setPosition('top-right'); + this.toastService.show({ + message: 'Hello World!', + }); + } +} diff --git a/packages/angular/src/toast/toast.service.ts b/packages/angular/src/toast/toast.service.ts index 6fe0313d8ad..7ab1db567d1 100644 --- a/packages/angular/src/toast/toast.service.ts +++ b/packages/angular/src/toast/toast.service.ts @@ -8,14 +8,26 @@ */ import { Injectable } from '@angular/core'; -import { toast, ToastConfig as IxToastConfig } from '@siemens/ix'; +import { + getToastContainer, + toast, + ToastConfig as IxToastConfig, +} from '@siemens/ix'; import { ToastConfig } from './toast.config'; @Injectable({ providedIn: 'root', }) export class ToastService { - public async show(config: ToastConfig) { + setPosition(position: 'bottom-right' | 'top-right') { + getToastContainer().position = position; + } + + getPosition() { + return getToastContainer().position; + } + + async show(config: ToastConfig) { if (typeof config.message === 'string') { return toast(config as IxToastConfig); } diff --git a/packages/core/component-doc.json b/packages/core/component-doc.json index 432c690db77..4b20a76988f 100644 --- a/packages/core/component-doc.json +++ b/packages/core/component-doc.json @@ -8320,7 +8320,7 @@ }, { "name": "position", - "type": "string", + "type": "\"bottom-right\" | \"top-right\"", "mutable": false, "attr": "position", "reflectToAttr": false, @@ -8329,6 +8329,11 @@ "default": "'bottom-right'", "values": [ { + "value": "bottom-right", + "type": "string" + }, + { + "value": "top-right", "type": "string" } ], diff --git a/packages/core/src/components.d.ts b/packages/core/src/components.d.ts index cd686323a47..022393997b1 100644 --- a/packages/core/src/components.d.ts +++ b/packages/core/src/components.d.ts @@ -1361,7 +1361,7 @@ export namespace Components { interface IxToastContainer { "containerClass": string; "containerId": string; - "position": string; + "position": 'bottom-right' | 'top-right'; /** * Display a toast message * @param config @@ -3685,7 +3685,7 @@ declare namespace LocalJSX { interface IxToastContainer { "containerClass"?: string; "containerId"?: string; - "position"?: string; + "position"?: 'bottom-right' | 'top-right'; } interface IxToggle { /** diff --git a/packages/core/src/components/toast/styles/toast-container.scss b/packages/core/src/components/toast/styles/toast-container.scss index 1f895dbeb1f..c085b0caac5 100644 --- a/packages/core/src/components/toast/styles/toast-container.scss +++ b/packages/core/src/components/toast/styles/toast-container.scss @@ -20,6 +20,11 @@ position: fixed; } +.toast-container--top-right { + right: 1rem; + top: 2rem; +} + .toast-container--bottom-right { right: 1rem; bottom: 2rem; diff --git a/packages/core/src/components/toast/toast-container.tsx b/packages/core/src/components/toast/toast-container.tsx index c0d17886bf6..a4265668242 100644 --- a/packages/core/src/components/toast/toast-container.tsx +++ b/packages/core/src/components/toast/toast-container.tsx @@ -7,7 +7,15 @@ * LICENSE file in the root directory of this source tree. */ -import { Component, Element, h, Host, Method, Prop } from '@stencil/core'; +import { + Component, + Element, + h, + Host, + Method, + Prop, + Watch, +} from '@stencil/core'; import { TypedEvent } from '../utils/typed-event'; import { ToastConfig } from './toast-utils'; @@ -28,7 +36,9 @@ export class ToastContainer { /** */ - @Prop() position = 'bottom-right'; + @Prop() position: 'bottom-right' | 'top-right' = 'bottom-right'; + + private readonly PREFIX_POSITION_CLASS = 'toast-container--'; get hostContainer() { return document.getElementById(this.containerId); @@ -39,11 +49,22 @@ export class ToastContainer { const toastContainer = document.createElement('div'); toastContainer.id = this.containerId; toastContainer.classList.add(this.containerClass); - toastContainer.classList.add(`toast-container--${this.position}`); + toastContainer.classList.add( + `${this.PREFIX_POSITION_CLASS}${this.position}` + ); document.body.appendChild(toastContainer); } } + @Watch('position') + onPositionChange(newPosition: string, oldPosition: string) { + const toastContainer = document.getElementById(this.containerId); + toastContainer.classList.remove( + `${this.PREFIX_POSITION_CLASS}${oldPosition}` + ); + toastContainer.classList.add(`${this.PREFIX_POSITION_CLASS}${newPosition}`); + } + /** * Display a toast message * @param config diff --git a/packages/core/src/components/toast/toast-utils.ts b/packages/core/src/components/toast/toast-utils.ts index f289dde82dd..574f4b9cc3d 100644 --- a/packages/core/src/components/toast/toast-utils.ts +++ b/packages/core/src/components/toast/toast-utils.ts @@ -19,7 +19,7 @@ export interface ToastConfig { iconColor?: string; } -function getToastContainer() { +export function getToastContainer() { const containerList = Array.from( document.querySelectorAll('ix-toast-container') ); diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index f40c3611e1d..4aa75644754 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -16,6 +16,7 @@ export { DropdownTriggerEvent } from './components/dropdown/dropdown-trigger-eve export { FlipTileState } from './components/flip-tile/flip-tile-state'; export { ModalContainer } from './components/modal-container/modal-container'; export { Modal } from './components/modal/modal'; +export { getToastContainer } from './components/toast/toast-utils'; export { NotificationColor } from './components/utils/notification-color'; export { convertToAbbreviationString, diff --git a/packages/core/src/tests/toast/position/index.html b/packages/core/src/tests/toast/position/index.html new file mode 100644 index 00000000000..fe470c055f8 --- /dev/null +++ b/packages/core/src/tests/toast/position/index.html @@ -0,0 +1,78 @@ + + + + + + + Stencil Component Starter + + + + + + + diff --git a/packages/core/src/tests/toast/toast.e2e.ts b/packages/core/src/tests/toast/toast.e2e.ts index f615cd0923c..63f455dc81e 100644 --- a/packages/core/src/tests/toast/toast.e2e.ts +++ b/packages/core/src/tests/toast/toast.e2e.ts @@ -16,4 +16,10 @@ regressionTest.describe('toast', () => { await page.waitForTimeout(200); expect(await page.screenshot({ fullPage: true })).toMatchSnapshot(); }); + + regressionTest('position', async ({ page }) => { + await page.goto('toast/position'); + await page.waitForTimeout(200); + expect(await page.screenshot({ fullPage: true })).toMatchSnapshot(); + }); }); diff --git a/packages/core/src/tests/toast/toast.e2e.ts-snapshots/toast-position-1-chromium---theme-classic-dark-linux.png b/packages/core/src/tests/toast/toast.e2e.ts-snapshots/toast-position-1-chromium---theme-classic-dark-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..075853d35589982f05f87ea5ea5a939963ae3a21 GIT binary patch literal 24623 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 CStgqR literal 0 HcmV?d00001 diff --git a/packages/core/src/tests/toast/toast.e2e.ts-snapshots/toast-position-1-chromium---theme-classic-light-linux.png b/packages/core/src/tests/toast/toast.e2e.ts-snapshots/toast-position-1-chromium---theme-classic-light-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..416fc10b8c58ae07da0327d0258d5ad46c36f7de GIT binary patch literal 22452 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 literal 0 HcmV?d00001 diff --git a/packages/documentation/docs/controls/toast.md b/packages/documentation/docs/controls/toast.md index 350a26463a5..b1c50c65418 100644 --- a/packages/documentation/docs/controls/toast.md +++ b/packages/documentation/docs/controls/toast.md @@ -10,6 +10,10 @@ import SourceToastCustom from './../auto-generated/previews/web-component/toast- import SourceAngularToastCustom from './../auto-generated/previews/angular/toast-custom.ts.md'; import SourceReactToastCustom from './../auto-generated/previews/react/toast-custom.md'; +import SourceToastPosition from './../auto-generated/previews/web-component/toast-position.md'; +import SourceAngularToastPosition from './../auto-generated/previews/angular/toast-position.ts.md'; +import SourceReactToastPosition from './../auto-generated/previews/react/toast-position.md'; + import ApiToastConfigJavaScript from './\_toast/javascript/toast-config.md'; import ApiToastServiceAngular from './\_toast/angular/toast-service.html.md'; @@ -38,6 +42,16 @@ frameworks={{ javascript: SourceToastCustom }}> +## Position + + + ## API diff --git a/packages/html-test-app/src/preview-examples/toast-position.html b/packages/html-test-app/src/preview-examples/toast-position.html new file mode 100644 index 00000000000..83aa643bf2e --- /dev/null +++ b/packages/html-test-app/src/preview-examples/toast-position.html @@ -0,0 +1,34 @@ + + + + + + Test example + + + + + + Trigger toast + + + + + diff --git a/packages/react-test-app/src/preview-examples/toast-position.tsx b/packages/react-test-app/src/preview-examples/toast-position.tsx new file mode 100644 index 00000000000..a5eaf7ed20e --- /dev/null +++ b/packages/react-test-app/src/preview-examples/toast-position.tsx @@ -0,0 +1,30 @@ +/* + * SPDX-FileCopyrightText: 2023 Siemens AG + * + * SPDX-License-Identifier: MIT + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { getToastContainer } from '@siemens/ix'; +import { IxButton, showToast } from '@siemens/ix-react'; +import React from 'react'; + +export default () => { + getToastContainer().position = 'top-right'; + + return ( + <> + { + showToast({ + message: 'My toast message!', + }); + }} + > + Trigger toast + + + ); +}; From 30fe48a5343327d22b3f1e78fae677ab91439753 Mon Sep 17 00:00:00 2001 From: Lukas Maurer Date: Tue, 14 Mar 2023 16:39:35 +0100 Subject: [PATCH 2/4] refactor(core/toast): add facade method for setting toast position --- packages/core/src/components/toast/toast-utils.ts | 4 ++++ packages/documentation/docs/controls/toast.md | 4 +++- .../src/preview-examples/toast-position.html | 5 ++--- .../src/preview-examples/toast-position.tsx | 4 ++-- packages/vue-test-app/src/Root.vue | 2 ++ .../src/preview-examples/toast-position.vue | 11 +++++++++++ packages/vue/src/toast/toast.ts | 10 +++++++++- 7 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 packages/vue-test-app/src/preview-examples/toast-position.vue diff --git a/packages/core/src/components/toast/toast-utils.ts b/packages/core/src/components/toast/toast-utils.ts index 574f4b9cc3d..87b2e5e5c81 100644 --- a/packages/core/src/components/toast/toast-utils.ts +++ b/packages/core/src/components/toast/toast-utils.ts @@ -39,6 +39,10 @@ export function getToastContainer() { return container; } +export function setToastPosition(position: 'bottom-right' | 'top-right') { + getToastContainer().position = position; +} + async function toast(config: ToastConfig) { const context = getToastContainer(); const toast = await context.showToast(config); diff --git a/packages/documentation/docs/controls/toast.md b/packages/documentation/docs/controls/toast.md index d683805286c..38995bf9df6 100644 --- a/packages/documentation/docs/controls/toast.md +++ b/packages/documentation/docs/controls/toast.md @@ -15,6 +15,7 @@ import SourceVueToastCustom from './../auto-generated/previews/vue/toast-custom. import SourceToastPosition from './../auto-generated/previews/web-component/toast-position.md'; import SourceAngularToastPosition from './../auto-generated/previews/angular/toast-position.ts.md'; import SourceReactToastPosition from './../auto-generated/previews/react/toast-position.md'; +import SourceVueToastPosition from './../auto-generated/previews/vue/toast-position.md'; import ApiToastConfigJavaScript from './\_toast/javascript/toast-config.md'; @@ -53,7 +54,8 @@ name="toast-position" height="18rem" frameworks={{ react: SourceReactToastPosition, angular: SourceAngularToastPosition, - javascript: SourceToastPosition + javascript: SourceToastPosition, + vue: SourceVueToastPosition, }}> ## API diff --git a/packages/html-test-app/src/preview-examples/toast-position.html b/packages/html-test-app/src/preview-examples/toast-position.html index 83aa643bf2e..55af39d7140 100644 --- a/packages/html-test-app/src/preview-examples/toast-position.html +++ b/packages/html-test-app/src/preview-examples/toast-position.html @@ -15,12 +15,11 @@ Trigger toast + + diff --git a/packages/vue/src/toast/toast.ts b/packages/vue/src/toast/toast.ts index 424ace54b6e..9b6491db278 100644 --- a/packages/vue/src/toast/toast.ts +++ b/packages/vue/src/toast/toast.ts @@ -7,12 +7,20 @@ * LICENSE file in the root directory of this source tree. */ -import { toast, ToastConfig as IxToastConfig } from '@siemens/ix'; +import { + getToastContainer, + toast, + ToastConfig as IxToastConfig, +} from '@siemens/ix'; export type ToastConfig = { message: string | HTMLElement; }; +export function setToastPosition(position: 'bottom-right' | 'top-right') { + getToastContainer().position = position; +} + export async function showToast( config: Omit & ToastConfig ) { From 12afbe01d5c9e449c117d2737bbf9e524316f0d1 Mon Sep 17 00:00:00 2001 From: Lukas Maurer Date: Tue, 14 Mar 2023 16:43:08 +0100 Subject: [PATCH 3/4] docs(core/toast): add since tag to position section --- packages/documentation/docs/controls/toast.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/documentation/docs/controls/toast.md b/packages/documentation/docs/controls/toast.md index 38995bf9df6..0c559dc15d7 100644 --- a/packages/documentation/docs/controls/toast.md +++ b/packages/documentation/docs/controls/toast.md @@ -1,5 +1,6 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; +import { ApiTableSinceTag } from '@site/src/components/ApiTableTag'; import Playground from '@site/src/components/Playground'; import SourceToast from './../auto-generated/previews/web-component/toast.md'; @@ -49,6 +50,8 @@ frameworks={{ ## Position + + Date: Wed, 15 Mar 2023 06:34:07 +0100 Subject: [PATCH 4/4] refactor: make toast position type --- packages/core/src/components/toast/toast-utils.ts | 3 ++- .../src/preview-examples/toast-position.tsx | 12 +++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/core/src/components/toast/toast-utils.ts b/packages/core/src/components/toast/toast-utils.ts index 87b2e5e5c81..5c40a125995 100644 --- a/packages/core/src/components/toast/toast-utils.ts +++ b/packages/core/src/components/toast/toast-utils.ts @@ -8,6 +8,7 @@ */ export type ToastType = 'info' | 'success' | 'error' | 'warning'; +export type ToastPosition = 'bottom-right' | 'top-right'; export interface ToastConfig { title?: string; @@ -39,7 +40,7 @@ export function getToastContainer() { return container; } -export function setToastPosition(position: 'bottom-right' | 'top-right') { +export function setToastPosition(position: ToastPosition) { getToastContainer().position = position; } diff --git a/packages/react-test-app/src/preview-examples/toast-position.tsx b/packages/react-test-app/src/preview-examples/toast-position.tsx index 3a80a539d62..d899f60868d 100644 --- a/packages/react-test-app/src/preview-examples/toast-position.tsx +++ b/packages/react-test-app/src/preview-examples/toast-position.tsx @@ -7,12 +7,18 @@ * LICENSE file in the root directory of this source tree. */ -import { setToastPosition } from '@siemens/ix'; +import { setToastPosition, ToastPosition } from '@siemens/ix'; import { IxButton, showToast } from '@siemens/ix-react'; -import React from 'react'; +import React, { useEffect } from 'react'; + +function useToastPosition(position: ToastPosition) { + useEffect(() => { + setToastPosition(position); + }, []); +} export default () => { - setToastPosition('top-right'); + useToastPosition('top-right'); return ( <>