svogv
Version:
A decorator based approach for model driven forms, including an advanced DataGrid and a TreeView component.
53 lines • 7.07 kB
JavaScript
const displayName = 'displayName';
const displayOrder = 'displayOrder';
const displayDesc = 'displayDesc';
/**
* The Display decorator.
*
* This decorator can be used on fields. It's being used to create label in {@link EditorComponent} and
* headers in the {@link DataGridComponent}. Additional parameters are provided to refine forms further.
*
* @param name The Name or Label that appears in forms or as header in grids.
* @param order If one uses `AutoFormComponent` to create a whole form from a model, this controls the element's order.
* @param description A tooltip, which can be used optionally.
*/
export function Display(name, order = 0, description) {
function displayInternalSetup(target, key) {
order = parseInt(order.toString(), 10);
// create a helper property to transport a meta data value
Object.defineProperty(target, `__${displayName}__${key}`, {
value: name,
enumerable: false,
configurable: false
});
Object.defineProperty(target, `__${displayOrder}__${key}`, {
value: order,
enumerable: false,
configurable: false
});
Object.defineProperty(target, `__${displayDesc}__${key}`, {
value: description,
enumerable: false,
configurable: false
});
}
// the original decorator
function displayInternal(target, property) {
displayInternalSetup(target, property.toString());
}
// return the decorator
return displayInternal;
}
/**
* Internal access to the provided meta data value for the name property.
*/
Display.Name = (target, key, def) => target[`__${displayName}__${key}`] || def;
/**
* Internal access to the provided meta data value for the order property.
*/
Display.Order = (target, key, def) => target[`__${displayOrder}__${key}`] || def;
/**
* Internal access to the provided meta data value for the description property.
*/
Display.Desc = (target, key, def) => target[`__${displayDesc}__${key}`] || def;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGludC1kaXNwbGF5LmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi9wcm9qZWN0cy9zdm9ndi9zcmMvIiwic291cmNlcyI6WyJsaWIvZGVjb3JhdG9ycy9oaW50LWRpc3BsYXkuZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQztBQUNsQyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDO0FBRWxDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBWSxFQUFFLFFBQWdCLENBQUMsRUFBRSxXQUFvQjtJQUUzRSxTQUFTLG9CQUFvQixDQUFDLE1BQVcsRUFBRSxHQUFXO1FBRXBELEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLDBEQUEwRDtRQUMxRCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLFdBQVcsS0FBSyxHQUFHLEVBQUUsRUFBRTtZQUN4RCxLQUFLLEVBQUUsSUFBSTtZQUNYLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssWUFBWSxLQUFLLEdBQUcsRUFBRSxFQUFFO1lBQ3pELEtBQUssRUFBRSxLQUFLO1lBQ1osVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxXQUFXLEtBQUssR0FBRyxFQUFFLEVBQUU7WUFDeEQsS0FBSyxFQUFFLFdBQVc7WUFDbEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHlCQUF5QjtJQUN6QixTQUFTLGVBQWUsQ0FBQyxNQUFjLEVBQUUsUUFBeUI7UUFDaEUsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQWMsRUFBRSxHQUFXLEVBQUUsR0FBWSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDeEc7O0dBRUc7QUFDSCxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsTUFBYyxFQUFFLEdBQVcsRUFBRSxHQUFZLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFlBQVksS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUMxRzs7R0FFRztBQUNILE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFjLEVBQUUsR0FBVyxFQUFFLEdBQVksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssV0FBVyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZGlzcGxheU5hbWUgPSAnZGlzcGxheU5hbWUnO1xuY29uc3QgZGlzcGxheU9yZGVyID0gJ2Rpc3BsYXlPcmRlcic7XG5jb25zdCBkaXNwbGF5RGVzYyA9ICdkaXNwbGF5RGVzYyc7XG5cbi8qKlxuICogVGhlIERpc3BsYXkgZGVjb3JhdG9yLlxuICpcbiAqIFRoaXMgZGVjb3JhdG9yIGNhbiBiZSB1c2VkIG9uIGZpZWxkcy4gSXQncyBiZWluZyB1c2VkIHRvIGNyZWF0ZSBsYWJlbCBpbiB7QGxpbmsgRWRpdG9yQ29tcG9uZW50fSBhbmRcbiAqIGhlYWRlcnMgaW4gdGhlIHtAbGluayBEYXRhR3JpZENvbXBvbmVudH0uIEFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQgdG8gcmVmaW5lIGZvcm1zIGZ1cnRoZXIuXG4gKlxuICogQHBhcmFtIG5hbWUgICAgICAgICAgVGhlIE5hbWUgb3IgTGFiZWwgdGhhdCBhcHBlYXJzIGluIGZvcm1zIG9yIGFzIGhlYWRlciBpbiBncmlkcy5cbiAqIEBwYXJhbSBvcmRlciAgICAgICAgIElmIG9uZSB1c2VzIGBBdXRvRm9ybUNvbXBvbmVudGAgdG8gY3JlYXRlIGEgd2hvbGUgZm9ybSBmcm9tIGEgbW9kZWwsIHRoaXMgY29udHJvbHMgdGhlIGVsZW1lbnQncyBvcmRlci5cbiAqIEBwYXJhbSBkZXNjcmlwdGlvbiAgIEEgdG9vbHRpcCwgd2hpY2ggY2FuIGJlIHVzZWQgb3B0aW9uYWxseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERpc3BsYXkobmFtZTogc3RyaW5nLCBvcmRlcjogbnVtYmVyID0gMCwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcblxuICBmdW5jdGlvbiBkaXNwbGF5SW50ZXJuYWxTZXR1cCh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcpIHtcblxuICAgIG9yZGVyID0gcGFyc2VJbnQob3JkZXIudG9TdHJpbmcoKSwgMTApO1xuICAgIC8vIGNyZWF0ZSBhIGhlbHBlciBwcm9wZXJ0eSB0byB0cmFuc3BvcnQgYSBtZXRhIGRhdGEgdmFsdWVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBgX18ke2Rpc3BsYXlOYW1lfV9fJHtrZXl9YCwge1xuICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGBfXyR7ZGlzcGxheU9yZGVyfV9fJHtrZXl9YCwge1xuICAgICAgdmFsdWU6IG9yZGVyLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBgX18ke2Rpc3BsYXlEZXNjfV9fJHtrZXl9YCwge1xuICAgICAgdmFsdWU6IGRlc2NyaXB0aW9uLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICAvLyB0aGUgb3JpZ2luYWwgZGVjb3JhdG9yXG4gIGZ1bmN0aW9uIGRpc3BsYXlJbnRlcm5hbCh0YXJnZXQ6IG9iamVjdCwgcHJvcGVydHk6IHN0cmluZyB8IHN5bWJvbCk6IHZvaWQge1xuICAgIGRpc3BsYXlJbnRlcm5hbFNldHVwKHRhcmdldCwgcHJvcGVydHkudG9TdHJpbmcoKSk7XG4gIH1cblxuICAvLyByZXR1cm4gdGhlIGRlY29yYXRvclxuICByZXR1cm4gZGlzcGxheUludGVybmFsO1xufVxuXG4vKipcbiAqIEludGVybmFsIGFjY2VzcyB0byB0aGUgcHJvdmlkZWQgbWV0YSBkYXRhIHZhbHVlIGZvciB0aGUgbmFtZSBwcm9wZXJ0eS5cbiAqL1xuRGlzcGxheS5OYW1lID0gKHRhcmdldDogb2JqZWN0LCBrZXk6IHN0cmluZywgZGVmPzogc3RyaW5nKSA9PiB0YXJnZXRbYF9fJHtkaXNwbGF5TmFtZX1fXyR7a2V5fWBdIHx8IGRlZjtcbi8qKlxuICogSW50ZXJuYWwgYWNjZXNzIHRvIHRoZSBwcm92aWRlZCBtZXRhIGRhdGEgdmFsdWUgZm9yIHRoZSBvcmRlciBwcm9wZXJ0eS5cbiAqL1xuRGlzcGxheS5PcmRlciA9ICh0YXJnZXQ6IG9iamVjdCwga2V5OiBzdHJpbmcsIGRlZj86IHN0cmluZykgPT4gdGFyZ2V0W2BfXyR7ZGlzcGxheU9yZGVyfV9fJHtrZXl9YF0gfHwgZGVmO1xuLyoqXG4gKiBJbnRlcm5hbCBhY2Nlc3MgdG8gdGhlIHByb3ZpZGVkIG1ldGEgZGF0YSB2YWx1ZSBmb3IgdGhlIGRlc2NyaXB0aW9uIHByb3BlcnR5LlxuICovXG5EaXNwbGF5LkRlc2MgPSAodGFyZ2V0OiBvYmplY3QsIGtleTogc3RyaW5nLCBkZWY/OiBzdHJpbmcpID0+IHRhcmdldFtgX18ke2Rpc3BsYXlEZXNjfV9fJHtrZXl9YF0gfHwgZGVmO1xuIl19