blob: cb0a5c2448f0592ab713efcaf42248a145a66cad [file] [log] [blame]
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import {HttpMethod} from './rest';
import {ChangeInfo} from './rest-api';
export declare interface ActionInfo {
method?: HttpMethod;
label?: string;
title?: string;
enabled?: boolean;
}
export enum ActionType {
CHANGE = 'change',
REVISION = 'revision',
}
// This is used for sorting the actions, BUT:
// * For showing up as a dedicated button the action must not be hidden and not
// be an overflow action. See setActionOverflow() and setActionHidden().
// * All primary actions are shown left of all secondary actions. By default
// the primary actions are: "Submit" and "Mark as active".
//
// Also note that a LOWER value means HIGHER priority!
export enum ActionPriority {
CHANGE = 2,
// Only "Submit" and "Code-Review" buttons should show before "Chat".
CHAT = -1,
DEFAULT = 0,
// This is a bit confusing, because this is the LOWEST priority in the list.
// But it does not matter much, because the `primary` property is evaluated
// first, and then the `priority` does not matter anymore.
PRIMARY = 3,
// This means that the "Code-Review" voting button is the left most button,
// if there are no primary actions.
REVIEW = -3,
REVISION = 1,
}
export enum ChangeActions {
ABANDON = 'abandon',
DELETE = '/',
DELETE_EDIT = 'deleteEdit',
EDIT = 'edit',
FOLLOW_UP = 'followup',
MOVE = 'move',
PRIVATE = 'private',
PRIVATE_DELETE = 'private.delete',
PUBLISH_EDIT = 'publishEdit',
REBASE = 'rebase',
REBASE_EDIT = 'rebaseEdit',
READY = 'ready',
RESTORE = 'restore',
REVERT = 'revert',
REVERT_SUBMISSION = 'revert_submission',
REVIEWED = 'reviewed',
STOP_EDIT = 'stopEdit',
SUBMIT = 'submit',
UNREVIEWED = 'unreviewed',
WIP = 'wip',
INCLUDED_IN = 'includedIn',
}
export enum RevisionActions {
CHERRYPICK = 'cherrypick',
REBASE = 'rebase',
SUBMIT = 'submit',
DOWNLOAD = 'download',
}
export type PrimaryActionKey = ChangeActions | RevisionActions;
export declare interface ChangeActionsPluginApi {
// Deprecated. This API method will be removed.
ensureEl(): Element;
addPrimaryActionKey(key: PrimaryActionKey): void;
removePrimaryActionKey(key: string): void;
hideQuickApproveAction(): void;
setActionOverflow(type: ActionType, key: string, overflow: boolean): void;
setActionPriority(
type: ActionType,
key: string,
priority: ActionPriority
): void;
setActionHidden(type: ActionType, key: string, hidden: boolean): void;
add(type: ActionType, label: string): string;
remove(key: string): void;
addTapListener(
key: string,
handler: EventListenerOrEventListenerObject
): void;
removeTapListener(
key: string,
handler: EventListenerOrEventListenerObject
): void;
setLabel(key: string, text: string): void;
setTitle(key: string, text: string): void;
setEnabled(key: string, enabled: boolean): void;
setIcon(key: string, icon: string): void;
getActionDetails(action: string): ActionInfo | undefined;
/** Notify BEFORE_CHANGE_ACTION event handlers.
*
* If a plugin replaces any default change actions (e.g., the quick
* approve action), it should call this method so that any event
* handlers for that action still trigger.
*
* The returned value is true if the action should proceed.
*/
notifyBeforeChangeAction(key: string, change?: ChangeInfo): Promise<boolean>;
}