UNPKG

@blocklet/ui-react

Version:

Some useful front-end web components that can be used in Blocklets.

76 lines (75 loc) 3.02 kB
import { jsx as s, Fragment as b } from "react/jsx-runtime"; import "iconify-icon"; import r from "prop-types"; import { use as L, createElement as k } from "react"; import { SessionContext as w } from "@arcblock/did-connect-react/lib/Session"; import N from "@arcblock/ux/lib/Config/theme-mode-toggle"; import { useLocaleContext as T } from "@arcblock/ux/lib/Locale/context"; import C from "@arcblock/ux/lib/Locale/selector"; import R from "@arcblock/ux/lib/SessionBlocklet"; import S from "@arcblock/ux/lib/SessionUser"; import { getLocalizedNavigation as M, filterNavByRole as B } from "../blocklets.js"; import { SessionManagerProps as D } from "../types.js"; import P from "./domain-warning.js"; import j from "./notification-addon.js"; const x = () => !!(window?.blocklet?.navigation ?? []).find((o) => o.id === "/userCenter/notification"); function z({ formattedBlocklet: l, addons: o = null, showDomainWarningDialog: m = !0, sessionManagerProps: u = { showRole: !0 } }) { const n = L(w), { locale: i, languages: p, defaultLocale: g } = T() || {}, { enableConnect: d = !0, enableLocale: h = !0 } = l, y = !!n?.session?.user; let a = M({ navigation: l?.navigation?.sessionManager, locale: i, defaultLocale: g }) || []; a = B(a, n?.session?.user?.role); const c = (() => { if (o && typeof o != "function") return Array.isArray(o) ? o : [o]; let e = []; if (x() && e.push(/* @__PURE__ */ s(j, { session: n.session }, "notification-addon")), h && i && p.length > 1 && e.push(/* @__PURE__ */ s(C, { showText: !1 }, "locale-selector")), e.push(/* @__PURE__ */ s(N, {}, "theme-mode-toggle")), d && n) { const f = []; y && (a ? a.slice(0, 5) : []).forEach((t) => { f.push({ label: t.title, icon: t.icon ? /* @__PURE__ */ s("iconify-icon", { icon: t.icon, height: 24, style: { marginRight: 8 } }) : null, component: "a", href: t.link, key: t.link }); }), e.push(/* @__PURE__ */ s(R, { session: n.session, locale: i }, "session-blocklet")), e.push( /* @__PURE__ */ s( S, { session: n.session, locale: i, menu: f, showRole: !0, ...u }, "session-user" ) ); } return typeof o == "function" && (e = o(e) || []), e; })(), v = Array.isArray(c) ? c : [c], A = [ m ? /* @__PURE__ */ s(P, { session: n?.session, locale: i }) : null, ...v ].filter(Boolean); return k(b, null, ...A); } z.propTypes = { formattedBlocklet: r.object.isRequired, // 需要考虑 定制的 addons 与内置的 连接钱包/选择语言 addons 共存的情况 // - PropTypes.func: 可以把自定义 addons 插在 session-manager 或 locale-selector (如果存在的话) 前/中/后 // - PropTypes.node: 将 addons 原样传给 UX Header 组件 addons: r.oneOfType([r.func, r.node]), sessionManagerProps: D, showDomainWarningDialog: r.bool }; export { z as default };