import _ from 'lodash'; import {checkRenditions, getAssociationsByFieldId} from 'apps/authoring/authoring/controllers/AssociationController'; import {IArticleField} from 'superdesk-api'; import {appConfig} from 'appConfig'; /** * @ngdoc directive * @module superdesk.apps.archive * @name sdMediaPreview * * @requires api * @requires $rootScope * @requires desks * @requires superdesk * @requires content * @requires storage * * @description Renders the preview of the list item. * */ MediaPreview.$inject = ['api', '$rootScope', 'desks', 'superdesk', 'content', 'storage']; export function MediaPreview(api, $rootScope, desks, superdesk, content, storage) { return { template: require('../views/preview.html'), link: function(scope, elem) { const PREVIEW_HEADER_STATE = 'item_preview:header_state'; const setSubjectPreviewFields = () => { scope.subjectPreviewFields = content.previewFields(scope.editor, scope.fields) .filter((field: IArticleField) => field.field_type == null); }; scope.isCorrectionWorkflowEnabled = appConfig?.corrections_workflow; scope.checkRenditions = checkRenditions; scope.previewState = {toggleHeader: false}; if (scope.selected.preview.profile) { content.getType(scope.selected.preview.profile) .then((type) => { scope.editor = content.editor(type); scope.fields = content.fields(type); setSubjectPreviewFields(); }); } else { content.getCustomFields().then(() => { scope.editor = content.editor(null, scope.selected.preview.type); scope.fields = content.fields({editor: scope.editor}); setSubjectPreviewFields(); }); } // prevent dragging from preview elem.on('dragstart', () => false); /** * @ngDoc method * @name sdMediaPreview#setPreviewState * * @description Set the preview header state */ const setPreviewState = (state) => { scope.previewState = {toggleHeader: state}; storage.setItem(PREVIEW_HEADER_STATE, state); }; setPreviewState(storage.getItem(PREVIEW_HEADER_STATE) || false); /** * @ngDoc method * @name sdMediaPreview#previewRewriteStory * * @description Preview the rewrite story. */ scope.previewRewriteStory = function() { return api.find('archive', scope.item.rewrite_id).then((item) => { $rootScope.$broadcast('broadcast:preview', {item: item}); }); }; /** * @ngDoc method * @name sdMediaPreview#previewRewriteStory * * @description Preview the item (picture, story). */ scope.preview = function(item) { superdesk.intent('preview', 'item', item); }; /** * @ngDoc method * @name sdMediaPreview#togglePreviewHeader * * @description Toggle the preview header. */ scope.togglePreviewHeader = () => { setPreviewState(!scope.previewState.toggleHeader); }; scope.getCompanyCodes = function() { return _.map(scope.item.company_codes, 'qcode').join(', '); }; scope.associationExists = function(associations, fieldId) { return _.size(scope.getAssociatedItems(associations, fieldId)); }; scope.getAssociatedItems = getAssociationsByFieldId; desks.initialize().then(() => { scope.userLookup = desks.userLookup; }); scope.$on('$destroy', () => { elem.off('dragstart'); }); }, }; } export function MediaPreviewWidget() { return { scope: {item: '='}, templateUrl: 'scripts/apps/archive/views/item-preview.html', }; }