mirror of
http://112.124.100.131/huang.ze/ebiz-dify-ai.git
synced 2025-12-22 17:26:54 +08:00
- 新增 useChannel hook 用于基于 iframe 通信管理布局显示 - 实现 MessageChannel 工具类,用于父页面与 iframe 之间的安全跨域通信 - 更新 header-wrapper 组件,根据通道通信状态条件性渲染 - 在多个组件中集成消息通道功能 - 添加通过 postMessage API 控制布局的支持 - 改进 iframe 与父应用程序的集成
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
'use client'
|
|
import { usePathname, useSearchParams } from 'next/navigation'
|
|
import s from './index.module.css'
|
|
import classNames from '@/utils/classnames'
|
|
import { useGetLayoutByChannel } from '@/hooks/use-channel'
|
|
|
|
type HeaderWrapperProps = {
|
|
children: React.ReactNode
|
|
}
|
|
|
|
const HeaderWrapper = ({
|
|
children,
|
|
}: HeaderWrapperProps) => {
|
|
const pathname = usePathname()
|
|
const searchParams = useSearchParams()
|
|
const isBordered = ['/apps', '/datasets', '/datasets/create', '/tools'].includes(pathname)
|
|
|
|
// 当不携带 header 参数时,或者 header 参数为 1 时,显示 header
|
|
const headerParam = searchParams.get('header')
|
|
const showHeader = !headerParam || headerParam === '1'
|
|
|
|
// 通过 channel 获取 layout 数据内容
|
|
const showLayout = useGetLayoutByChannel()
|
|
|
|
if (!showHeader) return null
|
|
return (
|
|
<div className={classNames(
|
|
`sticky top-0 left-0 right-0 z-30 ${showLayout ? 'flex' : 'hidden'} flex-col grow-0 shrink-0 basis-auto min-h-[56px]`,
|
|
s.header,
|
|
isBordered ? 'border-b border-divider-regular' : '',
|
|
)}
|
|
>
|
|
{children}
|
|
</div>
|
|
)
|
|
}
|
|
export default HeaderWrapper
|