scripts/apps/translations/services/TranslationService.ts
import _ from 'lodash';
import {gettext} from 'core/utils';
import {AuthoringWorkspaceService} from 'apps/authoring/authoring/services/AuthoringWorkspaceService';
/**
* @ngdoc service
* @module superdesk.apps.translations
* @name TranslationService
*
* @requires api
* @requires notify
* @requires authoringWorkspace
* @requires https://docs.angularjs.org/api/ng/service/$rootScope $rootScope
*
* @description Provides set of methods to translate items to different languages
*/
TranslationService.$inject = ['api', '$rootScope', 'notify', 'authoringWorkspace', 'desks', 'search'];
export function TranslationService(
api,
$rootScope,
notify,
authoringWorkspace: AuthoringWorkspaceService,
desks,
search,
) {
var service: any = {};
/**
* @ngdoc method
* @name TranslationService#fetch
* @public
* @returns {Object} Languages
* @description Fetch languages from database
*/
service.fetch = function() {
return api.query('languages');
};
/**
* @ngdoc method
* @name TranslationService#get
* @public
* @description Return list of langugages
* @return {Object} list of items
*/
service.get = function() {
return service.languages;
};
/**
* @ngdoc method
* @name TranslationService#get
* @public
* @description Create copy of item with new language set
* @param {Object} item item to be translated
* @param {Object} language translate language
*/
service.set = function(item, language) {
var params = {
guid: item.guid,
language: language.language,
desk: desks.getCurrentDeskId(),
};
api.save('translate', params).then((_item) => {
authoringWorkspace.open(_item);
$rootScope.$broadcast('item:translate');
notify.success(gettext('Item Translated'));
});
};
service.translationsEnabled = function() {
return typeof service.languages === 'object'
&& Array.isArray(service.languages._items)
&& service.languages._items.length > 0;
};
service.getTranslations = function(item) {
if (item.translation_id == null) {
return Promise.reject('translation_id is not present');
}
var query = search.query({});
query.filter({term: {translation_id: item.translation_id}});
var criteria = query.getCriteria(true);
criteria.repo = 'archive,published';
return api.query('search', criteria);
};
/**
* @ngdoc method
* @name TranslationService#checkAvailability
* @public
* @description Check if item is available for translating
* @return {boolean}
*/
service.checkAvailability = function(item) {
return service.translationsEnabled() ?
_.find(service.languages._items, (language) => language.source && language.language === item.language)
: false;
};
// Fetch languages from database on service initialization
service.init = () => service.fetch().then((languages) => {
service.languages = languages;
});
return service;
}