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