Skip to content

Commit ae87f33

Browse files
committed
feat(message): Added global service accessors
1 parent 1b70a7c commit ae87f33

File tree

6 files changed

+61
-28
lines changed

6 files changed

+61
-28
lines changed

components/message/message-container.ts

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { MessageConfig } from "./message-config";
33
import { ActiveMessage, SuiActiveMessage } from "./active-message";
44
import { SuiMessage } from "./message";
55
import { SuiComponentFactory } from "../util/component-factory.service";
6-
import { MessageController } from "./message-controller";
6+
import { MessageController, IMessageController } from "./message-controller";
77

88
@Component({
99
selector: "sui-message-container",
@@ -33,12 +33,6 @@ export class SuiMessageContainer {
3333
private _messages:ActiveMessage[];
3434
private _queue:ActiveMessage[];
3535

36-
@Input()
37-
public maxShown:number;
38-
39-
@Input()
40-
public showNewestFirst:boolean;
41-
4236
@Input()
4337
public set controller(controller:MessageController) {
4438
controller.registerContainer(this);
@@ -50,32 +44,29 @@ export class SuiMessageContainer {
5044
constructor(private _componentFactory:SuiComponentFactory, private _element:ElementRef) {
5145
this._messages = [];
5246
this._queue = [];
53-
54-
this.maxShown = 7;
55-
this.showNewestFirst = true;
5647
}
5748

58-
public show(config:MessageConfig):SuiActiveMessage {
49+
public show(config:MessageConfig, maxShown:number, showNewestFirst:boolean):SuiActiveMessage {
5950
const componentRef = this._componentFactory.createComponent(SuiMessage);
6051
componentRef.instance.loadConfig(config);
6152

6253
const active = new ActiveMessage(config, componentRef)
63-
.onDismiss(() => this.onMessageClose(active));
54+
.onDismiss(() => this.onMessageClose(active, showNewestFirst));
6455

65-
if (this._messages.length < this.maxShown) {
66-
this.open(active);
56+
if (this._messages.length < maxShown) {
57+
this.open(active, showNewestFirst);
6758
} else {
6859
this.queue(active);
6960
}
7061

7162
return active;
7263
}
7364

74-
private open(message:ActiveMessage):void {
65+
private open(message:ActiveMessage, showNewestFirst:boolean):void {
7566
this._messages.push(message);
7667

7768
this._componentFactory.attachToView(message.componentRef, this.containerSibling);
78-
if (!this.showNewestFirst) {
69+
if (!showNewestFirst) {
7970
this._componentFactory.moveToElement(message.componentRef, this._element.nativeElement);
8071
}
8172

@@ -91,13 +82,13 @@ export class SuiMessageContainer {
9182
this._messages.forEach(m => m.dismiss());
9283
}
9384

94-
private onMessageClose(message:ActiveMessage):void {
85+
private onMessageClose(message:ActiveMessage, showNewestFirst:boolean):void {
9586
this._messages = this._messages.filter(m => m !== message);
9687

9788
if (this._queue.length > 0) {
9889
const queued = this._queue.shift();
9990

100-
this.open(queued);
91+
this.open(queued, showNewestFirst);
10192
}
10293
}
10394
}

components/message/message-controller.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,31 @@ import { SuiActiveMessage } from "./active-message";
33
import { SuiMessageContainer } from "./message-container";
44

55
export interface IMessageController {
6+
maxShown:number;
7+
isNewestOnTop:boolean;
68
show(config:MessageConfig):SuiActiveMessage;
79
dismissAll():void;
810
}
911

1012
export class MessageController implements IMessageController {
1113
private _container:SuiMessageContainer;
1214

15+
public maxShown:number;
16+
public isNewestOnTop:boolean;
17+
18+
constructor() {
19+
this.maxShown = 7;
20+
this.isNewestOnTop = true;
21+
}
22+
1323
public registerContainer(container:SuiMessageContainer):void {
1424
this._container = container;
1525
}
1626

1727
public show(config:MessageConfig):SuiActiveMessage {
1828
this.throwContainerError();
1929

20-
return this._container.show(config);
30+
return this._container.show(config, this.maxShown, this.isNewestOnTop);
2131
}
2232

2333
public dismissAll():void {

components/message/message-global-container.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ export class SuiMessageGlobalContainer {
5555
public controller:MessageController;
5656

5757
public position:MessagePosition;
58-
5958
public width:number;
6059

6160
public get dynamicClasses():IDynamicClasslist {
@@ -82,11 +81,6 @@ export class SuiMessageGlobalContainer {
8281
return width;
8382
}
8483

85-
constructor() {
86-
this.position = MessagePosition.Top;
87-
this.width = 480;
88-
}
89-
9084
@HostListener("window:resize")
9185
public onDocumentResize():void {}
9286
}

components/message/message-service.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Injectable, ComponentRef } from "@angular/core";
22
import { SuiComponentFactory } from "../util/component-factory.service";
3-
import { SuiMessageGlobalContainer } from "./message-global-container";
3+
import { SuiMessageGlobalContainer, MessagePosition } from "./message-global-container";
44
import { MessageController, IMessageController } from "./message-controller";
55
import { MessageConfig } from "./message-config";
66
import { SuiActiveMessage } from "./active-message";
@@ -14,6 +14,38 @@ export class SuiMessageService implements IMessageController {
1414
return this._containerRef.instance;
1515
}
1616

17+
public get position():MessagePosition {
18+
return this._container.position;
19+
}
20+
21+
public set position(position:MessagePosition) {
22+
this._container.position = position;
23+
}
24+
25+
public get width():number {
26+
return this._container.width;
27+
}
28+
29+
public set width(width:number) {
30+
this._container.width = width;
31+
}
32+
33+
public get maxShown():number {
34+
return this._controller.maxShown;
35+
}
36+
37+
public set maxShown(max:number) {
38+
this._controller.maxShown = max;
39+
}
40+
41+
public get isNewestOnTop():boolean {
42+
return this._controller.isNewestOnTop;
43+
}
44+
45+
public set isNewestOnTop(value:boolean) {
46+
this._controller.isNewestOnTop = value;
47+
}
48+
1749
constructor(private _componentFactory:SuiComponentFactory) {
1850
this._controller = new MessageController();
1951

@@ -22,6 +54,9 @@ export class SuiMessageService implements IMessageController {
2254

2355
this._componentFactory.attachToApplication(this._containerRef);
2456
this._componentFactory.moveToDocumentBody(this._containerRef);
57+
58+
this.position = MessagePosition.TopRight;
59+
this.width = 480;
2560
}
2661

2762
public show(config:MessageConfig):SuiActiveMessage {

demo/src/app/pages/test/test.page.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ <h2 class="ui dividing header">Examples</h2>
1010
<button class="ui button" (click)="open()">open</button>
1111
<button class="ui button" (click)="controller.dismissAll()">dismiss all</button>
1212
<br>
13-
<sui-message-container [controller]="controller" [showNewestFirst]="false"></sui-message-container>
13+
<sui-message-container [controller]="controller"></sui-message-container>
1414
</div>
1515
</demo-page-content>

demo/src/app/pages/test/test.page.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { SuiMessageContainer } from "../../../../../components/message/message-c
33
import { MessageConfig, MessageState } from "../../../../../components/message/message-config";
44
import { MessageController } from "../../../../../components/message/message-controller";
55
import { SuiMessageService } from "../../../../../components/message/message-service";
6+
import { MessagePosition } from "../../../../../components/message/message-global-container";
67

78
@Component({
89
selector: "demo-page-test",
@@ -13,10 +14,12 @@ export class TestPage {
1314

1415
constructor(private _messageService:SuiMessageService) {
1516
this.controller = new MessageController();
17+
this._messageService.position = MessagePosition.BottomRight;
18+
this._messageService.isNewestOnTop = true;
1619
}
1720

1821
public open():void {
19-
const message = new MessageConfig("hello, world!", MessageState.Default, "Header");
22+
const message = new MessageConfig(Date.now().toString(), MessageState.Default, "Header");
2023

2124
// this.controller.show(message);
2225
this._messageService.show(message);

0 commit comments

Comments
 (0)