- Labels allow you to group and search for content in Omnivore. A saved page
- can have multiple labels and search results can be filtered by label.
+ Labels allow you to group and search for content in Omnivore. A saved
+ page can have multiple labels and search results can be filtered by
+ label.
Adding labels to a page on iOS
- On iOS you add and remove labels from a page using the Assign Labels modal.
-
+ On iOS you add and remove labels from a page using the Assign Labels
+ modal.
+
- You can open the Assign Labels modal from the home view or the reader view.
- In the home view long press on an item and choose Edit Labels from the dropdowm
- menu. In the reader view use the top right menu button.
+ You can open the Assign Labels modal from the home view or the reader
+ view. In the home view long press on an item and choose Edit Labels
+ from the dropdowm menu. In the reader view use the top right menu
+ button.
Adding labels to a page on the web
- On the web you add and remove labels from a page using the Assign Labels dropdown
- or modal depending on your screen size. For larger monitors you will see the Labels
- button on the left hand side of the reader view. For smaller monitors you will see
- the labels dropdown at the top of your screen.
+ On the web you add and remove labels from a page using the Assign
+ Labels dropdown or modal depending on your screen size. For larger
+ monitors you will see the Labels button on the left hand side of the
+ reader view. For smaller monitors you will see the labels dropdown at
+ the top of your screen.
- You can also use keyboard commands to open the assign labels modal. On the reader
- view tap the l key. Once open you can use the up/down arrow keys, or the
- tab key to navigate the available labels, and the Enter key to toggle a label.
+ You can also use keyboard commands to open the assign labels modal. On
+ the reader view tap the l key. Once open you can use the
+ up/down arrow keys, or the tab key to navigate the available labels,
+ and the Enter key to toggle a label.
Searching by label on iOS
- On iOS you can use the Labels search chip to search for labels. This will open a modal
- allowing you to assign multiple labels to your search. This will become an OR
- search, meaning if you add multiple labels to your search, pages that have any of the
- labels will be returned.
+ On iOS you can use the Labels search chip to search for labels. This
+ will open a modal allowing you to assign multiple labels to your
+ search. This will become an OR
+ search, meaning if you add multiple labels to your search, pages that
+ have any of the labels will be returned.
Searching by label with Advanced Search
- Omnivore's advanced search syntax supports searching for multiple labels using
- AND and OR clauses. You can also negate a label search
- to find all pages that do not have a certain label.
+ Omnivore's advanced search syntax supports searching for multiple
+ labels using
+ AND and OR clauses. You can also negate a
+ label search to find all pages that do not have a certain label.
Some examples:
-
-label:Newsletter finds all pages that have the label Newsletter
-
label:Cooking,Fitness finds all your pages with either the Cooking or Fitness labels
-
label:Newsletter label:Surfing finds all pages with both the Newsletter and Surfing labels
-
label:Coding -label:Newsletter finds all pages with the Coding label that do not have the Newsletter label
+
+ -label:Newsletter finds all pages that have the label{' '}
+ Newsletter
+
+
+ label:Cooking,Fitness finds all your pages with either
+ the Cooking or Fitness labels
+
+
+ label:Newsletter label:Surfing finds all pages with
+ both the Newsletter and Surfing labels
+
+
+ label:Coding -label:Newsletter finds all pages with the{' '}
+ Coding label that do not have the{' '}
+ Newsletter label
+
-
+
Editing your list of labels
- The labels page allows you to
- edit all of your labels. From here you can create new labels, delete existing
- labels, or modify the color and description of a label.
+ The{' '}
+
+ labels
+ {' '}
+ page allows you to edit all of your labels. From here you can create
+ new labels, delete existing labels, or modify the color and
+ description of a label.
diff --git a/packages/web/pages/help/search.tsx b/packages/web/pages/help/search.tsx
index baa74d432..a9e46c0fc 100644
--- a/packages/web/pages/help/search.tsx
+++ b/packages/web/pages/help/search.tsx
@@ -1,10 +1,6 @@
/* eslint-disable @next/next/no-img-element */
-import { Box, HStack, SpanBox } from '../../components/elements/LayoutPrimitives'
+import { Box } from '../../components/elements/LayoutPrimitives'
import { PrimaryLayout } from '../../components/templates/PrimaryLayout'
-import { Button } from '../../components/elements/Button'
-import Link from 'next/link'
-import { Copy, Plus } from 'phosphor-react'
-import { theme } from '../../components/tokens/stitches.config'
export default function Search(): JSX.Element {
return (
@@ -33,64 +29,107 @@ export default function Search(): JSX.Element {
Search
- Omnivore uses search to filter items in your library. You can use a simple
- keyword search or our advanced search syntax to find items.
+ Omnivore uses search to filter items in your library. You can use a
+ simple keyword search or our advanced search syntax to find items.
- Omnivore will perform full text search across library item's content, title, description,
- and site by default. You can search for specific terms by quoting your terms. By default
- all results that match your search will be returned in the order they were saved. To change
- your search to relevance use the sort:score parameter.
+ Omnivore will perform full text search across library item's
+ content, title, description, and site by default. You can search for
+ specific terms by quoting your terms. By default all results that
+ match your search will be returned in the order they were saved. To
+ change your search to relevance use the sort:score{' '}
+ parameter.
-
+
Filtering by label
You can filter your search based on labels using AND and OR clauses.
- You can also negate a label search to find pages that do not have a certain label.
+ You can also negate a label search to find pages that do not have a
+ certain label.
Some examples:
-
label:Newsletter finds all pages that have the label Newsletter
-
label:Cooking,Fitness finds all your pages with either the Cooking or Fitness labels
-
label:Newsletter label:Surfing finds all pages with both the Newsletter and Surfing labels
-
label:Coding -label:News finds all pages with the Coding label that do not have the News label
+
+ label:Newsletter finds all pages that have the label Newsletter
+
+
+ label:Cooking,Fitness finds all your pages with either the Cooking
+ or Fitness labels
+
+
+ label:Newsletter label:Surfing finds all pages with both the
+ Newsletter and Surfing labels
+
+
+ label:Coding -label:News finds all pages with the Coding label that
+ do not have the News label
+
Filtering by archive status
- The in: filter is used to filter search by archive status.
- The options are:
+ The in: filter is used to filter search by archive
+ status. The options are:
-
in:inbox (the default): show unarchived items
-
in:archive: show archived items
-
in:all: Show all items regardless of archive state
+
+ in:inbox (the default): show unarchived items
+
+
+ in:archive: show archived items
+
+
+ in:all: Show all items regardless of archive state
+
Filtering by read state
- The is: filter is used to filter search by read state. Note
- that in Omnivore 'read' means fully read, not just opened.
+ The is: filter is used to filter search by read state.
+ Note that in Omnivore 'read' means fully read, not just
+ opened.
+
+
+ The is: filter options are:{' '}
-
The is: filter options are:
-
is:read: Show only items that are fully read
-
is:unread (the default): show unread items
+
+ is:read: Show only items that are fully read
+
+
+ is:unread (the default): show unread items
+
Filtering by type
@@ -98,41 +137,67 @@ export default function Search(): JSX.Element {
The type: filter is used to filter search by type.
-
type:article: Show only articles
-
type:file: Show only files
-
type:pdf: Show only PDFs
-
type:highlights: Show your highlights
+
+ type:article: Show only articles
+
+
+ type:file: Show only files
+
+
+ type:pdf: Show only PDFs
+
+
+ type:highlights: Show your highlights
+
Finding highlights
- You can find your highlights by using the type:highlights filter
- or find saved items with highlights using the has:highlights filter.
+ You can find your highlights by using the type:highlights{' '}
+ filter or find saved items with highlights using the{' '}
+ has:highlights filter.
Filtering by save/publish dates
- You can filter your searches based on the time they were saved or published using the
- saved: and published: filters. These filters take two dates
- to create a date range. The * wildcard will accept any date.
+ You can filter your searches based on the time they were saved or
+ published using the
+ saved: and published: filters. These filters
+ take two dates to create a date range. The * wildcard
+ will accept any date.
For Example:
-
saved:2022-04-21..* All items saved since 2022-04-21
-
published:2020-01-01..2022-02-02 All items published between 2020-01-01 and 2022-02-02
-
published:*..2020-01-01 All items published before 2020-01-01
+
+ saved:2022-04-21..* All items saved since 2022-04-21
+
+
+ published:2020-01-01..2022-02-02 All items published
+ between 2020-01-01 and 2022-02-02
+
+
+ published:*..2020-01-01 All items published before
+ 2020-01-01
+
Sorting
- By default all search results in Omnivore are sorted by saved date. This puts the
- most recently saved items at the top of your library. You can use sort options
- to change the library order:
+ By default all search results in Omnivore are sorted by saved date.
+ This puts the most recently saved items at the top of your library.
+ You can use sort options to change the library order:
-
sort:saved: Sort by saved date
-
sort:updated: Sort by time the item was updated, for example having a label or highlight added.
-
sort:score: Sort by query term relevance.
+
+ sort:saved: Sort by saved date
+
+
+ sort:updated: Sort by time the item was updated, for
+ example having a label or highlight added.
+
+
+ sort:score: Sort by query term relevance.
+
diff --git a/packages/web/pages/settings/api.tsx b/packages/web/pages/settings/api.tsx
index 43d0d20ee..885a63a7a 100644
--- a/packages/web/pages/settings/api.tsx
+++ b/packages/web/pages/settings/api.tsx
@@ -1,6 +1,4 @@
-import { useEffect, useMemo, useState } from 'react'
-import { useRouter } from 'next/router'
-
+import { useMemo, useState } from 'react'
import { showErrorToast, showSuccessToast } from '../../lib/toastHelpers'
import { applyStoredTheme } from '../../lib/themeUpdater'
import { useGetApiKeysQuery } from '../../lib/networking/queries/useGetApiKeysQuery'
diff --git a/packages/web/pages/settings/delete-my-account.tsx b/packages/web/pages/settings/delete-my-account.tsx
index a0e0c80c0..b2c58654c 100644
--- a/packages/web/pages/settings/delete-my-account.tsx
+++ b/packages/web/pages/settings/delete-my-account.tsx
@@ -1,4 +1,4 @@
-import { useEffect, useMemo, useState } from 'react'
+import { useState } from 'react'
import { useRouter } from 'next/router'
import { Toaster } from 'react-hot-toast'
@@ -24,13 +24,13 @@ export default function DeleteMyAccount(): JSX.Element {
async function deleteAccount(): Promise {
const viewerId = viewer.viewerData?.me?.id
if (!viewerId) {
- showErrorToast("Error deleting user, no user id found.")
+ showErrorToast('Error deleting user, no user id found.')
return
}
const result = await deleteAccountMutation(viewerId)
if (result) {
- showSuccessToast('Account deleted',)
+ showSuccessToast('Account deleted')
setTimeout(() => {
window.location.href = '/login'
}, 2000)
@@ -55,21 +55,22 @@ export default function DeleteMyAccount(): JSX.Element {
{showConfirm ? (
setShowConfirm(false)}
/>
) : null}
-
+
{viewer && router ? (
-
)
diff --git a/packages/web/pages/settings/emails/index.tsx b/packages/web/pages/settings/emails/index.tsx
index 2db4a11ad..d76a8b648 100644
--- a/packages/web/pages/settings/emails/index.tsx
+++ b/packages/web/pages/settings/emails/index.tsx
@@ -49,7 +49,7 @@ const CopyTextBtnWrapper = styled(Box, {
})
function CopyTextButton(props: CopyTextButtonProps): JSX.Element {
- const { copyLink, isLinkCopied } = useCopyLink(
+ const { copyLink } = useCopyLink(
props.text,
'newsletter_' +
(props.type == TextType.EmailAddress
@@ -64,7 +64,7 @@ function CopyTextButton(props: CopyTextButtonProps): JSX.Element {
? 'Email Address Copied'
: 'Confirmation Code Copied'
)
- }, [])
+ }, [copyLink, props.type])
return (
diff --git a/packages/web/pages/settings/installation/extensions.tsx b/packages/web/pages/settings/installation/extensions.tsx
index e16084113..9696b1e2b 100644
--- a/packages/web/pages/settings/installation/extensions.tsx
+++ b/packages/web/pages/settings/installation/extensions.tsx
@@ -1,5 +1,4 @@
-import React, { useEffect } from 'react'
-import Router from 'next/router'
+import React from 'react'
import ExtensionInstallHelp from '../../../components/elements/ExtensionsInstallHelp'
import { SettingsLayout } from '../../../components/templates/SettingsLayout'
import { VStack } from '../../../components/elements/LayoutPrimitives'
diff --git a/packages/web/pages/settings/installation/mobile.tsx b/packages/web/pages/settings/installation/mobile.tsx
index 0f62ef644..338ece815 100644
--- a/packages/web/pages/settings/installation/mobile.tsx
+++ b/packages/web/pages/settings/installation/mobile.tsx
@@ -1,8 +1,6 @@
-import React, { useEffect } from 'react'
-import Router from 'next/router'
+import React from 'react'
import { SettingsLayout } from '../../../components/templates/SettingsLayout'
import MobileInstallHelp from '../../../components/elements/MobileInstallHelp'
-import { VStack } from '../../../components/elements/LayoutPrimitives'
export default function Mobile(): JSX.Element {
return (
diff --git a/packages/web/pages/settings/integrations.tsx b/packages/web/pages/settings/integrations.tsx
index 8b2a59e19..db32c159e 100644
--- a/packages/web/pages/settings/integrations.tsx
+++ b/packages/web/pages/settings/integrations.tsx
@@ -122,7 +122,7 @@ export default function Integrations(): JSX.Element {
},
},
])
- }, [])
+ }, [deleteIntegration, readwiseConnected, router, webhooks])
return (
diff --git a/packages/web/pages/settings/labels.tsx b/packages/web/pages/settings/labels.tsx
index 52267abec..3e377f1f4 100644
--- a/packages/web/pages/settings/labels.tsx
+++ b/packages/web/pages/settings/labels.tsx
@@ -1,7 +1,7 @@
import { useEffect, useMemo, useState } from 'react'
import { PrimaryLayout } from '../../components/templates/PrimaryLayout'
import { Button } from '../../components/elements/Button'
-import { styled, theme } from '../../components/tokens/stitches.config'
+import { styled } from '../../components/tokens/stitches.config'
import {
Box,
SpanBox,
diff --git a/packages/web/pages/tools/bulk.tsx b/packages/web/pages/tools/bulk.tsx
index 9b4031937..97bea8282 100644
--- a/packages/web/pages/tools/bulk.tsx
+++ b/packages/web/pages/tools/bulk.tsx
@@ -1,7 +1,7 @@
import { useCallback, useState } from 'react'
import { applyStoredTheme } from '../../lib/themeUpdater'
-import { Box, VStack } from '../../components/elements/LayoutPrimitives'
+import { VStack } from '../../components/elements/LayoutPrimitives'
import { StyledText } from '../../components/elements/StyledText'
import { ProfileLayout } from '../../components/templates/ProfileLayout'
diff --git a/packages/web/pages/tools/import/file.tsx b/packages/web/pages/tools/import/file.tsx
index 44096d324..13fb53f6b 100644
--- a/packages/web/pages/tools/import/file.tsx
+++ b/packages/web/pages/tools/import/file.tsx
@@ -69,6 +69,12 @@ export default function ImportUploader(): JSX.Element {
'content-length': `${file.size}`,
},
})
+ if (!uploadRes) {
+ setErrorMessage(
+ 'Unable to create file upload. Please ensure you are logged in.'
+ )
+ setUploadState('none')
+ }
setUploadState('completed')
} else {
setErrorMessage(
diff --git a/packages/web/pages/zh/index.tsx b/packages/web/pages/zh/index.tsx
index df1c34a7e..01b277327 100644
--- a/packages/web/pages/zh/index.tsx
+++ b/packages/web/pages/zh/index.tsx
@@ -1,44 +1,6 @@
-import { VStack, Box } from '.././../components/elements/LayoutPrimitives'
-import {
- LandingSectionsContainer,
- GetStartedButton,
-} from '../../components/templates/landing/LandingSectionsContainer'
-import { LandingHeader } from '../../components/templates/landing/LandingHeader'
-import { LandingFooter } from '../../components/templates/landing/LandingFooter'
import { PageMetaData } from '../../components/patterns/PageMetaData'
import { About } from '../../components/templates/About'
-const containerStyles = {
- alignSelf: 'center',
- marginTop: 80,
- maxWidth: 960,
- px: '2vw',
- '@md': {
- px: '6vw',
- },
- '@xl': {
- px: '120px',
- },
-}
-
-const headingStyles = {
- fontWeight: '700',
- color: '#3D3D3D',
- fontSize: 45,
- lineHeight: '53px',
- padding: '10px',
- paddingBottom: '0px',
- textAlign: 'center',
-}
-
-const subHeadingStyles = {
- color: 'rgb(125, 125, 125)',
- padding: '10px',
- textAlign: 'center',
- width: '100%',
- fontWeight: '600',
-}
-
export default function LandingPage(): JSX.Element {
return (
<>