@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
JavaScript
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 };