UNPKG

cytoscape-angular-ng17

Version:
129 lines 14.2 kB
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==