blob: 08c5ef414648ee53722e6fc28505a6b136040eaa [file] [log] [blame]
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import {FixSuggestionInfo, PatchSetNum} from './common';
import {ChangeMessage} from '../utils/comment-util';
import {FetchRequest} from './types';
import {LineNumberEventDetail, MovedLinkClickedEventDetail} from '../api/diff';
import {Category, RunStatus} from '../api/checks';
export enum EventType {
BIND_VALUE_CHANGED = 'bind-value-changed',
CHANGE = 'change',
CHANGED = 'changed',
CHANGE_MESSAGE_DELETED = 'change-message-deleted',
COMMIT = 'commit',
DIALOG_CHANGE = 'dialog-change',
DROP = 'drop',
EDITABLE_CONTENT_SAVE = 'editable-content-save',
GR_RPC_LOG = 'gr-rpc-log',
IRON_ANNOUNCE = 'iron-announce',
KEYDOWN = 'keydown',
KEYPRESS = 'keypress',
LOCATION_CHANGE = 'location-change',
MOVED_LINK_CLICKED = 'moved-link-clicked',
NETWORK_ERROR = 'network-error',
OPEN_FIX_PREVIEW = 'open-fix-preview',
CLOSE_FIX_PREVIEW = 'close-fix-preview',
PAGE_ERROR = 'page-error',
RECREATE_CHANGE_VIEW = 'recreate-change-view',
RECREATE_DIFF_VIEW = 'recreate-diff-view',
RELOAD = 'reload',
REPLY = 'reply',
SERVER_ERROR = 'server-error',
SHORTCUT_TRIGGERERD = 'shortcut-triggered',
SHOW_ALERT = 'show-alert',
SHOW_ERROR = 'show-error',
SHOW_TAB = 'show-tab',
SHOW_SECONDARY_TAB = 'show-secondary-tab',
TAP_ITEM = 'tap-item',
TITLE_CHANGE = 'title-change',
}
declare global {
interface HTMLElementEventMap {
/* prettier-ignore */
'bind-value-changed': BindValueChangeEvent;
/* prettier-ignore */
'change': ChangeEvent;
/* prettier-ignore */
'changed': ChangedEvent;
'change-message-deleted': ChangeMessageDeletedEvent;
/* prettier-ignore */
'commit': CommitEvent;
'dialog-change': DialogChangeEvent;
/* prettier-ignore */
'drop': DropEvent;
'editable-content-save': EditableContentSaveEvent;
'location-change': LocationChangeEvent;
'iron-announce': IronAnnounceEvent;
'line-mouse-enter': LineNumberEvent;
'line-mouse-leave': LineNumberEvent;
'line-cursor-moved-in': LineNumberEvent;
'line-cursor-moved-out': LineNumberEvent;
'moved-link-clicked': MovedLinkClickedEvent;
'open-fix-preview': OpenFixPreviewEvent;
'close-fix-preview': CloseFixPreviewEvent;
'reply-to-comment': ReplyToCommentEvent;
/* prettier-ignore */
'reload': ReloadEvent;
/* prettier-ignore */
'reply': ReplyEvent;
'show-alert': ShowAlertEvent;
'show-error': ShowErrorEvent;
'show-tab': SwitchTabEvent;
'show-secondary-tab': SwitchTabEvent;
'tap-item': TapItemEvent;
'title-change': TitleChangeEvent;
}
}
declare global {
interface DocumentEventMap {
'gr-rpc-log': RpcLogEvent;
'network-error': NetworkErrorEvent;
'page-error': PageErrorEvent;
/* prettier-ignore */
'reload': ReloadEvent;
'server-error': ServerErrorEvent;
'show-alert': ShowAlertEvent;
'show-error': ShowErrorEvent;
'location-change': LocationChangeEvent;
}
}
export interface BindValueChangeEventDetail {
value: string | undefined;
}
export type BindValueChangeEvent = CustomEvent<BindValueChangeEventDetail>;
export type ChangeEvent = InputEvent;
export type ChangedEvent = CustomEvent<string>;
export interface ChangeMessageDeletedEventDetail {
message: ChangeMessage;
}
export type ChangeMessageDeletedEvent =
CustomEvent<ChangeMessageDeletedEventDetail>;
export type CommitEvent = CustomEvent;
// TODO(milutin) - remove once new gr-dialog will do it out of the box
// This informs gr-app-element to remove footer, header from a11y tree
export interface DialogChangeEventDetail {
canceled?: boolean;
opened?: boolean;
}
export type DialogChangeEvent = CustomEvent<DialogChangeEventDetail>;
export type DropEvent = DragEvent;
export interface EditableContentSaveEventDetail {
content: string;
}
export type EditableContentSaveEvent =
CustomEvent<EditableContentSaveEventDetail>;
export interface RpcLogEventDetail {
status: number | null;
method: string;
elapsed: number;
anonymizedUrl: string;
}
export type RpcLogEvent = CustomEvent<RpcLogEventDetail>;
export interface IronAnnounceEventDetail {
text: string;
}
export type IronAnnounceEvent = CustomEvent<IronAnnounceEventDetail>;
export interface LocationChangeEventDetail {
hash: string;
pathname: string;
}
export type LocationChangeEvent = CustomEvent<LocationChangeEventDetail>;
export type MovedLinkClickedEvent = CustomEvent<MovedLinkClickedEventDetail>;
export type LineNumberEvent = CustomEvent<LineNumberEventDetail>;
export interface NetworkErrorEventDetail {
error: Error;
}
export type NetworkErrorEvent = CustomEvent<NetworkErrorEventDetail>;
export interface OpenFixPreviewEventDetail {
patchNum: PatchSetNum;
fixSuggestions: FixSuggestionInfo[];
}
export type OpenFixPreviewEvent = CustomEvent<OpenFixPreviewEventDetail>;
export interface CloseFixPreviewEventDetail {
fixApplied: boolean;
}
export type CloseFixPreviewEvent = CustomEvent<CloseFixPreviewEventDetail>;
export interface ReplyToCommentEventDetail {
content: string;
userWantsToEdit: boolean;
unresolved: boolean;
}
export type ReplyToCommentEvent = CustomEvent<ReplyToCommentEventDetail>;
export interface PageErrorEventDetail {
response?: Response;
}
export type PageErrorEvent = CustomEvent<PageErrorEventDetail>;
export interface ReloadEventDetail {
clearPatchset: boolean;
}
export type ReloadEvent = CustomEvent<ReloadEventDetail>;
export interface ReplyEventDetail {
message: ChangeMessage;
}
export type ReplyEvent = CustomEvent<ReplyEventDetail>;
export interface ServerErrorEventDetail {
request?: FetchRequest;
response: Response;
}
export type ServerErrorEvent = CustomEvent<ServerErrorEventDetail>;
export interface ShowAlertEventDetail {
message: string;
dismissOnNavigation?: boolean;
showDismiss?: boolean;
action?: string;
callback?: () => void;
}
export type ShowAlertEvent = CustomEvent<ShowAlertEventDetail>;
export interface ShowErrorEventDetail {
message: string;
}
export type ShowErrorEvent = CustomEvent<ShowErrorEventDetail>;
// Type for the custom event to switch tab.
export interface SwitchTabEventDetail {
// name of the tab to set as active, from custom event
tab: string;
// scroll into the tab afterwards, from custom event
scrollIntoView?: boolean;
// define state of tab after opening
tabState?: TabState;
}
export interface TabState {
commentTab?: CommentTabState;
checksTab?: ChecksTabState;
}
export enum CommentTabState {
UNRESOLVED = 'unresolved',
DRAFTS = 'drafts',
SHOW_ALL = 'show all',
MENTIONS = 'mentions',
}
export interface ChecksTabState {
statusOrCategory?: RunStatus | Category;
checkName?: string;
}
export type SwitchTabEvent = CustomEvent<SwitchTabEventDetail>;
export type TapItemEvent = CustomEvent;
export interface TitleChangeEventDetail {
title: string;
}
export type TitleChangeEvent = CustomEvent<TitleChangeEventDetail>;
/**
* This event can be used for Polymer properties that have `notify: true` set.
* But it is also generally recommended when you want to notify your parent
* elements about a property update, also for Lit elements.
*
* The name of the event should be `prop-name-changed`.
*/
export type ValueChangedEvent<T = string> = CustomEvent<{value: T}>;