-
Notifications
You must be signed in to change notification settings - Fork 941
Expand file tree
/
Copy pathmessages.ts
More file actions
75 lines (63 loc) · 2.42 KB
/
messages.ts
File metadata and controls
75 lines (63 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/// <reference path="../../typings/main.d.ts" />
/// <reference path="../common/models.ts" />
/// <reference path="../common/messaging.ts" />
/// <reference path="shared_directives.ts"/>
import angular = require("angular");
import Models = require("../common/models");
import io = require("socket.io-client");
import moment = require("moment");
import Messaging = require("../common/messaging");
import Shared = require("./shared_directives");
class MessageViewModel {
text: string;
time: moment.Moment;
constructor(message: Models.Message) {
this.time = (moment.isMoment(message.time) ? message.time : moment(message.time));
this.text = message.text;
}
}
interface MessageLoggerScope extends ng.IScope {
messages: MessageViewModel[];
messageOptions: Object;
}
var MessagesController = ($scope: MessageLoggerScope, $log: ng.ILogService, subscriberFactory: Shared.SubscriberFactory) => {
$scope.messages = [];
$scope.messageOptions = {
data: 'messages',
showGroupPanel: false,
rowHeight: 20,
headerRowHeight: 0,
showHeader: false,
groupsCollapsedByDefault: true,
enableColumnResize: true,
sortInfo: { fields: ['time'], directions: ['desc'] },
columnDefs: [
{ width: 120, field: 'time', displayName: 't', cellFilter: 'momentFullDate' },
{ width: "*", field: 'text', displayName: 'text' }
]
};
var addNewMessage = (u: Models.Message) => {
$scope.messages.push(new MessageViewModel(u));
};
var sub = subscriberFactory.getSubscriber($scope, Messaging.Topics.Message)
.registerSubscriber(addNewMessage, x => x.forEach(addNewMessage))
.registerDisconnectedHandler(() => $scope.messages.length = 0);
$scope.$on('$destroy', () => {
sub.disconnect();
$log.info("destroy message grid");
});
$log.info("started message grid");
};
export var messagesDirective = "messagesDirective";
angular
.module(messagesDirective, ['ui.bootstrap', 'ui.grid', Shared.sharedDirectives])
.directive("messagesGrid", () => {
var template = '<div><div style="height: 50px" class="table table-striped table-hover table-condensed" ui-grid="messageOptions"></div></div>';
return {
restrict: 'E',
replace: true,
transclude: false,
template: template,
controller: MessagesController
}
});