UNPKG

comindware.ui

Version:

Comindware Core UI provides the basic components like editors, lists, dropdowns, popups that we so desperately need while creating Marionette-based single-page applications.

208 lines (185 loc) 7.04 kB
/** * Developer: Grigory Kuznetsov * Date: 23.07.2015 * Copyright: 2009-2016 Comindware® * All Rights Reserved * Published under the MIT license */ 'use strict'; import { objectPropertyTypes } from '../Meta'; import { helpers } from 'utils'; import { Handlebars } from 'lib'; const factory = { getCellViewByDataType(type) { let result; switch (type) { case objectPropertyTypes.STRING: result = factory.getTextCellView(); break; case objectPropertyTypes.INSTANCE: result = factory.getReferenceCellView(); break; case objectPropertyTypes.ACCOUNT: result = factory.getUserCellView(); break; case objectPropertyTypes.ENUM: result = factory.getEnumCellView(); break; case objectPropertyTypes.INTEGER: case objectPropertyTypes.DOUBLE: case objectPropertyTypes.DECIMAL: result = factory.getNumberCellView(); break; case objectPropertyTypes.DURATION: result = factory.getDurationCellView(); break; case objectPropertyTypes.BOOLEAN: result = factory.getBooleanCellView(); break; case objectPropertyTypes.DATETIME: result = factory.getDateTimeCellView(); break; case objectPropertyTypes.DOCUMENT: result = factory.getDocumentCellView(); break; default: helpers.throwNotSupportedError(`Data type${type}is not supported`); break; } return result; }, getTextCellView() { return factory.__getSimpleView('{{highlightFragment value highlightedFragment}}'); }, getReferenceCellView() { return factory.__getSimpleView('{{#if value}}{{#if value.name}}{{highlightFragment value.name highlightedFragment}}{{/if}}{{/if}}'); }, getUserCellView() { return factory.__getAccountView(); }, getEnumCellView() { return factory.__getEnumView(); }, getNumberCellView() { return factory.__getSimpleView('{{value}}'); }, getDurationCellView() { return factory.__getSimpleView('{{renderShortDuration value}}'); }, getBooleanCellView() { const templateHelpers = { showIcon() { return _.isBoolean(this.value); } }; return factory.__getSimpleView( '{{#if showIcon}}' + '{{#if value}}<svg class="svg-grid-icons svg-icons_flag-yes"><use xlink:href="#icon-checked"></use></svg>{{/if}}' + '{{#unless value}}<svg class="svg-grid-icons svg-icons_flag-none"><use xlink:href="#icon-remove"></use></svg>{{/unless}}' + '{{/if}}', templateHelpers); }, getDateTimeCellView() { return factory.__getSimpleView('{{#if value}}{{renderFullDate value}}{{/if}}'); }, getDocumentCellView() { return factory.__getDocumentView(); }, __getSimpleView(template, templateHelpers) { return Marionette.ItemView.extend({ template: Handlebars.compile(template), modelEvents: { 'change:highlightedFragment': '__handleHighlightedFragmentChange' }, __handleHighlightedFragmentChange() { this.render(); }, className: 'grid-cell', templateHelpers }); }, __getAccountView() { return Marionette.ItemView.extend({ template: Handlebars.compile('{{text}}'), templateHelpers() { const value = this.model.get('value'); let text = ''; if (value && value.length > 0) { text = _.chain(value) .map(item => ({ id: item.id, text: item.text || item.name || item.columns && item.columns[0] })) .sortBy(member => member.text) .reduce((memo, member) => { if (memo) { return `${memo}, ${member.text}`; } return member.text; }, null) .value(); } else if (value && value.name) { text = value.name; } return { text }; }, modelEvents: { 'change:highlightedFragment': '__handleHighlightedFragmentChange' }, __handleHighlightedFragmentChange() { this.render(); }, className: 'grid-cell' }); }, __getDocumentView() { return Marionette.ItemView.extend({ template: Handlebars.compile('{{#each documents}}<a href="{{url}}">{{text}}</a>{{#unless @last}}, {{/unless}}{{/each}}'), templateHelpers() { const value = this.model.get('value'); let documents = []; if (value && value.length > 0) { documents = _.chain(value) .map(item => ({ id: item.id, text: item.text || item.name || item.columns && item.columns[0], url: item.url || item.columns && item.columns[1] })) .sortBy(document => document.text) .value(); } return { documents }; }, modelEvents: { 'change:highlightedFragment': '__handleHighlightedFragmentChange' }, __handleHighlightedFragmentChange() { this.render(); }, className: 'grid-cell' }); }, __getEnumView() { return Marionette.ItemView.extend({ template: Handlebars.compile('{{#if value}}{{valueExplained}}{{/if}}'), modelEvents: { 'change:highlightedFragment': '__handleHighlightedFragmentChange' }, __handleHighlightedFragmentChange() { this.render(); }, templateHelpers() { const value = this.model.get('value'); return { value, valueExplained: value.valueExplained }; }, className: 'grid-cell' }); } }; export default factory;