forked from patternfly/angular-patternfly
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnotification-drawer.component.js
127 lines (112 loc) · 3.55 KB
/
notification-drawer.component.js
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
angular.module('patternfly.notification').component('pfNotificationDrawer', {
bindings: {
drawerHidden: '<',
allowExpand: '=?',
drawerExpanded: '=?',
drawerTitle: '@',
notificationGroups: '<',
notificationTrackField: '@',
onClose: '=?',
showMarkAllRead: '<?',
onMarkAllRead: '=?',
showClearAll: '<?',
onClearAll: '=?',
actionButtonTitle: '@',
actionButtonCallback: '=?',
titleInclude: '@',
headingInclude: '@',
subheadingInclude: '@',
notificationBodyInclude: '@',
notificationFooterInclude: '@',
noNotificationsText: '@',
customScope: '=?'
},
templateUrl: 'notification/notification-drawer.html',
controller: function ($window, $timeout, $element) {
'use strict';
var ctrl = this;
var setupGroups = function () {
var openFound = false;
if (angular.isDefined(_.get(ctrl.notificationGroups, 'notifications'))) {
ctrl.notificationGroups = [ctrl.notificationGroups];
}
ctrl.singleGroup = _.size(ctrl.notificationGroups) < 2;
angular.forEach(ctrl.notificationGroups, function (group) {
group.emptyStateConfig = {
icon: 'pficon-info',
title: group.noNotificationsText || ctrl.noNotificationsText || "There are no notifications to display."
};
});
angular.forEach(ctrl.notificationGroups, function (group) {
if (group.open) {
if (openFound) {
group.open = false;
} else {
openFound = true;
}
}
});
};
var updateAccordionSizing = function () {
$timeout(function () {
angular.element($window).triggerHandler('resize');
}, 100);
};
ctrl.toggleCollapse = function (selectedGroup) {
if (selectedGroup.open) {
selectedGroup.open = false;
} else {
angular.forEach(ctrl.notificationGroups, function (group) {
group.open = false;
});
selectedGroup.open = true;
updateAccordionSizing();
}
};
ctrl.toggleExpandDrawer = function () {
ctrl.drawerExpanded = !ctrl.drawerExpanded;
};
ctrl.$onInit = function () {
if (!ctrl.allowExpand || angular.isUndefined(ctrl.drawerExpanded)) {
ctrl.drawerExpanded = false;
}
ctrl.emptyStateConfig = {
icon: 'pficon-info',
title: ctrl.noNotificationsText || "There are no notifications to display."
};
setupGroups();
};
ctrl.$onChanges = function (changesObj) {
if (changesObj.notificationGroups) {
setupGroups();
updateAccordionSizing();
}
if (!ctrl.drawerHidden &&
(changesObj.drawerHidden ||
changesObj.showMarkAllRead ||
changesObj.showClearAll ||
changesObj.actionButtonTitle ||
changesObj.titleInclude ||
changesObj.headingInclude ||
changesObj.subheadingInclude ||
changesObj.notificationBodyInclude ||
changesObj.notificationFooterInclude)) {
updateAccordionSizing();
}
};
ctrl.$postLink = function () {
if (ctrl.groupHeight) {
$element.find('.panel-group').css("height", ctrl.groupHeight);
}
if (ctrl.groupClass) {
$element.find('.panel-group').addClass(ctrl.groupClass);
}
};
ctrl.hasNotifications = function (notificationGroup) {
return _.size(_.get(notificationGroup, 'notifications')) > 0;
};
ctrl.hasUnread = function (notificationGroup) {
return _.size(_.filter(_.get(notificationGroup, 'notifications'), {'unread': true})) > 0;
};
}
});