blob: 94d465e6639ddff8e2d5bbe0564a829e1e9e6148 [file] [log] [blame]
/**
* @license
* Copyright 2022 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import {
NumericChangeId,
RepoName,
RevisionPatchSetNum,
BasePatchSetNum,
} from '../../api/rest-api';
import {GerritView} from '../../services/router/router-model';
import {UrlEncodedCommentId} from '../../types/common';
import {
encodeURL,
getBaseUrl,
getPatchRangeExpression,
} from '../../utils/url-util';
import {AttemptChoice} from '../checks/checks-util';
import {Model} from '../model';
import {ViewState} from './base';
export interface ChangeViewState extends ViewState {
view: GerritView.CHANGE;
changeNum?: NumericChangeId;
project?: RepoName;
edit?: boolean;
patchNum?: RevisionPatchSetNum;
basePatchNum?: BasePatchSetNum;
commentId?: UrlEncodedCommentId;
forceReload?: boolean;
openReplyDialog?: boolean;
tab?: string;
/** regular expression for filtering check runs */
filter?: string;
/** selected attempt for selected check runs */
attempt?: AttemptChoice;
messageHash?: string;
usp?: string;
}
const DEFAULT_STATE: ChangeViewState = {
view: GerritView.CHANGE,
};
export function createChangeUrl(state: Omit<ChangeViewState, 'view'>) {
let range = getPatchRangeExpression(state);
if (range.length) {
range = '/' + range;
}
let suffix = `${range}`;
const queries = [];
if (state.forceReload) {
queries.push('forceReload=true');
}
if (state.openReplyDialog) {
queries.push('openReplyDialog=true');
}
if (state.usp) {
queries.push(`usp=${state.usp}`);
}
if (state.edit) {
suffix += ',edit';
}
if (state.commentId) {
suffix = suffix + `/comments/${state.commentId}`;
}
if (queries.length > 0) {
suffix += '?' + queries.join('&');
}
if (state.messageHash) {
suffix += state.messageHash;
}
if (state.project) {
const encodedProject = encodeURL(state.project, true);
return getBaseUrl() + `/c/${encodedProject}/+/${state.changeNum}${suffix}`;
} else {
return getBaseUrl() + `/c/${state.changeNum}${suffix}`;
}
}
export class ChangeViewModel extends Model<ChangeViewState> {
constructor() {
super(DEFAULT_STATE);
}
}