UNPKG

@blocklet/ui-react

Version:

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

165 lines (164 loc) 4.99 kB
import { jsx as a } from "react/jsx-runtime"; import { useMemo as f } from "react"; import { useMemoizedFn as $ } from "ahooks"; import { withErrorBoundary as C } from "react-error-boundary"; import { ErrorFallback as H } from "@arcblock/ux/lib/ErrorBoundary"; import { styled as _, useTheme as w, deepmerge as A, ThemeProvider as L } from "@arcblock/ux/lib/Theme"; import { ResponsiveHeader as B } from "@arcblock/ux/lib/Header"; import M, { Products as R } from "@arcblock/ux/lib/NavMenu"; import { useLocaleContext as z } from "@arcblock/ux/lib/Locale/context"; import { translate as F } from "@arcblock/ux/lib/Locale/util"; import O from "@arcblock/ux/lib/hooks/use-blocklet-logo"; import P from "lodash/omit"; import I from "lodash/isFinite"; import U from "clsx"; import { getUTMUrl as W } from "@arcblock/ux/lib/withTracker/libs/utm"; import j from "../Icon/index.js"; import { mapRecursive as S, flatRecursive as G, matchPaths as K } from "../utils.js"; import { formatBlockletInfo as q, getLocalizedNavigation as D, publicPath as J } from "../blocklets.js"; import Q from "../common/header-addons.js"; import { useWalletHiddenTopbar as V } from "../common/wallet-hidden-topbar.js"; import X from "../libs/with-hide-when-embed.js"; const Y = { en: { products: "Products" }, zh: { products: "产品" }, "zh-TW": { products: "產品" }, ja: { products: "製品" } }, Z = (r) => { if (!r?.length) return { navItems: [], activeId: null }; let t = 1; const c = S(r, (e) => { const i = e.icon ? /* @__PURE__ */ a(j, { icon: e.icon }) : null; if (e.items) return { id: `${t++}`, label: e.title, icon: i, children: e.items }; let s = {}; return (e.link?.startsWith("http") || e.link?.startsWith("//")) && (s = { target: "_blank", rel: "noreferrer" }), { id: `${t++}`, label: /* @__PURE__ */ a("a", { href: W(e.link, "header"), ...s, children: e.title }), icon: i, description: e.description, link: e.link }; }, "items"), l = G(c), p = K(l.map((e) => e.link)); return { navItems: c, activeId: p >= 0 ? l[p].id : null }; }; function ee({ meta: r = {}, addons: t = void 0, sessionManagerProps: h = { showRole: !0 }, homeLink: c = J, theme: l = {}, hideNavMenu: p = !1, showDomainWarningDialog: e = !0, ...i }) { V(); const s = w(), { locale: g, defaultLocale: T } = z() || {}, x = $((o, n = {}) => F(Y, o, g, "en", n)), d = f(() => { const o = Object.assign({}, window.blocklet, r); try { return q(o); } catch (n) { return console.error("Failed to format blocklet info", n, o), o; } }, [r]), m = f(() => A(s, l), [s, l]), y = O({ meta: r, theme: l }), { productsOrder: b, productsType: k } = f(() => { let { USE_ARCBLOCK_THEME: o, USE_AIGNE_THEME: n } = d; return o = parseInt(o, 10), n = parseInt(n, 10), I(n) ? { productsOrder: n, productsType: "AIGNE" } : I(o) ? { productsOrder: o, productsType: "ARCBLOCK" } : { productsOrder: null, productsType: null }; }, [d]); if (!d.appName) return null; const E = D({ navigation: d?.navigation?.header, locale: g, defaultLocale: T }), v = Z(E), { navItems: u, activeId: N } = v; return k && Number.isInteger(b) && u.splice(b, 0, { label: x("products"), // eslint-disable-next-line react/no-unstable-nested-components children: () => /* @__PURE__ */ a(R, { type: k }) }), /* @__PURE__ */ a(L, { theme: m, children: /* @__PURE__ */ a( oe, { homeLink: c, logo: /* @__PURE__ */ a("img", { src: y, alt: "logo" }), addons: ( // @ts-ignore /* @__PURE__ */ a( Q, { formattedBlocklet: d, addons: typeof t == "function" ? (o) => t(o, { navigation: v }) : t, sessionManagerProps: h, showDomainWarningDialog: e } ) ), ...P(i, ["bordered"]), $bordered: i?.bordered, $bgcolor: m.palette.background.default, className: U("blocklet__header", i.className), children: p || !u?.length ? null : ({ isMobile: o }) => ( // @ts-ignore /* @__PURE__ */ a( M, { mode: o ? "inline" : "horizontal", activeId: N, items: u, className: "header-nav", bgColor: "transparent", textColor: m.palette.grey[500], activeTextColor: m.palette.text.primary } ) ) } ) }); } const oe = _(B)` ${({ $bgcolor: r }) => `background-color: ${r || "#fff"};`} .header-logo { min-width: 44px; } ${({ $bordered: r, theme: t }) => r ? `border-bottom: 1px solid ${t.palette.divider};` : ""} ${(r) => r.theme.breakpoints.down("md")} { .header-logo { min-width: 32px; } } `, Ne = C(X(ee), { FallbackComponent: H }); export { Ne as default };