import { AdaptableObject } from '../AdaptableState/Common/AdaptableObject';
import { AdaptableSharedEntity, CustomSharedEntity, CustomSharedEntityConfig, SharedEntity } from '../AdaptableState/TeamSharingState';
import { AdaptableModule, AdaptableSharedEntityConfig } from '../types';
/**
 * Provides run-time access to Team Sharing Module and associated state
 */
export interface TeamSharingApi {
    /**
     * Retrieves all currently shared entities; async operation leveraging `TeamSharingOptions.loadSharedEntities(...)` method
     */
    loadSharedEntities(): Promise<SharedEntity[]>;
    /**
     * Sets currently shared entities; async operation leveraging `TeamSharingOptions.persistSharedEntities(...)` method
     * @param sharedEntities the shared entities
     * @return either TRUE if the shared entities were successfully set or FALSE if the shared entities were not set
     */
    persistSharedEntities(sharedEntities: SharedEntity[]): Promise<boolean>;
    /**
     * Whether Team Sharing is available to use
     */
    isTeamSharingAvailable(): boolean;
    /**
     * Whether current user has full Team Sharing rights (for creating & updating shared items)
     */
    hasTeamSharingFullRights(): boolean;
    /**
     * Opens Settings Panel with Team Sharing section selected and visible
     */
    openTeamSharingSettingsPanel(): void;
    /**
     * Checks if active Shared Entities have updates (higher revisions than the local counterpart objects)
     */
    checkForUpdates(): void;
    /**
     * Puts an Adaptable Object into Team Share
     * @param adaptableObject Adaptable Object to Share
     * @param module module which Shared Entity belongs to
     * @param sharedEntityConfig Config info about the Sharing Actions
     */
    shareAdaptableEntity(adaptableObject: AdaptableObject, module: AdaptableModule, sharedEntityConfig: AdaptableSharedEntityConfig): void;
    /**
     * Puts an custom Object into Team Share
     * @param customObject custom object to Share
     * @param sharedEntityConfig shared entity config
     */
    shareCustomEntity(customObject: any, sharedEntityConfig: CustomSharedEntityConfig): void;
    /**
     * Removes a Shared Entity from the Team Share.
     * @param entityId the technical ID (`SharedEntity.Uuid`) of the Shared Entity to be removed from Team Share
     */
    unshareEntity(entityId: string): void;
    /**
     * Import the given Shared Entity. In case of `CustomSharedEntity`, the import logic will be delegated to `TeamSharingOptions.handleCustomSharedEntityImport(...)`.
     *
     * @param sharedEntity shared entry to import
     */
    importSharedEntry(sharedEntity: SharedEntity): void;
    /**
     * Retrieves all locally loaded shared entries (`AdaptableSharedEntity` & `CustomSharedEntity`).
     */
    getLoadedSharedEntities(): SharedEntity[];
    /**
     * Retrieves locally loaded Adaptable Shared Entries.
     */
    getLoadedAdaptableSharedEntities(): AdaptableSharedEntity[];
    /**
     * Retrieves locally loaded Custom Shared Entries.
     */
    getLoadedCustomSharedEntities(): CustomSharedEntity[];
    /**
     * Refreshes the local TeamSharing state by (re)loading the remote state.
     */
    refreshTeamSharing(): void;
}
