cytoscape-angular-ng17
Version:
Angular 17+ components for cytoscape charting.
129 lines • 14.2 kB
JavaScript
export class FormInfo {
title;
fieldsets;
showSubmitButton;
submitText;
disableSubmitOnFormInvalid;
otherFieldsetTitle;
constructor(title, fieldsets, showSubmitButton = false, submitText = 'Submit', disableSubmitOnFormInvalid = false,
/* if the model has a property that isn't in a fieldset, but it in an fieldset created by the form */
otherFieldsetTitle = null) {
this.title = title;
this.fieldsets = fieldsets;
this.showSubmitButton = showSubmitButton;
this.submitText = submitText;
this.disableSubmitOnFormInvalid = disableSubmitOnFormInvalid;
this.otherFieldsetTitle = otherFieldsetTitle;
}
}
export class FieldsetInfo {
legend;
fieldInfos;
displayOnlyIfProperties;
constructor(legend, fieldInfos, displayOnlyIfProperties) {
this.legend = legend;
this.fieldInfos = fieldInfos;
this.displayOnlyIfProperties = displayOnlyIfProperties;
}
showFieldsetForModel(model) {
if (!this.displayOnlyIfProperties) {
return true;
}
for (const fieldInfo of this.fieldInfos) {
for (const modelProperty of Object.keys(model)) {
if (fieldInfo.modelProperty === modelProperty) {
return true;
}
}
}
return false;
}
}
export class FieldInfo {
label;
modelProperty;
type;
tooltip;
validators;
disableWhenInvalid;
hideWhenNoModelProperty;
placeholder;
inputType;
inputSize;
options;
optionArrayLabelField;
optionArrayValueField;
fieldTypes = {};
updateOn = 'submit'; // same as AbstractControlOptions
asyncValidators;
constructor(
/* label to show the user next to the field, can be a function for i18n/dynamic labels */
label,
/* The form has a model, this is the name of the property on the form's model object that this field */
modelProperty,
/* computed from the model property type by default */
type,
/* The tooltip to display on hover */
tooltip,
/* The list of Angular Form Validators for the control or a function that returns such an array */
validators,
/* disable the field if it's not valid */
disableWhenInvalid = false,
/* If true and model[modelProperty] is undefined, don't create a field.*/
hideWhenNoModelProperty = true,
/* Input only - by default the label is used as a placeholder and floats (how to downcast in a template?) */
placeholder,
/* Input only - same as HTML input (how to downcast in a template?) */
inputType = 'text',
/* Input only - same as HTML input (how to downcast in a template?) */
inputSize = 8,
/* Select only either an array of object or the name of a model property or function that is/returns an array of objects */
options,
/* In an options object, what field to display to the user (or function that returns a string
given the option object and the model) */
optionArrayLabelField,
/* In an options object, what field to return for the value of the option
(or function that returns a string given the option object and the model) */
optionArrayValueField) {
this.label = label;
this.modelProperty = modelProperty;
this.type = type;
this.tooltip = tooltip;
this.validators = validators;
this.disableWhenInvalid = disableWhenInvalid;
this.hideWhenNoModelProperty = hideWhenNoModelProperty;
this.placeholder = placeholder;
this.inputType = inputType;
this.inputSize = inputSize;
this.options = options;
this.optionArrayLabelField = optionArrayLabelField;
this.optionArrayValueField = optionArrayValueField;
}
fieldType(model) {
if (!this.modelProperty) {
return this.fieldTypes[0]; // Return first field type if no model property
}
const cached = this.fieldTypes[this.modelProperty];
if (cached) {
return cached;
}
else {
const fieldValueType = typeof model[this.modelProperty];
const result = this.type
? this.type
: this.options
? 'options'
: fieldValueType;
this.fieldTypes[this.modelProperty] = result;
return result;
}
}
setValue(newValue, model, modelChange) {
if (!this.modelProperty) {
return; // cannot set values that don't have a model property
}
model[this.modelProperty] = newValue;
modelChange.emit({ property: this.modelProperty, value: newValue });
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3l0b3NjYXBlLWFuZ3VsYXIvc3JjL2xpYi9mbHVpZC1mb3JtL2Zvcm0taW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1QkEsTUFBTSxPQUFPLFFBQVE7SUFFVjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFQVCxZQUNTLEtBQWEsRUFDYixTQUF5QixFQUN6QixtQkFBbUIsS0FBSyxFQUN4QixhQUFhLFFBQVEsRUFDckIsNkJBQTZCLEtBQUs7SUFDekMscUdBQXFHO0lBQzlGLHFCQUFxQixJQUFJO1FBTnpCLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUN6QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQVE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQUNyQiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQVE7UUFFbEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFPO0lBQy9CLENBQUM7Q0FDTDtBQUVELE1BQU0sT0FBTyxZQUFZO0lBRWQ7SUFDQTtJQUNBO0lBSFQsWUFDUyxNQUFjLEVBQ2QsVUFBdUIsRUFDdkIsdUJBQWtDO1FBRmxDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFhO1FBQ3ZCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBVztJQUN4QyxDQUFDO0lBRUosb0JBQW9CLENBQUMsS0FBYTtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDbEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEMsS0FBSyxNQUFNLGFBQWEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLElBQUks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QUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogdHNsaW50OmRpc2FibGU6YmFuLXR5cGVzICovXG5pbXBvcnQgeyBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBGaWVsZFR5cGUgPVxuICB8ICdTaGFwZVBvbHlnb25Qb2ludHMnXG4gIHwgJ3BlcmNlbnQnXG4gIHwgJ05vZGVTaGFwZSdcbiAgfCAnTGluZVN0eWxlJ1xuICB8ICdUZXh0VHJhbnNmb3JtYXRpb24nXG4gIHwgJ0ZvbnRTdHlsZSdcbiAgfCAnRm9udFdlaWdodCdcbiAgfCAnb3B0aW9ucydcbiAgfCAnQ29sb3VyJ1xuICB8ICd1bmRlZmluZWQnXG4gIHwgJ29iamVjdCdcbiAgfCAnYm9vbGVhbidcbiAgfCAnbnVtYmVyJ1xuICB8ICdzdHJpbmcnXG4gIHwgJ2Z1bmN0aW9uJ1xuICB8ICdzeW1ib2wnXG4gIHwgJ2JpZ2ludCc7XG5cbmV4cG9ydCBjbGFzcyBGb3JtSW5mbyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nLFxuICAgIHB1YmxpYyBmaWVsZHNldHM6IEZpZWxkc2V0SW5mb1tdLFxuICAgIHB1YmxpYyBzaG93U3VibWl0QnV0dG9uID0gZmFsc2UsXG4gICAgcHVibGljIHN1Ym1pdFRleHQgPSAnU3VibWl0JyxcbiAgICBwdWJsaWMgZGlzYWJsZVN1Ym1pdE9uRm9ybUludmFsaWQgPSBmYWxzZSxcbiAgICAvKiBpZiB0aGUgbW9kZWwgaGFzIGEgcHJvcGVydHkgdGhhdCBpc24ndCBpbiBhIGZpZWxkc2V0LCBidXQgaXQgaW4gYW4gZmllbGRzZXQgY3JlYXRlZCBieSB0aGUgZm9ybSAqL1xuICAgIHB1YmxpYyBvdGhlckZpZWxkc2V0VGl0bGUgPSBudWxsXG4gICkge31cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkc2V0SW5mbyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBsZWdlbmQ6IHN0cmluZyxcbiAgICBwdWJsaWMgZmllbGRJbmZvczogRmllbGRJbmZvW10sXG4gICAgcHVibGljIGRpc3BsYXlPbmx5SWZQcm9wZXJ0aWVzPzogc3RyaW5nW11cbiAgKSB7fVxuXG4gIHNob3dGaWVsZHNldEZvck1vZGVsKG1vZGVsOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZGlzcGxheU9ubHlJZlByb3BlcnRpZXMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZpZWxkSW5mbyBvZiB0aGlzLmZpZWxkSW5mb3MpIHtcbiAgICAgIGZvciAoY29uc3QgbW9kZWxQcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyhtb2RlbCkpIHtcbiAgICAgICAgaWYgKGZpZWxkSW5mby5tb2RlbFByb3BlcnR5ID09PSBtb2RlbFByb3BlcnR5KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZEluZm8ge1xuICBwcml2YXRlIGZpZWxkVHlwZXMgPSB7fTtcbiAgdXBkYXRlT246ICdjaGFuZ2UnIHwgJ2JsdXInIHwgJ3N1Ym1pdCcgPSAnc3VibWl0JzsgLy8gc2FtZSBhcyBBYnN0cmFjdENvbnRyb2xPcHRpb25zXG4gIGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JGbltdIHwgRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLyogbGFiZWwgdG8gc2hvdyB0aGUgdXNlciBuZXh0IHRvIHRoZSBmaWVsZCwgY2FuIGJlIGEgZnVuY3Rpb24gZm9yIGkxOG4vZHluYW1pYyBsYWJlbHMgKi9cbiAgICBwdWJsaWMgbGFiZWw/OiBzdHJpbmcgfCBGdW5jdGlvbixcbiAgICAvKiBUaGUgZm9ybSBoYXMgYSBtb2RlbCwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgb24gdGhlIGZvcm0ncyBtb2RlbCBvYmplY3QgdGhhdCB0aGlzIGZpZWxkICovXG4gICAgcHVibGljIG1vZGVsUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgLyogY29tcHV0ZWQgZnJvbSB0aGUgbW9kZWwgcHJvcGVydHkgdHlwZSBieSBkZWZhdWx0ICovXG4gICAgcHVibGljIHR5cGU/OiBGaWVsZFR5cGUsXG4gICAgLyogVGhlIHRvb2x0aXAgdG8gZGlzcGxheSBvbiBob3ZlciAqL1xuICAgIHB1YmxpYyB0b29sdGlwPzogc3RyaW5nLFxuICAgIC8qIFRoZSBsaXN0IG9mIEFuZ3VsYXIgRm9ybSBWYWxpZGF0b3JzIGZvciB0aGUgY29udHJvbCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBzdWNoIGFuIGFycmF5ICovXG4gICAgcHVibGljIHZhbGlkYXRvcnM/OiBWYWxpZGF0b3JGbltdIHwgRnVuY3Rpb24sXG4gICAgLyogZGlzYWJsZSB0aGUgZmllbGQgaWYgaXQncyBub3QgdmFsaWQgKi9cbiAgICBwdWJsaWMgZGlzYWJsZVdoZW5JbnZhbGlkID0gZmFsc2UsXG4gICAgLyogSWYgdHJ1ZSBhbmQgbW9kZWxbbW9kZWxQcm9wZXJ0eV0gaXMgdW5kZWZpbmVkLCBkb24ndCBjcmVhdGUgYSBmaWVsZC4qL1xuICAgIHB1YmxpYyBoaWRlV2hlbk5vTW9kZWxQcm9wZXJ0eSA9IHRydWUsXG4gICAgLyogSW5wdXQgb25seSAtIGJ5IGRlZmF1bHQgdGhlIGxhYmVsIGlzIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBhbmQgZmxvYXRzIChob3cgdG8gZG93bmNhc3QgaW4gYSB0ZW1wbGF0ZT8pICovXG4gICAgcHVibGljIHBsYWNlaG9sZGVyPzogc3RyaW5nLFxuICAgIC8qIElucHV0IG9ubHkgLSBzYW1lIGFzIEhUTUwgaW5wdXQgKGhvdyB0byBkb3duY2FzdCBpbiBhIHRlbXBsYXRlPykgKi9cbiAgICBwdWJsaWMgaW5wdXRUeXBlOiBzdHJpbmcgPSAndGV4dCcsXG4gICAgLyogSW5wdXQgb25seSAtIHNhbWUgYXMgSFRNTCBpbnB1dCAoaG93IHRvIGRvd25jYXN0IGluIGEgdGVtcGxhdGU/KSAqL1xuICAgIHB1YmxpYyBpbnB1dFNpemU6IG51bWJlciA9IDgsXG4gICAgLyogU2VsZWN0IG9ubHkgZWl0aGVyIGFuIGFycmF5IG9mIG9iamVjdCBvciB0aGUgbmFtZSBvZiBhIG1vZGVsIHByb3BlcnR5IG9yIGZ1bmN0aW9uIHRoYXQgaXMvcmV0dXJucyBhbiBhcnJheSBvZiBvYmplY3RzICovXG4gICAgcHVibGljIG9wdGlvbnM/OiBvYmplY3RbXSxcbiAgICAvKiBJbiBhbiBvcHRpb25zIG9iamVjdCwgd2hhdCBmaWVsZCB0byBkaXNwbGF5IHRvIHRoZSB1c2VyIChvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBzdHJpbmdcbiAgICAgICAgICAgICAgZ2l2ZW4gdGhlIG9wdGlvbiBvYmplY3QgYW5kIHRoZSBtb2RlbCkgKi9cbiAgICBwdWJsaWMgb3B0aW9uQXJyYXlMYWJlbEZpZWxkPzogc3RyaW5nLFxuICAgIC8qIEluIGFuIG9wdGlvbnMgb2JqZWN0LCB3aGF0IGZpZWxkIHRvIHJldHVybiBmb3IgdGhlIHZhbHVlIG9mIHRoZSBvcHRpb25cbiAgICAgICAgICAgICAgKG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHN0cmluZyBnaXZlbiB0aGUgb3B0aW9uIG9iamVjdCBhbmQgdGhlIG1vZGVsKSAqL1xuICAgIHB1YmxpYyBvcHRpb25BcnJheVZhbHVlRmllbGQ/OiBzdHJpbmcgfCBGdW5jdGlvblxuICApIHt9XG5cbiAgZmllbGRUeXBlKG1vZGVsOiBvYmplY3QpOiBGaWVsZFR5cGUge1xuICAgIGlmICghdGhpcy5tb2RlbFByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gdGhpcy5maWVsZFR5cGVzWzBdOyAvLyBSZXR1cm4gZmlyc3QgZmllbGQgdHlwZSBpZiBubyBtb2RlbCBwcm9wZXJ0eVxuICAgIH1cbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmZpZWxkVHlwZXNbdGhpcy5tb2RlbFByb3BlcnR5XTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaWVsZFZhbHVlVHlwZSA9IHR5cGVvZiBtb2RlbFt0aGlzLm1vZGVsUHJvcGVydHldO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy50eXBlXG4gICAgICAgID8gdGhpcy50eXBlXG4gICAgICAgIDogdGhpcy5vcHRpb25zXG4gICAgICAgID8gJ29wdGlvbnMnXG4gICAgICAgIDogZmllbGRWYWx1ZVR5cGU7XG4gICAgICB0aGlzLmZpZWxkVHlwZXNbdGhpcy5tb2RlbFByb3BlcnR5XSA9IHJlc3VsdDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgc2V0VmFsdWUobmV3VmFsdWU6IGFueSwgbW9kZWw6IG9iamVjdCwgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+KSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsUHJvcGVydHkpIHtcbiAgICAgIHJldHVybjsgLy8gY2Fubm90IHNldCB2YWx1ZXMgdGhhdCBkb24ndCBoYXZlIGEgbW9kZWwgcHJvcGVydHlcbiAgICB9XG4gICAgbW9kZWxbdGhpcy5tb2RlbFByb3BlcnR5XSA9IG5ld1ZhbHVlO1xuICAgIG1vZGVsQ2hhbmdlLmVtaXQoeyBwcm9wZXJ0eTogdGhpcy5tb2RlbFByb3BlcnR5LCB2YWx1ZTogbmV3VmFsdWUgfSk7XG4gIH1cbn1cbiJdfQ==