import Image from 'next/image' import { useRouter } from 'next/router' import { useCallback, useMemo, useState } from 'react' import { deleteIntegrationMutation } from '../../../lib/networking/mutations/deleteIntegrationMutation' import { setIntegrationMutation } from '../../../lib/networking/mutations/setIntegrationMutation' import { Integration, useGetIntegrationsQuery, } from '../../../lib/networking/queries/useGetIntegrationsQuery' import { showErrorToast, showSuccessToast } from '../../../lib/toastHelpers' import { Button } from '../../elements/Button' import { FormInput } from '../../elements/FormElements' import { HStack, SpanBox, VStack } from '../../elements/LayoutPrimitives' import { StyledText } from '../../elements/StyledText' import { Header } from '../settings/SettingsTable' export function Readwise(): JSX.Element { const { integrations, revalidate } = useGetIntegrationsQuery() const readwiseIntegration = useMemo(() => { return integrations.find((i) => i.name == 'READWISE' && i.type == 'EXPORT') }, [integrations]) return ( integration Image
Readwise
{readwiseIntegration && ( )} {!readwiseIntegration && }
) } function AddReadwiseForm(): JSX.Element { const router = useRouter() const [errorMessage, setErrorMessage] = useState( undefined ) const [token, setToken] = useState('') const setReadwiseToken = useCallback(async () => { try { const result = await setIntegrationMutation({ token, name: 'READWISE', type: 'EXPORT', enabled: true, }) if (result) { router.push(`/settings/integrations`) showSuccessToast('Your Readwise API token has been set.') } else { setErrorMessage('There was an error connecting to Readwise.') } } catch (err) { setErrorMessage('Error: ' + err) } }, [token, router]) return ( <> Enter your API key from Readwise below. You can get your token{' '} here . { e.preventDefault() setToken(e.target.value) }} disabled={false} hidden={false} required={true} css={{ border: '1px solid $textNonessential', borderRadius: '8px', width: '80%', bg: 'transparent', fontSize: '16px', textIndent: '8px', my: '20px', height: '38px', color: '$grayTextContrast', '&:focus': { outline: 'none', boxShadow: '0px 0px 2px 2px rgba(255, 234, 159, 0.56)', }, }} min={200} /> {errorMessage && {errorMessage}} ) } type RemoveReadwiseFormProps = { integration: Integration revalidate: () => void } function RemoveReadwiseForm(props: RemoveReadwiseFormProps): JSX.Element { const deleteIntegration = useCallback(async () => { try { if (props.integration.id) { const result = await deleteIntegrationMutation(props.integration.id) if (result) { props.revalidate() showSuccessToast('Integration Removed') } else { showErrorToast('Error removing Readwise integration.') } } } catch (err) { showErrorToast('Error: ' + err) } }, [props]) return ( <> Omnivore is configured to send all your highlights to Readwise. ) }