window.angular && (function(angular) { 'use strict'; /** * * tableActions Component * * To use: * The component expects an 'actions' attribute * that should be an array of action objects. * Each action object should have 'type', 'enabled', and 'file' * properties. * * actions: [ * {type: 'Edit', enabled: true, file: 'icon-edit.svg'}, * {type: 'Delete', enabled: false, file: 'icon-trashcan.svg'} * ] * * The 'type' property is a string value that will be emitted to the * parent component when clicked. * * The 'enabled' property is a boolean that will enable/disable * the button. * * The 'file' property is a string value of the filename of the svg icon * to provide 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; } if (action.enabled === undefined) { action.enabled = true; } return action; }) .filter((action) => action); }; /** * Callback when button action clicked * Emits the action type to the parent component */ this.onClick = (action) => { this.emitAction({action}); }; /** * onChanges Component lifecycle hook */ this.$onChanges = () => { this.actions = setActions(this.actions); }; }; /** * Component template */ const template = ` ` /** * Register tableActions component */ angular.module('app.common.components').component('tableActions', { controller, template, bindings: {actions: '<', emitAction: '&'} }) })(window.angular);