kahuna/public/js/components/gr-add-label/gr-add-label.js (77 lines of code) (raw):

import angular from 'angular'; import '../../services/label'; import '../../forms/datalist'; import './gr-add-label.css'; import template from './gr-add-label.html'; import '../../directives/gr-auto-focus'; export var addLabel = angular.module('gr.addLabel', [ 'kahuna.services.label', 'gr.autoFocus', 'kahuna.forms.datalist' ]); addLabel.controller('GrAddLabelCtrl', [ '$window', '$q', 'labelService', 'mediaApi', function ($window, $q, labelService, mediaApi) { let ctrl = this; ctrl.active = false; ctrl.save = () => { let labelList = ctrl.newLabel.split(',').map(e => e.trim()); let imageArray = Array.from(ctrl.images); if (labelList) { save(labelList, imageArray); } }; ctrl.cancel = reset; function save(label, imageArray) { ctrl.adding = true; ctrl.active = false; labelService.batchAdd(imageArray, label) .then(() => { reset(); }) .catch(saveFailed) .finally(() => ctrl.adding = false); } function saveFailed(e) { console.error(e); $window.alert('Something went wrong when saving, please try again!'); ctrl.active = true; } function reset() { ctrl.newLabel = ''; ctrl.active = false; } ctrl.labelSearch = (q) => { if (! q) { return $q.resolve([]); } else { return mediaApi.labelSearch({q}).then(resource => { return resource.data.map(d => d.key); }); } }; ctrl.labelAppend = (currentVal, selectedVal) => { const beforeLastComma = currentVal.split(/, ?/).slice(0, -1); const fullText = beforeLastComma.concat(selectedVal); return fullText.join(', '); }; ctrl.selectLastLabel = (value) => { const afterComma = value.split(',').slice(-1)[0].trim(); return afterComma; }; } ]); addLabel.directive('grAddLabel', [function () { return { restrict: 'E', scope: { grSmall: '=?', active: '=?', images: '=' }, controller: 'GrAddLabelCtrl', controllerAs: 'ctrl', bindToController: true, template: template }; }]);