"use strict";
var __assign = (this && this.__assign) || function () {
    __assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PaneviewSolid = void 0;
var solid_js_1 = require("solid-js");
var dockview_core_1 = require("dockview-core");
var view_1 = require("./view");
var PaneviewSolid = function (props) {
    var container;
    var api;
    (0, solid_js_1.onMount)(function () {
        var headerComponents = props.headerComponents || {};
        var frameworkOptions = {
            createComponent: function (options) {
                return new view_1.SolidPanePanelSection(options.id, props.components[options.name]);
            },
            createHeaderComponent: function (options) {
                return new view_1.SolidPanePanelSection(options.id, headerComponents[options.name]);
            },
        };
        var coreOptions = {};
        dockview_core_1.PROPERTY_KEYS_PANEVIEW.forEach(function (key) {
            if (key in props) {
                coreOptions[key] = props[key];
            }
        });
        api = (0, dockview_core_1.createPaneview)(container, __assign(__assign({}, coreOptions), frameworkOptions));
        api.layout(container.clientWidth, container.clientHeight);
        props.onReady({ api: api });
    });
    (0, solid_js_1.onCleanup)(function () {
        if (api)
            api.dispose();
    });
    (0, solid_js_1.createEffect)(function () {
        if (api) {
            var changes_1 = {};
            dockview_core_1.PROPERTY_KEYS_PANEVIEW.forEach(function (key) {
                if (key in props) {
                    changes_1[key] = props[key];
                }
            });
            api.updateOptions(changes_1);
        }
    });
    (0, solid_js_1.createEffect)(function () {
        if (api && props.onDidDrop) {
            var disp_1 = api.onDidDrop(function (event) { return props.onDidDrop(event); });
            (0, solid_js_1.onCleanup)(function () { return disp_1.dispose(); });
        }
    });
    return <div style={{ height: '100%', width: '100%' }} ref={function (el) { return (container = el); }}/>;
};
exports.PaneviewSolid = PaneviewSolid;
