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
|
window.angular && (function(angular) {
'use strict';
/**
*
* tableToolbar Component
*
* To use:
* The <table-toolbar> component expects an 'actions' attribute
* that should be an array of action objects.
* Each action object should have 'type', 'label', and 'file'
* properties.
*
* actions: [
* {type: 'Edit', label: 'Edit', file: 'icon-edit.svg'},
* {type: 'Delete', label: 'Edit', file: 'icon-trashcan.svg'}
* ]
*
* The 'type' property is a string value that will be emitted to the
* parent component when clicked.
*
* The 'label' property is a string value that will render as text in
* the button
*
* The 'file' property is a string value of the filename of the svg icon
* to provide <icon> directive.
*
*/
const controller = function() {
/**
* Set defaults if properties undefined
* @param {[]} actions
*/
const setActions = (actions = []) => {
return actions
.map((action) => {
if (action.type === undefined) {
return;
}
if (action.file === undefined) {
action.file = null;
}
return action;
})
.filter((action) => action);
};
/**
* Callback when button action clicked
* Emits the action type to the parent component
*/
this.onClick = (action) => {
this.emitAction({action});
};
this.onClickClose = () => {
this.emitClose();
};
/**
* onInit Component lifecycle hook
*/
this.$onInit = () => {
this.actions = setActions(this.actions);
};
};
/**
* Component template
*/
const template = `
<div class="bmc-table__toolbar" ng-if="$ctrl.active">
<p class="toolbar__selection-count">{{$ctrl.selectionCount}} selected</p>
<div class="toolbar__batch-actions" ng-show="$ctrl.actions.length > 0">
<button
class="btn btn-tertiary"
type="button"
aria-label="{{action.label}}"
ng-repeat="action in $ctrl.actions"
ng-click="$ctrl.onClick(action.type)">
<icon ng-if="action.file !== null"
ng-file="{{action.file}}"
aria-hidden="true">
</icon>
{{action.label || action.type}}
</button>
<button
class="btn btn-tertiary btn-close"
type="button"
aria-label="Cancel"
ng-click="$ctrl.onClickClose()">
Cancel
</button>
</div>
</div>`
/**
* Register tableToolbar component
*/
angular.module('app.common.components').component('tableToolbar', {
controller,
template,
bindings: {
actions: '<',
selectionCount: '<',
active: '<',
emitAction: '&',
emitClose: '&'
}
})
})(window.angular);
|