From 8cc3f6162c9eedab51e51e499becbc32d04895de Mon Sep 17 00:00:00 2001 From: Felipe Fialho Date: Thu, 23 May 2024 09:53:57 -0300 Subject: [PATCH] feat(alert): add self contained close on alert (#441) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- packages/core/src/components/alert/alert.scss | 4 + .../core/src/components/alert/alert.spec.ts | 40 ++++++-- packages/core/src/components/alert/alert.tsx | 97 +++++++++++-------- .../alert/stories/alert.core.stories.tsx | 8 ++ .../alert/stories/alert.react.stories.tsx | 8 ++ .../alert/stories/alert.vue.stories.tsx | 22 ++++- 6 files changed, 131 insertions(+), 48 deletions(-) diff --git a/packages/core/src/components/alert/alert.scss b/packages/core/src/components/alert/alert.scss index da09fd838..c66b63e41 100644 --- a/packages/core/src/components/alert/alert.scss +++ b/packages/core/src/components/alert/alert.scss @@ -18,6 +18,10 @@ padding-right: var(--close-size); } + &.is-closed { + display: none; + } + @include above(medium) { display: flex; flex-wrap: wrap; diff --git a/packages/core/src/components/alert/alert.spec.ts b/packages/core/src/components/alert/alert.spec.ts index 7f95704f6..0109bb638 100644 --- a/packages/core/src/components/alert/alert.spec.ts +++ b/packages/core/src/components/alert/alert.spec.ts @@ -1,4 +1,5 @@ import { newSpecPage } from '@stencil/core/testing' + import { AtomAlert } from './alert' const messageTitle = 'Alert title' @@ -33,7 +34,7 @@ describe('AtomAlert', () => { await page.waitForChanges() expect(page.root).toEqualHtml(` - + ${createAlertColor('neutral')} `) @@ -48,7 +49,7 @@ describe('AtomAlert', () => { await page.waitForChanges() expect(page.root).toEqualHtml(` - + ${createAlertColor('info')} `) @@ -63,7 +64,7 @@ describe('AtomAlert', () => { await page.waitForChanges() expect(page.root).toEqualHtml(` - + ${createAlertColor('success')} `) @@ -78,7 +79,7 @@ describe('AtomAlert', () => { await page.waitForChanges() expect(page.root).toEqualHtml(` - + ${createAlertColor('danger')} `) @@ -93,7 +94,7 @@ describe('AtomAlert', () => { await page.waitForChanges() expect(page.root).toEqualHtml(` - + ${createAlertColor('warning')} `) @@ -108,7 +109,7 @@ describe('AtomAlert', () => { await page.waitForChanges() expect(page.root).toEqualHtml(` - +
@@ -137,7 +138,7 @@ describe('AtomAlert', () => { await page.waitForChanges() expect(page.root).toEqualHtml(` - +
@@ -159,6 +160,29 @@ describe('AtomAlert', () => { `) }) + it('should not render alert when click close button', async () => { + const page = await newSpecPage({ + components: [AtomAlert], + html: ``, + }) + + await page.waitForChanges() + + const alertCloseEl = page.root?.shadowRoot?.querySelector( + '.atom-close' + ) as HTMLElement + + alertCloseEl.click() + + await page.waitForChanges() + + expect(page.root).toEqualHtml(` + + `) + }) + it('should add actions "action-text" prop is set', async () => { const page = await newSpecPage({ components: [AtomAlert], @@ -168,7 +192,7 @@ describe('AtomAlert', () => { await page.waitForChanges() expect(page.root).toEqualHtml(` - +
diff --git a/packages/core/src/components/alert/alert.tsx b/packages/core/src/components/alert/alert.tsx index 83d659da5..72a797698 100644 --- a/packages/core/src/components/alert/alert.tsx +++ b/packages/core/src/components/alert/alert.tsx @@ -1,4 +1,12 @@ -import { Component, Event, EventEmitter, Host, Prop, h } from '@stencil/core' +import { + Component, + Event, + EventEmitter, + Host, + Prop, + State, + h, +} from '@stencil/core' import { IconProps } from '../../icons' @@ -21,57 +29,70 @@ export class AtomAlert { private handleClose = () => { this.atomClose.emit() + this.isAlertOpen = false } private handleAction = () => { this.atomAction.emit() } + @State() isAlertOpen = true + render() { return ( - -
-
- {this.icon && ( - - )} -
- {this.messageTitle && ( -
- )} - {this.messageText && ( -
+ + {this.isAlertOpen && ( +
+
+ {this.icon && ( + )} +
+ {this.messageTitle && ( +
+ )} + {this.messageText && ( +
+ )} +
-
- {this.actionText && ( -
+ {this.actionText && ( +
+ +
+ )} + {this.close && ( -
- )} - {this.close && ( - - )} -
+ )} +
+ )} ) } diff --git a/packages/core/src/components/alert/stories/alert.core.stories.tsx b/packages/core/src/components/alert/stories/alert.core.stories.tsx index 7ef4aa4b5..2c0ce2f56 100644 --- a/packages/core/src/components/alert/stories/alert.core.stories.tsx +++ b/packages/core/src/components/alert/stories/alert.core.stories.tsx @@ -65,3 +65,11 @@ export const Danger: StoryObj = { icon: 'account-multiple', }, } + +export const Close: StoryObj = { + render: (args) => createAlert(args), + args: { + ...AlertComponentArgs, + close: true, + }, +} diff --git a/packages/core/src/components/alert/stories/alert.react.stories.tsx b/packages/core/src/components/alert/stories/alert.react.stories.tsx index d8ff06f5a..37b0198aa 100644 --- a/packages/core/src/components/alert/stories/alert.react.stories.tsx +++ b/packages/core/src/components/alert/stories/alert.react.stories.tsx @@ -65,3 +65,11 @@ export const Danger: StoryObj = { icon: 'account-multiple', }, } + +export const Close: StoryObj = { + render: (args) => createAlert(args), + args: { + ...AlertComponentArgs, + close: true, + }, +} diff --git a/packages/core/src/components/alert/stories/alert.vue.stories.tsx b/packages/core/src/components/alert/stories/alert.vue.stories.tsx index ac185a690..3a0b0f625 100644 --- a/packages/core/src/components/alert/stories/alert.vue.stories.tsx +++ b/packages/core/src/components/alert/stories/alert.vue.stories.tsx @@ -16,18 +16,27 @@ const createAlert = (args) => ({ }, template: ` `, + methods: { + handleAction() { + console.log('Action clicked') + }, + }, }) export const Default: StoryObj = { render: (args) => createAlert(args), args: { ...AlertComponentArgs, + icon: '', }, } @@ -66,3 +75,12 @@ export const Danger: StoryObj = { icon: 'account-multiple', }, } + +export const Close: StoryObj = { + render: (args) => createAlert(args), + args: { + ...AlertComponentArgs, + close: true, + icon: '', + }, +}