dockview-solid
Version:
Zero dependency layout manager supporting tabs, grids and splitviews
117 lines (116 loc) • 4.96 kB
JSX
;
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.DockviewSolid = void 0;
var solid_js_1 = require("solid-js");
var dockview_core_1 = require("dockview-core");
var solidHeaderActionsRendererPart_1 = require("./solidHeaderActionsRendererPart");
var solidContentPart_1 = require("./solidContentPart");
var solidHeaderPart_1 = require("./solidHeaderPart");
var solidWatermarkPart_1 = require("./solidWatermarkPart");
var DEFAULT_SOLID_TAB = "props.defaultTabComponent";
function createGroupControlPart(component) {
return component
? function (groupPanel) {
return new solidHeaderActionsRendererPart_1.SolidHeaderActionsRendererPart(component, groupPanel);
}
: undefined;
}
function extractCoreOptions(props) {
var coreOptions = {};
dockview_core_1.PROPERTY_KEYS_DOCKVIEW.forEach(function (key) {
if (key in props) {
coreOptions[key] = props[key];
}
});
return coreOptions;
}
var DockviewSolid = function (props) {
var container;
var api;
(0, solid_js_1.onMount)(function () {
if (!container)
return;
var frameworkTabComponents = props.tabComponents || {};
if (props.defaultTabComponent) {
frameworkTabComponents[DEFAULT_SOLID_TAB] = props.defaultTabComponent;
}
var frameworkOptions = {
createLeftHeaderActionComponent: createGroupControlPart(props.leftHeaderActionsComponent),
createRightHeaderActionComponent: createGroupControlPart(props.rightHeaderActionsComponent),
createPrefixHeaderActionComponent: createGroupControlPart(props.prefixHeaderActionsComponent),
createComponent: function (options) {
return new solidContentPart_1.SolidPanelContentPart(options.id, props.components[options.name]);
},
createTabComponent: function (options) {
return new solidHeaderPart_1.SolidPanelHeaderPart(options.id, frameworkTabComponents[options.name]);
},
createWatermarkComponent: props.watermarkComponent
? function () { return new solidWatermarkPart_1.SolidWatermarkPart("watermark", props.watermarkComponent); }
: undefined,
defaultTabComponent: props.defaultTabComponent
? DEFAULT_SOLID_TAB
: undefined,
};
api = (0, dockview_core_1.createDockview)(container, __assign(__assign({}, extractCoreOptions(props)), 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)
return;
var frameworkTabComponents = props.tabComponents || {};
if (props.defaultTabComponent) {
frameworkTabComponents[DEFAULT_SOLID_TAB] = props.defaultTabComponent;
}
api.updateOptions({
createTabComponent: function (options) {
return new solidHeaderPart_1.SolidPanelHeaderPart(options.id, frameworkTabComponents[options.name]);
},
defaultTabComponent: props.defaultTabComponent
? DEFAULT_SOLID_TAB
: undefined,
});
});
(0, solid_js_1.createEffect)(function () {
if (api) {
var changes_1 = {};
dockview_core_1.PROPERTY_KEYS_DOCKVIEW.forEach(function (key) {
if (key in props) {
// cast changes to any to allow dynamic property assignment
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(); });
}
});
(0, solid_js_1.createEffect)(function () {
if (api && props.onWillDrop) {
var disp_2 = api.onWillDrop(function (event) { return props.onWillDrop(event); });
(0, solid_js_1.onCleanup)(function () { return disp_2.dispose(); });
}
});
return (<div style={{ height: "100%", width: "100%" }} ref={function (el) { return (container = el); }}/>);
};
exports.DockviewSolid = DockviewSolid;
exports.default = exports.DockviewSolid;