blob: b05117f9a11c6d65cee541d0ad2591274905c98a [file] [log] [blame]
/**
* @license
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
GenerateUrlParameters,
GerritView,
GroupDetailView,
RepoDetailView,
} from './core/gr-navigation/gr-navigation';
import {
DashboardId,
GroupId,
NumericChangeId,
PatchSetNum,
RepoName,
UrlEncodedCommentId,
} from '../types/common';
export interface AppElement extends HTMLElement {
params: AppElementParams | GenerateUrlParameters;
}
// TODO(TS): Remove unify AppElementParams with GenerateUrlParameters
// Seems we can use GenerateUrlParameters instead of AppElementParams,
// but it require some refactoring
export interface AppElementDashboardParams {
view: GerritView.DASHBOARD;
project?: RepoName;
dashboard: DashboardId;
user?: string;
sections: Array<{name: string; query: string}>;
title?: string;
}
export interface AppElementGroupParams {
view: GerritView.GROUP;
detail?: GroupDetailView;
groupId: GroupId;
}
export interface AppElementAdminParams {
view: GerritView.ADMIN;
adminView: string;
offset?: string | number;
filter?: string | null;
openCreateModal?: boolean;
}
export interface AppElementRepoParams {
view: GerritView.REPO;
detail?: RepoDetailView;
repo: RepoName;
offset?: string | number;
filter?: string | null;
}
export interface AppElementDocSearchParams {
view: GerritView.DOCUMENTATION_SEARCH;
filter: string | null;
}
export interface AppElementPluginScreenParams {
view: GerritView.PLUGIN_SCREEN;
plugin?: string;
screen?: string;
}
export interface AppElementSearchParam {
view: GerritView.SEARCH;
query: string;
offset: string;
}
export interface AppElementSettingsParam {
view: GerritView.SETTINGS;
emailToken?: string;
}
export interface AppElementAgreementParam {
view: GerritView.AGREEMENTS;
}
export interface AppElementDiffViewParam {
view: GerritView.DIFF;
changeNum: NumericChangeId;
project?: RepoName;
commentId?: UrlEncodedCommentId;
path?: string;
patchNum?: PatchSetNum;
basePatchNum?: PatchSetNum;
lineNum: number;
leftSide?: boolean;
commentLink?: boolean;
}
export interface AppElementChangeViewParams {
view: GerritView.CHANGE;
changeNum: NumericChangeId;
project: RepoName;
edit?: boolean;
patchNum?: PatchSetNum;
basePatchNum?: PatchSetNum;
queryMap?: Map<string, string> | URLSearchParams;
}
export interface AppElementJustRegisteredParams {
// We use params.view === ... as a type guard.
// The view?: never tells to the compiler that
// AppElementJustRegisteredParams can't have view property.
// Otherwise, the compiler reports an error when the code tries to use
// the property 'view' of AppElementParams.
view?: never;
justRegistered: boolean;
}
export type AppElementParams =
| AppElementDashboardParams
| AppElementGroupParams
| AppElementAdminParams
| AppElementChangeViewParams
| AppElementRepoParams
| AppElementDocSearchParams
| AppElementPluginScreenParams
| AppElementSearchParam
| AppElementSettingsParam
| AppElementAgreementParam
| AppElementDiffViewParam
| AppElementJustRegisteredParams;
export function isAppElementJustRegisteredParams(
p: AppElementParams
): p is AppElementJustRegisteredParams {
return (p as AppElementJustRegisteredParams).justRegistered !== undefined;
}