import { OnInit, OnDestroy } from "@angular/core";
import { Subject } from "rxjs";
import { BaseEntity } from "@memberjunction/core";
import { BaseNavigationComponent } from "./base-navigation-component";
import { ResourceData } from "@memberjunction/core-entities";
import { NavigationService } from "./navigation.service";
import * as i0 from "@angular/core";
export declare abstract class BaseResourceComponent extends BaseNavigationComponent implements OnInit, OnDestroy {
    private _data;
    private _suppressQueryParamSync;
    /** Stable key of the most recently delivered query params, used to de-duplicate
     *  delivery across the reactive (initial/deep-link) and popstate paths. */
    private _lastDeliveredParamsKey;
    protected destroy$: Subject<void>;
    protected navigationService: NavigationService;
    /**
     * Tab ID for query param notification scoping. Set by resource wrappers
     * that render child dashboards, so the child knows which tab it belongs to.
     * If not set, falls back to Data.Configuration.tabId.
     */
    ParentTabId: string | null;
    get Data(): ResourceData;
    set Data(value: ResourceData);
    private _loadComplete;
    get LoadComplete(): boolean;
    private _loadStarted;
    get LoadStarted(): boolean;
    private _loadCompleteEvent;
    get LoadCompleteEvent(): any;
    set LoadCompleteEvent(value: any);
    private _loadStartedEvent;
    get LoadStartedEvent(): any;
    set LoadStartedEvent(value: any);
    private _resourceRecordSavedEvent;
    get ResourceRecordSavedEvent(): any;
    set ResourceRecordSavedEvent(value: any);
    private _resourceCloseRequestedEvent;
    get ResourceCloseRequestedEvent(): (() => void) | null;
    set ResourceCloseRequestedEvent(value: (() => void) | null);
    private _displayNameChangedEvent;
    get DisplayNameChangedEvent(): ((newName: string) => void) | null;
    set DisplayNameChangedEvent(value: ((newName: string) => void) | null);
    ngOnInit(): void;
    ngOnDestroy(): void;
    /**
     * Called by the framework when query params change from an external source
     * (browser back/forward, deep link navigation).
     * Override in subclasses to react to query param changes.
     * @param params The new query params from the URL
     * @param source 'popstate' for back/forward, 'deeplink' for external URL entry
     */
    protected OnQueryParamsChanged(params: Record<string, string>, source: 'popstate' | 'deeplink'): void;
    /**
     * Push query param changes to the URL. Creates a browser history entry.
     * Safe to call during OnQueryParamsChanged — auto-suppressed to prevent loops.
     */
    protected UpdateQueryParams(params: Record<string, string | null>): void;
    /**
     * Read current query params from tab configuration.
     * Use in initDashboard() / ngOnInit() to get initial URL state.
     */
    protected GetQueryParams(): Record<string, string>;
    /**
     * Internal: subscribe to NavigationService query param notifications.
     * Filters to only this component's tab to prevent cross-tab leakage.
     * This is the explicit back/forward (popstate) path.
     */
    private setupQueryParamSubscription;
    /**
     * Internal: reactively deliver this tab's query params from the workspace
     * BehaviorSubject. Because the source replays the current value on subscribe and
     * emits future changes, this delivers initial deep-link params even when the
     * component mounts (e.g. from workspace restoration) before the URL params have
     * been merged into the tab configuration — closing the cold-load race that the
     * popstate-only path could not.
     */
    private setupInitialParamDelivery;
    /**
     * Internal: funnel point for both the reactive and popstate paths. De-duplicates
     * identical deliveries (the two paths overlap on back/forward) and labels the first
     * meaningful delivery as a 'deeplink', subsequent ones as 'popstate'.
     */
    private deliverQueryParams;
    /** Stable, order-independent string key for a query param record. */
    private queryParamsKey;
    /**
     * Get this component's tab ID. Checks ParentTabId input first (set by resource
     * wrappers for child dashboards), then falls back to Data.Configuration.tabId.
     */
    getTabId(): string;
    protected NotifyLoadComplete(): void;
    protected NotifyLoadStarted(): void;
    /**
     * Call this to notify the tab system that the resource's display name has changed.
     * The tab container will update the tab title and browser title accordingly.
     */
    protected NotifyDisplayNameChanged(newName: string): void;
    protected ResourceRecordSaved(resourceRecordEntity: BaseEntity): void;
    /**
     * Ask the host shell to close/dismiss this resource (typically: close the tab).
     * Called by subclasses that hosted a form that emitted a 'dismiss' navigation
     * event — most often, a brand-new record where the user clicked Discard. The
     * record was never saved, the form is empty, and leaving it open serves no
     * purpose. The tab-container listens for this and closes the workspace tab.
     */
    protected NotifyCloseRequested(): void;
    abstract GetResourceDisplayName(data: ResourceData): Promise<string>;
    abstract GetResourceIconClass(data: ResourceData): Promise<string>;
    static ɵfac: i0.ɵɵFactoryDeclaration<BaseResourceComponent, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<BaseResourceComponent, never, never, { "ParentTabId": { "alias": "ParentTabId"; "required": false; }; }, {}, never, never, true, never>;
}
//# sourceMappingURL=base-resource-component.d.ts.map