Skip to content

工具栏、刷新与本地化 ​

已弃用(仅适用于 5.x)

本页只适用于 5.x 线(npm 5.1.x,分支 5.x)。@ahoo-wang/fetcher-viewer 已在 npm 上弃用(所有版本),并冻结在该线上:仅维护现有功能,不再新增功能。替代它的是 Wow 仓库的 @ahoo-wang/wow-view-engine(typescript/,wow.ahoo.me),自 Wow 9.2.0 起已发布到 npm(9.2.1 及以上兼容 fetcher 6)。两者模型与 API 不同,迁移需要适配。

TopBar 组合视图操作、过滤/面板开关、行密度、刷新、监控、分享、全屏。props 包含 activeView/views/viewerDefinitionId、选中记录、mutation 回调。按钮调用应用回调,保存不是隐式 localStorage 操作。

API行为 / 默认值
RefreshDataBarItem向定义作用域刷新总线发布,没有额外公开 onClick prop。
AutoRefreshBarItem要求 viewId/viewerDefinitionId,默认 1/3/5 分钟及从不(0),选择按 view 保存到 view:refresh,无选择默认从不。
FilterBarItemdefaultShowFilter 初始化并同步本地 active,onChange 收到切换后的 boolean。
ColumnHeightBarItemdefaultTableSize/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 和生成线上字段不改变服务端语言或查询行为。

完整示例 ​

tsx
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>
  );
}

公开签名与类型 ​

以下签名按当前根入口可达声明核对。? 表示可省略;泛型/接口只约束编译期,继承项与关联类型可从 符号索引 定位。运行时默认值和失败行为以本页上文为准。

useRefreshDataEventBus ​

ts
export function useRefreshDataEventBus(
  subscriberId?: string,
): RefreshDataEventBusReturn;

packages/viewer/src/hooks/useRefreshDataEventBus.ts:29

RefreshDataEvent ​

ts
export interface RefreshDataEvent {
  type: 'REFRESH';
  subscriberId: string;
}

packages/viewer/src/hooks/useRefreshDataEventBus.ts:10

RefreshDataEventBusReturn ​

ts
export interface RefreshDataEventBusReturn {
  bus: BroadcastTypedEventBus<RefreshDataEvent>;
  publish: (subscriberId?: string) => Promise<void>;
  subscribe: (
    handler: EventHandler<RefreshDataEvent>,
    subscriberId?: string,
  ) => boolean;
}

packages/viewer/src/hooks/useRefreshDataEventBus.ts:15

AutoRefreshBarItem ​

ts
export function AutoRefreshBarItem(
  options: AutoRefreshBarItemProps,
): import('react').JSX.Element;

实现默认值: items = DefaultAutoRefreshItems.

packages/viewer/src/topbar/AutoRefreshBarItem.tsx:52

AutoRefreshItem ​

ts
export interface AutoRefreshItem {
  label: string;
  key: string;
  refreshInterval: number;
}

packages/viewer/src/topbar/AutoRefreshBarItem.tsx:9

AutoRefreshBarItemProps ​

ts
export interface AutoRefreshBarItemProps {
  items?: AutoRefreshItem[];
  viewId: string;
  viewerDefinitionId: string;
}

packages/viewer/src/topbar/AutoRefreshBarItem.tsx:15

BarItem ​

ts
export function BarItem(props: BarItemProps): React.JSX.Element;

packages/viewer/src/topbar/BarItem.tsx:9

BarItemProps ​

ts
export interface BarItemProps {
  icon: React.ReactNode;
  active: boolean;
}

packages/viewer/src/topbar/BarItem.tsx:4

ColumnHeightBarItem ​

ts
export function ColumnHeightBarItem(
  props: ColumnHeightBarItemProps,
): import('react').JSX.Element;

packages/viewer/src/topbar/ColumnHeightBarItem.tsx:15

ColumnHeightBarItemProps ​

