@moneko/core 2.0.16-beta.19 → 2.0.16-beta.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/layout-menu.d.ts +0 -8
- package/lib/components/layout-menu.js +1 -1
- package/lib/components/layout-menu.js.map +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/localizable.js +2 -0
- package/lib/localizable.js.map +1 -0
- package/lib/menu.d.ts +40 -0
- package/lib/menu.js +2 -0
- package/lib/menu.js.map +1 -0
- package/lib/packages/back-stage/layout.d.ts +1 -12
- package/lib/packages/back-stage/layout.js +1 -1
- package/lib/packages/back-stage/layout.js.map +1 -1
- package/lib/{store → sso}/index.d.ts +4 -4
- package/lib/{store → sso}/index.js +1 -1
- package/lib/sso/index.js.map +1 -0
- package/package.json +1 -1
- package/lib/localizable/index.js +0 -2
- package/lib/localizable/index.js.map +0 -1
- package/lib/store/index.js.map +0 -1
- /package/lib/{localizable/index.d.ts → localizable.d.ts} +0 -0
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { type MenuProps } from 'antd';
|
|
3
|
-
import { type RouterProps } from '../router';
|
|
4
3
|
export interface LayoutMenuProps extends MenuProps {
|
|
5
4
|
collapsed?: boolean;
|
|
6
5
|
}
|
|
7
|
-
export interface MenuItem extends RouterProps {
|
|
8
|
-
key: string;
|
|
9
|
-
type?: string;
|
|
10
|
-
label?: React.ReactNode;
|
|
11
|
-
children?: MenuItem[];
|
|
12
|
-
[key: string]: any;
|
|
13
|
-
}
|
|
14
6
|
declare const _default: React.NamedExoticComponent<LayoutMenuProps>;
|
|
15
7
|
export default _default;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function _arrayLikeToArray(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 _arrayWithHoles(arr){if(Array.isArray(arr))return arr}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target};return _extends.apply(this,arguments)}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _iterableToArrayLimit(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 _nonIterableRest(){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 _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key]}}return target}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key]}return target}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(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 _arrayLikeToArray(o,minLen)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{classNames,isEqual}from"@moneko/common";import{Menu}from"antd";import{useSearchParams,Link}from"react-router-dom";import{localizable}from"../localizable";import{menu}from"
|
|
1
|
+
function _arrayLikeToArray(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 _arrayWithHoles(arr){if(Array.isArray(arr))return arr}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target};return _extends.apply(this,arguments)}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _iterableToArrayLimit(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 _nonIterableRest(){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 _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key]}}return target}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key]}return target}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(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 _arrayLikeToArray(o,minLen)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{classNames,isEqual}from"@moneko/common";import{Menu}from"antd";import{useSearchParams,Link}from"react-router-dom";import{localizable}from"../localizable";import{menu}from"../menu";var LayoutMenu=function(prop){var collapsed=prop.collapsed,menuProps=_objectWithoutProperties(prop,["collapsed"]);var menus=menu.menus,kv=menu.kv,activeKey=menu.activeKey;var t=localizable.t;var _useSearchParams=_slicedToArray(useSearchParams(),1),search=_useSearchParams[0];var openKeysRef=useRef();var _useState=_slicedToArray(useState([]),2),openKeys=_useState[0],setOpenKeys=_useState[1];var handleOpenChange=useCallback(function(keys){if(keys!==openKeys){setOpenKeys(keys)}},[openKeys]);var filterMenu=useCallback(function(list){return list.map(function(item){var icon=item.icon,itemIcon=item.itemIcon,disabled=item.disabled,type=item.type,key=item.key,path=item.path,label=item.label,children=item.children;var text=t[label];var childrens=Array.isArray(children)?filterMenu(children):children;return Object.assign({path:path,type:type,disabled:disabled,key:key,itemIcon:itemIcon,icon:icon,label:path&&!(childrens===null||childrens===void 0?void 0:childrens.length)?React.createElement(Link,{preventScrollReset:true,to:"".concat(key,"?menuId=").concat(key)},text):text},(childrens===null||childrens===void 0?void 0:childrens.length)&&{children:childrens})})},[t]);var menuId=useMemo(function(){return search.get("menuId")},[search]);var items=useMemo(function(){return filterMenu(menus.filter(function(m){return!m.hideMenu}))},[filterMenu,menus]);var selectedKeys=useMemo(function(){return activeKey?[activeKey]:[]},[activeKey]);useEffect(function(){Object.assign(openKeysRef,{current:openKeys})},[openKeys]);useEffect(function(){var current=menuId&&kv[menuId];if(current&&!collapsed&&openKeysRef.current){var opk=_toConsumableArray(openKeysRef.current);if(!opk.includes(menuId))opk.push(menuId);if(current.parentId&&!opk.includes(current.parentId))opk.push(current.parentId);if(!isEqual(openKeysRef.current,opk))setOpenKeys(opk)}},[collapsed,menuId,kv]);useEffect(function(){if(menuId!==activeKey&&menuId){menu.activeKey=menuId}},[activeKey,menuId]);return React.createElement(Menu,_extends({defaultSelectedKeys:selectedKeys,selectedKeys:selectedKeys,defaultOpenKeys:openKeys,openKeys:collapsed?undefined:openKeys,onOpenChange:handleOpenChange,mode:"inline",subMenuCloseDelay:0,triggerSubMenuAction:"click",items:items},menuProps,{className:classNames("layout-menu",menuProps.className)}))};export default React.memo(LayoutMenu);
|
|
2
2
|
//# sourceMappingURL=layout-menu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/layout-menu.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { classNames, isEqual } from '@moneko/common';\nimport { Menu, type MenuProps } from 'antd';\nimport { useSearchParams, Link } from 'react-router-dom';\nimport { localizable } from '../localizable';\nimport { type
|
|
1
|
+
{"version":3,"sources":["../../src/components/layout-menu.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { classNames, isEqual } from '@moneko/common';\nimport { Menu, type MenuProps } from 'antd';\nimport { useSearchParams, Link } from 'react-router-dom';\nimport { localizable } from '../localizable';\nimport { menu, type MenuItem } from '../menu';\n\nexport interface LayoutMenuProps extends MenuProps {\n collapsed?: boolean;\n}\n\nconst LayoutMenu: React.FC<LayoutMenuProps> = (prop) => {\n const { collapsed, ...menuProps } = prop;\n const { menus, kv, activeKey } = menu;\n const { t } = localizable;\n const [search] = useSearchParams();\n const openKeysRef = useRef<string[]>();\n const [openKeys, setOpenKeys] = useState<string[]>([]);\n const handleOpenChange = useCallback(\n (keys: string[]) => {\n if (keys !== openKeys) {\n setOpenKeys(keys as string[]);\n }\n },\n [openKeys]\n );\n\n const filterMenu = useCallback(\n (list: MenuItem[]): MenuItem[] => {\n return list.map((item) => {\n const { icon, itemIcon, disabled, type, key, path, label, children } = item;\n const text = t[label as string];\n const childrens = Array.isArray(children) ? filterMenu(children) : children;\n\n return Object.assign(\n {\n path,\n type,\n disabled,\n key,\n itemIcon,\n icon,\n label:\n path && !childrens?.length ? (\n <Link preventScrollReset to={`${key}?menuId=${key}`}>\n {text}\n </Link>\n ) : (\n text\n ),\n },\n childrens?.length && {\n children: childrens,\n }\n );\n });\n },\n [t]\n );\n\n const menuId = useMemo(() => search.get('menuId'), [search]);\n const items = useMemo(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n () => filterMenu(menus.filter((m: any) => !m.hideMenu)),\n [filterMenu, menus]\n );\n const selectedKeys = useMemo(() => (activeKey ? [activeKey] : []), [activeKey]);\n\n useEffect(() => {\n Object.assign(openKeysRef, {\n current: openKeys,\n });\n }, [openKeys]);\n useEffect(() => {\n const current = menuId && kv[menuId];\n\n if (current && !collapsed && openKeysRef.current) {\n const opk = [...openKeysRef.current];\n\n if (!opk.includes(menuId as string)) opk.push(menuId as string);\n if (current.parentId && !opk.includes(current.parentId)) opk.push(current.parentId);\n if (!isEqual(openKeysRef.current, opk)) setOpenKeys(opk);\n }\n }, [collapsed, menuId, kv]);\n\n useEffect(() => {\n if (menuId !== activeKey && menuId) {\n menu.activeKey = menuId;\n }\n }, [activeKey, menuId]);\n\n return (\n <Menu\n defaultSelectedKeys={selectedKeys}\n selectedKeys={selectedKeys}\n defaultOpenKeys={openKeys}\n // eslint-disable-next-line no-undefined\n openKeys={collapsed ? undefined : openKeys}\n onOpenChange={handleOpenChange}\n mode=\"inline\"\n subMenuCloseDelay={0}\n triggerSubMenuAction=\"click\"\n items={items}\n {...menuProps}\n className={classNames('layout-menu', menuProps.className)}\n />\n );\n};\n\nexport default React.memo(LayoutMenu);\n"],"names":["React","useCallback","useEffect","useMemo","useRef","useState","classNames","isEqual","Menu","useSearchParams","Link","localizable","menu","LayoutMenu","prop","collapsed","menuProps","menus","kv","activeKey","t","search","openKeysRef","openKeys","setOpenKeys","handleOpenChange","keys","filterMenu","list","map","item","icon","itemIcon","disabled","type","key","path","label","children","text","childrens","Array","isArray","Object","assign","length","preventScrollReset","to","menuId","get","items","filter","m","hideMenu","selectedKeys","current","opk","includes","push","parentId","defaultSelectedKeys","defaultOpenKeys","undefined","onOpenChange","mode","subMenuCloseDelay","triggerSubMenuAction","className","memo"],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
export * from './prefix/react-router-dom.js';
|
|
3
3
|
export * from './utils';
|
|
4
4
|
export { pathToRegexp } from 'path-to-regexp';
|
|
5
|
-
export { default as
|
|
5
|
+
export { default as sso } from './sso';
|
|
6
6
|
export { type LocaleConfig, localizable, type LocaleName } from './localizable';
|
|
7
7
|
export { matchUtil, router, onlyLoginRouter, myPkgs, myDemoKv, mdxComponents, type ExampleModule, type RouterProps, type MyPkg, } from './router';
|
|
8
|
-
export type
|
|
9
|
-
export type {
|
|
8
|
+
export { type TabItem, type MenuItem, type CloseTab, menu } from './menu';
|
|
9
|
+
export type { LayoutMenuProps } from './components/layout-menu';
|
|
10
10
|
export { createRouter, prefixRouter, routerData, RouterFragment } from './components/app-router';
|
|
11
11
|
export declare const LayoutMenu: any;
|
|
12
12
|
export declare const DashboardLayout: any;
|
package/lib/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export*from"./prefix/react-router-dom.js";export*from"./utils";export{pathToRegexp}from"path-to-regexp";export{default as
|
|
1
|
+
export*from"./prefix/react-router-dom.js";export*from"./utils";export{pathToRegexp}from"path-to-regexp";export{default as sso}from"./sso";export{localizable}from"./localizable";export{matchUtil,router,onlyLoginRouter,myPkgs,myDemoKv,mdxComponents}from"./router";export{menu}from"./menu";export{createRouter,prefixRouter,routerData,RouterFragment}from"./components/app-router";export var LayoutMenu=hasAntd?require("./components/layout-menu").default:null;export var DashboardLayout=hasAntd?require("./packages/back-stage/layout").default:null;export var projectBasicInfo={projectName:projectName,providerConfig:providerConfig,programInfo:programInfo,coverage:projectCoverage};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './prefix/react-router-dom.js';\nexport * from './utils';\nexport { pathToRegexp } from 'path-to-regexp';\nexport { default as
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './prefix/react-router-dom.js';\nexport * from './utils';\nexport { pathToRegexp } from 'path-to-regexp';\nexport { default as sso } from './sso';\nexport { type LocaleConfig, localizable, type LocaleName } from './localizable';\nexport {\n matchUtil,\n router,\n onlyLoginRouter,\n myPkgs,\n myDemoKv,\n mdxComponents,\n type ExampleModule,\n type RouterProps,\n type MyPkg,\n} from './router';\nexport { type TabItem, type MenuItem, type CloseTab, menu } from './menu';\nexport type { LayoutMenuProps } from './components/layout-menu';\nexport { createRouter, prefixRouter, routerData, RouterFragment } from './components/app-router';\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nexport const LayoutMenu = hasAntd ? require('./components/layout-menu').default : null;\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nexport const DashboardLayout = hasAntd ? require('./packages/back-stage/layout').default : null;\nexport type {\n ConfigType,\n AppType,\n CommomType,\n ProgramInfoType,\n MemberTransformer,\n CoverageType,\n TerserOptions,\n MinifierType,\n SourceMapDevToolPluginOptions,\n ProjectCoverageType,\n SharedConfig,\n SwcOptions,\n OptimizationSplitChunksOptions,\n SwcImportOnDemandTransform,\n} from '../typings/global';\nimport type { ConfigType, CommomType, CoverageType, ProjectCoverageType } from '../typings/global';\nexport type PartialConfigType<T = 'swc'> = Partial<ConfigType<T>>;\nexport type PartialCommomType<T = 'swc'> = Partial<CommomType<T>>;\ndeclare const projectCoverage: Record<string, CoverageType & Partial<ProjectCoverageType>>;\n\n/** 一些项目基本信息 */\nexport const projectBasicInfo = {\n projectName,\n providerConfig,\n programInfo,\n coverage: projectCoverage,\n};\n"],"names":["pathToRegexp","default","sso","localizable","matchUtil","router","onlyLoginRouter","myPkgs","myDemoKv","mdxComponents","menu","createRouter","prefixRouter","routerData","RouterFragment","LayoutMenu","hasAntd","require","DashboardLayout","projectBasicInfo","projectName","providerConfig","programInfo","coverage","projectCoverage"],"mappings":"AAAA,WAAc,8BAA+B,AAC7C,YAAc,SAAU,AACxB,QAASA,YAAY,KAAQ,gBAAiB,AAC9C,QAASC,WAAWC,GAAG,KAAQ,OAAQ,AACvC,QAA4BC,WAAW,KAAyB,eAAgB,AAChF,QACEC,SAAS,CACTC,MAAM,CACNC,eAAe,CACfC,MAAM,CACNC,QAAQ,CACRC,aAAa,KAIR,UAAW,AAClB,QAAqDC,IAAI,KAAQ,QAAS,AAE1E,QAASC,YAAY,CAAEC,YAAY,CAAEC,UAAU,CAAEC,cAAc,KAAQ,yBAA0B,AAEjG,QAAO,IAAMC,WAAaC,QAAUC,QAAQ,4BAA4BhB,OAAO,CAAG,IAAI,AAAC,AAEvF,QAAO,IAAMiB,gBAAkBF,QAAUC,QAAQ,gCAAgChB,OAAO,CAAG,IAAI,AAAC,AAuBhG,QAAO,IAAMkB,iBAAmB,CAC9BC,YAAAA,YACAC,eAAAA,eACAC,YAAAA,YACAC,SAAUC,eACZ,CAAE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var _models_keys,_models_keys_call;import sso from"./sso";var models={keys:function(){return[]}};try{models=hasLocales?require.context("@/locales/",true,/\.(t|j)s$/):{keys:function(){return[]}}}catch(error){console.warn(error)}var resources={};var locales=[];(_models_keys=models.keys)===null||_models_keys===void 0?void 0:(_models_keys_call=_models_keys.call(models))===null||_models_keys_call===void 0?void 0:_models_keys_call.map(function(path,i){var item=models(path).default;if(item&&Object.prototype.toString.call(item)==="[object Object]"){var _item_language=item.language,language=_item_language===void 0?path.replace(/(.*\/)*([^.]+).*/gi,"$2"):_item_language,_item_title=item.title,title=_item_title===void 0?language:_item_title,icon=item.icon,_item_translation=item.translation,translation=_item_translation===void 0?{}:_item_translation;if(i===0){locales.splice(0)}locales.push({language:language,title:title,icon:icon});resources[language]={language:language,title:title,icon:icon,translation:new Proxy(translation,{get:function get(target,key){return target[key]||key}})}}item=null});var defaultLocale=Object.assign({title:"简体中文",language:"zh_CN",translation:{}},resources.zh_CN);export var localizable=sso({language:"zh_CN",t:defaultLocale.translation,locales:locales,set:function set(lang){var _resources_lang;localizable.language=lang;localizable.t=((_resources_lang=resources[lang])===null||_resources_lang===void 0?void 0:_resources_lang.translation)||defaultLocale.translation}});
|
|
2
|
+
//# sourceMappingURL=localizable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/localizable.ts"],"sourcesContent":["import type { ReactNode } from 'react';\nimport sso from './sso';\n\nexport type LocaleName =\n | 'ar_EG'\n | 'az_AZ'\n | 'bg_BG'\n | 'bn_BD'\n | 'by_BY'\n | 'ca_ES'\n | 'cs_CZ'\n | 'da_DK'\n | 'de_DE'\n | 'el_GR'\n | 'en_GB'\n | 'en_US'\n | 'es_ES'\n | 'et_EE'\n | 'fa_IR'\n | 'fi_FI'\n | 'fr_BE'\n | 'fr_CA'\n | 'fr_FR'\n | 'ga_IE'\n | 'gl_ES'\n | 'he_IL'\n | 'hi_IN'\n | 'hr_HR'\n | 'hu_HU'\n | 'hy_AM'\n | 'id_ID'\n | 'is_IS'\n | 'it_IT'\n | 'ja_JP'\n | 'ka_GE'\n | 'kk_KZ'\n | 'kmr_IQ'\n | 'km_KH'\n | 'kn_IN'\n | 'ko_KR'\n | 'ku_IQ'\n | 'lt_LT'\n | 'lv_LV'\n | 'mk_MK'\n | 'ml_IN'\n | 'mn_MN'\n | 'ms_MY'\n | 'nb_NO'\n | 'ne_NP'\n | 'nl_BE'\n | 'nl_NL'\n | 'pl_PL'\n | 'pt_BR'\n | 'pt_PT'\n | 'ro_RO'\n | 'ru_RU'\n | 'sk_SK'\n | 'sl_SI'\n | 'sr_RS'\n | 'sv_SE'\n | 'ta_IN'\n | 'th_TH'\n | 'tr_TR'\n | 'uk_UA'\n | 'ur_PK'\n | 'vi_VN'\n | 'zh_CN'\n | 'zh_HK'\n | 'zh_TW';\n\nlet models = {\n keys: () => [],\n} as unknown as __WebpackModuleApi.RequireContext;\n\ndeclare const hasLocales: boolean;\n\ntry {\n models = hasLocales // eslint-disable-next-line\n ? require.context('@/locales/', true, /\\.(t|j)s$/) // eslint-disable-next-line\n : ({\n keys: () => [],\n } as unknown as __WebpackModuleApi.RequireContext);\n} catch (error) {\n // eslint-disable-next-line no-console\n console.warn(error);\n}\nexport type LocaleConfig = {\n /** 语言名称 (未设置时使用文件名)*/\n language?: LocaleName;\n /** 描述 */\n title: string;\n /** Icon */\n icon?: ReactNode | string;\n /** 翻译字典 */\n translation: Record<string, string>;\n};\ntype LocaleConfigMap = Record<LocaleName, Locale>;\nconst resources: Partial<LocaleConfigMap> = {};\nconst locales: Pick<Locale, 'language' | 'icon' | 'title'>[] = [];\n\nmodels.keys?.()?.map((path: string, i: number) => {\n let item: LocaleConfigMap[LocaleName] | null = models(path).default;\n\n if (item && Object.prototype.toString.call(item) === '[object Object]') {\n const {\n language = path.replace(/(.*\\/)*([^.]+).*/gi, '$2') as LocaleName,\n title = language,\n icon,\n translation = {},\n } = item;\n\n if (i === 0) {\n locales.splice(0);\n }\n locales.push({\n language,\n title,\n icon,\n });\n resources[language] = {\n language,\n title,\n icon,\n translation: new Proxy(translation, {\n get(target, key) {\n return target[key as string] || key;\n },\n }),\n };\n }\n item = null;\n});\n\ninterface Locale extends LocaleConfig {\n language: LocaleName;\n}\nconst defaultLocale: Locale = Object.assign(\n {\n title: '简体中文',\n language: 'zh_CN',\n translation: {},\n },\n resources.zh_CN\n);\n\nexport const localizable = sso({\n /** 使用的语言 */\n language: 'zh_CN' as LocaleName,\n /** 获取本地化文本 */\n t: defaultLocale.translation,\n /** 本地化支持列表 */\n locales: locales,\n /** 设置使用的语言\n * @param {LocaleName} lang 语言\n * @constructor\n */\n set(lang: LocaleName) {\n localizable.language = lang;\n localizable.t = resources[lang]?.translation || defaultLocale.translation;\n },\n});\n"],"names":["models","sso","keys","hasLocales","require","context","error","console","warn","resources","locales","map","path","i","item","default","Object","prototype","toString","call","language","replace","title","icon","translation","splice","push","Proxy","get","target","key","defaultLocale","assign","zh_CN","localizable","t","set","lang"],"mappings":"IAoGAA,aAAAA,iBAnGA,QAAOC,QAAS,OAAQ,CAqExB,IAAID,OAAS,CACXE,KAAM,iBAAM,EAAE,CAChB,EAIA,GAAI,CACFF,OAASG,WACLC,QAAQC,OAAO,CAAC,aAAc,IAAI,CAAE,aACnC,CACCH,KAAM,iBAAM,EAAE,CAChB,CAAkD,AACxD,CAAE,MAAOI,MAAO,CAEdC,QAAQC,IAAI,CAACF,MACf,CAYA,IAAMG,UAAsC,CAAC,EAC7C,IAAMC,QAAyD,EAAE,AAEjEV,EAAAA,aAAAA,OAAOE,IAAI,UAAXF,sBAAAA,KAAAA,EAAAA,CAAAA,kBAAAA,aAAAA,KAAAA,iBAAAA,2BAAAA,KAAAA,EAAAA,kBAAiBW,IAAI,SAACC,KAAcC,EAAc,CAChD,IAAIC,KAA2Cd,OAAOY,MAAMG,OAAO,CAEnE,GAAID,MAAQE,OAAOC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACL,QAAU,kBAAmB,CACtE,mBAKIA,KAJFM,SAAAA,iCAAWR,KAAKS,OAAO,CAAC,qBAAsB,iCAI5CP,KAHFQ,MAAAA,2BAAQF,qBACRG,KAEET,KAFFS,uBAEET,KADFU,YAAAA,uCAAc,CAAC,oBAGjB,GAAIX,IAAM,EAAG,CACXH,QAAQe,MAAM,CAAC,EACjB,CAAC,AACDf,QAAQgB,IAAI,CAAC,CACXN,SAAAA,SACAE,MAAAA,MACAC,KAAAA,IACF,EACAd,CAAAA,SAAS,CAACW,SAAS,CAAG,CACpBA,SAAAA,SACAE,MAAAA,MACAC,KAAAA,KACAC,YAAa,IAAIG,MAAMH,YAAa,CAClCI,IAAAA,SAAAA,IAAIC,MAAM,CAAEC,GAAG,CAAE,CACf,OAAOD,MAAM,CAACC,IAAc,EAAIA,GAClC,CACF,EACF,CACF,CAAC,AACDhB,KAAO,IAAI,AACb,GAKA,IAAMiB,cAAwBf,OAAOgB,MAAM,CACzC,CACEV,MAAO,OACPF,SAAU,QACVI,YAAa,CAAC,CAChB,EACAf,UAAUwB,KAAK,CAGjB,QAAO,IAAMC,YAAcjC,IAAI,CAE7BmB,SAAU,QAEVe,EAAGJ,cAAcP,WAAW,CAE5Bd,QAASA,QAKT0B,IAAAA,SAAAA,IAAIC,IAAgB,CAAE,KAEJ5B,eADhByB,CAAAA,YAAYd,QAAQ,CAAGiB,IACvBH,CAAAA,YAAYC,CAAC,CAAG1B,CAAAA,CAAAA,gBAAAA,SAAS,CAAC4B,KAAK,UAAf5B,yBAAAA,KAAAA,EAAAA,gBAAiBe,WAAW,AAAD,GAAKO,cAAcP,WAAW,AAC3E,CACF,EAAG"}
|
package/lib/menu.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { RouterProps } from './router';
|
|
3
|
+
export type CloseTab = 'left' | 'right' | 'other' | 'self';
|
|
4
|
+
export interface TabItem extends RouterProps {
|
|
5
|
+
key: string;
|
|
6
|
+
url?: string;
|
|
7
|
+
path?: string;
|
|
8
|
+
closable?: boolean;
|
|
9
|
+
icon?: ReactNode;
|
|
10
|
+
label?: ReactNode;
|
|
11
|
+
dynamicTitle?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface MenuItem extends RouterProps {
|
|
14
|
+
key: string;
|
|
15
|
+
type?: string;
|
|
16
|
+
label?: ReactNode;
|
|
17
|
+
children?: MenuItem[];
|
|
18
|
+
[key: string]: any;
|
|
19
|
+
}
|
|
20
|
+
interface MenuStore {
|
|
21
|
+
/** 登录用户可访问的菜单列表 */
|
|
22
|
+
menus: MenuItem[];
|
|
23
|
+
/** 菜单列表的kv数据, 根据menus自动生成 */
|
|
24
|
+
kv: Record<string, MenuItem>;
|
|
25
|
+
/** 当前菜单 */
|
|
26
|
+
activeKey?: string;
|
|
27
|
+
/** 选项卡数据 */
|
|
28
|
+
tabs: TabItem[];
|
|
29
|
+
/** 设置菜单列表 */
|
|
30
|
+
setMenu(data: MenuItem[]): void;
|
|
31
|
+
/** 添加选项卡 */
|
|
32
|
+
addTab(tab: TabItem): void;
|
|
33
|
+
/** 打开选项卡 */
|
|
34
|
+
openTab(tab: TabItem): void;
|
|
35
|
+
/** 关闭选项卡 */
|
|
36
|
+
closeTab(key: string, type?: CloseTab, callback?: () => void): void;
|
|
37
|
+
[key: string]: unknown;
|
|
38
|
+
}
|
|
39
|
+
export declare const menu: MenuStore & (<K extends keyof MenuStore>(key: K, updater: (val: MenuStore[K]) => MenuStore[K]) => void);
|
|
40
|
+
export {};
|
package/lib/menu.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function _arrayLikeToArray(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 _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _defineProperty(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 _iterableToArray(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _objectSpread(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){_defineProperty(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 _objectSpreadProps(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 _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key]}}return target}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key]}return target}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(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 _arrayLikeToArray(o,minLen)}import{isEqual,isFunction}from"@moneko/common";import sso from"./sso";var getItems=function(arr){var result=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];if(arr.length===0){return result}var _arr_=arr[0],_arr__children=_arr_.children,children=_arr__children===void 0?[]:_arr__children,i18n=_arr_.i18n,label=_arr_.label,hideMenu=_arr_.hideMenu,args=_objectWithoutProperties(_arr_,["children","i18n","label","hideMenu"]);var item=Object.create(null);Object.assign(item,args,{label:i18n||label});if(children.length){item.children=getItems(children)}if(!hideMenu){result.push(item)}return getItems(arr.slice(1),result)};var getMenuKV=function(arr,obj){var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=arr[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var _ref=_step.value;var item=_ref;var children=item.children,args=_objectWithoutProperties(item,["children"]);obj[item.key]=args;if(children===null||children===void 0?void 0:children.length){getMenuKV(children,obj)}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}};export var menu=sso({activeKey:"home",menus:[],kv:{},tabs:[],setMenu:function setMenu(data){var items=getItems(data),kv={};getMenuKV(items,kv);menu.menus=items;menu.kv=kv},addTab:function addTab(tab){var current=menu.kv[tab.key];if(current&&!menu.tabs.find(function(item){return item.key===tab.key})){var ntabs=_toConsumableArray(menu.tabs).concat([_objectSpread(_objectSpreadProps(_objectSpread({},current),{i18n:current.i18n||"route-".concat(current.key)}),tab)]);if(!isEqual(ntabs,menu.tabs)){menu.tabs=ntabs}}},openTab:function openTab(tab){menu.addTab(tab);menu.activeKey=tab.key},closeTab:function closeTab(key){var type=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"self",callback=arguments.length>2?arguments[2]:void 0;if(!key)return;var tabs=menu.tabs,activeKey=menu.activeKey;var nActiveKey=activeKey;var closeTabs=[];var nTabs=[];var nextTab=null;var isCloseSelf=type==="self";var idx=tabs.findIndex(function(t){return t.key===key});var isNotClose=function(item,i){return item.closable===false||({left:i>=idx,right:i<=idx,other:i===idx,self:key!==item.key})[type]};for(var i=0;i<tabs.length;i++){var item=tabs[i];var notClose=isNotClose(item,i);if(isCloseSelf){if(!notClose){if(key===nActiveKey){var adx=i?i-1:i+1;if(tabs[adx]){nActiveKey=tabs[adx].key;nextTab=tabs[adx]}}}}else if(notClose&&item.key===key&&nActiveKey!==key){nActiveKey=key;nextTab=tabs[i]}if(!notClose){closeTabs.push(item)}if(notClose){nTabs.push(item)}}if(isFunction(callback)){callback(closeTabs,nextTab)}menu.tabs=nTabs;menu.activeKey=nActiveKey}});
|
|
2
|
+
//# sourceMappingURL=menu.js.map
|
package/lib/menu.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/menu.ts"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { isEqual, isFunction } from '@moneko/common';\nimport sso from './sso';\nimport type { RouterProps } from './router';\n\nexport type CloseTab = 'left' | 'right' | 'other' | 'self';\nexport interface TabItem extends RouterProps {\n key: string;\n url?: string;\n path?: string;\n closable?: boolean;\n icon?: ReactNode;\n label?: ReactNode;\n dynamicTitle?: string;\n}\nexport interface MenuItem extends RouterProps {\n key: string;\n type?: string;\n label?: ReactNode;\n children?: MenuItem[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\ninterface MenuStore {\n /** 登录用户可访问的菜单列表 */\n menus: MenuItem[];\n /** 菜单列表的kv数据, 根据menus自动生成 */\n kv: Record<string, MenuItem>;\n /** 当前菜单 */\n activeKey?: string;\n /** 选项卡数据 */\n tabs: TabItem[];\n /** 设置菜单列表 */\n // eslint-disable-next-line no-unused-vars\n setMenu(data: MenuItem[]): void;\n /** 添加选项卡 */\n // eslint-disable-next-line no-unused-vars\n addTab(tab: TabItem): void;\n /** 打开选项卡 */\n // eslint-disable-next-line no-unused-vars\n openTab(tab: TabItem): void;\n /** 关闭选项卡 */\n // eslint-disable-next-line no-unused-vars\n closeTab(key: string, type?: CloseTab, callback?: () => void): void;\n [key: string]: unknown;\n}\n\nconst getItems = (arr: MenuItem[], result: MenuItem[] = []): MenuItem[] => {\n if (arr.length === 0) {\n return result;\n }\n const { children = [], i18n, label, hideMenu, ...args } = arr[0];\n const item: MenuItem = Object.create(null);\n\n Object.assign(item, args, { label: i18n || label });\n if (children.length) {\n item.children = getItems(children);\n }\n if (!hideMenu) {\n result.push(item);\n }\n return getItems(arr.slice(1), result);\n};\nconst getMenuKV = (arr: MenuItem[], obj: Record<string, MenuItem>): void => {\n for (const item of arr) {\n const { children, ...args } = item;\n\n obj[item.key] = args;\n if (children?.length) {\n getMenuKV(children, obj);\n }\n }\n};\n\nexport const menu = sso<MenuStore>({\n activeKey: 'home',\n menus: [],\n kv: {},\n tabs: [],\n setMenu(data) {\n const items = getItems(data),\n kv: Record<string, MenuItem> = {};\n\n getMenuKV(items, kv);\n menu.menus = items;\n menu.kv = kv;\n },\n addTab(tab) {\n const current = menu.kv[tab.key];\n\n if (current && !menu.tabs.find((item) => item.key === tab.key)) {\n const ntabs: TabItem[] = [\n ...menu.tabs,\n {\n ...current,\n i18n: current.i18n || `route-${current.key}`,\n ...tab,\n },\n ];\n\n if (!isEqual(ntabs, menu.tabs)) {\n menu.tabs = ntabs;\n }\n }\n },\n openTab(tab) {\n menu.addTab(tab);\n menu.activeKey = tab.key;\n },\n closeTab(key, type = 'self', callback) {\n if (!key) return;\n const { tabs, activeKey } = menu;\n let nActiveKey = activeKey;\n const closeTabs: TabItem[] = [];\n const nTabs: TabItem[] = [];\n let nextTab: TabItem | null = null;\n // 关闭当前tab\n const isCloseSelf = type === 'self';\n const idx = tabs.findIndex((t) => t.key === key);\n const isNotClose = (item: TabItem, i: number) => {\n return (\n item.closable === false ||\n {\n left: i >= idx,\n right: i <= idx,\n other: i === idx,\n self: key !== item.key,\n }[type]\n );\n };\n\n for (let i = 0; i < tabs.length; i++) {\n const item = tabs[i];\n const notClose = isNotClose(item, i);\n\n if (isCloseSelf) {\n if (!notClose) {\n if (key === nActiveKey) {\n const adx: number | null = i ? i - 1 : i + 1;\n\n if (tabs[adx]) {\n nActiveKey = tabs[adx].key;\n nextTab = tabs[adx];\n }\n }\n }\n } else if (notClose && item.key === key && nActiveKey !== key) {\n nActiveKey = key;\n nextTab = tabs[i];\n }\n if (!notClose) {\n closeTabs.push(item);\n }\n if (notClose) {\n nTabs.push(item);\n }\n }\n\n if (isFunction(callback)) {\n // eslint-disable-next-line callback-return\n callback(closeTabs, nextTab);\n }\n menu.tabs = nTabs;\n menu.activeKey = nActiveKey;\n },\n});\n"],"names":["isEqual","isFunction","sso","getItems","arr","result","length","children","i18n","label","hideMenu","args","item","Object","create","assign","push","slice","getMenuKV","obj","key","menu","activeKey","menus","kv","tabs","setMenu","data","items","addTab","tab","current","find","ntabs","openTab","closeTab","type","callback","nActiveKey","closeTabs","nTabs","nextTab","isCloseSelf","idx","findIndex","t","isNotClose","i","closable","left","right","other","self","notClose","adx"],"mappings":"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"}
|
|
@@ -1,15 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { type RouterProps } from '../../index';
|
|
3
|
-
export type CloseTab = 'left' | 'right' | 'other' | 'self';
|
|
4
|
-
export interface TabItem extends RouterProps {
|
|
5
|
-
key: string;
|
|
6
|
-
url?: string;
|
|
7
|
-
path?: string;
|
|
8
|
-
closable?: boolean;
|
|
9
|
-
icon?: React.ReactNode;
|
|
10
|
-
i18n?: string;
|
|
11
|
-
dynamicTitle?: string;
|
|
12
|
-
}
|
|
1
|
+
import { type ReactNode, type FC } from 'react';
|
|
13
2
|
declare const DashboardLayout: FC<{
|
|
14
3
|
children?: ReactNode;
|
|
15
4
|
}>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function _arrayLikeToArray(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 _arrayWithHoles(arr){if(Array.isArray(arr))return arr}function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target};return _extends.apply(this,arguments)}function _iterableToArrayLimit(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 _nonIterableRest(){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 _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _taggedTemplateLiteral(strings,raw){if(!raw){raw=strings.slice(0)}return Object.freeze(Object.defineProperties(strings,{raw:{value:Object.freeze(raw)}}))}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(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 _arrayLikeToArray(o,minLen)}function _templateObject(){var data=_taggedTemplateLiteral(["\n ."," {\n position: sticky;\n top: 64px;\n z-index: 999;\n overflow: initial !important;\n margin: 16px 16px 0 !important;\n\n > .","-tabs-nav {\n .","-tabs-tab {\n border-color: var(--border-color, rgb(5 5 5 / 6%)) !important;\n border-radius: var(--border-radius) !important;\n backdrop-filter: blur(16px);\n }\n\n &::before {\n content: none;\n }\n }\n }\n ."," {\n width: 100% !important;\n min-height: 100vh !important;\n }\n .",", ."," {\n overflow-y: auto;\n max-height: 100vh;\n }\n ."," {\n overflow-y: auto;\n }\n ."," {\n overflow-y: auto;\n }\n ."," {\n display: flex;\n margin: 0 16px;\n flex-direction: column;\n }\n ."," {\n border-radius: var(--border-radius);\n padding: 24px;\n background: var(--component-card-bg, #fff);\n box-shadow: var(--box-shadow-lite);\n flex: 1;\n transition-property: background-color, box-shadow;\n }\n .",", .",", ."," > svg {\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n }\n ."," {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex;\n gap: 10px;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n padding: 14px;\n height: 68px;\n text-align: center;\n color: #de4553;\n transition-property: background-color, border-color;\n cursor: pointer;\n user-select: none;\n\n > svg,\n &::before {\n transition-property: opacity;\n }\n\n > svg {\n height: 32px;\n opacity: 0;\n }\n\n &::before {\n display: block;\n width: 22px;\n height: 32px;\n background: url(",") no-repeat center center / contain;\n opacity: 1;\n content: '';\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n }\n }\n"]);_templateObject=function _templateObject(){return data};return data}import React,{useCallback,useEffect,useMemo,useState}from"react";import{ReloadOutlined,DeleteRowOutlined,CloseOutlined}from"@ant-design/icons";import{css,injectGlobal}from"@emotion/css";import{Tabs,Layout,Dropdown}from"antd";import{useAliveController}from"react-activation";import{useSearchParams,useOutlet,useNavigate}from"react-router-dom";import FallbackComp from"../../components/fallback-comp";import LayoutMenu from"../../components/layout-menu";import{localizable}from"../../localizable";import{menu}from"
|
|
1
|
+
function _arrayLikeToArray(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 _arrayWithHoles(arr){if(Array.isArray(arr))return arr}function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target};return _extends.apply(this,arguments)}function _iterableToArrayLimit(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 _nonIterableRest(){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 _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _taggedTemplateLiteral(strings,raw){if(!raw){raw=strings.slice(0)}return Object.freeze(Object.defineProperties(strings,{raw:{value:Object.freeze(raw)}}))}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(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 _arrayLikeToArray(o,minLen)}function _templateObject(){var data=_taggedTemplateLiteral(["\n ."," {\n position: sticky;\n top: 64px;\n z-index: 999;\n overflow: initial !important;\n margin: 16px 16px 0 !important;\n\n > .","-tabs-nav {\n .","-tabs-tab {\n border-color: var(--border-color, rgb(5 5 5 / 6%)) !important;\n border-radius: var(--border-radius) !important;\n backdrop-filter: blur(16px);\n }\n\n &::before {\n content: none;\n }\n }\n }\n ."," {\n width: 100% !important;\n min-height: 100vh !important;\n }\n .",", ."," {\n overflow-y: auto;\n max-height: 100vh;\n }\n ."," {\n overflow-y: auto;\n }\n ."," {\n overflow-y: auto;\n }\n ."," {\n display: flex;\n margin: 0 16px;\n flex-direction: column;\n }\n ."," {\n border-radius: var(--border-radius);\n padding: 24px;\n background: var(--component-card-bg, #fff);\n box-shadow: var(--box-shadow-lite);\n flex: 1;\n transition-property: background-color, box-shadow;\n }\n .",", .",", ."," > svg {\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n }\n ."," {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex;\n gap: 10px;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n padding: 14px;\n height: 68px;\n text-align: center;\n color: #de4553;\n transition-property: background-color, border-color;\n cursor: pointer;\n user-select: none;\n\n > svg,\n &::before {\n transition-property: opacity;\n }\n\n > svg {\n height: 32px;\n opacity: 0;\n }\n\n &::before {\n display: block;\n width: 22px;\n height: 32px;\n background: url(",") no-repeat center center / contain;\n opacity: 1;\n content: '';\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n }\n }\n"]);_templateObject=function _templateObject(){return data};return data}import React,{useCallback,useEffect,useMemo,useState}from"react";import{ReloadOutlined,DeleteRowOutlined,CloseOutlined}from"@ant-design/icons";import{css,injectGlobal}from"@emotion/css";import{Tabs,Layout,Dropdown}from"antd";import{useAliveController}from"react-activation";import{useSearchParams,useOutlet,useNavigate}from"react-router-dom";import FallbackComp from"../../components/fallback-comp";import LayoutMenu from"../../components/layout-menu";import{localizable}from"../../localizable";import{menu}from"../../menu";var prefixCls=providerConfig.prefixCls;var c=function(s){return"".concat(prefixCls,"-dashboard-").concat(s)};var cls={tabs:c("tabs"),layout:c("layout"),sider:c("sider"),logo:c("logo"),section:c("section"),content:c("content"),view:c("view")};var layoutCss=css(_templateObject(),cls.tabs,prefixCls,prefixCls,cls.layout,cls.sider,cls.section,cls.section,cls.sider,cls.content,cls.view,cls.view,cls.logo,cls.logo,cls.logo,require(favicon));injectGlobal([layoutCss]);var closeTabs=[{label:"关闭左侧标签",icon:React.createElement(DeleteRowOutlined,{style:{transform:"scaleX(-1)"}}),key:"left"},{label:"关闭右侧标签",icon:React.createElement(DeleteRowOutlined,null),key:"right"},{label:"关闭其他标签",icon:React.createElement(CloseOutlined,null),key:"other"},{label:"刷新标签页",icon:React.createElement(ReloadOutlined,null),key:"refresh"}];var DashboardLayout=function(param){var children=param.children;var activeKey=menu.activeKey,tabs=menu.tabs,openTab=menu.openTab,closeTab=menu.closeTab,kv=menu.kv;var t=localizable.t;var outlet=useOutlet();var navigate=useNavigate();var dropScope=useAliveController().dropScope;var _useSearchParams=_slicedToArray(useSearchParams(),1),search=_useSearchParams[0];var _useState=_slicedToArray(useState(false),2),collapsed=_useState[0],setCollapsed=_useState[1];var handleCollapsed=useCallback(function(value){if(value){var _timer=window.setTimeout(function(){setCollapsed(value);window.clearTimeout(_timer);_timer=null},0)}else{setCollapsed(value);var _timer1=window.setTimeout(function(){window.clearTimeout(_timer1);_timer1=null},30)}},[]);var closedTab=useCallback(function(tabKey,type){if(type==="refresh"){navigate("/refresh");return}if(tabKey){closeTab(tabKey,type,function(closes,next){closes===null||closes===void 0?void 0:closes.forEach(function(item){if(item.path&&dropScope){dropScope(item.path)}});if(next){navigate("".concat(next.path,"?menuId=").concat(next.key))}})}},[closeTab,dropScope,navigate]);var _useMemo=useMemo(function(){return{menuId:search.get("menuId"),dynamicLabel:search.get("dynamicTitle")||""}},[search]),menuId=_useMemo.menuId,dynamicLabel=_useMemo.dynamicLabel;useEffect(function(){if(menuId){openTab({key:menuId,dynamicTitle:dynamicLabel})}},[dynamicLabel,menuId,openTab]);var getItems=useCallback(function(key){return key===activeKey?closeTabs:closeTabs.filter(function(i){return(i===null||i===void 0?void 0:i.key)!=="refresh"})},[activeKey]);var handleTabEdit=useCallback(function(targetKey,action){if(action==="remove"&&typeof targetKey==="string"){closedTab(targetKey)}},[closedTab]);var handleClick=useCallback(function(key){navigate("".concat(kv[key].key,"?menuId=").concat(kv[key].key))},[kv,navigate]);var tabPanel=useMemo(function(){return tabs.map(function(param){var key=param.key,icon=param.icon,label=param.label,dynamicTitle=param.dynamicTitle,closable=param.closable;return{key:key,label:React.createElement(Dropdown,{menu:{items:getItems(key),onClick:function(info){info.domEvent.stopPropagation();closedTab(key,info.key)}},trigger:["contextMenu"],destroyPopupOnHide:true},React.createElement("div",null,icon,t[label||"route-".concat(key)]+(dynamicTitle||""))),closable:closable}})},[closedTab,getItems,t,tabs]);return React.createElement(Layout,{className:cls.layout},layoutSider?React.createElement(Layout.Sider,_extends({className:cls.sider,trigger:null,collapsible:true,collapsed:collapsed,onBreakpoint:function(broken){return handleCollapsed(broken)},onCollapse:function(_collapsed){return handleCollapsed(_collapsed)},theme:"light",breakpoint:"md"},layoutSider),React.createElement("div",{className:cls.logo,"data-title":projectName},React.createElement(FallbackComp,{compName:"logo",show:!collapsed})),React.createElement(LayoutMenu,{collapsed:collapsed,theme:layoutSider.theme})):null,React.createElement(Layout,{className:cls.section},React.createElement(FallbackComp,{compName:"layout-header",collapsed:collapsed,onCollapsed:function(){return handleCollapsed(!collapsed)}}),React.createElement(Tabs,{className:cls.tabs,hideAdd:true,onTabClick:handleClick,activeKey:activeKey,type:"editable-card",onEdit:handleTabEdit,items:tabPanel,animated:true}),React.createElement(Layout.Content,{className:cls.content},React.createElement("div",{className:cls.view},children||outlet),React.createElement(FallbackComp,{compName:"layout-footer"}))))};export default DashboardLayout;
|
|
2
2
|
//# sourceMappingURL=layout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/packages/back-stage/layout.tsx"],"sourcesContent":["import React, { type ReactNode, useCallback, useEffect, useMemo, useState, type FC } from 'react';\nimport { ReloadOutlined, DeleteRowOutlined, CloseOutlined } from '@ant-design/icons';\nimport { css, injectGlobal } from '@emotion/css';\nimport { Tabs, Layout, Dropdown } from 'antd';\nimport { useAliveController } from 'react-activation';\nimport { useSearchParams, useOutlet, useNavigate } from 'react-router-dom';\nimport FallbackComp from '../../components/fallback-comp';\nimport LayoutMenu from '../../components/layout-menu';\nimport { type RouterProps } from '../../index';\nimport { localizable } from '../../localizable';\nimport type { MenuItemType } from 'antd/es/menu/hooks/useItems';\nimport { menu } from '@/store';\n\ndeclare const favicon: string;\n\nconst { prefixCls } = providerConfig;\n\nconst c = (s: string) => `${prefixCls}-dashboard-${s}`;\nconst cls = {\n tabs: c('tabs'),\n layout: c('layout'),\n sider: c('sider'),\n logo: c('logo'),\n section: c('section'),\n content: c('content'),\n view: c('view'),\n};\nconst layoutCss = css`\n .${cls.tabs} {\n position: sticky;\n top: 64px;\n z-index: 999;\n overflow: initial !important;\n margin: 16px 16px 0 !important;\n\n > .${prefixCls}-tabs-nav {\n .${prefixCls}-tabs-tab {\n border-color: var(--border-color, rgb(5 5 5 / 6%)) !important;\n border-radius: var(--border-radius) !important;\n backdrop-filter: blur(16px);\n }\n\n &::before {\n content: none;\n }\n }\n }\n .${cls.layout} {\n width: 100% !important;\n min-height: 100vh !important;\n }\n .${cls.sider}, .${cls.section} {\n overflow-y: auto;\n max-height: 100vh;\n }\n .${cls.section} {\n overflow-y: auto;\n }\n .${cls.sider} {\n overflow-y: auto;\n }\n .${cls.content} {\n display: flex;\n margin: 0 16px;\n flex-direction: column;\n }\n .${cls.view} {\n border-radius: var(--border-radius);\n padding: 24px;\n background: var(--component-card-bg, #fff);\n box-shadow: var(--box-shadow-lite);\n flex: 1;\n transition-property: background-color, box-shadow;\n }\n .${cls.view}, .${cls.logo}, .${cls.logo} > svg {\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n }\n .${cls.logo} {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex;\n gap: 10px;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n padding: 14px;\n height: 68px;\n text-align: center;\n color: #de4553;\n transition-property: background-color, border-color;\n cursor: pointer;\n user-select: none;\n\n > svg,\n &::before {\n transition-property: opacity;\n }\n\n > svg {\n height: 32px;\n opacity: 0;\n }\n\n &::before {\n display: block;\n width: 22px;\n height: 32px;\n background: url(${favicon}) no-repeat center center / contain;\n opacity: 1;\n content: '';\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n }\n }\n`;\n\ninjectGlobal([layoutCss]);\nexport type CloseTab = 'left' | 'right' | 'other' | 'self';\nexport interface TabItem extends RouterProps {\n key: string;\n url?: string;\n path?: string;\n closable?: boolean;\n icon?: React.ReactNode;\n i18n?: string;\n dynamicTitle?: string;\n}\n\nconst closeTabs: ({ key: CloseTab | 'refresh' } & Omit<MenuItemType, 'key'>)[] = [\n {\n label: '关闭左侧标签',\n icon: <DeleteRowOutlined style={{ transform: 'scaleX(-1)' }} />,\n key: 'left',\n },\n {\n label: '关闭右侧标签',\n icon: <DeleteRowOutlined />,\n key: 'right',\n },\n {\n label: '关闭其他标签',\n icon: <CloseOutlined />,\n key: 'other',\n },\n {\n label: '刷新标签页',\n icon: <ReloadOutlined />,\n key: 'refresh',\n },\n];\nconst DashboardLayout: FC<{ children?: ReactNode }> = ({ children }) => {\n const { activeKey, tabs, openTab, closeTab, kv } = menu;\n const { t } = localizable;\n const outlet = useOutlet();\n const navigate = useNavigate();\n const { dropScope } = useAliveController();\n const [search] = useSearchParams();\n const [collapsed, setCollapsed] = useState<boolean>(false);\n const handleCollapsed = useCallback((value: boolean) => {\n if (value) {\n let _timer: number | null = window.setTimeout(() => {\n setCollapsed(value);\n window.clearTimeout(_timer as number);\n _timer = null;\n }, 0);\n } else {\n setCollapsed(value);\n let _timer: number | null = window.setTimeout(() => {\n window.clearTimeout(_timer as number);\n _timer = null;\n }, 30);\n }\n }, []);\n const closedTab = useCallback(\n (tabKey?: string, type?: CloseTab | 'refresh') => {\n if (type === 'refresh') {\n navigate('/refresh');\n return;\n }\n if (tabKey) {\n closeTab(tabKey, type, function (closes?: TabItem[], next?: TabItem) {\n closes?.forEach((item) => {\n if (item.path && dropScope) {\n dropScope(item.path);\n }\n });\n if (next) {\n navigate(`${next.path}?menuId=${next.key}`);\n }\n });\n }\n },\n [closeTab, dropScope, navigate]\n );\n\n const { menuId, dynamicLabel } = useMemo(\n () => ({\n menuId: search.get('menuId'),\n dynamicLabel: search.get('dynamicTitle') || '',\n }),\n [search]\n );\n\n useEffect(() => {\n if (menuId) {\n openTab({\n key: menuId,\n dynamicTitle: dynamicLabel,\n });\n }\n }, [dynamicLabel, menuId, openTab]);\n\n const getItems = useCallback(\n (key: string) =>\n key === activeKey ? closeTabs : closeTabs.filter((i) => i?.key !== 'refresh'),\n [activeKey]\n );\n const handleTabEdit = useCallback(\n (\n targetKey: string | React.MouseEvent<Element, MouseEvent> | React.KeyboardEvent<Element>,\n action: 'add' | 'remove'\n ) => {\n if (action === 'remove' && typeof targetKey === 'string') {\n closedTab(targetKey);\n }\n },\n [closedTab]\n );\n const handleClick = useCallback(\n (key: string) => {\n navigate(`${kv[key].key}?menuId=${kv[key].key}`);\n },\n [kv, navigate]\n );\n const tabPanel = useMemo(() => {\n return tabs.map(({ key, icon, i18n, dynamicTitle, closable }: TabItem) => {\n return {\n key,\n label: (\n <Dropdown\n menu={{\n items: getItems(key),\n onClick: (info) => {\n info.domEvent.stopPropagation();\n closedTab(key, info.key as CloseTab);\n },\n }}\n trigger={['contextMenu']}\n destroyPopupOnHide\n >\n <div>\n {icon}\n {t[i18n || `route-${key}`] + (dynamicTitle || '')}\n </div>\n </Dropdown>\n ),\n closable,\n };\n });\n }, [closedTab, getItems, t, tabs]);\n\n return (\n <Layout className={cls.layout}>\n {layoutSider ? (\n <Layout.Sider\n className={cls.sider}\n trigger={null}\n collapsible\n collapsed={collapsed}\n onBreakpoint={(broken: boolean) => handleCollapsed(broken)}\n onCollapse={(_collapsed: boolean) => handleCollapsed(_collapsed)}\n theme=\"light\"\n breakpoint=\"md\"\n {...layoutSider}\n >\n <div className={cls.logo} data-title={projectName}>\n <FallbackComp compName=\"logo\" show={!collapsed} />\n </div>\n <LayoutMenu collapsed={collapsed} theme={layoutSider.theme} />\n </Layout.Sider>\n ) : null}\n <Layout className={cls.section}>\n <FallbackComp\n compName=\"layout-header\"\n collapsed={collapsed}\n onCollapsed={() => handleCollapsed(!collapsed)}\n />\n <Tabs\n className={cls.tabs}\n hideAdd\n onTabClick={handleClick}\n activeKey={activeKey}\n type=\"editable-card\"\n onEdit={handleTabEdit}\n items={tabPanel}\n animated\n />\n <Layout.Content className={cls.content}>\n <div className={cls.view}>{children || outlet}</div>\n <FallbackComp compName=\"layout-footer\" />\n </Layout.Content>\n </Layout>\n </Layout>\n );\n};\n\nexport default DashboardLayout;\n"],"names":["React","useCallback","useEffect","useMemo","useState","ReloadOutlined","DeleteRowOutlined","CloseOutlined","css","injectGlobal","Tabs","Layout","Dropdown","useAliveController","useSearchParams","useOutlet","useNavigate","FallbackComp","LayoutMenu","localizable","menu","prefixCls","providerConfig","c","s","cls","tabs","layout","sider","logo","section","content","view","layoutCss","favicon","closeTabs","label","icon","style","transform","key","DashboardLayout","children","activeKey","openTab","closeTab","kv","t","outlet","navigate","dropScope","search","collapsed","setCollapsed","handleCollapsed","value","_timer","window","setTimeout","clearTimeout","closedTab","tabKey","type","closes","next","forEach","item","path","menuId","get","dynamicLabel","dynamicTitle","getItems","filter","i","handleTabEdit","targetKey","action","handleClick","tabPanel","map","i18n","closable","items","onClick","info","domEvent","stopPropagation","trigger","destroyPopupOnHide","div","className","layoutSider","Sider","collapsible","onBreakpoint","broken","onCollapse","_collapsed","theme","breakpoint","data-title","projectName","compName","show","onCollapsed","hideAdd","onTabClick","onEdit","animated","Content"],"mappings":"8xHAAA,OAAOA,OAAyBC,WAAW,CAAEC,SAAS,CAAEC,OAAO,CAAEC,QAAQ,KAAiB,OAAQ,AAClG,QAASC,cAAc,CAAEC,iBAAiB,CAAEC,aAAa,KAAQ,mBAAoB,AACrF,QAASC,GAAG,CAAEC,YAAY,KAAQ,cAAe,AACjD,QAASC,IAAI,CAAEC,MAAM,CAAEC,QAAQ,KAAQ,MAAO,AAC9C,QAASC,kBAAkB,KAAQ,kBAAmB,AACtD,QAASC,eAAe,CAAEC,SAAS,CAAEC,WAAW,KAAQ,kBAAmB,AAC3E,QAAOC,iBAAkB,gCAAiC,AAC1D,QAAOC,eAAgB,8BAA+B,AAEtD,QAASC,WAAW,KAAQ,mBAAoB,AAEhD,QAASC,IAAI,KAAQ,SAAU,CAI/B,IAAM,AAAEC,UAAcC,eAAdD,UAER,IAAME,EAAI,SAACC,SAAc,AAAC,GAAyBA,OAAvBH,UAAU,eAAe,OAAFG,IACnD,IAAMC,IAAM,CACVC,KAAMH,EAAE,QACRI,OAAQJ,EAAE,UACVK,MAAOL,EAAE,SACTM,KAAMN,EAAE,QACRO,QAASP,EAAE,WACXQ,QAASR,EAAE,WACXS,KAAMT,EAAE,OACV,EACA,IAAMU,UAAYzB,sBACbiB,IAAIC,IAAI,CAOJL,UACAA,UAWJI,IAAIE,MAAM,CAIVF,IAAIG,KAAK,CAAMH,IAAIK,OAAO,CAI1BL,IAAIK,OAAO,CAGXL,IAAIG,KAAK,CAGTH,IAAIM,OAAO,CAKXN,IAAIO,IAAI,CAQRP,IAAIO,IAAI,CAAMP,IAAII,IAAI,CAAMJ,IAAII,IAAI,CAIpCJ,IAAII,IAAI,CA+BWK,SASxBzB,aAAa,CAACwB,UAAU,EAYxB,IAAME,UAA2E,CAC/E,CACEC,MAAO,SACPC,KAAM,oBAAC/B,mBAAkBgC,MAAO,CAAEC,UAAW,YAAa,IAC1DC,IAAK,MACP,EACA,CACEJ,MAAO,SACPC,KAAM,oBAAC/B,wBACPkC,IAAK,OACP,EACA,CACEJ,MAAO,SACPC,KAAM,oBAAC9B,oBACPiC,IAAK,OACP,EACA,CACEJ,MAAO,QACPC,KAAM,oBAAChC,qBACPmC,IAAK,SACP,EACD,CACD,IAAMC,gBAAgD,eAAkB,KAAfC,eAAAA,SACvD,IAAQC,UAA2CvB,KAA3CuB,UAAWjB,KAAgCN,KAAhCM,KAAMkB,QAA0BxB,KAA1BwB,QAASC,SAAiBzB,KAAjByB,SAAUC,GAAO1B,KAAP0B,GAC5C,IAAM,AAAEC,EAAM5B,YAAN4B,EACR,IAAMC,OAASjC,YACf,IAAMkC,SAAWjC,cACjB,IAAM,AAAEkC,UAAcrC,qBAAdqC,UACR,IAAiBpC,gCAAAA,qBAAVqC,OAAUrC,oBACjB,IAAkCV,yBAAAA,SAAkB,KAAK,KAAlDgD,UAA2BhD,aAAhBiD,aAAgBjD,aAClC,IAAMkD,gBAAkBrD,YAAY,SAACsD,MAAmB,CACtD,GAAIA,MAAO,CACT,IAAIC,OAAwBC,OAAOC,UAAU,CAAC,UAAM,CAClDL,aAAaE,OACbE,OAAOE,YAAY,CAACH,QACpBA,OAAS,IAAI,AACf,EAAG,EACL,KAAO,CACLH,aAAaE,OACb,IAAIC,QAAwBC,OAAOC,UAAU,CAAC,UAAM,CAClDD,OAAOE,YAAY,CAACH,SACpBA,QAAS,IAAI,AACf,EAAG,GACL,CAAC,AACH,EAAG,EAAE,EACL,IAAMI,UAAY3D,YAChB,SAAC4D,OAAiBC,KAAgC,CAChD,GAAIA,OAAS,UAAW,CACtBb,SAAS,YACT,MACF,CAAC,AACD,GAAIY,OAAQ,CACVhB,SAASgB,OAAQC,KAAM,SAAUC,MAAkB,CAAEC,IAAc,CAAE,CACnED,eAAAA,gBAAAA,KAAAA,EAAAA,OAAQE,OAAO,CAAC,SAACC,KAAS,CACxB,GAAIA,KAAKC,IAAI,EAAIjB,UAAW,CAC1BA,UAAUgB,KAAKC,IAAI,CACrB,CAAC,AACH,GACA,GAAIH,KAAM,CACRf,SAAS,AAAC,GAAsBe,OAApBA,KAAKG,IAAI,CAAC,YAAmB,OAATH,KAAKxB,GAAG,EAC1C,CAAC,AACH,EACF,CAAC,AACH,EACA,CAACK,SAAUK,UAAWD,SAAS,EAGjC,IAAiC9C,SAAAA,QAC/B,iBAAO,CACLiE,OAAQjB,OAAOkB,GAAG,CAAC,UACnBC,aAAcnB,OAAOkB,GAAG,CAAC,iBAAmB,EAC9C,GACA,CAAClB,OAAO,EALFiB,OAAyBjE,SAAzBiE,OAAQE,aAAiBnE,SAAjBmE,aAQhBpE,UAAU,UAAM,CACd,GAAIkE,OAAQ,CACVxB,QAAQ,CACNJ,IAAK4B,OACLG,aAAcD,YAChB,EACF,CAAC,AACH,EAAG,CAACA,aAAcF,OAAQxB,QAAQ,EAElC,IAAM4B,SAAWvE,YACf,SAACuC,KACCA,OAAAA,MAAQG,UAAYR,UAAYA,UAAUsC,MAAM,CAAC,SAACC,GAAMA,MAAAA,CAAAA,UAAAA,WAAAA,KAAAA,EAAAA,EAAGlC,GAAG,AAAD,IAAM,WAAU,EAC/E,CAACG,UAAU,EAEb,IAAMgC,cAAgB1E,YACpB,SACE2E,UACAC,OACG,CACH,GAAIA,SAAW,UAAY,OAAOD,YAAc,SAAU,CACxDhB,UAAUgB,UACZ,CAAC,AACH,EACA,CAAChB,UAAU,EAEb,IAAMkB,YAAc7E,YAClB,SAACuC,IAAgB,CACfS,SAAS,AAAC,GAAwBH,OAAtBA,EAAE,CAACN,IAAI,CAACA,GAAG,CAAC,YAAsB,OAAZM,EAAE,CAACN,IAAI,CAACA,GAAG,EAC/C,EACA,CAACM,GAAIG,SAAS,EAEhB,IAAM8B,SAAW5E,QAAQ,UAAM,CAC7B,OAAOuB,KAAKsD,GAAG,CAAC,eAA0D,KAAvDxC,UAAAA,IAAKH,WAAAA,KAAM4C,WAAAA,KAAMV,mBAAAA,aAAcW,eAAAA,SAChD,MAAO,CACL1C,IAAAA,IACAJ,MACE,oBAACxB,UACCQ,KAAM,CACJ+D,MAAOX,SAAShC,KAChB4C,QAAS,SAACC,KAAS,CACjBA,KAAKC,QAAQ,CAACC,eAAe,GAC7B3B,UAAUpB,IAAK6C,KAAK7C,GAAG,CACzB,CACF,EACAgD,QAAS,CAAC,cAAc,CACxBC,mBAAAA,IAAkB,EAElB,oBAACC,WACErD,KACAU,CAAC,CAACkC,MAAQ,AAAC,SAAY,OAAJzC,KAAM,CAAI+B,CAAAA,cAAgB,EAAC,IAIrDW,SAAAA,QACF,CACF,EACF,EAAG,CAACtB,UAAWY,SAAUzB,EAAGrB,KAAK,EAEjC,OACE,oBAACf,QAAOgF,UAAWlE,IAAIE,MAAM,EAC1BiE,YACC,oBAACjF,OAAOkF,KAAK,WACXF,UAAWlE,IAAIG,KAAK,CACpB4D,QAAS,IAAI,CACbM,YAAAA,IAAW,CACX1C,UAAWA,UACX2C,aAAc,SAACC,eAAoB1C,gBAAgB0C,SACnDC,WAAY,SAACC,mBAAwB5C,gBAAgB4C,aACrDC,MAAM,QACNC,WAAW,MACPR,aAEJ,oBAACF,OAAIC,UAAWlE,IAAII,IAAI,CAAEwE,aAAYC,aACpC,oBAACrF,cAAasF,SAAS,OAAOC,KAAM,CAACpD,aAEvC,oBAAClC,YAAWkC,UAAWA,UAAW+C,MAAOP,YAAYO,KAAK,IAE1D,IAAI,CACR,oBAACxF,QAAOgF,UAAWlE,IAAIK,OAAO,EAC5B,oBAACb,cACCsF,SAAS,gBACTnD,UAAWA,UACXqD,YAAa,kBAAMnD,gBAAgB,CAACF,cAEtC,oBAAC1C,MACCiF,UAAWlE,IAAIC,IAAI,CACnBgF,QAAAA,IAAO,CACPC,WAAY7B,YACZnC,UAAWA,UACXmB,KAAK,gBACL8C,OAAQjC,cACRQ,MAAOJ,SACP8B,SAAAA,IAAQ,GAEV,oBAAClG,OAAOmG,OAAO,EAACnB,UAAWlE,IAAIM,OAAO,EACpC,oBAAC2D,OAAIC,UAAWlE,IAAIO,IAAI,EAAGU,UAAYM,QACvC,oBAAC/B,cAAasF,SAAS,oBAKjC,CAEA,gBAAe9D,eAAgB"}
|
|
1
|
+
{"version":3,"sources":["../../../src/packages/back-stage/layout.tsx"],"sourcesContent":["import React, { type ReactNode, useCallback, useEffect, useMemo, useState, type FC } from 'react';\nimport { ReloadOutlined, DeleteRowOutlined, CloseOutlined } from '@ant-design/icons';\nimport { css, injectGlobal } from '@emotion/css';\nimport { Tabs, Layout, Dropdown } from 'antd';\nimport { useAliveController } from 'react-activation';\nimport { useSearchParams, useOutlet, useNavigate } from 'react-router-dom';\nimport FallbackComp from '../../components/fallback-comp';\nimport LayoutMenu from '../../components/layout-menu';\nimport { localizable } from '../../localizable';\nimport { menu, type CloseTab, type TabItem } from '../../menu';\nimport type { MenuItemType } from 'antd/es/menu/hooks/useItems';\n\ndeclare const favicon: string;\n\nconst { prefixCls } = providerConfig;\nconst c = (s: string) => `${prefixCls}-dashboard-${s}`;\nconst cls = {\n tabs: c('tabs'),\n layout: c('layout'),\n sider: c('sider'),\n logo: c('logo'),\n section: c('section'),\n content: c('content'),\n view: c('view'),\n};\nconst layoutCss = css`\n .${cls.tabs} {\n position: sticky;\n top: 64px;\n z-index: 999;\n overflow: initial !important;\n margin: 16px 16px 0 !important;\n\n > .${prefixCls}-tabs-nav {\n .${prefixCls}-tabs-tab {\n border-color: var(--border-color, rgb(5 5 5 / 6%)) !important;\n border-radius: var(--border-radius) !important;\n backdrop-filter: blur(16px);\n }\n\n &::before {\n content: none;\n }\n }\n }\n .${cls.layout} {\n width: 100% !important;\n min-height: 100vh !important;\n }\n .${cls.sider}, .${cls.section} {\n overflow-y: auto;\n max-height: 100vh;\n }\n .${cls.section} {\n overflow-y: auto;\n }\n .${cls.sider} {\n overflow-y: auto;\n }\n .${cls.content} {\n display: flex;\n margin: 0 16px;\n flex-direction: column;\n }\n .${cls.view} {\n border-radius: var(--border-radius);\n padding: 24px;\n background: var(--component-card-bg, #fff);\n box-shadow: var(--box-shadow-lite);\n flex: 1;\n transition-property: background-color, box-shadow;\n }\n .${cls.view}, .${cls.logo}, .${cls.logo} > svg {\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n }\n .${cls.logo} {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex;\n gap: 10px;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n padding: 14px;\n height: 68px;\n text-align: center;\n color: #de4553;\n transition-property: background-color, border-color;\n cursor: pointer;\n user-select: none;\n\n > svg,\n &::before {\n transition-property: opacity;\n }\n\n > svg {\n height: 32px;\n opacity: 0;\n }\n\n &::before {\n display: block;\n width: 22px;\n height: 32px;\n background: url(${require(favicon)}) no-repeat center center / contain;\n opacity: 1;\n content: '';\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n }\n }\n`;\n\ninjectGlobal([layoutCss]);\n\nconst closeTabs: ({ key: CloseTab | 'refresh' } & Omit<MenuItemType, 'key'>)[] = [\n {\n label: '关闭左侧标签',\n icon: <DeleteRowOutlined style={{ transform: 'scaleX(-1)' }} />,\n key: 'left',\n },\n {\n label: '关闭右侧标签',\n icon: <DeleteRowOutlined />,\n key: 'right',\n },\n {\n label: '关闭其他标签',\n icon: <CloseOutlined />,\n key: 'other',\n },\n {\n label: '刷新标签页',\n icon: <ReloadOutlined />,\n key: 'refresh',\n },\n];\nconst DashboardLayout: FC<{ children?: ReactNode }> = ({ children }) => {\n const { activeKey, tabs, openTab, closeTab, kv } = menu;\n const { t } = localizable;\n const outlet = useOutlet();\n const navigate = useNavigate();\n const { dropScope } = useAliveController();\n const [search] = useSearchParams();\n const [collapsed, setCollapsed] = useState<boolean>(false);\n const handleCollapsed = useCallback((value: boolean) => {\n if (value) {\n let _timer: number | null = window.setTimeout(() => {\n setCollapsed(value);\n window.clearTimeout(_timer as number);\n _timer = null;\n }, 0);\n } else {\n setCollapsed(value);\n let _timer: number | null = window.setTimeout(() => {\n window.clearTimeout(_timer as number);\n _timer = null;\n }, 30);\n }\n }, []);\n const closedTab = useCallback(\n (tabKey?: string, type?: CloseTab | 'refresh') => {\n if (type === 'refresh') {\n navigate('/refresh');\n return;\n }\n if (tabKey) {\n closeTab(tabKey, type, function (closes?: TabItem[], next?: TabItem) {\n closes?.forEach((item) => {\n if (item.path && dropScope) {\n dropScope(item.path);\n }\n });\n if (next) {\n navigate(`${next.path}?menuId=${next.key}`);\n }\n });\n }\n },\n [closeTab, dropScope, navigate]\n );\n\n const { menuId, dynamicLabel } = useMemo(\n () => ({\n menuId: search.get('menuId'),\n dynamicLabel: search.get('dynamicTitle') || '',\n }),\n [search]\n );\n\n useEffect(() => {\n if (menuId) {\n openTab({\n key: menuId,\n dynamicTitle: dynamicLabel,\n });\n }\n }, [dynamicLabel, menuId, openTab]);\n\n const getItems = useCallback(\n (key: string) =>\n key === activeKey ? closeTabs : closeTabs.filter((i) => i?.key !== 'refresh'),\n [activeKey]\n );\n const handleTabEdit = useCallback(\n (\n targetKey: string | React.MouseEvent<Element, MouseEvent> | React.KeyboardEvent<Element>,\n action: 'add' | 'remove'\n ) => {\n if (action === 'remove' && typeof targetKey === 'string') {\n closedTab(targetKey);\n }\n },\n [closedTab]\n );\n const handleClick = useCallback(\n (key: string) => {\n navigate(`${kv[key].key}?menuId=${kv[key].key}`);\n },\n [kv, navigate]\n );\n const tabPanel = useMemo(() => {\n return tabs.map(({ key, icon, label, dynamicTitle, closable }: TabItem) => {\n return {\n key,\n label: (\n <Dropdown\n menu={{\n items: getItems(key),\n onClick: (info) => {\n info.domEvent.stopPropagation();\n closedTab(key, info.key as CloseTab);\n },\n }}\n trigger={['contextMenu']}\n destroyPopupOnHide\n >\n <div>\n {icon}\n {t[(label as string) || `route-${key}`] + (dynamicTitle || '')}\n </div>\n </Dropdown>\n ),\n closable,\n };\n });\n }, [closedTab, getItems, t, tabs]);\n\n return (\n <Layout className={cls.layout}>\n {layoutSider ? (\n <Layout.Sider\n className={cls.sider}\n trigger={null}\n collapsible\n collapsed={collapsed}\n onBreakpoint={(broken: boolean) => handleCollapsed(broken)}\n onCollapse={(_collapsed: boolean) => handleCollapsed(_collapsed)}\n theme=\"light\"\n breakpoint=\"md\"\n {...layoutSider}\n >\n <div className={cls.logo} data-title={projectName}>\n <FallbackComp compName=\"logo\" show={!collapsed} />\n </div>\n <LayoutMenu collapsed={collapsed} theme={layoutSider.theme} />\n </Layout.Sider>\n ) : null}\n <Layout className={cls.section}>\n <FallbackComp\n compName=\"layout-header\"\n collapsed={collapsed}\n onCollapsed={() => handleCollapsed(!collapsed)}\n />\n <Tabs\n className={cls.tabs}\n hideAdd\n onTabClick={handleClick}\n activeKey={activeKey}\n type=\"editable-card\"\n onEdit={handleTabEdit}\n items={tabPanel}\n animated\n />\n <Layout.Content className={cls.content}>\n <div className={cls.view}>{children || outlet}</div>\n <FallbackComp compName=\"layout-footer\" />\n </Layout.Content>\n </Layout>\n </Layout>\n );\n};\n\nexport default DashboardLayout;\n"],"names":["React","useCallback","useEffect","useMemo","useState","ReloadOutlined","DeleteRowOutlined","CloseOutlined","css","injectGlobal","Tabs","Layout","Dropdown","useAliveController","useSearchParams","useOutlet","useNavigate","FallbackComp","LayoutMenu","localizable","menu","prefixCls","providerConfig","c","s","cls","tabs","layout","sider","logo","section","content","view","layoutCss","require","favicon","closeTabs","label","icon","style","transform","key","DashboardLayout","children","activeKey","openTab","closeTab","kv","t","outlet","navigate","dropScope","search","collapsed","setCollapsed","handleCollapsed","value","_timer","window","setTimeout","clearTimeout","closedTab","tabKey","type","closes","next","forEach","item","path","menuId","get","dynamicLabel","dynamicTitle","getItems","filter","i","handleTabEdit","targetKey","action","handleClick","tabPanel","map","closable","items","onClick","info","domEvent","stopPropagation","trigger","destroyPopupOnHide","div","className","layoutSider","Sider","collapsible","onBreakpoint","broken","onCollapse","_collapsed","theme","breakpoint","data-title","projectName","compName","show","onCollapsed","hideAdd","onTabClick","onEdit","animated","Content"],"mappings":"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"}
|
|
@@ -4,20 +4,20 @@ type Data = Record<string, unknown>;
|
|
|
4
4
|
type Setter<T> = <K extends keyof T>(key: K, updater: Updater<T[K]>) => void;
|
|
5
5
|
type Store<T> = T & Setter<T>;
|
|
6
6
|
declare let run: (fn: VoidFn) => void;
|
|
7
|
-
/**
|
|
7
|
+
/** 创建共享存储对象 Shared Store Object
|
|
8
8
|
* @example
|
|
9
9
|
* // 创建状态
|
|
10
|
-
* const store =
|
|
10
|
+
* const store = sso({ count: 0 });
|
|
11
11
|
* // 使用
|
|
12
12
|
* console.log(store.count); // 0
|
|
13
13
|
* // 修改
|
|
14
14
|
* store.count++;
|
|
15
15
|
* console.log(store.count); // 1
|
|
16
16
|
*/
|
|
17
|
-
declare const
|
|
17
|
+
declare const sso: {
|
|
18
18
|
<T extends Data>(data: T): Store<T>;
|
|
19
19
|
config({ batch }: {
|
|
20
20
|
batch: typeof run;
|
|
21
21
|
}): void;
|
|
22
22
|
};
|
|
23
|
-
export default
|
|
23
|
+
export default sso;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function _arrayLikeToArray(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 _arrayWithHoles(arr){if(Array.isArray(arr))return arr}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _instanceof(left,right){if(right!=null&&typeof Symbol!=="undefined"&&right[Symbol.hasInstance]){return!!right[Symbol.hasInstance](left)}else{return left instanceof right}}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _iterableToArrayLimit(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 _nonIterableRest(){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 _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(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 _arrayLikeToArray(o,minLen)}import{useSyncExternalStore}from"use-sync-external-store/shim";var __DEV__=process.env.NODE_ENV!=="production";var __DEV_ERR__=function(msg){if(__DEV__){throw new Error(msg)}};var isInMethod=false;var run=function(fn){fn()};var
|
|
1
|
+
function _arrayLikeToArray(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 _arrayWithHoles(arr){if(Array.isArray(arr))return arr}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _instanceof(left,right){if(right!=null&&typeof Symbol!=="undefined"&&right[Symbol.hasInstance]){return!!right[Symbol.hasInstance](left)}else{return left instanceof right}}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _iterableToArrayLimit(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 _nonIterableRest(){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 _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(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 _arrayLikeToArray(o,minLen)}import{useSyncExternalStore}from"use-sync-external-store/shim";var __DEV__=process.env.NODE_ENV!=="production";var __DEV_ERR__=function(msg){if(__DEV__){throw new Error(msg)}};var isInMethod=false;var run=function(fn){fn()};var sso=function(data){if(__DEV__&&Object.prototype.toString.call(data)!=="[object Object]"){throw new Error("object required")}var state={};var methods={};Object.keys(data).forEach(function(key){var initVal=data[key];if(_instanceof(initVal,Function)){methods[key]=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}isInMethod=true;var res=initVal.apply(void 0,_toConsumableArray(args));isInMethod=false;return res};return}var listeners=new Set;state[key]={subscribe:function(listener){listeners.add(listener);return function(){return listeners.delete(listener)}},getSnapshot:function(){return data[key]},setSnapshot:function(val){if(val!==data[key]){data[key]=val;run(function(){return listeners.forEach(function(listener){return listener()})})}},useSnapshot:function(){return useSyncExternalStore(state[key].subscribe,state[key].getSnapshot,state[key].getSnapshot)}}});var setState=function(key,val){if(key in data){if(key in state){var newVal=_instanceof(val,Function)?val(data[key]):val;state[key].setSnapshot(newVal)}else{__DEV_ERR__("`".concat(key,"` is a method, can not update"))}}else{__DEV_ERR__("`".concat(key,"` is not initialized in store"))}};return new Proxy(function(){return undefined},{get:function(_,key){if(key in methods){return methods[key]}if(isInMethod){return data[key]}try{return state[key].useSnapshot()}catch(err){return data[key]}},set:function(_,key,val){setState(key,val);return true},apply:function(_,__,param){var _param=_slicedToArray(param,2),key=_param[0],updater=_param[1];if(typeof updater==="function"){setState(key,updater)}else{__DEV_ERR__("updater for `".concat(key,"` should be a function"))}}})};sso.config=function(param){var batch=param.batch;run=batch};export default sso;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/sso/index.ts"],"sourcesContent":["import { useSyncExternalStore } from 'use-sync-external-store/shim';\n\ntype VoidFn = () => void;\n// eslint-disable-next-line no-unused-vars\ntype AnyFn = (...args: unknown[]) => unknown;\n// eslint-disable-next-line no-unused-vars\ntype Updater<V> = (val: V) => V;\n\ntype Data = Record<string, unknown>;\ntype State<T> = {\n [K in keyof T]: {\n // eslint-disable-next-line no-unused-vars\n subscribe: (listener: VoidFn) => VoidFn;\n getSnapshot: () => T[K];\n useSnapshot: () => T[K];\n // eslint-disable-next-line no-unused-vars\n setSnapshot: (val: T[K]) => void;\n };\n};\ntype Methods<T> = Record<keyof T, AnyFn>;\n// eslint-disable-next-line no-unused-vars\ntype Setter<T> = <K extends keyof T>(key: K, updater: Updater<T[K]>) => void;\ntype Store<T> = T & Setter<T>;\n\nconst __DEV__ = process.env.NODE_ENV !== 'production';\nconst __DEV_ERR__ = (msg: string) => {\n if (__DEV__) {\n throw new Error(msg);\n }\n};\n\nlet isInMethod = false;\nlet run = (fn: VoidFn) => {\n fn();\n};\n\n// eslint-disable-next-line valid-jsdoc\n/** 创建共享存储对象 Shared Store Object\n * @example\n * // 创建状态\n * const store = sso({ count: 0 });\n * // 使用\n * console.log(store.count); // 0\n * // 修改\n * store.count++;\n * console.log(store.count); // 1\n */\nconst sso = <T extends Data>(data: T): Store<T> => {\n if (__DEV__ && Object.prototype.toString.call(data) !== '[object Object]') {\n throw new Error('object required');\n }\n\n const state: State<T> = {} as State<T>;\n const methods: Methods<T> = {} as Methods<T>;\n\n Object.keys(data).forEach((key: keyof T) => {\n const initVal = data[key];\n\n if (initVal instanceof Function) {\n methods[key] = (...args: unknown[]) => {\n isInMethod = true;\n const res = initVal(...args);\n\n isInMethod = false;\n return res;\n };\n return;\n }\n\n const listeners = new Set<VoidFn>();\n\n state[key] = {\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n getSnapshot: () => data[key],\n setSnapshot: (val) => {\n if (val !== data[key]) {\n data[key] = val;\n run(() => listeners.forEach((listener) => listener()));\n }\n },\n useSnapshot: () => {\n return useSyncExternalStore(\n state[key].subscribe,\n state[key].getSnapshot,\n state[key].getSnapshot\n );\n },\n };\n });\n\n const setState = (key: keyof T, val: T[keyof T] | Updater<T[keyof T]>) => {\n if (key in data) {\n if (key in state) {\n const newVal = val instanceof Function ? val(data[key]) : val;\n\n state[key].setSnapshot(newVal);\n } else {\n __DEV_ERR__(`\\`${key as string}\\` is a method, can not update`);\n }\n } else {\n __DEV_ERR__(`\\`${key as string}\\` is not initialized in store`);\n }\n };\n\n return new Proxy(\n // eslint-disable-next-line no-undefined\n (() => undefined) as unknown as Store<T>,\n {\n get: (_, key: keyof T) => {\n if (key in methods) {\n return methods[key];\n }\n\n if (isInMethod) {\n return data[key];\n }\n\n try {\n return state[key].useSnapshot();\n } catch (err) {\n return data[key];\n }\n },\n set: (_, key: keyof T, val: T[keyof T]) => {\n setState(key, val);\n return true;\n },\n apply: (_, __, [key, updater]: [keyof T, Updater<T[keyof T]>]) => {\n if (typeof updater === 'function') {\n setState(key, updater);\n } else {\n __DEV_ERR__(`updater for \\`${key as string}\\` should be a function`);\n }\n },\n } as ProxyHandler<Store<T>>\n );\n};\n\nsso.config = ({ batch }: { batch: typeof run }) => {\n run = batch;\n};\n\nexport default sso;\n"],"names":["useSyncExternalStore","__DEV__","process","env","NODE_ENV","__DEV_ERR__","msg","Error","isInMethod","run","fn","sso","data","Object","prototype","toString","call","state","methods","keys","forEach","key","initVal","Function","args","res","listeners","Set","subscribe","listener","add","delete","getSnapshot","setSnapshot","val","useSnapshot","setState","newVal","Proxy","undefined","get","_","err","set","apply","__","updater","config","batch"],"mappings":"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"}
|
package/package.json
CHANGED
package/lib/localizable/index.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var _models_keys,_models_keys_call;import createSlice from"../store";var models={keys:function(){return[]}};try{models=hasLocales?require.context("@/locales/",true,/\.(t|j)s$/):{keys:function(){return[]}}}catch(error){console.warn(error)}var resources={};var locales=[];(_models_keys=models.keys)===null||_models_keys===void 0?void 0:(_models_keys_call=_models_keys.call(models))===null||_models_keys_call===void 0?void 0:_models_keys_call.map(function(path,i){var item=models(path).default;if(item&&Object.prototype.toString.call(item)==="[object Object]"){var _item_language=item.language,language=_item_language===void 0?path.replace(/(.*\/)*([^.]+).*/gi,"$2"):_item_language,_item_title=item.title,title=_item_title===void 0?language:_item_title,icon=item.icon,_item_translation=item.translation,translation=_item_translation===void 0?{}:_item_translation;if(i===0){locales.splice(0)}locales.push({language:language,title:title,icon:icon});resources[language]={language:language,title:title,icon:icon,translation:new Proxy(translation,{get:function get(target,key){return target[key]||key}})}}item=null});var defaultLocale=Object.assign({title:"简体中文",language:"zh_CN",translation:{}},resources.zh_CN);export var localizable=createSlice({language:"zh_CN",t:defaultLocale.translation,locales:locales,set:function set(lang){var _resources_lang;localizable.language=lang;localizable.t=((_resources_lang=resources[lang])===null||_resources_lang===void 0?void 0:_resources_lang.translation)||defaultLocale.translation}});
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/localizable/index.ts"],"sourcesContent":["import type { ReactNode } from 'react';\nimport createSlice from '../store';\n\nexport type LocaleName =\n | 'ar_EG'\n | 'az_AZ'\n | 'bg_BG'\n | 'bn_BD'\n | 'by_BY'\n | 'ca_ES'\n | 'cs_CZ'\n | 'da_DK'\n | 'de_DE'\n | 'el_GR'\n | 'en_GB'\n | 'en_US'\n | 'es_ES'\n | 'et_EE'\n | 'fa_IR'\n | 'fi_FI'\n | 'fr_BE'\n | 'fr_CA'\n | 'fr_FR'\n | 'ga_IE'\n | 'gl_ES'\n | 'he_IL'\n | 'hi_IN'\n | 'hr_HR'\n | 'hu_HU'\n | 'hy_AM'\n | 'id_ID'\n | 'is_IS'\n | 'it_IT'\n | 'ja_JP'\n | 'ka_GE'\n | 'kk_KZ'\n | 'kmr_IQ'\n | 'km_KH'\n | 'kn_IN'\n | 'ko_KR'\n | 'ku_IQ'\n | 'lt_LT'\n | 'lv_LV'\n | 'mk_MK'\n | 'ml_IN'\n | 'mn_MN'\n | 'ms_MY'\n | 'nb_NO'\n | 'ne_NP'\n | 'nl_BE'\n | 'nl_NL'\n | 'pl_PL'\n | 'pt_BR'\n | 'pt_PT'\n | 'ro_RO'\n | 'ru_RU'\n | 'sk_SK'\n | 'sl_SI'\n | 'sr_RS'\n | 'sv_SE'\n | 'ta_IN'\n | 'th_TH'\n | 'tr_TR'\n | 'uk_UA'\n | 'ur_PK'\n | 'vi_VN'\n | 'zh_CN'\n | 'zh_HK'\n | 'zh_TW';\n\nlet models = {\n keys: () => [],\n} as unknown as __WebpackModuleApi.RequireContext;\n\ndeclare const hasLocales: boolean;\n\ntry {\n models = hasLocales // eslint-disable-next-line\n ? require.context('@/locales/', true, /\\.(t|j)s$/) // eslint-disable-next-line\n : ({\n keys: () => [],\n } as unknown as __WebpackModuleApi.RequireContext);\n} catch (error) {\n // eslint-disable-next-line no-console\n console.warn(error);\n}\nexport type LocaleConfig = {\n /** 语言名称 (未设置时使用文件名)*/\n language?: LocaleName;\n /** 描述 */\n title: string;\n /** Icon */\n icon?: ReactNode | string;\n /** 翻译字典 */\n translation: Record<string, string>;\n};\ntype LocaleConfigMap = Record<LocaleName, Locale>;\nconst resources: Partial<LocaleConfigMap> = {};\nconst locales: Pick<Locale, 'language' | 'icon' | 'title'>[] = [];\n\nmodels.keys?.()?.map((path: string, i: number) => {\n let item: LocaleConfigMap[LocaleName] | null = models(path).default;\n\n if (item && Object.prototype.toString.call(item) === '[object Object]') {\n const {\n language = path.replace(/(.*\\/)*([^.]+).*/gi, '$2') as LocaleName,\n title = language,\n icon,\n translation = {},\n } = item;\n\n if (i === 0) {\n locales.splice(0);\n }\n locales.push({\n language,\n title,\n icon,\n });\n resources[language] = {\n language,\n title,\n icon,\n translation: new Proxy(translation, {\n get(target, key) {\n return target[key as string] || key;\n },\n }),\n };\n }\n item = null;\n});\n\ninterface Locale extends LocaleConfig {\n language: LocaleName;\n}\nconst defaultLocale: Locale = Object.assign(\n {\n title: '简体中文',\n language: 'zh_CN',\n translation: {},\n },\n resources.zh_CN\n);\n\nexport const localizable = createSlice({\n /** 使用的语言 */\n language: 'zh_CN' as LocaleName,\n /** 获取本地化文本 */\n t: defaultLocale.translation,\n /** 本地化支持列表 */\n locales: locales,\n /** 设置使用的语言\n * @param {LocaleName} lang 语言\n * @constructor\n */\n set(lang: LocaleName) {\n localizable.language = lang;\n localizable.t = resources[lang]?.translation || defaultLocale.translation;\n },\n});\n"],"names":["models","createSlice","keys","hasLocales","require","context","error","console","warn","resources","locales","map","path","i","item","default","Object","prototype","toString","call","language","replace","title","icon","translation","splice","push","Proxy","get","target","key","defaultLocale","assign","zh_CN","localizable","t","set","lang"],"mappings":"IAoGAA,aAAAA,iBAnGA,QAAOC,gBAAiB,UAAW,CAqEnC,IAAID,OAAS,CACXE,KAAM,iBAAM,EAAE,CAChB,EAIA,GAAI,CACFF,OAASG,WACLC,QAAQC,OAAO,CAAC,aAAc,IAAI,CAAE,aACnC,CACCH,KAAM,iBAAM,EAAE,CAChB,CAAkD,AACxD,CAAE,MAAOI,MAAO,CAEdC,QAAQC,IAAI,CAACF,MACf,CAYA,IAAMG,UAAsC,CAAC,EAC7C,IAAMC,QAAyD,EAAE,AAEjEV,EAAAA,aAAAA,OAAOE,IAAI,UAAXF,sBAAAA,KAAAA,EAAAA,CAAAA,kBAAAA,aAAAA,KAAAA,iBAAAA,2BAAAA,KAAAA,EAAAA,kBAAiBW,IAAI,SAACC,KAAcC,EAAc,CAChD,IAAIC,KAA2Cd,OAAOY,MAAMG,OAAO,CAEnE,GAAID,MAAQE,OAAOC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACL,QAAU,kBAAmB,CACtE,mBAKIA,KAJFM,SAAAA,iCAAWR,KAAKS,OAAO,CAAC,qBAAsB,iCAI5CP,KAHFQ,MAAAA,2BAAQF,qBACRG,KAEET,KAFFS,uBAEET,KADFU,YAAAA,uCAAc,CAAC,oBAGjB,GAAIX,IAAM,EAAG,CACXH,QAAQe,MAAM,CAAC,EACjB,CAAC,AACDf,QAAQgB,IAAI,CAAC,CACXN,SAAAA,SACAE,MAAAA,MACAC,KAAAA,IACF,EACAd,CAAAA,SAAS,CAACW,SAAS,CAAG,CACpBA,SAAAA,SACAE,MAAAA,MACAC,KAAAA,KACAC,YAAa,IAAIG,MAAMH,YAAa,CAClCI,IAAAA,SAAAA,IAAIC,MAAM,CAAEC,GAAG,CAAE,CACf,OAAOD,MAAM,CAACC,IAAc,EAAIA,GAClC,CACF,EACF,CACF,CAAC,AACDhB,KAAO,IAAI,AACb,GAKA,IAAMiB,cAAwBf,OAAOgB,MAAM,CACzC,CACEV,MAAO,OACPF,SAAU,QACVI,YAAa,CAAC,CAChB,EACAf,UAAUwB,KAAK,CAGjB,QAAO,IAAMC,YAAcjC,YAAY,CAErCmB,SAAU,QAEVe,EAAGJ,cAAcP,WAAW,CAE5Bd,QAASA,QAKT0B,IAAAA,SAAAA,IAAIC,IAAgB,CAAE,KAEJ5B,eADhByB,CAAAA,YAAYd,QAAQ,CAAGiB,IACvBH,CAAAA,YAAYC,CAAC,CAAG1B,CAAAA,CAAAA,gBAAAA,SAAS,CAAC4B,KAAK,UAAf5B,yBAAAA,KAAAA,EAAAA,gBAAiBe,WAAW,AAAD,GAAKO,cAAcP,WAAW,AAC3E,CACF,EAAG"}
|
package/lib/store/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/store/index.ts"],"sourcesContent":["import { useSyncExternalStore } from 'use-sync-external-store/shim';\n\ntype VoidFn = () => void;\n// eslint-disable-next-line no-unused-vars\ntype AnyFn = (...args: unknown[]) => unknown;\n// eslint-disable-next-line no-unused-vars\ntype Updater<V> = (val: V) => V;\n\ntype Data = Record<string, unknown>;\ntype State<T> = {\n [K in keyof T]: {\n // eslint-disable-next-line no-unused-vars\n subscribe: (listener: VoidFn) => VoidFn;\n getSnapshot: () => T[K];\n useSnapshot: () => T[K];\n // eslint-disable-next-line no-unused-vars\n setSnapshot: (val: T[K]) => void;\n };\n};\ntype Methods<T> = Record<keyof T, AnyFn>;\n// eslint-disable-next-line no-unused-vars\ntype Setter<T> = <K extends keyof T>(key: K, updater: Updater<T[K]>) => void;\ntype Store<T> = T & Setter<T>;\n\nconst __DEV__ = process.env.NODE_ENV !== 'production';\nconst __DEV_ERR__ = (msg: string) => {\n if (__DEV__) {\n throw new Error(msg);\n }\n};\n\nlet isInMethod = false;\nlet run = (fn: VoidFn) => {\n fn();\n};\n\n// eslint-disable-next-line valid-jsdoc\n/** 创建状态切片\n * @example\n * // 创建状态\n * const store = createSlice({ count: 0 });\n * // 使用\n * console.log(store.count); // 0\n * // 修改\n * store.count++;\n * console.log(store.count); // 1\n */\nconst createSlice = <T extends Data>(data: T): Store<T> => {\n if (__DEV__ && Object.prototype.toString.call(data) !== '[object Object]') {\n throw new Error('object required');\n }\n\n const state: State<T> = {} as State<T>;\n const methods: Methods<T> = {} as Methods<T>;\n\n Object.keys(data).forEach((key: keyof T) => {\n const initVal = data[key];\n\n if (initVal instanceof Function) {\n methods[key] = (...args: unknown[]) => {\n isInMethod = true;\n const res = initVal(...args);\n\n isInMethod = false;\n return res;\n };\n return;\n }\n\n const listeners = new Set<VoidFn>();\n\n state[key] = {\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n getSnapshot: () => data[key],\n setSnapshot: (val) => {\n if (val !== data[key]) {\n data[key] = val;\n run(() => listeners.forEach((listener) => listener()));\n }\n },\n useSnapshot: () => {\n return useSyncExternalStore(\n state[key].subscribe,\n state[key].getSnapshot,\n state[key].getSnapshot\n );\n },\n };\n });\n\n const setState = (key: keyof T, val: T[keyof T] | Updater<T[keyof T]>) => {\n if (key in data) {\n if (key in state) {\n const newVal = val instanceof Function ? val(data[key]) : val;\n\n state[key].setSnapshot(newVal);\n } else {\n __DEV_ERR__(`\\`${key as string}\\` is a method, can not update`);\n }\n } else {\n __DEV_ERR__(`\\`${key as string}\\` is not initialized in store`);\n }\n };\n\n return new Proxy(\n // eslint-disable-next-line no-undefined\n (() => undefined) as unknown as Store<T>,\n {\n get: (_, key: keyof T) => {\n if (key in methods) {\n return methods[key];\n }\n\n if (isInMethod) {\n return data[key];\n }\n\n try {\n return state[key].useSnapshot();\n } catch (err) {\n return data[key];\n }\n },\n set: (_, key: keyof T, val: T[keyof T]) => {\n setState(key, val);\n return true;\n },\n apply: (_, __, [key, updater]: [keyof T, Updater<T[keyof T]>]) => {\n if (typeof updater === 'function') {\n setState(key, updater);\n } else {\n __DEV_ERR__(`updater for \\`${key as string}\\` should be a function`);\n }\n },\n } as ProxyHandler<Store<T>>\n );\n};\n\ncreateSlice.config = ({ batch }: { batch: typeof run }) => {\n run = batch;\n};\n\nexport default createSlice;\n"],"names":["useSyncExternalStore","__DEV__","process","env","NODE_ENV","__DEV_ERR__","msg","Error","isInMethod","run","fn","createSlice","data","Object","prototype","toString","call","state","methods","keys","forEach","key","initVal","Function","args","res","listeners","Set","subscribe","listener","add","delete","getSnapshot","setSnapshot","val","useSnapshot","setState","newVal","Proxy","undefined","get","_","err","set","apply","__","updater","config","batch"],"mappings":"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"}
|
|
File without changes
|