Files
flipper/desktop/flipper-plugin/src/ui/SuggestNewPlugin.tsx
Andrey Goncharov 1c532095ab Expose suggestNewPlugin as a shared util
Reviewed By: antonk52, ivanmisuno

Differential Revision: D46798839

fbshipit-source-id: f2b942a138a998f167b60c04c32c634545bbfe96
2023-06-16 08:29:54 -07:00

88 lines
2.1 KiB
TypeScript

/**
* 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,
});
};