mirror of
https://github.com/abhijithvijayan/web-extension-starter.git
synced 2026-01-30 09:48:12 +01:00
87 lines
2.3 KiB
TypeScript
87 lines
2.3 KiB
TypeScript
import {useEffect, useState} from 'react';
|
|
import type {FC} from 'react';
|
|
import browser, {Tabs} from 'webextension-polyfill';
|
|
import {getStorage} from '../utils/storage';
|
|
import {TabInfo} from './components/TabInfo/TabInfo';
|
|
import {FooterActions} from './components/FooterActions/FooterActions';
|
|
import styles from './Popup.module.scss';
|
|
|
|
function openWebPage(url: string): Promise<Tabs.Tab> {
|
|
return browser.tabs.create({url});
|
|
}
|
|
|
|
interface TabData {
|
|
title: string;
|
|
url: string;
|
|
favIconUrl?: string;
|
|
}
|
|
|
|
const Popup: FC = () => {
|
|
const [tabInfo, setTabInfo] = useState<TabData | null>(null);
|
|
const [username, setUsername] = useState<string>('');
|
|
|
|
useEffect(() => {
|
|
browser.tabs.query({active: true, currentWindow: true}).then((tabs) => {
|
|
const tab = tabs[0];
|
|
if (tab) {
|
|
setTabInfo({
|
|
title: tab.title || 'Unknown',
|
|
url: tab.url || 'Unknown',
|
|
favIconUrl: tab.favIconUrl,
|
|
});
|
|
}
|
|
});
|
|
|
|
getStorage(['username']).then(({username: storedUsername}) => {
|
|
setUsername(storedUsername);
|
|
});
|
|
}, []);
|
|
|
|
const handleReloadTab = async (): Promise<void> => {
|
|
const tabs = await browser.tabs.query({
|
|
active: true,
|
|
currentWindow: true,
|
|
});
|
|
const tab = tabs[0];
|
|
if (tab?.id) {
|
|
await browser.tabs.reload(tab.id);
|
|
}
|
|
};
|
|
|
|
return (
|
|
<section className={styles.popup}>
|
|
<header className={styles.header}>
|
|
<h1 className={styles.title}>Web Extension Starter</h1>
|
|
{username && <p className={styles.greeting}>Hello, {username}!</p>}
|
|
</header>
|
|
|
|
{tabInfo && (
|
|
<div className={styles.tabCard}>
|
|
<TabInfo
|
|
title={tabInfo.title}
|
|
url={tabInfo.url}
|
|
favIconUrl={tabInfo.favIconUrl}
|
|
onReload={handleReloadTab}
|
|
/>
|
|
</div>
|
|
)}
|
|
|
|
<FooterActions
|
|
onSettings={(): Promise<Tabs.Tab> =>
|
|
openWebPage('/Options/options.html')
|
|
}
|
|
onGitHub={(): Promise<Tabs.Tab> =>
|
|
openWebPage(
|
|
'https://github.com/abhijithvijayan/web-extension-starter'
|
|
)
|
|
}
|
|
onSupport={(): Promise<Tabs.Tab> =>
|
|
openWebPage('https://www.buymeacoffee.com/abhijithvijayan')
|
|
}
|
|
/>
|
|
</section>
|
|
);
|
|
};
|
|
|
|
export default Popup;
|