UNPKG

@blocklet/ui-react

Version:

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

72 lines (71 loc) 2.94 kB
import { jsx as s, Fragment as v } from "react/jsx-runtime"; import "iconify-icon"; import { use as b, createElement as k } from "react"; import r from "prop-types"; import { SessionContext as w } from "@arcblock/did-connect/lib/Session"; import L from "@arcblock/ux/lib/SessionUser"; import N from "@arcblock/ux/lib/SessionBlocklet"; import T from "@arcblock/ux/lib/Locale/selector"; import { useLocaleContext as C } from "@arcblock/ux/lib/Locale/context"; import R from "@arcblock/ux/lib/Config/theme-mode-toggle"; import { SessionManagerProps as S } from "../types.js"; import { getLocalizedNavigation as M, filterNavByRole as B } from "../blocklets.js"; import D from "./notification-addon.js"; import P from "./domain-warning.js"; const j = () => !!(window?.blocklet?.navigation ?? []).find((o) => o.id === "/userCenter/notification"); function x({ formattedBlocklet: l, addons: o = null, showDomainWarningDialog: m = !0, sessionManagerProps: u = { showRole: !0 } }) { const n = b(w), { locale: i, languages: p } = C() || {}, { enableConnect: g = !0, enableLocale: d = !0 } = l, h = !!n?.session?.user; let a = M(l?.navigation?.sessionManager, i) || []; a = B(a, n?.session?.user?.role); const c = (() => { if (o && typeof o != "function") return Array.isArray(o) ? o : [o]; let e = []; if (j() && e.push(/* @__PURE__ */ s(D, { session: n.session }, "notification-addon")), d && i && p.length > 1 && e.push(/* @__PURE__ */ s(T, { showText: !1 }, "locale-selector")), e.push(/* @__PURE__ */ s(R, {}, "theme-mode-toggle")), g && n) { const f = []; h && (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(N, { session: n.session, locale: i }, "session-blocklet")), e.push( /* @__PURE__ */ s( L, { session: n.session, locale: i, menu: f, showRole: !0, ...u }, "session-user" ) ); } return typeof o == "function" && (e = o(e) || []), e; })(), y = Array.isArray(c) ? c : [c], A = [ m ? /* @__PURE__ */ s(P, { session: n?.session, locale: i }) : null, ...y ].filter(Boolean); return k(v, null, ...A); } x.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: S, showDomainWarningDialog: r.bool }; export { x as default };