Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: (Core) add semantic icons to Message box and remove the close button #4128

Merged
merged 4 commits into from
Dec 22, 2020
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/docs/src/app/core/api-files.ts
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ export const API_FILES = {
'MessageBoxHeaderComponent',
'MessageBoxFooterComponent',
'MessageBoxDefaultComponent',
'MessageBoxCloseIconComponent',
'MessageBoxSemanticIconComponent',
'MessageBoxContainerComponent',
'MessageBoxFooterButtonComponent',
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { MessageBoxRef } from '@fundamental-ngx/core';
<ng-template fdTemplate="header">
<div fd-bar-left>
<fd-bar-element>
<fd-message-box-semantic-icon glyph="activate"></fd-message-box-semantic-icon>
<h1 fd-title>Fruit facts</h1>
</fd-bar-element>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ export class ComponentBasedMessageBoxExampleComponent {
title: 'Fruit facts',
text: 'Coffee beans aren\'t beans. They are fruit pits.'
},
showSemanticIcon: true,
customSemanticIcon: 'thumb-up',
width: '400px'
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import { TextData } from './component-based-message-box-example.component';
<fd-message-box>
<fd-message-box-header>
<h1 fd-title>{{ messageBoxRef.data.title }}</h1>
<fd-message-box-close-icon (click)="messageBoxRef.dismiss('Close button')"></fd-message-box-close-icon>
</fd-message-box-header>
<fd-message-box-body>
{{ messageBoxRef.data.text }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@
<button fd-button fdType="negative" label="Error type" (click)="open('error')"></button>
<button fd-button fdType="attention" label="Warning type" (click)="open('warning')"></button>
<button fd-button fdType="positive" label="Success type" (click)="open('success')"></button>
<button fd-button fdType="positive" label="Success type & custom icon" (click)="open('success', false, 'thumb-up')"></button>
<button fd-button fdType="positive" label="Success type & no icon" (click)="open('success', true)"></button>
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export class SemanticTypesExampleComponent {

constructor(private _messageBoxService: MessageBoxService) {}

open(type: MessageBoxType): void {
open(type: MessageBoxType, hideSemanticIcon: boolean = false, customSemanticIcon?: string): void {
const messageBoxRef = this._messageBoxService.open(
{
title: 'Fruit facts',
Expand All @@ -19,6 +19,6 @@ export class SemanticTypesExampleComponent {
approveButtonCallback: () => messageBoxRef.close('Approved'),
cancelButtonCallback: () => messageBoxRef.close('Canceled'),
closeButtonCallback: () => messageBoxRef.dismiss('Dismissed')
}, { type: type });
}, { type: type, hideSemanticIcon: hideSemanticIcon, customSemanticIcon: customSemanticIcon });
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
<fd-message-box [messageBoxConfig]="messageBoxConfig" [messageBoxRef]="messageBox">
<fd-message-box-header>
<h1 fd-title>Fruit facts</h1>
<fd-message-box-close-icon (click)="messageBox.dismiss('Close button')"></fd-message-box-close-icon>
</fd-message-box-header>
<fd-message-box-body>
The World's Most Popular Fruit is the tomato.
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
<fd-message-box>
<fd-message-box-header>
<h1 fd-title>{{ _messageBoxContent.title }}</h1>
<fd-message-box-close-icon
*ngIf="_messageBoxContent.closeButtonCallback"
(click)="_onCloseButton()">
</fd-message-box-close-icon>
</fd-message-box-header>
<fd-message-box-body>
<ng-container *ngTemplateOutlet="_contentTemplate"></ng-container>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,10 @@

<ng-template #defaultTemplate>
<div fd-bar-left>
<fd-bar-element [fullWidth]="true">
<ng-content select="[fd-title]"></ng-content>
</fd-bar-element>
</div>
<div fd-bar-right>
<fd-bar-element>
<ng-content select="fd-message-box-close-icon"></ng-content>
<ng-content select="fd-message-box-semantic-icon"></ng-content>
salarenko marked this conversation as resolved.
Show resolved Hide resolved
<fd-message-box-semantic-icon *ngIf="_showSemanticIcon"></fd-message-box-semantic-icon>
<ng-content select="[fd-title]"></ng-content>
</fd-bar-element>
</div>
</ng-template>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ class CustomHeaderTestComponent {
template: `
<fd-message-box-header>
<h1 fd-title>Default Title</h1>
<fd-message-box-close-icon></fd-message-box-close-icon>
</fd-message-box-header>
`
})
Expand Down Expand Up @@ -84,10 +83,8 @@ describe('MessageBoxHeaderComponent', () => {
const { fixture } = setup<DefaultHeaderTestComponent>(DefaultHeaderTestComponent);
await whenStable(fixture);

const buttonEl = fixture.nativeElement.querySelector('fd-message-box-close-icon');
const headerEl = fixture.nativeElement.querySelector('.fd-bar--header');

expect(buttonEl).toBeTruthy();
expect(headerEl).toBeTruthy();
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import {
*
* ```html
* <fd-message-box-header>
* <h1 fd-title><!-- Content --></h1>
* <fd-message-box-close-icon></fd-message-box-close-icon>
* <fd-message-box-semantic-icon></fd-message-box-semantic-icon>
* <h1 fd-title><!-- Content --></h1>
* </fd-message-box-header>
*
* Complex header:
Expand Down Expand Up @@ -41,6 +41,14 @@ export class MessageBoxHeaderComponent extends DialogHeaderBase implements After
this.messageBoxConfig = this.messageBoxConfig || {};
}

/** @hidden */
get _showSemanticIcon(): boolean {
if (this.messageBoxConfig.type) {
salarenko marked this conversation as resolved.
Show resolved Hide resolved
return this.messageBoxConfig.hideSemanticIcon ? false : true;
}
return this.messageBoxConfig.showSemanticIcon;
}

/** @hidden */
ngAfterContentInit(): void {
super.ngAfterContentInit();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';

import { MessageBoxConfig } from '../utils/message-box-config.class';
import { MessageBoxCloseIconComponent } from './message-box-close-icon.component';
import { MessageBoxSemanticIconComponent } from './message-box-semantic-icon.component';

describe('MessageBoxCloseIconComponent', () => {
let component: MessageBoxCloseIconComponent;
let fixture: ComponentFixture<MessageBoxCloseIconComponent>;
describe('MessageBoxSemanticIconComponent', () => {
let component: MessageBoxSemanticIconComponent;
let fixture: ComponentFixture<MessageBoxSemanticIconComponent>;

beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [MessageBoxCloseIconComponent],
declarations: [MessageBoxSemanticIconComponent],
providers: [MessageBoxConfig]
}).compileComponents();
});

beforeEach(() => {
fixture = TestBed.createComponent(MessageBoxCloseIconComponent);
fixture = TestBed.createComponent(MessageBoxSemanticIconComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import { ChangeDetectionStrategy, Component, Input, Optional } from '@angular/core';
import {
MESSAGE_BOX_CONFIGURABLE_ELEMENT,
MessageBoxConfig,
MessageBoxConfigurableElement
} from '../utils/message-box-config.class';

/**
* Message box element representing the semantic icon in the message box header.
*
* ```html
* <fd-message-box-semantic-icon></fd-message-box-semantic-icon>
* ```
*/
@Component({
selector: 'fd-message-box-semantic-icon',
template: `<i [ngClass]="'sap-icon--' + _semanticIcon" role="presentation"></i>`,
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [
{ provide: MESSAGE_BOX_CONFIGURABLE_ELEMENT, useExisting: MessageBoxSemanticIconComponent, multi: true }
]
})
export class MessageBoxSemanticIconComponent implements MessageBoxConfigurableElement {
/** Custom semantic icon */
@Input()
glyph: string;

/** @hidden */
constructor(@Optional() public messageBoxConfig: MessageBoxConfig) {
this.messageBoxConfig = this.messageBoxConfig || {};
}

/** @hidden */
get _showSemanticIcon(): boolean {
return this.messageBoxConfig.showSemanticIcon;
}

/** @hidden */
get _semanticIcon(): string {
salarenko marked this conversation as resolved.
Show resolved Hide resolved
if (this.glyph) {
return this.glyph;
}
if (this.messageBoxConfig.customSemanticIcon) {
return this.messageBoxConfig.customSemanticIcon;
}
if (this.messageBoxConfig.type) {
switch (this.messageBoxConfig.type) {
case 'error':
return 'message-error';
case 'success':
return 'message-success';
case 'warning':
return 'message-warning';
case 'information':
return 'message-information';
case 'confirmation':
return 'question-mark';
default:
return '';
}
}
return '';
}
}
14 changes: 14 additions & 0 deletions libs/core/src/lib/message-box/message-box.component.scss
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,17 @@
.fd-message-box {
z-index: 1000;
}

.fd-message-box__header {
[class*="sap-icon"] {
margin-right: 0.5rem;
}
}

.fd-message-box__header[dir=rtl],
[dir=rtl] .fd-message-box__header {
[class*="sap-icon"] {
margin-right: 0;
margin-left: 0.5rem;
}
}
4 changes: 2 additions & 2 deletions libs/core/src/lib/message-box/message-box.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ import { MessageBoxDefaultComponent } from './message-box-default/message-box-de
import { TemplateModule } from '../utils/directives/template/template.module';
import { InitialFocusModule } from '../utils/directives/initial-focus/initial-focus.module';
import { MessageBoxFooterButtonComponent } from './message-box-footer-button/message-box-footer-button.component';
import { MessageBoxCloseIconComponent } from './message-box-close-icon/message-box-close-icon.component';
import { MessageBoxSemanticIconComponent } from './message-box-semantic-icon/message-box-semantic-icon.component';

const declarations = [
MessageBoxFooterButtonComponent,
MessageBoxCloseIconComponent,
MessageBoxSemanticIconComponent,
MessageBoxContainerComponent,
MessageBoxDefaultComponent,
MessageBoxFooterComponent,
Expand Down
2 changes: 1 addition & 1 deletion libs/core/src/lib/message-box/public_api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export * from './message-box-footer/message-box-footer.component';
export * from './message-box-header/message-box-header.component';
export * from './message-box-default/message-box-default.component';
export * from './message-box-container/message-box-container.component';
export * from './message-box-close-icon/message-box-close-icon.component';
export * from './message-box-semantic-icon/message-box-semantic-icon.component';
export * from './message-box-footer-button/message-box-footer-button.component';

export * from './services/message-box.service';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,8 @@ export interface MessageBoxConfigurableElement {

@Injectable()
export class MessageBoxConfig<T = any> extends DialogConfigBase<T> {
type?: MessageBoxType = 'confirmation';
type?: MessageBoxType;
showSemanticIcon?: boolean = false;
hideSemanticIcon?: boolean = false;
customSemanticIcon?: string;
}