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