@blocklet/ui-react
Version:
Some useful front-end web components that can be used in Blocklets.
72 lines (71 loc) • 2.94 kB
JavaScript
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
};