123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- 'use strict';
- var entryFactory = require('../../../../factory/EntryFactory'),
- is = require('bpmn-js/lib/util/ModelUtil').is,
- getTemplate = require('../Helper').getTemplate,
- getTemplateId = require('../Helper').getTemplateId;
- var find = require('lodash/find');
- var TEMPLATE_ATTR = require('../Helper').TEMPLATE_ATTR;
- function isAny(element, types) {
- return types.reduce(function(result, type) {
- return result || is(element, type);
- }, false);
- }
- module.exports = function(group, element, elementTemplates, translate) {
- var options = getTemplateOptions(element, elementTemplates, translate);
- if (options.length === 1 && !options[0].isDefault) {
- return;
- }
- // select element template (via dropdown)
- group.entries.push(entryFactory.selectBox({
- id: 'elementTemplate-chooser',
- label: translate('Element Template'),
- modelProperty: 'activiti:modelerTemplate',
- selectOptions: options,
- set: function(element, properties) {
- return applyTemplate(element, properties[TEMPLATE_ATTR], elementTemplates);
- },
- disabled: function() {
- var template = getTemplate(element, elementTemplates);
- return template && isDefaultTemplate(template);
- }
- }));
- };
- // helpers //////////////////////////////////////
- function applyTemplate(element, newTemplateId, elementTemplates) {
- // cleanup
- // clear input output mappings
- // undo changes to properties defined in template
- // re-establish
- // set input output mappings
- // apply changes to properties as defined in new template
- var oldTemplate = getTemplate(element, elementTemplates),
- newTemplate = elementTemplates.get(newTemplateId);
- if (oldTemplate === newTemplate) {
- return;
- }
- return {
- cmd: 'propertiesPanel.activiti.changeTemplate',
- context: {
- element: element,
- oldTemplate: oldTemplate,
- newTemplate: newTemplate
- }
- };
- }
- function getTemplateOptions(element, elementTemplates, translate) {
- var currentTemplateId = getTemplateId(element);
- var emptyOption = {
- name: '',
- value: ''
- };
- var allOptions = elementTemplates.getAll().reduce(function(templates, t) {
- if (!isAny(element, t.appliesTo)) {
- return templates;
- }
- return templates.concat({
- name: translate(t.name),
- value: t.id,
- isDefault: t.isDefault
- });
- }, [ emptyOption ]);
- var defaultOption = find(allOptions, function(option) {
- return isDefaultTemplate(option);
- });
- var currentOption = find(allOptions, function(option) {
- return option.value === currentTemplateId;
- });
- if (currentTemplateId && !currentOption) {
- currentOption = unknownTemplate(currentTemplateId, translate);
- allOptions.push(currentOption);
- }
- if (!defaultOption) {
- // return all options, including empty
- // and optionally unknownTemplate option
- return allOptions;
- }
- // special limited handling for
- // default options
- var options = [];
- // current template not set
- if (!currentTemplateId) {
- options.push({
- name: '',
- value: ''
- });
- }
- // current template not default
- if (currentOption && currentOption !== defaultOption) {
- options.push(currentOption);
- }
- options.push(defaultOption);
- // [ (empty), (current), defaultOption ]
- return options;
- }
- function unknownTemplate(templateId, translate) {
- return {
- name: translate('[unknown template: {templateId}]', { templateId: templateId }),
- value: templateId
- };
- }
- function isDefaultTemplate(elementTemplate) {
- return elementTemplate.isDefault;
- }
|