Skip to content

Commit

Permalink
Expose suggestNewPlugin as a shared util
Browse files Browse the repository at this point in the history
Reviewed By: antonk52, ivanmisuno

Differential Revision: D46798839

fbshipit-source-id: f2b942a138a998f167b60c04c32c634545bbfe96
  • Loading branch information
aigoncharov authored and facebook-github-bot committed Jun 16, 2023
1 parent 7fcaf52 commit 1c53209
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 0 deletions.
1 change: 1 addition & 0 deletions desktop/flipper-plugin/src/__tests__/api.node.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ test('Correct top level API exposed', () => {
"safeStringify",
"sleep",
"styled",
"suggestNewPlugin",
"textContent",
"theme",
"timeout",
Expand Down
1 change: 1 addition & 0 deletions desktop/flipper-plugin/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ export {
ElementSearchResultSet,
ElementID,
} from './ui/elements-inspector/ElementsInspector';
export {suggestNewPlugin} from './ui/SuggestNewPlugin';
export {useMemoize} from './utils/useMemoize';

export {createTablePlugin} from './utils/createTablePlugin';
Expand Down
87 changes: 87 additions & 0 deletions desktop/flipper-plugin/src/ui/SuggestNewPlugin.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/

import {Button, notification} from 'antd';
import {getFlipperLib, PluginClient} from 'flipper-plugin-core';
import * as React from 'react';

export type SuggestNewPluginProps = {
newPluginGK?: string;
newPluginId: string;
newPluginName: string;
legacyPluginId: string;
legacyPluginName: string;
client: PluginClient;
};

export const suggestNewPlugin = ({
newPluginGK,
newPluginId,
newPluginName,
legacyPluginId,
legacyPluginName,
client,
}: SuggestNewPluginProps) => {
if (newPluginGK && !getFlipperLib().GK(newPluginGK)) {
return;
}

const lastShownTimestampKey = `${legacyPluginId}-${newPluginId}-BannerLastShownTimestamp`;
let lastShownTimestampFromStorage = undefined;
try {
lastShownTimestampFromStorage = window.localStorage.getItem(
lastShownTimestampKey,
);
} catch (e) {}

if (lastShownTimestampFromStorage) {
const WithinOneDay = (timestamp: number) => {
const Day = 1 * 24 * 60 * 60 * 1000;
const DayAgo = Date.now() - Day;

return timestamp > DayAgo;
};
const lastShownTimestamp = Number(lastShownTimestampFromStorage);
if (WithinOneDay(lastShownTimestamp)) {
// The banner was shown less than 24-hours ago, don't show it again.
return;
}
}

const lastShownTimestamp = Date.now();
try {
window.localStorage.setItem(
lastShownTimestampKey,
String(lastShownTimestamp),
);
} catch (e) {}

const key = `open-${newPluginId}-${lastShownTimestamp}`;
const btn = (
<Button
type="primary"
size="small"
onClick={() => {
notification.close(key);
client.selectPlugin(newPluginId, undefined);
}}>
Try it now!
</Button>
);

notification.open({
message: `${legacyPluginName} plugin is being deprecated.`,
description: `The new replacement plugin, ${newPluginName}, is available for use now.
Find it on the left panel`,
duration: 30,
type: 'warning',
btn,
key,
});
};
4 changes: 4 additions & 0 deletions docs/extending/flipper-plugin.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -1092,6 +1092,10 @@ The colors exposed here support dark mode.

## Utilities

### suggestNewPlugin

Display a pop-up prompting users switch to a new plugin

### getFlipperLib

A set of globally available utilities such as opening links, interacting with the clipboard (see the following example), and many more.
Expand Down

0 comments on commit 1c53209

Please sign in to comment.