import React, { ReactElement } from 'react'; import { SquizImageType } from '@squiz/dx-json-schema-lib'; export type OnRequestSources = () => Promise; export type ResourceBrowserPluginType = 'dam' | 'matrix'; export type InlineType = 'image' | 'link' | 'resource'; export type AuthenticationConfiguration = { authUrl: string; redirectUrl: string; clientId: string; scope: string; alwaysUseResourceRequestProxy?: boolean; }; export interface ResourceBrowserSource { name?: string; id: string; type: ResourceBrowserPluginType; aliases?: string[]; } export interface ResourceBrowserSourceWithPlugin extends ResourceBrowserSource { plugin: ResourceBrowserPlugin; } export interface ResourceBrowserSourceWithConfig extends ResourceBrowserSource { configuration?: AuthenticationConfiguration; } export declare enum PluginLaunchModeType { 'Browse' = "browse", 'Search' = "search" } export type PluginLaunchMode = { type: PluginLaunchModeType; args?: ResourceBrowserSearchUIArgs | ResourceBrowserUIArgs; }; export type ResourceBrowserUnresolvedResource = { sourceId: string; resourceId: string; [k: string]: unknown; }; export type ResourceBrowserResource = { id: string; name: string; url: string; source: ResourceBrowserSource; type: { code: string; name: string; }; squizImage?: SquizImageType['__shape__']; }; export type ResourceBrowserSelectedState = { showThumbnail?: boolean; icon?: ReactElement; label: string; description: Array; }; type ResourceBrowserProps = { source: ResourceBrowserSource; onSourceSelect(source: ResourceBrowserSource, mode?: PluginLaunchMode): void; sources: ResourceBrowserSourceWithPlugin[]; allowedTypes?: string[]; headerPortal?: Element; onSelected: (resource: ResourceBrowserResource) => void; searchEnabled: boolean; }; export type ResourceBrowserUIArgs = { preselectedResource?: ResourceBrowserResource; browseTo?: ResourceBrowserUnresolvedResource; }; export type ResourceBrowserUIProps = ResourceBrowserProps & ResourceBrowserUIArgs; export type ResourceBrowserSearchUIArgs = { query?: string; }; export type ResourceBrowserSearchUIProps = ResourceBrowserProps & ResourceBrowserSearchUIArgs; export type ResourceBrowserLauncherProps = { source: ResourceBrowserSource; onSearch: (query: string) => void; onBrowse: (browseTo?: ResourceBrowserUnresolvedResource) => void; }; export type useResolveResourceResponse = { data: ResourceBrowserResource | null; error: Error | null; isLoading: boolean; }; /** * If you change this interface please update the example here: src/__mocks__/PluginExample.tsx */ export interface ResourceBrowserPlugin { /** Datasource type this plugin should be used for */ type: ResourceBrowserPluginType; createHeaderPortal?: boolean; /** React Functional Component to provde the UI to render to allow a user to browse for resource to use */ sourceBrowserComponent: () => React.FunctionComponent; /** React Functional Component to provde the UI to render to allow a user to search for resource to use */ sourceSearchComponent: () => React.FunctionComponent; /** React Functional Component to provde the sources launcher view */ renderResourceLauncher: () => React.FunctionComponent; /** Function to provde the the summary information to show what resource is currently selected */ renderSelectedResource: (resource: ResourceBrowserResource) => Promise; /** Function to resolve a resource and source id into a fully resolved output reference */ useResolveResource: (resource: ResourceBrowserUnresolvedResource | null, source: ResourceBrowserSource | null) => useResolveResourceResponse; } export {};