@phemium-costaisa/amazon-quicksight-embedding-sdk
Version:
JS SDK for embedding Amazon QuickSight
365 lines (364 loc) • 13.6 kB
TypeScript
import { ChangeEventLevel, ErrorChangeEventName, ExperienceType, InfoChangeEventName, MessageEventName, WarnChangeEventName } from './enums';
export type Primitives = string | number | boolean;
export type CreatePostRequestOptions = {
src: string;
container: HTMLElement;
target: string;
payload: {
[key: string]: string;
};
};
export type PostRequest = {
remove: () => void;
};
export type CreateIframeOptions = {
id: string;
src: string;
container: HTMLElement;
width?: string;
height?: string;
onLoad?: (event: Event) => void;
loading?: boolean;
withIframePlaceholder?: boolean | HTMLElement;
payload?: {
[key: string]: string;
};
className?: string;
};
export interface EmbeddingIFrameElement extends HTMLIFrameElement {
loading: string;
}
export type CreateEmbeddingContextFrameOptions = {
onChange?: SimpleChangeEventHandler;
};
export type CreateEmbeddingContext = (frameOptions?: CreateEmbeddingContextFrameOptions) => Promise<EmbeddingContext>;
export type EmbeddingContext = {
embedDashboard: EmbedDashboard;
embedVisual: EmbedVisual;
embedQSearchBar: EmbedQSearch;
embedConsole: EmbedConsole;
};
export interface ConsoleExperience extends BaseExperience {
experienceType: ExperienceType.CONSOLE;
}
export interface InternalConsoleExperience extends ConsoleExperience {
contextId: string;
}
export interface ConsoleContentOptions extends BaseContentOptions {
locale?: string;
}
export type TransformedConsoleContentOptions = ConsoleContentOptions;
export type ConsoleFrame = BaseFrame;
export type EmbedConsole = (frameOptions: FrameOptions, contentOptions?: ConsoleContentOptions) => Promise<ConsoleFrame>;
export interface ContextExperience extends BaseExperience {
experienceType: ExperienceType.CONTEXT;
}
export interface InternalContextExperience extends ContextExperience {
contextId: string;
}
export interface ControlExperience extends BaseExperience {
experienceType: ExperienceType.CONTROL;
}
export interface InternalControlExperience extends ControlExperience {
contextId: string;
}
export type ControlFrame = {
internalSend: InternalSend;
};
export interface DashboardExperience extends BaseExperience {
experienceType: ExperienceType.DASHBOARD;
dashboardId: string;
}
export interface InternalDashboardExperience extends DashboardExperience {
contextId: string;
}
export interface ToolbarOption {
show?: true;
}
export interface ExportToolbarOption extends ToolbarOption {
print?: boolean;
}
export interface ToolbarOptions {
export?: boolean | ExportToolbarOption;
undoRedo?: boolean | ToolbarOption;
reset?: boolean | ToolbarOption;
bookmarks?: boolean | ToolbarOption;
}
export interface AttributionOptions {
overlayContent?: boolean;
}
export interface SheetOptions {
initialSheetId?: string;
singleSheet?: boolean;
emitSizeChangedEventOnSheetChange?: boolean;
}
export type ParameterValue = Omit<Primitives, 'boolean'>;
export interface Parameter {
Name: string;
Values: ParameterValue[];
}
export interface DashboardContentOptions extends BaseContentOptions {
parameters?: Parameter[];
locale?: string;
attributionOptions?: AttributionOptions;
toolbarOptions?: ToolbarOptions;
sheetOptions?: SheetOptions;
}
export type ParametersAsObject = Record<string, ParameterValue | ParameterValue[]>;
export interface TransformedDashboardContentOptions extends BaseContentOptions {
parameters?: ParametersAsObject;
locale?: string;
sheetId?: string | undefined;
footerPaddingEnabled?: boolean;
undoRedoDisabled?: boolean;
printEnabled?: boolean;
showBookmarksIcon?: boolean;
hideAutoRefresh?: boolean;
resetDisabled?: boolean;
sheetTabsDisabled?: boolean;
resizeOnSheetChange?: boolean;
}
export interface SuccessResponseMessage {
success: true;
}
export interface FailureResponseMessage {
success: false;
errorCode: string;
error?: string;
message?: string | string[];
}
export type ResponseMessage = SuccessResponseMessage | FailureResponseMessage;
export type NavigateToDashboardOptions = {
parameters?: Parameter[];
};
export type EmbedDashboard = (frameOptions: FrameOptions, contentOptions?: DashboardContentOptions) => Promise<DashboardFrame>;
export interface Sheet {
Name: string;
SheetId: string;
}
export interface Visual {
Name: string;
VisualId: string;
}
export interface CallbackOperation {
EmbeddingMessage: object;
}
export type ActionOperation = {
CallbackOperation: CallbackOperation;
};
export interface VisualAction {
CustomActionId: string;
Name: string;
Status: 'ENABLED' | 'DISABLED';
Trigger: 'DATA_POINT_CLICK' | 'DATA_POINT_MENU';
ActionOperations: ActionOperation[];
}
export type GetParameters = () => Promise<Parameter[]>;
export type GetSheets = () => Promise<Sheet[]>;
export type GetSheetVisuals = (sheetId: string) => Promise<Visual[]>;
export type GetVisualActions = (sheetId: string, visualId: string) => Promise<VisualAction[]>;
export type GetSelectedSheetId = () => Promise<string>;
export type SetParameters = (parameters: Parameter[]) => Promise<ResponseMessage>;
export type SetSelectedSheetId = (sheetId: string) => Promise<ResponseMessage>;
export type AddVisualActions = (sheetId: string, visualId: string, actions: VisualAction[]) => Promise<ResponseMessage>;
export type RemoveVisualActions = (sheetId: string, visualId: string, actions: VisualAction[]) => Promise<ResponseMessage>;
export type SetVisualActions = (sheetId: string, visualId: string, actions: VisualAction[]) => Promise<ResponseMessage>;
export type InitiatePrint = () => Promise<ResponseMessage>;
export type Undo = () => Promise<ResponseMessage>;
export type Redo = () => Promise<ResponseMessage>;
export type Reset = () => Promise<ResponseMessage>;
export type ToggleBookmarksPane = () => Promise<ResponseMessage>;
export type NavigateToDashboard = (dashboardId: string, options?: NavigateToDashboardOptions) => Promise<ResponseMessage>;
export interface DashboardFrame extends BaseFrame {
getParameters: GetParameters;
getSheets: GetSheets;
getSheetVisuals: GetSheetVisuals;
getVisualActions: GetVisualActions;
addVisualActions: AddVisualActions;
removeVisualActions: RemoveVisualActions;
setVisualActions: SetVisualActions;
getSelectedSheetId: GetSelectedSheetId;
setParameters: SetParameters;
setSelectedSheetId: SetSelectedSheetId;
initiatePrint: InitiatePrint;
undo: Undo;
redo: Redo;
reset: Reset;
toggleBookmarksPane: ToggleBookmarksPane;
navigateToDashboard: NavigateToDashboard;
}
export interface QSearchExperience extends BaseExperience {
experienceType: ExperienceType.QSEARCH;
}
export interface InternalQSearchExperience extends QSearchExperience {
contextId: string;
}
export interface QSearchContentOptions extends BaseContentOptions {
hideIcon?: boolean;
hideTopicName?: boolean;
theme?: string;
allowTopicSelection?: boolean;
}
export interface TransformedQSearchContentOptions extends BaseContentOptions {
qBarIconDisabled?: boolean;
qBarTopicNameDisabled?: boolean;
themeId?: string;
allowTopicSelection?: boolean;
}
export type EmbedQSearch = (frameOptions: FrameOptions, contentOptions?: QSearchContentOptions) => Promise<QSearchFrame>;
export type SetQuestion = (question: string) => Promise<ResponseMessage>;
export type Close = () => Promise<ResponseMessage>;
export interface QSearchFrame extends BaseFrame {
setQuestion: SetQuestion;
close: Close;
}
export interface VisualExperience extends BaseExperience {
experienceType: ExperienceType.VISUAL;
dashboardId: string;
sheetId: string;
visualId: string;
}
export interface InternalVisualExperience extends VisualExperience {
contextId: string;
}
export interface VisualContentOptions extends BaseContentOptions {
locale?: string;
parameters?: Parameter[];
fitToIframeWidth?: boolean;
}
export interface TransformedVisualContentOptions extends BaseContentOptions {
locale?: string;
fitToIframeWidth?: boolean;
parameters?: ParametersAsObject;
}
export type EmbedVisual = (frameOptions: FrameOptions, contentOptions?: VisualContentOptions) => Promise<VisualFrame>;
export type GetActions = () => Promise<any[]>;
export type AddActions = (actions: VisualAction[]) => Promise<ResponseMessage>;
export type RemoveActions = (actions: VisualAction[]) => Promise<ResponseMessage>;
export type SetActions = (actions: VisualAction[]) => Promise<ResponseMessage>;
export interface VisualFrame extends BaseFrame {
setParameters: SetParameters;
reset: Reset;
getActions: GetActions;
addActions: AddActions;
removeActions: RemoveActions;
setActions: SetActions;
}
export type BuildExperienceUrlOptions = {
[key: string]: Primitives | Primitives[] | Record<string, Primitives>;
};
export interface InfoChangeEvent {
eventName: InfoChangeEventName;
eventLevel: ChangeEventLevel.INFO;
message?: string;
data?: any;
}
export interface WarnChangeEvent {
eventName: WarnChangeEventName;
eventLevel: ChangeEventLevel.WARN;
message?: string;
data?: any;
}
export interface ErrorChangeEvent {
eventName: ErrorChangeEventName;
eventLevel: ChangeEventLevel.ERROR;
message?: string;
data?: any;
}
export type SimpleChangeEvent = InfoChangeEvent | WarnChangeEvent | ErrorChangeEvent;
export interface SimpleMessageEvent {
eventName: MessageEventName;
message?: any;
}
export interface TargetedMessageEvent extends SimpleMessageEvent {
eventTarget: InternalExperience;
}
export interface PostMessageEvent extends TargetedMessageEvent {
eventId: string;
timestamp: number;
version: string;
}
export type ExperienceFrameMetadata = {
frame: EmbeddingIFrameElement;
};
export type SimpleChangeEventHandler = (message: SimpleChangeEvent, metadata?: ExperienceFrameMetadata) => void;
export type SimpleMessageEventHandler = (message: SimpleMessageEvent, metadata?: ExperienceFrameMetadata) => void;
export type InterceptMessage = (messageEvent: SimpleMessageEvent, metadata: ExperienceFrameMetadata) => void;
export type FrameOptions = {
url: string;
container: string | HTMLElement;
width?: string;
height?: string;
resizeHeightOnSizeChangedEvent?: boolean;
withIframePlaceholder?: boolean | HTMLElement;
className?: string;
onChange?: SimpleChangeEventHandler;
};
export type FrameStyles = {
position: string;
top: string;
left: string;
zIndex: string;
width: string;
height: string;
};
export type UrlInfo = {
guid: string;
host: string;
urlSearchParams?: URLSearchParams;
};
export type ExperienceEventListenerBuilder = (experienceIdentifier: string, onMessage?: SimpleMessageEventHandler) => ExperienceEventListener;
export type EventManager = {
addEventListener: (experienceIdentifier: string, listener: SimpleMessageEventHandler) => void;
invokeEventListener: (experienceIdentifier: string, data: TargetedMessageEvent) => void;
removeEventListener: (experienceIdentifier: string, listener: SimpleMessageEventHandler) => void;
experienceEventListenerBuilder: ExperienceEventListenerBuilder;
};
export type ControlOptions = {
eventManager: EventManager;
contextId: string;
areCookiesDisabled?: boolean;
urlInfo?: UrlInfo;
timeout?: number;
sendToControlFrame?: InternalSend;
onChange?: SimpleChangeEventHandler;
};
export type Experience = ConsoleExperience | ContextExperience | ControlExperience | VisualExperience | DashboardExperience | QSearchExperience;
export type InternalExperience = InternalConsoleExperience | InternalContextExperience | InternalControlExperience | InternalVisualExperience | InternalDashboardExperience | InternalQSearchExperience;
export type ContentOptions = VisualContentOptions | DashboardContentOptions | QSearchContentOptions | ConsoleContentOptions;
export interface BaseContentOptions {
onMessage?: SimpleMessageEventHandler;
}
export type InternalSend = (messageEvent: TargetedMessageEvent) => void;
export type AddEventListener = (eventName: MessageEventName, listener: SimpleMessageEventHandler) => {
remove: () => void;
};
export type ExperienceFrame = {
internalAddEventListener: AddEventListener;
internalSend: InternalSend;
frame: EmbeddingIFrameElement;
};
export type TransformedContentOptions = TransformedConsoleContentOptions | TransformedDashboardContentOptions | TransformedQSearchContentOptions | TransformedVisualContentOptions;
export interface CreateExperienceFrameOptions {
frameOptions: FrameOptions;
contentOptions: ContentOptions;
transformedContentOptions: TransformedContentOptions;
controlOptions: ControlOptions;
internalExperience: InternalExperience;
experienceIdentifier: string;
interceptMessage?: InterceptMessage;
}
export type ExperienceEventListener = {
addExperienceEventListener: (listener: SimpleMessageEventHandler) => void;
invokeExperienceEventListener: (data: TargetedMessageEvent) => void;
removeExperienceEventListener: (listener: SimpleMessageEventHandler) => void;
};
export interface BaseExperience {
experienceType: ExperienceType;
discriminator?: number;
}
export type Send = (messageEvent: SimpleMessageEvent) => void;
export interface BaseFrame {
send: Send;
addEventListener: AddEventListener;
}