/**
 * This file is part of the NocoBase (R) project.
 * Copyright (c) 2020-2024 NocoBase Co., Ltd.
 * Authors: NocoBase Team.
 *
 * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
 * For more information, please refer to: https://www.nocobase.com/agreement.
 */
import { APIClient } from '@nocobase/sdk';
import type { NocoBaseDesktopRoute } from './flow-compat';
type RouteSubscriber = () => void;
type RouteCreateValues = Partial<NocoBaseDesktopRoute>;
type RouteUpdateValues = Partial<NocoBaseDesktopRoute>;
type RouteMutationOptions = {
    refreshAfterMutation?: boolean;
};
type MoveRouteOptions = {
    sourceId: string | number;
    targetId?: string | number;
    targetScope?: any;
    sortField?: string;
    sticky?: boolean;
    method?: 'insertBefore' | 'insertAfter' | 'prepend';
    refreshAfterMove?: boolean;
};
export declare class RouteRepository {
    protected ctx: {
        api?: APIClient;
    };
    routes: NocoBaseDesktopRoute[];
    protected subscribers: Set<RouteSubscriber>;
    protected accessibleLoaded: boolean;
    protected accessibleLoadingPromise: Promise<NocoBaseDesktopRoute[]> | null;
    constructor(ctx: {
        api?: APIClient;
    });
    /**
     * 同步当前可访问桌面路由，并通知订阅方刷新。
     *
     * @param routes 最新的桌面路由树
     */
    setRoutes(routes: NocoBaseDesktopRoute[]): void;
    /**
     * 读取当前缓存的桌面路由树。
     *
     * @returns 当前缓存的路由数组
     */
    listAccessible(): NocoBaseDesktopRoute[];
    /**
     * 判断当前可访问桌面路由是否已完成至少一次初始化加载。
     *
     * @returns {boolean} 是否已初始化完成
     */
    isAccessibleLoaded(): boolean;
    /**
     * 重新拉取当前用户可访问的桌面路由，并覆盖本地缓存。
     *
     * @returns 最新的路由数组
     */
    refreshAccessible(): Promise<any>;
    /**
     * 确保当前用户可访问的桌面路由至少完成一次初始化加载。
     *
     * @returns 当前可访问的路由数组
     */
    ensureAccessibleLoaded(): Promise<NocoBaseDesktopRoute[]>;
    /**
     * 订阅路由缓存变化，用于驱动 React 上下文刷新。
     *
     * @param subscriber 缓存变化后的回调
     * @returns 取消订阅函数
     */
    subscribe(subscriber: RouteSubscriber): () => void;
    /**
     * 取消订阅路由缓存变化。
     *
     * @param subscriber 之前注册的回调函数
     */
    unsubscribe(subscriber: RouteSubscriber): void;
    /**
     * 创建一个桌面路由节点。
     *
     * @param values 路由数据
     * @param options 资源与刷新选项
     * @returns 服务端响应
     */
    createRoute(values: RouteCreateValues, options?: RouteMutationOptions): Promise<any>;
    /**
     * 更新一个或一组桌面路由节点。
     *
     * @param filterByTk 单条记录主键，或批量记录主键数组
     * @param values 待更新的路由字段
     * @param options 资源与刷新选项
     * @returns 服务端响应
     */
    updateRoute(filterByTk: any, values: RouteUpdateValues, options?: RouteMutationOptions): Promise<any>;
    /**
     * 删除一个桌面路由节点。
     *
     * @param filterByTk 要删除的记录主键
     * @param options 资源与刷新选项
     * @returns 服务端响应
     */
    deleteRoute(filterByTk: any, options?: RouteMutationOptions): Promise<any>;
    /**
     * 调整桌面路由节点位置。
     *
     * @param options 拖拽或移动所需参数
     * @returns 服务端响应
     */
    moveRoute(options: MoveRouteOptions): Promise<any>;
    /**
     * 通过 schema uid 反查对应路由节点。
     *
     * @param schemaUid 菜单 schema uid
     * @returns 匹配到的路由节点
     */
    getRouteBySchemaUid(schemaUid: string): NocoBaseDesktopRoute | undefined;
    protected getAPIClient(): APIClient;
    protected getResource(collectionName: string): import("@nocobase/sdk").IResource;
    protected emitChange(): void;
    private findRoute;
}
export {};
