svogv
Version:
A decorator based approach for model driven forms, including an advanced DataGrid and a TreeView component.
38 lines • 4.66 kB
JavaScript
/**
* The FormatPipe decorator. Provide the name of a Pipe that's being used by the
* dynamic pipe formatter. Hence, the form does not need to apply forms manually.
* The reason is that you may create forms automatically and hence can't write
* actual Pipes somewhere. This applies especially if you create a table and loop
* through properties.
*
* @param pipe The name of the pipe's type.
* @param pipeParams The custom pipe's parameters. This is optional and can be omitted.
*
* @example
* @FormatPipe(SomePipe)
* public string formattedProperty = '';
*/
export function FormatPipe(pipe, pipeParams = null) {
function formatInternalSetup(target, key, innerPipe, innerPipeParams = null) {
// create a helper property to transport a meta data value
Object.defineProperty(target, `__uipipe__${key}`, {
value: innerPipe,
enumerable: false,
configurable: false
});
if (innerPipeParams && innerPipeParams.length) {
Object.defineProperty(target, `__pipeparams__${key}`, {
value: innerPipeParams,
enumerable: false,
configurable: false
});
}
}
// the original decorator
function formatInternal(target, property) {
formatInternalSetup(target, property.toString(), pipe, pipeParams);
}
// return the decorator
return formatInternal;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGludC1mb3JtYXRwaXBlLmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi9wcm9qZWN0cy9zdm9ndi9zcmMvIiwic291cmNlcyI6WyJsaWIvZGVjb3JhdG9ycy9oaW50LWZvcm1hdHBpcGUuZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQVUsRUFBRSxhQUFvQixJQUFJO0lBRTdELFNBQVMsbUJBQW1CLENBQUMsTUFBVyxFQUFFLEdBQVcsRUFBRSxTQUFlLEVBQUUsa0JBQXlCLElBQUk7UUFFbkcsMERBQTBEO1FBQzFELE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGFBQWEsR0FBRyxFQUFFLEVBQUU7WUFDaEQsS0FBSyxFQUFFLFNBQVM7WUFDaEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxlQUFlLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUM3QyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsR0FBRyxFQUFFLEVBQUU7Z0JBQ3BELEtBQUssRUFBRSxlQUFlO2dCQUN0QixVQUFVLEVBQUUsS0FBSztnQkFDakIsWUFBWSxFQUFFLEtBQUs7YUFDcEIsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBQ0QseUJBQXlCO0lBQ3pCLFNBQVMsY0FBYyxDQUFDLE1BQWMsRUFBRSxRQUF5QjtRQUMvRCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogVGhlIEZvcm1hdFBpcGUgZGVjb3JhdG9yLiBQcm92aWRlIHRoZSBuYW1lIG9mIGEgUGlwZSB0aGF0J3MgYmVpbmcgdXNlZCBieSB0aGVcbiAqIGR5bmFtaWMgcGlwZSBmb3JtYXR0ZXIuIEhlbmNlLCB0aGUgZm9ybSBkb2VzIG5vdCBuZWVkIHRvIGFwcGx5IGZvcm1zIG1hbnVhbGx5LlxuICogVGhlIHJlYXNvbiBpcyB0aGF0IHlvdSBtYXkgY3JlYXRlIGZvcm1zIGF1dG9tYXRpY2FsbHkgYW5kIGhlbmNlIGNhbid0IHdyaXRlXG4gKiBhY3R1YWwgUGlwZXMgc29tZXdoZXJlLiBUaGlzIGFwcGxpZXMgZXNwZWNpYWxseSBpZiB5b3UgY3JlYXRlIGEgdGFibGUgYW5kIGxvb3BcbiAqIHRocm91Z2ggcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0gcGlwZSAgICAgIFRoZSBuYW1lIG9mIHRoZSBwaXBlJ3MgdHlwZS5cbiAqIEBwYXJhbSBwaXBlUGFyYW1zICAgVGhlIGN1c3RvbSBwaXBlJ3MgcGFyYW1ldGVycy4gVGhpcyBpcyBvcHRpb25hbCBhbmQgY2FuIGJlIG9taXR0ZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqICBARm9ybWF0UGlwZShTb21lUGlwZSlcbiAqIHB1YmxpYyBzdHJpbmcgZm9ybWF0dGVkUHJvcGVydHkgPSAnJztcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEZvcm1hdFBpcGUocGlwZTogUGlwZSwgcGlwZVBhcmFtczogYW55W10gPSBudWxsKSB7XG5cbiAgZnVuY3Rpb24gZm9ybWF0SW50ZXJuYWxTZXR1cCh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcsIGlubmVyUGlwZTogUGlwZSwgaW5uZXJQaXBlUGFyYW1zOiBhbnlbXSA9IG51bGwpIHtcblxuICAgIC8vIGNyZWF0ZSBhIGhlbHBlciBwcm9wZXJ0eSB0byB0cmFuc3BvcnQgYSBtZXRhIGRhdGEgdmFsdWVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBgX191aXBpcGVfXyR7a2V5fWAsIHtcbiAgICAgIHZhbHVlOiBpbm5lclBpcGUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICB9KTtcbiAgICBpZiAoaW5uZXJQaXBlUGFyYW1zICYmIGlubmVyUGlwZVBhcmFtcy5sZW5ndGgpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGBfX3BpcGVwYXJhbXNfXyR7a2V5fWAsIHtcbiAgICAgICAgdmFsdWU6IGlubmVyUGlwZVBhcmFtcyxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvLyB0aGUgb3JpZ2luYWwgZGVjb3JhdG9yXG4gIGZ1bmN0aW9uIGZvcm1hdEludGVybmFsKHRhcmdldDogb2JqZWN0LCBwcm9wZXJ0eTogc3RyaW5nIHwgc3ltYm9sKTogdm9pZCB7XG4gICAgZm9ybWF0SW50ZXJuYWxTZXR1cCh0YXJnZXQsIHByb3BlcnR5LnRvU3RyaW5nKCksIHBpcGUsIHBpcGVQYXJhbXMpO1xuICB9XG5cbiAgLy8gcmV0dXJuIHRoZSBkZWNvcmF0b3JcbiAgcmV0dXJuIGZvcm1hdEludGVybmFsO1xufVxuIl19