UNPKG

@wener/console

Version:
188 lines (187 loc) 7.05 kB
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); }