UNPKG

@angular-generic-table/core

Version:
173 lines (172 loc) 17.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Pipe } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { GtHighlightPipe } from './gt-highlight.pipe'; // unsupported: template constraints. /** * @template R */ export class GtRenderPipe { /** * @param {?} sanitizer * @param {?} gtHighlightPipe */ constructor(sanitizer, gtHighlightPipe) { this.sanitizer = sanitizer; this.gtHighlightPipe = gtHighlightPipe; /** * Sort by column order */ this.getColumnOrder = function (a, b) { if (a.columnOrder < b.columnOrder) { return -1; } if (a.columnOrder > b.columnOrder || typeof a.columnOrder === 'undefined') { return 1; } return 0; }; /** * Sort by length */ this.getOrderByLength = function (a, b) { return b.length - a.length; }; /** * Return property */ this.getProperty = function (array, key) { for (let /** @type {?} */ i = 0; i < array.length; i++) { if (array[i].objectKey === key) { return array[i]; } } }; } /** * @param {?} row * @param {?} settings * @param {?} fields * @param {?} updated * @param {?} loading * @param {?=} highlight * @param {?=} searchString * @return {?} */ transform(row, settings, fields, updated, loading, highlight = false, searchString) { // let arr = [{"temp":123,"name":"happy"},{"temp":456,"name":"dfgdfg"},{"temp":789,"name":"asdasd"}]; // console.log(arr,arr.map(function(item){return item.temp})); // console.log(settings.map('objectKey')); // console.log('render'); const /** @type {?} */ columns = []; for (let /** @type {?} */ i = 0; i < settings.length; i++) { if (settings[i].visible !== false && settings[i].enabled !== false) { columns.push(settings[i].objectKey); } } for (let /** @type {?} */ i = 0; i < fields.length; i++) { // console.log(!row[fields[i].objectKey]); if (fields[i].value && typeof fields[i].value === 'function' && !row.hasOwnProperty(fields[i].objectKey)) { row[fields[i].objectKey] = loading ? '' : fields[i].value(row); } } // console.log(row); const /** @type {?} */ keys = []; for (const /** @type {?} */ key in row) { // console.log(key); if (columns.indexOf(key) !== -1) { let /** @type {?} */ fieldSetting; for (let /** @type {?} */ i = 0; i < fields.length; i++) { if (fields[i].objectKey === key) { fieldSetting = fields[i]; // console.log(fieldSetting); } } const /** @type {?} */ columnObject = { objectKey: key, sortValue: row[key] }; // add component if defined if (fieldSetting.columnComponent) { columnObject.columnComponent = fieldSetting.columnComponent; } if (loading) { columnObject.renderValue = row[key] !== null ? row[key] : ''; } else if (highlight && searchString && this.getProperty(settings, key).search !== false) { columnObject.renderValue = fieldSetting.render && typeof fieldSetting.render === 'function' ? this.gtHighlightPipe.transform(fieldSetting.render(row), searchString) : this.gtHighlightPipe.transform(row[key] !== null ? row[key] : '', searchString); } else { columnObject.renderValue = fieldSetting.render && typeof fieldSetting.render === 'function' ? this.sanitizer.bypassSecurityTrustHtml(fieldSetting.render(row)) : row[key] !== null ? row[key] : ''; } if (fieldSetting.click && typeof fieldSetting.click === 'function') { columnObject.click = fieldSetting.click; } if (fieldSetting.expand) { columnObject.expand = fieldSetting.expand; } keys.push(columnObject); } } keys.sort(function (a, b) { return columns.indexOf(a.objectKey) < columns.indexOf(b.objectKey) ? -1 : 1; }); return keys; } } GtRenderPipe.decorators = [ { type: Pipe, args: [{ name: 'gtRender' },] }, ]; /** @nocollapse */ GtRenderPipe.ctorParameters = () => [ { type: DomSanitizer, }, { type: GtHighlightPipe, }, ]; function GtRenderPipe_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ GtRenderPipe.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ GtRenderPipe.ctorParameters; /** * Sort by column order * @type {?} */ GtRenderPipe.prototype.getColumnOrder; /** * Sort by length * @type {?} */ GtRenderPipe.prototype.getOrderByLength; /** * Return property * @type {?} */ GtRenderPipe.prototype.getProperty; /** @type {?} */ GtRenderPipe.prototype.sanitizer; /** @type {?} */ GtRenderPipe.prototype.gtHighlightPipe; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3QtcmVuZGVyLnBpcGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYW5ndWxhci1nZW5lcmljLXRhYmxlL2NvcmUvIiwic291cmNlcyI6WyJwaXBlcy9ndC1yZW5kZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFHcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFLdEQsTUFBTTs7Ozs7SUFDTCxZQUNTLFdBQ0E7UUFEQSxjQUFTLEdBQVQsU0FBUztRQUNULG9CQUFlLEdBQWYsZUFBZTs7Ozs4QkFLQyxVQUFTLENBQWtCLEVBQUUsQ0FBa0I7WUFDdkUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ1Y7WUFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNFLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDVDtZQUNELE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDVDs7OztnQ0FHMEIsVUFBUyxDQUFNLEVBQUUsQ0FBTTtZQUNqRCxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1NBQzNCOzs7OzJCQUdxQixVQUFTLEtBQWlCLEVBQUUsR0FBVztZQUM1RCxHQUFHLENBQUMsQ0FBQyxxQkFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZDLEVBQUUsQ0FBQyxD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LENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDekIsWUFBWSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO2lCQUMxQztnQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3hCO1NBQ0Q7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVMsQ0FBTSxFQUFFLENBQU07WUFDaEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDakUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ0wsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQztLQUNaOzs7WUFwSUQsSUFBSSxTQUFDO2dCQUNMLElBQUksRUFBRSxVQUFVO2FBQ2hCOzs7O1lBUFEsWUFBWTtZQUdaLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHdENvbmZpZ1NldHRpbmcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2d0LWNvbmZpZy1zZXR0aW5nJztcbmltcG9ydCB7IEd0Q29uZmlnRmllbGQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2d0LWNvbmZpZy1maWVsZCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEd0Um93IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ndC1yb3cnO1xuaW1wb3J0IHsgR3RSZW5kZXJGaWVsZCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZ3QtcmVuZGVyLWZpZWxkJztcbmltcG9ydCB7IEd0SGlnaGxpZ2h0UGlwZSB9IGZyb20gJy4vZ3QtaGlnaGxpZ2h0LnBpcGUnO1xuXG5AUGlwZSh7XG5cdG5hbWU6ICdndFJlbmRlcidcbn0pXG5leHBvcnQgY2xhc3MgR3RSZW5kZXJQaXBlPFIgZXh0ZW5kcyBHdFJvdz4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcblx0XHRwcml2YXRlIGd0SGlnaGxpZ2h0UGlwZTogR3RIaWdobGlnaHRQaXBlXG5cdCkge31cblxuXHQvLyBUT0RPOiBtb3ZlIHRvIGhlbHBlciBmdW5jdGlvbnNcblx0LyoqIFNvcnQgYnkgY29sdW1uIG9yZGVyICovXG5cdHByaXZhdGUgZ2V0Q29sdW1uT3JkZXIgPSBmdW5jdGlvbihhOiBHdENvbmZpZ1NldHRpbmcsIGI6IEd0Q29uZmlnU2V0dGluZykge1xuXHRcdGlmIChhLmNvbHVtbk9yZGVyIDwgYi5jb2x1bW5PcmRlcikge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpZiAoYS5jb2x1bW5PcmRlciA+IGIuY29sdW1uT3JkZXIgfHwgdHlwZW9mIGEuY29sdW1uT3JkZXIgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH07XG5cblx0LyoqIFNvcnQgYnkgbGVuZ3RoICovXG5cdHByaXZhdGUgZ2V0T3JkZXJCeUxlbmd0aCA9IGZ1bmN0aW9uKGE6IGFueSwgYjogYW55KSB7XG5cdFx0cmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG5cdH07XG5cblx0LyoqIFJldHVybiBwcm9wZXJ0eSAqL1xuXHRwcml2YXRlIGdldFByb3BlcnR5ID0gZnVuY3Rpb24oYXJyYXk6IEFycmF5PGFueT4sIGtleTogc3RyaW5nKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGFycmF5W2ldLm9iamVjdEtleSA9PT0ga2V5KSB7XG5cdFx0XHRcdHJldHVybiBhcnJheVtpXTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dHJhbnNmb3JtKFxuXHRcdHJvdzogYW55LFxuXHRcdHNldHRpbmdzOiBBcnJheTxHdENvbmZpZ1NldHRpbmc+LFxuXHRcdGZpZWxkczogQXJyYXk8R3RDb25maWdGaWVsZDxSLCBhbnk+Pixcblx0XHR1cGRhdGVkOiBib29sZWFuLFxuXHRcdGxvYWRpbmc6IGJvb2xlYW4sXG5cdFx0aGlnaGxpZ2h0OiBib29sZWFuID0gZmFsc2UsXG5cdFx0c2VhcmNoU3RyaW5nPzogc3RyaW5nXG5cdCk6IEFycmF5PEd0UmVuZGVyRmllbGQ8UiwgYW55Pj4ge1xuXHRcdC8vIGxldCBhcnIgPSBbe1widGVtcFwiOjEyMyxcIm5hbWVcIjpcImhhcHB5XCJ9LHtcInRlbXBcIjo0NTYsXCJuYW1lXCI6XCJkZmdkZmdcIn0se1widGVtcFwiOjc4OSxcIm5hbWVcIjpcImFzZGFzZFwifV07XG5cdFx0Ly8gY29uc29sZS5sb2coYXJyLGFyci5tYXAoZnVuY3Rpb24oaXRlbSl7cmV0dXJuIGl0ZW0udGVtcH0pKTtcblx0XHQvLyBjb25zb2xlLmxvZyhzZXR0aW5ncy5tYXAoJ29iamVjdEtleScpKTtcblxuXHRcdC8vIGNvbnNvbGUubG9nKCdyZW5kZXInKTtcblx0XHRjb25zdCBjb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5ncy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHNldHRpbmdzW2ldLnZpc2libGUgIT09IGZhbHNlICYmIHNldHRpbmdzW2ldLmVuYWJsZWQgIT09IGZhbHNlKSB7XG5cdFx0XHRcdGNvbHVtbnMucHVzaChzZXR0aW5nc1tpXS5vYmplY3RLZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHQvLyBjb25zb2xlLmxvZyghcm93W2ZpZWxkc1tpXS5vYmplY3RLZXldKTtcblx0XHRcdGlmIChcblx0XHRcdFx0ZmllbGRzW2ldLnZhbHVlICYmXG5cdFx0XHRcdHR5cGVvZiBmaWVsZHNbaV0udmFsdWUgPT09ICdmdW5jdGlvbicgJiZcblx0XHRcdFx0IXJvdy5oYXNPd25Qcm9wZXJ0eShmaWVsZHNbaV0ub2JqZWN0S2V5KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJvd1tmaWVsZHNbaV0ub2JqZWN0S2V5XSA9IGxvYWRpbmcgPyAnJyA6IGZpZWxkc1tpXS52YWx1ZShyb3cpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBjb25zb2xlLmxvZyhyb3cpO1xuXHRcdGNvbnN0IGtleXM6IEFycmF5PGFueT4gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiByb3cpIHtcblx0XHRcdC8vIGNvbnNvbGUubG9nKGtleSk7XG5cdFx0XHRpZiAoY29sdW1ucy5pbmRleE9mKGtleSkgIT09IC0xKSB7XG5cdFx0XHRcdGxldCBmaWVsZFNldHRpbmc7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKGZpZWxkc1tpXS5vYmplY3RLZXkgPT09IGtleSkge1xuXHRcdFx0XHRcdFx0ZmllbGRTZXR0aW5nID0gZmllbGRzW2ldO1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZmllbGRTZXR0aW5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBjb2x1bW5PYmplY3Q6IEd0UmVuZGVyRmllbGQ8UiwgYW55PiA9IHtcblx0XHRcdFx0XHRvYmplY3RLZXk6IGtleSxcblx0XHRcdFx0XHRzb3J0VmFsdWU6IHJvd1trZXldXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gYWRkIGNvbXBvbmVudCBpZiBkZWZpbmVkXG5cdFx0XHRcdGlmIChmaWVsZFNldHRpbmcuY29sdW1uQ29tcG9uZW50KSB7XG5cdFx0XHRcdFx0Y29sdW1uT2JqZWN0LmNvbHVtbkNvbXBvbmVudCA9IGZpZWxkU2V0dGluZy5jb2x1bW5Db21wb25lbnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobG9hZGluZykge1xuXHRcdFx0XHRcdGNvbHVtbk9iamVjdC5yZW5kZXJWYWx1ZSA9IHJvd1trZXldICE9PSBudWxsID8gcm93W2tleV0gOiAnJztcblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRoaWdobGlnaHQgJiZcblx0XHRcdFx0XHRzZWFyY2hTdHJpbmcgJiZcblx0XHRcdFx0XHR0aGlzLmdldFByb3BlcnR5KHNldHRpbmdzLCBrZXkpLnNlYXJjaCAhPT0gZmFsc2Vcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y29sdW1uT2JqZWN0LnJlbmRlclZhbHVlID1cblx0XHRcdFx0XHRcdGZpZWxkU2V0dGluZy5yZW5kZXIgJiYgdHlwZW9mIGZpZWxkU2V0dGluZy5yZW5kZXIgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0XHRcdFx0PyB0aGlzLmd0SGlnaGxpZ2h0UGlwZS50cmFuc2Zvcm0oXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFNldHRpbmcucmVuZGVyKHJvdyksXG5cdFx0XHRcdFx0XHRcdFx0XHRzZWFyY2hTdHJpbmdcblx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdDogdGhpcy5ndEhpZ2hsaWdodFBpcGUudHJhbnNmb3JtKFxuXHRcdFx0XHRcdFx0XHRcdFx0cm93W2tleV0gIT09IG51bGwgPyByb3dba2V5XSA6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0c2VhcmNoU3RyaW5nXG5cdFx0XHRcdFx0XHRcdCAgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb2x1bW5PYmplY3QucmVuZGVyVmFsdWUgPVxuXHRcdFx0XHRcdFx0ZmllbGRTZXR0aW5nLnJlbmRlciAmJiB0eXBlb2YgZmllbGRTZXR0aW5nLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHRcdFx0XHQ/IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGZpZWxkU2V0dGluZy5yZW5kZXIocm93KSlcblx0XHRcdFx0XHRcdFx0OiByb3dba2V5XSAhPT0gbnVsbFxuXHRcdFx0XHRcdFx0XHRcdD8gcm93W2tleV1cblx0XHRcdFx0XHRcdFx0XHQ6ICcnO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGZpZWxkU2V0dGluZy5jbGljayAmJiB0eXBlb2YgZmllbGRTZXR0aW5nLmNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29sdW1uT2JqZWN0LmNsaWNrID0gZmllbGRTZXR0aW5nLmNsaWNrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChmaWVsZFNldHRpbmcuZXhwYW5kKSB7XG5cdFx0XHRcdFx0Y29sdW1uT2JqZWN0LmV4cGFuZCA9IGZpZWxkU2V0dGluZy5leHBhbmQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRrZXlzLnB1c2goY29sdW1uT2JqZWN0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRrZXlzLnNvcnQoZnVuY3Rpb24oYTogYW55LCBiOiBhbnkpIHtcblx0XHRcdHJldHVybiBjb2x1bW5zLmluZGV4T2YoYS5vYmplY3RLZXkpIDwgY29sdW1ucy5pbmRleE9mKGIub2JqZWN0S2V5KVxuXHRcdFx0XHQ/IC0xXG5cdFx0XHRcdDogMTtcblx0XHR9KTtcblx0XHRyZXR1cm4ga2V5cztcblx0fVxufVxuIl19