@wener/console
Version:
Base console UI toolkit
188 lines (187 loc) • 7.05 kB
JavaScript
function _array_like_to_array(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
return arr2;
}
function _array_with_holes(arr) {
if (Array.isArray(arr)) return arr;
}
function _iterable_to_array_limit(arr, i) {
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
if (_i == null) return;
var _arr = [];
var _n = true;
var _d = false;
var _s, _e;
try {
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
_arr.push(_s.value);
if (i && _arr.length === i) break;
}
} catch (err) {
_d = true;
_e = err;
} finally{
try {
if (!_n && _i["return"] != null) _i["return"]();
} finally{
if (_d) throw _e;
}
}
return _arr;
}
function _non_iterable_rest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _object_without_properties(source, excluded) {
if (source == null) return {};
var target = {}, sourceKeys, key, i;
if (typeof Reflect !== "undefined" && Reflect.ownKeys) {
sourceKeys = Reflect.ownKeys(source);
for(i = 0; i < sourceKeys.length; i++){
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
target[key] = source[key];
}
return target;
}
target = _object_without_properties_loose(source, excluded);
if (Object.getOwnPropertySymbols) {
sourceKeys = Object.getOwnPropertySymbols(source);
for(i = 0; i < sourceKeys.length; i++){
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
target[key] = source[key];
}
}
return target;
}
function _object_without_properties_loose(source, excluded) {
if (source == null) return {};
var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;
for(i = 0; i < sourceKeys.length; i++){
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
target[key] = source[key];
}
return target;
}
function _sliced_to_array(arr, i) {
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
}
function _unsupported_iterable_to_array(o, minLen) {
if (!o) return;
if (typeof o === "string") return _array_like_to_array(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(n);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
}
import React, { Fragment, use, useCallback, useState } from 'react';
import { createReactContext, FlexRenderer } from '@wener/reaction';
import { getGlobalStates } from '@wener/utils';
import { createStore, useStore } from 'zustand';
import { mutative } from 'zustand-mutative';
import { useShallow } from 'zustand/react/shallow';
function createDynamicRenderStore() {
return createStore(mutative(function(setState, getState, store) {
var remove = function(id) {
setState(function(s) {
s.items = s.items.filter(function(v) {
return v.id !== id;
});
});
};
return {
items: [],
actions: {
remove: remove,
render: function(options) {
var id = options.id, render = options.render, content = options.content;
id || (id = "render-".concat(Math.random().toString(16).slice(2)));
var handle = {
id: id,
remove: function() {
remove(id);
}
};
if (render) {
content = /*#__PURE__*/ React.createElement(FlexRenderer, {
render: function() {
return render();
}
});
}
store.setState(function(s) {
var item = s.items.find(function(v) {
return v.id === id;
});
if (!item) {
s.items.push(item = {
id: id,
content: content,
handle: handle
});
}
item.content = content;
item.handle = handle;
});
return handle;
}
}
};
}));
}
var RenderStoreContext = createReactContext('RenderStoreContext', undefined);
function getRenderStore() {
return getGlobalStates('DynamicRenderStore', createDynamicRenderStore);
}
function useRenderStore() {
return use(RenderStoreContext) || getRenderStore();
}
export var Outlet = function() {
var store = useRenderStore();
var items = useStore(store, useShallow(function(s) {
return s.items;
}));
return /*#__PURE__*/ React.createElement(Fragment, null, items.map(function(item) {
var id = item.id, handle = item.handle, content = item.content;
return /*#__PURE__*/ React.createElement(RenderHandleContext, {
key: id,
value: handle
}, content);
}));
};
export var Root = function(param) {
var children = param.children;
var _useState = _sliced_to_array(useState(function() {
return createDynamicRenderStore();
}), 1), store = _useState[0];
return /*#__PURE__*/ React.createElement(RenderStoreContext, {
value: store
}, children);
};
var RenderHandleContext = createReactContext('RenderHandleContext', undefined);
export function useRenderer() {
var store = useRenderStore();
return useStore(store, useCallback(function(s) {
return s.actions;
}, []));
}
export function useRenderHandle() {
var handle = use(RenderHandleContext);
if (!handle) {
throw new Error('RenderHandleContext not found');
}
return handle;
}
export function render(_0) {
var renderer = _0.renderer, options = _object_without_properties(_0, [
"renderer"
]);
var render = (renderer || getRenderStore().getState().actions).render;
return render(options);
}