@lishangpei/nav-sidebar
Version:
企业级站点导航组件 - 基于 Web Components,真正的跨框架复用
162 lines (132 loc) • 2.67 kB
TypeScript
/**
* Type definitions for React wrapper of NavSidebar Web Component
*/
import React from 'react';
import { Site, NavSidebarElement } from './nav-sidebar-wc';
export interface NavSidebarProps {
/**
* URL to fetch sites list (can include {env} placeholder)
*/
apiUrl?: string;
/**
* Static sites list
*/
sites?: Site[];
/**
* Sidebar title
* @default "站点导航"
*/
title?: string;
/**
* Environment options (comma-separated string or array)
* @default "ST,UAT,PRD"
*/
environments?: string | string[];
/**
* Default environment
* @default "PRD"
*/
defaultEnv?: string;
/**
* Float button icon
* @default "🧭"
*/
floatIcon?: string;
/**
* Enable frequent visits tracking
* @default true
*/
enableFrequentVisits?: boolean;
/**
* Number of frequent visits to show
* @default 5
*/
frequentVisitsLimit?: number;
/**
* Auto initialize on mount
* @default true
*/
autoInit?: boolean;
/**
* Callback when component is ready
*/
onReady?: () => void;
/**
* Callback when sidebar is shown
*/
onShow?: () => void;
/**
* Callback when sidebar is hidden
*/
onHide?: () => void;
/**
* Callback when a site is clicked
* Return false to prevent default navigation
*/
onSiteClick?: (site: Site, event: MouseEvent) => boolean | void;
/**
* Callback when environment changes
*/
onEnvChange?: (newEnv: string, oldEnv: string) => void;
/**
* Children (for passing sites as JSON)
*/
children?: React.ReactNode;
/**
* Other HTML attributes
*/
[key: string]: any;
}
export interface NavSidebarRef {
/**
* Show the sidebar
*/
show(): void;
/**
* Hide the sidebar
*/
hide(): void;
/**
* Toggle sidebar visibility
*/
toggle(): void;
/**
* Refresh sites list
*/
refresh(): Promise<void>;
/**
* Switch environment
*/
switchEnvironment(env: string): Promise<void>;
/**
* Get current environment
*/
getCurrentEnvironment(): string;
/**
* Set sites programmatically
*/
setSites(sites: Site[]): void;
/**
* Get current sites
*/
getSites(): Site[];
/**
* Clear visit statistics
*/
clearVisitStats(): void;
/**
* Get frequent visits
*/
getFrequentVisits(limit?: number): Site[];
/**
* Get the underlying Web Component element
*/
readonly element: NavSidebarElement | null;
}
/**
* React component for NavSidebar
*/
declare const NavSidebarReact: React.ForwardRefExoticComponent<
NavSidebarProps & React.RefAttributes<NavSidebarRef>
>;
export default NavSidebarReact;