mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-11 14:14:36 +08:00
Bug: chromium:1158760 Change-Id: Ie50704b20abd89450ecf5f0f7602826eb0225d3e Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2630945 Commit-Queue: Jan Scheffler <janscheffler@chromium.org> Auto-Submit: Jan Scheffler <janscheffler@chromium.org> Reviewed-by: Tim van der Lippe <tvanderlippe@chromium.org>
87 lines
3.0 KiB
TypeScript
87 lines
3.0 KiB
TypeScript
// Copyright 2017 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
/* eslint-disable rulesdir/no_underscored_properties */
|
|
|
|
import * as Common from '../common/common.js'; // eslint-disable-line no-unused-vars
|
|
import * as Host from '../host/host.js';
|
|
import * as UI from '../ui/ui.js'; // eslint-disable-line no-unused-vars
|
|
|
|
import {releaseNoteText} from './ReleaseNoteText.js';
|
|
|
|
export const releaseVersionSeen = 'releaseNoteVersionSeen';
|
|
|
|
export const releaseNoteViewId: string = 'release-note';
|
|
|
|
let _latestReleaseNote: ReleaseNote;
|
|
|
|
export function latestReleaseNote(): ReleaseNote {
|
|
// @ts-ignore Included only for layout tests.
|
|
const globalReleaseNotes: ReleaseNote[] = self.Help.releaseNoteText;
|
|
if (!_latestReleaseNote) {
|
|
_latestReleaseNote =
|
|
(globalReleaseNotes || releaseNoteText).reduce((acc, note) => note.version > acc.version ? note : acc);
|
|
}
|
|
return _latestReleaseNote;
|
|
}
|
|
|
|
export function showReleaseNoteIfNeeded(): void {
|
|
const releaseNoteVersionSetting = Common.Settings.Settings.instance().createSetting(releaseVersionSeen, 0);
|
|
const releaseNoteVersionSettingValue = releaseNoteVersionSetting.get();
|
|
innerShowReleaseNoteIfNeeded(
|
|
releaseNoteVersionSettingValue, latestReleaseNote().version,
|
|
Common.Settings.Settings.instance().moduleSetting('help.show-release-note').get());
|
|
}
|
|
|
|
export function innerShowReleaseNoteIfNeeded(
|
|
lastSeenVersion: number, latestVersion: number, showReleaseNote: boolean): void {
|
|
const releaseNoteVersionSetting = Common.Settings.Settings.instance().createSetting(releaseVersionSeen, 0);
|
|
if (!lastSeenVersion) {
|
|
releaseNoteVersionSetting.set(latestVersion);
|
|
return;
|
|
}
|
|
if (!showReleaseNote) {
|
|
return;
|
|
}
|
|
if (lastSeenVersion >= latestVersion) {
|
|
return;
|
|
}
|
|
releaseNoteVersionSetting.set(latestVersion);
|
|
UI.ViewManager.ViewManager.instance().showView(releaseNoteViewId, true);
|
|
}
|
|
|
|
export class HelpLateInitialization implements Common.Runnable.Runnable {
|
|
async run(): Promise<void> {
|
|
if (!Host.InspectorFrontendHost.isUnderTest()) {
|
|
showReleaseNoteIfNeeded();
|
|
}
|
|
}
|
|
}
|
|
|
|
export class ReleaseNotesActionDelegate implements UI.ActionRegistration.ActionDelegate {
|
|
handleAction(_context: UI.Context.Context, _actionId: string): boolean {
|
|
Host.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab(latestReleaseNote().link);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
export class ReportIssueActionDelegate implements UI.ActionRegistration.ActionDelegate {
|
|
handleAction(_context: UI.Context.Context, _actionId: string): boolean {
|
|
Host.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab(
|
|
'https://bugs.chromium.org/p/chromium/issues/entry?template=DevTools+issue');
|
|
return true;
|
|
}
|
|
}
|
|
export interface ReleaseNoteHighlight {
|
|
title: string;
|
|
subtitle: string;
|
|
link: string;
|
|
}
|
|
export interface ReleaseNote {
|
|
version: number;
|
|
header: string;
|
|
highlights: {title: string; subtitle: string; link: string;}[];
|
|
link: string;
|
|
}
|