UNPKG

@paraboly/pwc-multi-filter

Version:

A wrapper over pwc-tabview and pwc-filter. Provides means of dynamically managing multiple filters via a single component.

91 lines (88 loc) 3.12 kB
import { r as registerInstance, h, d as getElement } from './core-ba89e169.js'; import './_commonjsHelpers-4ab098b6.js'; import './linq-c2ddb1d7.js'; import { r as resolveJson } from './utils-9d98a97b.js'; import { _ } from './lodash-62c1633d.js'; const PwcDynamicFormContent = class { constructor(hostRef) { registerInstance(this, hostRef); this.resolvedItems = []; this.fieldRefs = []; this.itemsAddedViaMethod = []; this.defaultItems = []; this.items = this.defaultItems; } itemsWatchHandler(newValue) { if (newValue === null || newValue === undefined) { this.items = this.defaultItems; } else { this.resolvedItems = [ ...resolveJson(newValue), ...this.itemsAddedViaMethod ]; } } async addItem(config) { if (config) { this.itemsAddedViaMethod = [...this.itemsAddedViaMethod, config]; this.resolvedItems = [...this.resolvedItems, config]; this.rootElement.forceUpdate(); } } async removeItem(id) { if (id !== null || id !== undefined) { _.remove(this.itemsAddedViaMethod, { id }); _.remove(this.resolvedItems, { id }); this.rootElement.forceUpdate(); } } async getFieldRefs() { return this.fieldRefs || []; } componentWillLoad() { this.itemsWatchHandler(this.items); } handleFieldRef(fieldConfig, fieldRef) { if (fieldRef) { this.fieldRefs = _.unionBy(this.fieldRefs, [fieldRef], i => i.config.name); } else { _.remove(this.fieldRefs, i => i.config.name === fieldConfig.name); } } constructField(fieldConfig) { if (fieldConfig) { let nameIndexer = 0; const nameGenerator = () => { return "pwc-dynamic-form___generated-name-" + nameIndexer++; }; let idIndexer = 0; const idGenerator = () => { return "pwc-dynamic-form___generated-id-" + idIndexer++; }; fieldConfig.name = fieldConfig.name || nameGenerator(); fieldConfig.id = fieldConfig.id || idGenerator(); return (h("pwc-dynamic-form-field", { key: fieldConfig.id + fieldConfig.name, config: fieldConfig, ref: this.handleFieldRef.bind(this, fieldConfig) })); } else { return ""; } } render() { if (this.resolvedItems) { // we are mutating the config, therefore we have to clone it to leave the user input intact. const resolvedItemsClone = _.cloneDeep(this.resolvedItems); return resolvedItemsClone.map(this.constructField.bind(this)); } else { return ""; } } get rootElement() { return getElement(this); } static get watchers() { return { "items": ["itemsWatchHandler"] }; } static get style() { return ""; } }; export { PwcDynamicFormContent as pwc_dynamic_form_content };