phanpy/src/compose.jsx

104 lines
2.4 KiB
React
Raw Normal View History

import './index.css';
import './app.css';
import { login } from 'masto';
import { render } from 'preact';
import { useEffect, useState } from 'preact/hooks';
import Compose from './components/compose';
import store from './utils/store';
import useTitle from './utils/useTitle';
if (window.opener) {
console = window.opener.console;
}
(async () => {
if (window.masto) return;
console.warn('window.masto not found. Trying to log in...');
try {
const accounts = store.local.getJSON('accounts') || [];
const currentAccount = store.session.get('currentAccount');
const account =
accounts.find((a) => a.info.id === currentAccount) || accounts[0];
const instanceURL = account.instanceURL;
const accessToken = account.accessToken;
window.masto = await login({
url: `https://${instanceURL}`,
accessToken,
disableVersionCheck: true,
timeout: 30_000,
});
console.info('Logged in successfully.');
} catch (e) {
console.error(e);
alert('Failed to log in. Please try again.');
}
})();
function App() {
const [uiState, setUIState] = useState('default');
const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};
useTitle(
editStatus
? 'Editing source status'
: replyToStatus
? `Replying to @${
replyToStatus.account?.acct || replyToStatus.account?.username
}`
: 'Compose',
);
useEffect(() => {
if (uiState === 'closed') {
try {
// Focus parent window
window.opener.focus();
} catch (e) {}
window.close();
}
}, [uiState]);
if (uiState === 'closed') {
return (
2022-12-14 16:48:17 +03:00
<div class="box">
<p>You may close this page now.</p>
<p>
<button
onClick={() => {
window.close();
}}
>
Close window
</button>
</p>
</div>
);
}
return (
<Compose
editStatus={editStatus}
replyToStatus={replyToStatus}
draftStatus={draftStatus}
standalone
2022-12-14 16:48:17 +03:00
hasOpener={window.opener}
onClose={(results) => {
const { newStatus, fn = () => {} } = results || {};
try {
if (newStatus) {
window.opener.__STATES__.reloadStatusPage++;
}
fn();
setUIState('closed');
} catch (e) {}
}}
/>
);
}
2022-12-14 16:48:17 +03:00
render(<App />, document.getElementById('app-standalone'));