kahuna/public/js/upload/recent/recent-uploads.js (71 lines of code) (raw):
import angular from 'angular';
import '../../image/service';
import '../../edits/image-editor';
import '../../components/gr-delete-image/gr-delete-image';
import template from './recent-uploads.html';
export let recentUploads = angular.module('kahuna.upload.recent', [
'kahuna.edits.imageEditor',
'gr.image.service'
]);
recentUploads.controller('RecentUploadsCtrl', [
'$rootScope', '$scope', '$window', 'mediaApi', 'imageService',
function ($rootScope, $scope, $window, mediaApi, imageService) {
let ctrl = this;
ctrl.$onInit = () => {
let deletableImages = new Set();
mediaApi.getSession().then(session => {
const uploadedBy = session.user.email;
mediaApi.search('', { uploadedBy }).then(resource => {
resource.data.forEach(image => {
imageService(image).states.canDelete.then(deletable => {
if (deletable) {
deletableImages.add(image.data.id);
}
});
});
ctrl.myUploads = resource;
// TODO: we shouldn't have to do this ;_;
// If an image is updated (e.g. label added,
// archived, etc), refresh the copy we hold
$rootScope.$on('images-updated', (e, updatedImages) => {
const images = ctrl.myUploads.data;
images.forEach((originalImage, index) => {
const maybeImage = updatedImages.find(updatedImage => originalImage.data.id === updatedImage.data.id);
if (maybeImage) {
images[index] = maybeImage;
}
});
});
});
});
ctrl.canBeDeleted = (image) => deletableImages.has(image.data.id);
const freeImageDeleteListener = $rootScope.$on('images-deleted', (e, images) => {
images.forEach(image => {
const index = ctrl.myUploads.data.findIndex(i => i.data.id === image.data.id);
if (index > -1) {
ctrl.myUploads.data.splice(index, 1);
deletableImages.delete(image);
}
});
});
const freeImageDeleteFailListener = $rootScope.$on('image-delete-failure', (err, image) => {
if (err.body && err.body.errorMessage) {
$window.alert(err.body.errorMessage);
} else {
$window.alert(`Failed to delete image ${image.data.id}`);
}
});
$scope.$on('$destroy', () => {
freeImageDeleteListener();
freeImageDeleteFailListener();
});
};
}
]);
recentUploads.directive('recentUploads', [function() {
return {
restrict: 'E',
controller: 'RecentUploadsCtrl',
scope: {}, // ensure isolated scope
controllerAs: 'ctrl',
bindToController: true,
template: template
};
}]);