'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

const core = require('./core-89b71307.js');
require('./_commonjsHelpers-ab75601c.js');
const utils = require('./utils-27bd9876.js');
const lodash = require('./lodash-23b825de.js');

const PwcDynamicFormContent = class {
    constructor(hostRef) {
        core.registerInstance(this, hostRef);
        this.itemsAddedViaMethod = [];
    }
    itemsWatchHandler(items) {
        this.resolvedItems = utils.resolveJson(items);
        this.resolvedItems = [...this.resolvedItems, ...this.itemsAddedViaMethod];
    }
    async addItem(config) {
        this.itemsAddedViaMethod = [...this.itemsAddedViaMethod, config];
        this.resolvedItems = [...this.resolvedItems, config];
        this.rootElement.forceUpdate();
    }
    async removeItem(id) {
        lodash._.remove(this.itemsAddedViaMethod, { id });
        lodash._.remove(this.resolvedItems, { id });
        this.rootElement.forceUpdate();
    }
    async getFieldRefs() {
        return this.fieldRefs;
    }
    componentWillLoad() {
        this.itemsWatchHandler(this.items);
    }
    handleFieldRef(fieldConfig, fieldRef) {
        if (fieldRef) {
            this.fieldRefs = lodash._.unionBy(this.fieldRefs, [fieldRef], i => i.config.name);
        }
        else {
            lodash._.remove(this.fieldRefs, i => i.config.name === fieldConfig.name);
        }
    }
    constructField(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 (core.h("pwc-dynamic-form-field", { key: fieldConfig.id + fieldConfig.name, config: fieldConfig, ref: this.handleFieldRef.bind(this, fieldConfig) }));
    }
    render() {
        if (this.resolvedItems) {
            // we are mutating the config, therefore we have to clone it to leave the user input intact.
            const resolvedItemsClone = lodash._.cloneDeep(this.resolvedItems);
            return resolvedItemsClone.map(this.constructField.bind(this));
        }
        else {
            return "";
        }
    }
    get rootElement() { return core.getElement(this); }
    static get watchers() { return {
        "items": ["itemsWatchHandler"]
    }; }
    static get style() { return ""; }
};

exports.pwc_dynamic_form_content = PwcDynamicFormContent;
