ElementReferenceProperty.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. 'use strict';
  2. var entryFactory = require('../../../../factory/EntryFactory');
  3. var cmdHelper = require('../../../../helper/CmdHelper');
  4. /**
  5. * Create an entry to modify a property of an element which
  6. * is referenced by a event definition.
  7. *
  8. * @param {djs.model.Base} element
  9. * @param {ModdleElement} definition
  10. * @param {BpmnFactory} bpmnFactory
  11. * @param {Object} options
  12. * @param {string} options.id the id of the entry
  13. * @param {string} options.label the label of the entry
  14. * @param {string} options.referenceProperty the name of referencing property
  15. * @param {string} options.modelProperty the name of property to modify
  16. * @param {string} options.shouldValidate a flag indicate whether to validate or not
  17. *
  18. * @return {Array<Object>} return an array containing the entries
  19. */
  20. module.exports = function(element, definition, bpmnFactory, options) {
  21. var id = options.id || 'element-property';
  22. var label = options.label;
  23. var referenceProperty = options.referenceProperty;
  24. var modelProperty = options.modelProperty || 'name';
  25. var shouldValidate = options.shouldValidate || false;
  26. var entry = entryFactory.textField({
  27. id: id,
  28. label: label,
  29. modelProperty: modelProperty,
  30. get: function(element, node) {
  31. var reference = definition.get(referenceProperty);
  32. var props = {};
  33. props[modelProperty] = reference && reference.get(modelProperty);
  34. return props;
  35. },
  36. set: function(element, values, node) {
  37. var reference = definition.get(referenceProperty);
  38. var props = {};
  39. props[modelProperty] = values[modelProperty] || undefined;
  40. return cmdHelper.updateBusinessObject(element, reference, props);
  41. },
  42. hidden: function(element, node) {
  43. return !definition.get(referenceProperty);
  44. }
  45. });
  46. if (shouldValidate) {
  47. entry.validate = function(element, values, node) {
  48. var reference = definition.get(referenceProperty);
  49. if (reference && !values[modelProperty]) {
  50. var validationErrors = {};
  51. validationErrors[modelProperty] = 'Must provide a value';
  52. return validationErrors;
  53. }
  54. };
  55. }
  56. return [ entry ];
  57. };