ts
export interface ColumnHeightBarItemProps extends TopBarItemProps {
  defaultTableSize: SizeType;
  onChange?: (size: SizeType) => void;
}

packages/viewer/src/topbar/ColumnHeightBarItem.tsx:10

DataMonitorBarItem ​

ts
export function DataMonitorBarItem(
  props: DataMonitorBarItemProps,
): import('react').JSX.Element;

packages/viewer/src/topbar/DataMonitorBarItem.tsx:20

DataMonitorBarItemProps ​

ts
export interface DataMonitorBarItemProps extends TopBarItemProps {
  viewId: string;
  countUrl: string;
  viewName: string;
  condition: Condition;
  notification: DataMonitorNotificationConfig;
  interval?: number;
}

packages/viewer/src/topbar/DataMonitorBarItem.tsx:11

FilterBarItem ​

ts
export function FilterBarItem(
  props: FilterBarItemProps,
): import('react').JSX.Element;

packages/viewer/src/topbar/FilterBarItem.tsx:12

FilterBarItemProps ​

ts
export interface FilterBarItemProps extends TopBarItemProps {
  defaultShowFilter: boolean;
  onChange?: (show: boolean) => void;
}

packages/viewer/src/topbar/FilterBarItem.tsx:7

FullscreenBarItem ​

ts
export function FullscreenBarItem(
  props: FullscreenBarItemProps,
): import('react').JSX.Element | null;

packages/viewer/src/topbar/FullscreenBarItem.tsx:11

FullscreenBarItemProps ​

ts
export interface FullscreenBarItemProps
  extends UseFullscreenOptions, TopBarItemProps {}

packages/viewer/src/topbar/FullscreenBarItem.tsx:8

Point ​

ts
export function Point(): import('react').JSX.Element;

packages/viewer/src/topbar/Point.tsx:1

RefreshDataBarItem ​

ts
export function RefreshDataBarItem(
  props: RefreshDataBarItemProps,
): import('react').JSX.Element;

packages/viewer/src/topbar/RefreshDataBarItem.tsx:11

RefreshDataBarItemProps ​

ts
export interface RefreshDataBarItemProps extends TopBarItemProps {
  viewerDefinitionId?: string;
}

packages/viewer/src/topbar/RefreshDataBarItem.tsx:7

ShareLinkBarItem ​

ts
export function ShareLinkBarItem(
  props: ShareLinkBarItemProps,
): import('react').JSX.Element;

packages/viewer/src/topbar/ShareLinkBarItem.tsx:8

ShareLinkBarItemProps ​

ts
export interface ShareLinkBarItemProps extends TopBarItemProps {}

packages/viewer/src/topbar/ShareLinkBarItem.tsx:6

TopBar ​

ts
export function TopBar<RecordType>(
  props: TopBarProps<RecordType>,
): React.JSX.Element;

packages/viewer/src/topbar/TopBar.tsx:107

TopBarProps ​

展开完整字段与成员
ts
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;
  };
}

packages/viewer/src/topbar/TopBar.tsx:35

TopBarItemProps ​

ts
export interface TopBarItemProps extends StyleCapable {}

packages/viewer/src/topbar/types.ts:3

Locale ​

展开完整字段与成员
ts
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;
  };
}

packages/viewer/src/locale/Locale.ts:1

useLocale ​

ts
export function useLocale(): UseLocaleReturn;

packages/viewer/src/locale/useLocale.ts:12

UseLocaleReturn ​

ts
export interface UseLocaleReturn {
  locale: Locale;
  setLocale: (locale: Locale) => void;
}

packages/viewer/src/locale/useLocale.ts:7

相关专题 ​

模型与状态所有权 · View 与 Viewer 组合 · 已保存视图面板与持久化回调 · FetcherViewer 远端集成 · 过滤器与可编辑面板 · 表格、列与单元格 · 注册表、输入与全屏按钮

基于 Apache License 2.0 发布。