工具栏、刷新与本地化
维护期(已弃用)
@ahoo-wang/fetcher-viewer 已进入维护期(弃用),仅维护现有功能,不再新增功能。数据视图能力的后续演进由 @ahoo-wang/fetcher-view-engine 承担,新项目请使用 View Engine。本页保留供存量项目维护参考;两者模型与 API 不同,迁移需要适配。
TopBar 组合视图操作、过滤/面板开关、行密度、刷新、监控、分享、全屏。props 包含 activeView/views/viewerDefinitionId、选中记录、mutation 回调。按钮调用应用回调,保存不是隐式 localStorage 操作。
| API | 行为 / 默认值 |
|---|---|
| RefreshDataBarItem | 向定义作用域刷新总线发布,没有额外公开 onClick prop。 |
| AutoRefreshBarItem | 要求 viewId/viewerDefinitionId,默认 1/3/5 分钟及从不(0),选择按 view 保存到 view:refresh,无选择默认从不。 |
| FilterBarItem | defaultShowFilter 初始化并同步本地 active,onChange 收到切换后的 boolean。 |
| ColumnHeightBarItem | defaultTableSize/onChange 控制密度选择。 |
| DataMonitorBarItem | 委托 React useDataMonitor,count 轮询与 refresh 发布互相独立。 |
| FullscreenBarItem | 读取 React 全屏 context,provider 外不渲染。 |
| ShareLinkBarItem | 复制 window.location.href,剪贴板失败显示错误,不序列化当前过滤状态。 |
| BarItem / Point | 展示图标 active 标记/分隔点,无独立数据逻辑。 |
useRefreshDataEventBus(subscriberId?) 未传作用域时使用 React useId;返回 bus、publish(overrideId?): Promise<void>、subscribe(handler,overrideId?): boolean。处理器名加目标 subscriber ID 前缀,并按 ID 过滤投递。卸载/作用域变化只移除当前 Hook 注册的处理器,共享总线继续存在。用 definition ID 可协调 Viewer/刷新控件;相同最终处理器名称可能注册失败,不自动补唯一后缀。AutoRefresh 在变化/卸载时清除定时器,定时回调可能重叠,不串行化网络请求。
useLocale() 返回局部 React locale 状态和 setLocale,默认中文。setLocale 只将已定义顶层键浅合并到默认值,部分嵌套对象会整体替换对应节。它不是全局 LocaleProvider,修改一个 Hook 不会同步全部组件。Locale 只声明当前支持的文案,许多控件仍包含中文硬编码/回退,不能宣称通过此 Hook 实现全站英文切换。OPERATOR_zh_CN 是单独的过滤操作符标签映射。Locale 和生成线上字段不改变服务端语言或查询行为。
完整示例
import { useEffect } from 'react';
import { useRefreshDataEventBus } from '@ahoo-wang/fetcher-viewer';
export function Refresh({ reload }: { reload: () => Promise<void> }) {
const { subscribe, publish } = useRefreshDataEventBus('users');
useEffect(() => {
subscribe({ name: 'reload-users', handle: reload });
}, [subscribe, reload]);
return (
<button
onClick={() => {
void publish().catch(console.error);
}}
>
Refresh users
</button>
);
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
公开签名与类型
以下签名按当前根入口可达声明核对。? 表示可省略;泛型/接口只约束编译期,继承项与关联类型可从 符号索引 定位。运行时默认值和失败行为以本页上文为准。
useRefreshDataEventBus
export function useRefreshDataEventBus(
subscriberId?: string,
): RefreshDataEventBusReturn;2
3
packages/viewer/src/hooks/useRefreshDataEventBus.ts:29
RefreshDataEvent
export interface RefreshDataEvent {
type: 'REFRESH';
subscriberId: string;
}2
3
4
packages/viewer/src/hooks/useRefreshDataEventBus.ts:10
RefreshDataEventBusReturn
export interface RefreshDataEventBusReturn {
bus: BroadcastTypedEventBus<RefreshDataEvent>;
publish: (subscriberId?: string) => Promise<void>;
subscribe: (
handler: EventHandler<RefreshDataEvent>,
subscriberId?: string,
) => boolean;
}2
3
4
5
6
7
8
packages/viewer/src/hooks/useRefreshDataEventBus.ts:15
AutoRefreshBarItem
export function AutoRefreshBarItem(
options: AutoRefreshBarItemProps,
): import('react').JSX.Element;2
3
实现默认值: items = DefaultAutoRefreshItems.
packages/viewer/src/topbar/AutoRefreshBarItem.tsx:52
AutoRefreshItem
export interface AutoRefreshItem {
label: string;
key: string;
refreshInterval: number;
}2
3
4
5
packages/viewer/src/topbar/AutoRefreshBarItem.tsx:9
AutoRefreshBarItemProps
export interface AutoRefreshBarItemProps {
items?: AutoRefreshItem[];
viewId: string;
viewerDefinitionId: string;
}2
3
4
5
packages/viewer/src/topbar/AutoRefreshBarItem.tsx:15
BarItem
export function BarItem(props: BarItemProps): React.JSX.Element;packages/viewer/src/topbar/BarItem.tsx:9
BarItemProps
export interface BarItemProps {
icon: React.ReactNode;
active: boolean;
}2
3
4
packages/viewer/src/topbar/BarItem.tsx:4
ColumnHeightBarItem
export function ColumnHeightBarItem(
props: ColumnHeightBarItemProps,
): import('react').JSX.Element;2
3
packages/viewer/src/topbar/ColumnHeightBarItem.tsx:15
ColumnHeightBarItemProps
export interface ColumnHeightBarItemProps extends TopBarItemProps {
defaultTableSize: SizeType;
onChange?: (size: SizeType) => void;
}2
3
4
packages/viewer/src/topbar/ColumnHeightBarItem.tsx:10
DataMonitorBarItem
export function DataMonitorBarItem(
props: DataMonitorBarItemProps,
): import('react').JSX.Element;2
3
packages/viewer/src/topbar/DataMonitorBarItem.tsx:20
DataMonitorBarItemProps
export interface DataMonitorBarItemProps extends TopBarItemProps {
viewId: string;
countUrl: string;
viewName: string;
condition: Condition;
notification: DataMonitorNotificationConfig;
interval?: number;
}2
3
4
5
6
7
8
packages/viewer/src/topbar/DataMonitorBarItem.tsx:11
FilterBarItem
export function FilterBarItem(
props: FilterBarItemProps,
): import('react').JSX.Element;2
3
packages/viewer/src/topbar/FilterBarItem.tsx:12
FilterBarItemProps
export interface FilterBarItemProps extends TopBarItemProps {
defaultShowFilter: boolean;
onChange?: (show: boolean) => void;
}2
3
4
packages/viewer/src/topbar/FilterBarItem.tsx:7
FullscreenBarItem
export function FullscreenBarItem(
props: FullscreenBarItemProps,
): import('react').JSX.Element | null;2
3
packages/viewer/src/topbar/FullscreenBarItem.tsx:11
FullscreenBarItemProps
export interface FullscreenBarItemProps
extends UseFullscreenOptions, TopBarItemProps {}2
packages/viewer/src/topbar/FullscreenBarItem.tsx:8
Point
export function Point(): import('react').JSX.Element;packages/viewer/src/topbar/Point.tsx:1
RefreshDataBarItem
export function RefreshDataBarItem(
props: RefreshDataBarItemProps,
): import('react').JSX.Element;2
3
packages/viewer/src/topbar/RefreshDataBarItem.tsx:11
RefreshDataBarItemProps
export interface RefreshDataBarItemProps extends TopBarItemProps {
viewerDefinitionId?: string;
}2
3
packages/viewer/src/topbar/RefreshDataBarItem.tsx:7
ShareLinkBarItem
export function ShareLinkBarItem(
props: ShareLinkBarItemProps,
): import('react').JSX.Element;2
3
packages/viewer/src/topbar/ShareLinkBarItem.tsx:8
ShareLinkBarItemProps
export interface ShareLinkBarItemProps extends TopBarItemProps {}packages/viewer/src/topbar/ShareLinkBarItem.tsx:6
TopBar
export function TopBar<RecordType>(
props: TopBarProps<RecordType>,
): React.JSX.Element;2
3
packages/viewer/src/topbar/TopBar.tsx:107
TopBarProps
展开完整字段与成员
export interface TopBarProps<
RecordType,
> extends TopbarActionsCapable<RecordType> {
title: string;
viewerDefinitionId: string;
activeView: ViewState;
views: ViewState[];
viewChanged: boolean;
onReset?: () => void;
tableSelectedItems: RecordType[];
showViewPanel: boolean;
onShowViewPanelChange?: (showViewPanel: boolean) => void;
showFilter: boolean;
onShowFilterChange?: (show: boolean) => void;
defaultTableSize: SizeType;
onTableSizeChange?: (size: SizeType) => void;
onCreateView: (view: ViewState, onSuccess?: () => void) => void;
onUpdateView: (view: ViewState, onSuccess?: () => void) => void;
onDeleteView: (view: ViewState, onSuccess?: () => void) => void;
fullscreenTarget?: RefObject<HTMLElement | null>;
dataMonitorProps?: {
viewId: string;
countUrl: string;
viewName: string;
condition: Condition;
notification: DataMonitorNotificationConfig;
};
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
packages/viewer/src/topbar/TopBar.tsx:35
TopBarItemProps
export interface TopBarItemProps extends StyleCapable {}packages/viewer/src/topbar/types.ts:3
Locale
展开完整字段与成员
export interface Locale {
personalView?: string;
sharedView?: string;
view?: {
viewName?: string;
viewType?: {
name?: string;
personal?: string;
shared?: string;
};
};
filterPanel?: {
addFilterTitle?: string;
searchButtonTitle?: string;
};
topBar?: {
tableSize?: {
middle?: string;
small?: string;
};
autoRefresh?: {
title?: string;
};
};
selectedCountLabel?: string;
createViewMethod?: {
create?: string;
saveAs?: string;
};
viewPanel?: {
saveButton?: string;
cancelButton?: string;
};
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
packages/viewer/src/locale/Locale.ts:1
useLocale
export function useLocale(): UseLocaleReturn;packages/viewer/src/locale/useLocale.ts:12
UseLocaleReturn
export interface UseLocaleReturn {
locale: Locale;
setLocale: (locale: Locale) => void;
}2
3
4
packages/viewer/src/locale/useLocale.ts:7
相关专题
模型与状态所有权 · View 与 Viewer 组合 · 已保存视图面板与持久化回调 · FetcherViewer 远端集成 · 过滤器与可编辑面板 · 表格、列与单元格 · 注册表、输入与全屏按钮
