UNPKG

dockview-solid

Version:

Zero dependency layout manager supporting tabs, grids and splitviews

117 lines (116 loc) 4.96 kB
"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.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;