UNPKG

@wener/console

Version:
498 lines (497 loc) 18 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 asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _async_to_generator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 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_spread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === "function") { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _define_property(target, key, source[key]); }); } return target; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _object_spread_props(target, source) { source = source != null ? source : {}; if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } 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); } function _ts_generator(thisArg, body) { var f, y, t, _ = { label: 0, sent: function () { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty; return d(g, "next", { value: verb(0) }), d(g, "throw", { value: verb(1) }), d(g, "return", { value: verb(2) }), typeof Symbol === "function" && d(g, Symbol.iterator, { value: function () { return this; } }), g; function verb(n) { return function (v) { return step([ n, v ]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [ op[0] & 2, t.value ]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [ 0 ]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [ 6, e ]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } } import { useCallback } from "react"; import { cn } from "@wener/console"; import { NotReadyPlaceholder } from "@wener/console/components"; import { DevOnly } from "@wener/reaction"; import { pick } from "es-toolkit"; import { useStore } from "zustand"; import { useShallow } from "zustand/react/shallow"; import { ActionIcon } from "../icons/index.js"; import { SearchInput as BaseSearchInput } from "../SearchInput.js"; import { useEmitteryListen } from "../useEmitteryListen.js"; import { DataViewLayout } from "./DataViewLayout.js"; import { DataViewEventType, DataViewProvider, useDataViewStore, useDataViewStoreContext } from "./DataViewStore.js"; import { PageInfo as BasePageInfo } from "./PageInfo.js"; import { PageNav as BasePageNav } from "./PageNav.js"; (function (DataView) { DataView.Provider = DataViewProvider; DataView.useViewStore = useDataViewStore; DataView.useActions = function () { return DataView.useViewStore(function (s) { return s.actions; }); }; DataView.useViewStoreContext = useDataViewStoreContext; function SearchInput(_0) { var mode = _0.mode, props = _object_without_properties(_0, [ "mode" ]); var _usePaginationSearchState = _sliced_to_array(usePaginationSearchState(mode, [ "search" ]), 2), search = _usePaginationSearchState[0].search, setState = _usePaginationSearchState[1]; return /*#__PURE__*/ React.createElement(BaseSearchInput, _object_spread_props(_object_spread({}, props), { initialValue: search, onValueChange: function (value) { setState({ search: value }); } })); } DataView.SearchInput = SearchInput; function RefreshButton(_0) { var className = _0.className, props = _object_without_properties(_0, [ "className" ]); var _DataView_useViewStore = DataView.useViewStore(function (s) { return { loading: s.loading, actions: s.actions }; }), loading = _DataView_useViewStore.loading, actions = _DataView_useViewStore.actions; return /*#__PURE__*/ React.createElement("button", _object_spread({ type: "button", "data-loading": loading || null, className: cn("btn btn-square btn-sm btn-ghost", className), onClick: function () { actions.refresh(); } }, props), /*#__PURE__*/ React.createElement(ActionIcon.Refresh, null)); } DataView.RefreshButton = RefreshButton; function PageInfo(_0) { var mode = _0.mode, props = _object_without_properties(_0, [ "mode" ]); var _usePaginationSearchState = _sliced_to_array(usePaginationSearchState(mode, [ "pageIndex", "pageSize", "total" ]), 2), _usePaginationSearchState_ = _usePaginationSearchState[0], pageIndex = _usePaginationSearchState_.pageIndex, pageSize = _usePaginationSearchState_.pageSize, total = _usePaginationSearchState_.total, setState = _usePaginationSearchState[1]; return /*#__PURE__*/ React.createElement(BasePageInfo, _object_spread_props(_object_spread({}, props), { total: total, pageSize: pageSize, from: pageIndex * pageSize, to: Math.min((pageIndex + 1) * pageSize, total), onPageSizeChange: function (size) { setState({ pageSize: size }); } })); } DataView.PageInfo = PageInfo; function PageNav(_0) { var mode = _0.mode, props = _object_without_properties(_0, [ "mode" ]); var _usePaginationSearchState = _sliced_to_array(usePaginationSearchState(mode, [ "pageIndex", "pageSize", "total" ]), 2), _usePaginationSearchState_ = _usePaginationSearchState[0], pageIndex = _usePaginationSearchState_.pageIndex, pageSize = _usePaginationSearchState_.pageSize, total = _usePaginationSearchState_.total, setState = _usePaginationSearchState[1]; var pageCount = Math.ceil(total / pageSize); return /*#__PURE__*/ React.createElement(BasePageNav, _object_spread_props(_object_spread({}, props), { pageCount: pageCount, pageNumber: pageIndex + 1, onPageNumberChange: function (n) { setState({ pageIndex: n - 1 }); } })); } DataView.PageNav = PageNav; function Footer(_0) { var left = _0.left, right = _0.right, mode = _0.mode, children = _0.children, props = _object_without_properties(_0, [ "left", "right", "mode", "children" ]); var actions = DataView.useActions(); return /*#__PURE__*/ React.createElement(DataViewLayout.Footer, _object_spread_props(_object_spread({}, props), { left: /*#__PURE__*/ React.createElement("div", { className: "flex items-center gap-2" }, /*#__PURE__*/ React.createElement(PageInfo, { mode: mode }), /*#__PURE__*/ React.createElement(PageNav, { mode: mode }), left), right: /*#__PURE__*/ React.createElement("div", { className: "flex items-center gap-2" }, /*#__PURE__*/ React.createElement(QueryStatus, null), right, /*#__PURE__*/ React.createElement(DevOnly, null, /*#__PURE__*/ React.createElement("button", { type: "button", className: "btn btn-secondary btn-xs", onClick: function () { return actions.debug(); } }, "DEBUG"))) }), children); } DataView.Footer = Footer; DataView.Sidecar = function () { var store = DataView.useViewStoreContext(); var _useStore = useStore(store, useShallow(function (param) { var actions = param.actions, events = param.events, result = param.result; return { events: events, actions: actions, result: result }; })), actions = _useStore.actions, events = _useStore.events; useEmitteryListen(events, _define_property({}, DataViewEventType.Debug, function () { return _async_to_generator(function () { var state; return _ts_generator(this, function (_state) { state = store.getState(); console.log("[DEBUG] DataViewState", state); console.log("use window._DataViewStore to access the store"); window["_DataViewStore"] = store; return [ 2 ]; }); })(); })); }; var QueryStatus = function () { var _DataView_useViewStore = DataView.useViewStore(function (param) { var loading = param.loading, error = param.error; return { loading: loading, error: error }; }), loading = _DataView_useViewStore.loading, error = _DataView_useViewStore.error; return /*#__PURE__*/ React.createElement(NotReadyPlaceholder, { loading: loading, error: error }); }; })(DataView || (DataView = {})); function usePaginationSearchState() { var mode = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "query", keys = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [ "search", "pageIndex", "pageSize", "total" ]; var store = DataView.useViewStoreContext(); var state = useStore(store, useShallow(function (s) { return pick({ search: s[mode].search, pageIndex: s[mode].pageIndex, pageSize: s[mode].pageSize, total: s.total }, keys); })); return [ state, useCallback(function () { var partialState = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; store.setState(function (state) { Object.assign(state[mode], partialState); }); }, [ store ]) ]; } export var DataView;