forked from Archives/Athou_commafeed
add previous and next buttons (#1096)
This commit is contained in:
@@ -89,6 +89,7 @@ export const Constants = {
|
|||||||
mobileBreakpoint: DEFAULT_THEME.breakpoints.md,
|
mobileBreakpoint: DEFAULT_THEME.breakpoints.md,
|
||||||
headerHeight: 60,
|
headerHeight: 60,
|
||||||
entryMaxWidth: 650,
|
entryMaxWidth: 650,
|
||||||
|
buttonSpacing: 14,
|
||||||
isTopVisible: (div: HTMLElement) => div.getBoundingClientRect().top >= Constants.layout.headerHeight,
|
isTopVisible: (div: HTMLElement) => div.getBoundingClientRect().top >= Constants.layout.headerHeight,
|
||||||
isBottomVisible: (div: HTMLElement) => div.getBoundingClientRect().bottom <= window.innerHeight,
|
isBottomVisible: (div: HTMLElement) => div.getBoundingClientRect().bottom <= window.innerHeight,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ interface ActionButtonProps {
|
|||||||
export const ActionButton = forwardRef<HTMLButtonElement, ActionButtonProps>((props: ActionButtonProps, ref) => {
|
export const ActionButton = forwardRef<HTMLButtonElement, ActionButtonProps>((props: ActionButtonProps, ref) => {
|
||||||
const theme = useMantineTheme()
|
const theme = useMantineTheme()
|
||||||
const variant = props.variant ?? "subtle"
|
const variant = props.variant ?? "subtle"
|
||||||
const mobile = useMobile(theme.breakpoints.lg)
|
const mobile = useMobile(theme.breakpoints.xl)
|
||||||
const iconOnly = (mobile && !props.showLabelOnMobile) || (!mobile && props.hideLabelOnDesktop)
|
const iconOnly = (mobile && !props.showLabelOnMobile) || (!mobile && props.hideLabelOnDesktop)
|
||||||
return iconOnly ? (
|
return iconOnly ? (
|
||||||
<Tooltip label={props.label} openDelay={500}>
|
<Tooltip label={props.label} openDelay={500}>
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
import { Group } from "@mantine/core"
|
|
||||||
|
|
||||||
export function ButtonToolbar(props: { children: React.ReactNode }) {
|
|
||||||
return <Group spacing={14}>{props.children}</Group>
|
|
||||||
}
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import { t, Trans } from "@lingui/macro"
|
import { t, Trans } from "@lingui/macro"
|
||||||
import { Group, Indicator, MultiSelect, Popover } from "@mantine/core"
|
import { Group, Indicator, MultiSelect, Popover } from "@mantine/core"
|
||||||
|
import { Constants } from "app/constants"
|
||||||
import { markEntriesUpToEntry, markEntry, starEntry, tagEntry } from "app/slices/entries"
|
import { markEntriesUpToEntry, markEntry, starEntry, tagEntry } from "app/slices/entries"
|
||||||
import { useAppDispatch, useAppSelector } from "app/store"
|
import { useAppDispatch, useAppSelector } from "app/store"
|
||||||
import { Entry } from "app/types"
|
import { Entry } from "app/types"
|
||||||
import { ActionButton } from "components/ActionButtton"
|
import { ActionButton } from "components/ActionButtton"
|
||||||
import { ButtonToolbar } from "components/ButtonToolbar"
|
|
||||||
import { useMobile } from "hooks/useMobile"
|
import { useMobile } from "hooks/useMobile"
|
||||||
import { TbArrowBarToDown, TbExternalLink, TbEyeCheck, TbEyeOff, TbShare, TbStar, TbStarOff, TbTag } from "react-icons/tb"
|
import { TbArrowBarToDown, TbExternalLink, TbEyeCheck, TbEyeOff, TbShare, TbStar, TbStarOff, TbTag } from "react-icons/tb"
|
||||||
import { ShareButtons } from "./ShareButtons"
|
import { ShareButtons } from "./ShareButtons"
|
||||||
@@ -32,7 +32,7 @@ export function FeedEntryFooter(props: FeedEntryFooterProps) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Group position="apart">
|
<Group position="apart">
|
||||||
<ButtonToolbar>
|
<Group spacing={Constants.layout.buttonSpacing}>
|
||||||
{props.entry.markable && (
|
{props.entry.markable && (
|
||||||
<ActionButton
|
<ActionButton
|
||||||
icon={props.entry.read ? <TbEyeOff size={18} /> : <TbEyeCheck size={18} />}
|
icon={props.entry.read ? <TbEyeOff size={18} /> : <TbEyeCheck size={18} />}
|
||||||
@@ -82,7 +82,7 @@ export function FeedEntryFooter(props: FeedEntryFooterProps) {
|
|||||||
<a href={props.entry.url} target="_blank" rel="noreferrer">
|
<a href={props.entry.url} target="_blank" rel="noreferrer">
|
||||||
<ActionButton icon={<TbExternalLink size={18} />} label={<Trans>Open link</Trans>} />
|
<ActionButton icon={<TbExternalLink size={18} />} label={<Trans>Open link</Trans>} />
|
||||||
</a>
|
</a>
|
||||||
</ButtonToolbar>
|
</Group>
|
||||||
|
|
||||||
<ActionButton
|
<ActionButton
|
||||||
icon={<TbArrowBarToDown size={18} />}
|
icon={<TbArrowBarToDown size={18} />}
|
||||||
|
|||||||
@@ -1,15 +1,29 @@
|
|||||||
import { t, Trans } from "@lingui/macro"
|
import { t, Trans } from "@lingui/macro"
|
||||||
import { ActionIcon, Center, Divider, Indicator, Popover, TextInput } from "@mantine/core"
|
import { ActionIcon, Box, Center, Divider, Group, Indicator, Popover, TextInput } from "@mantine/core"
|
||||||
import { useForm } from "@mantine/form"
|
import { useForm } from "@mantine/form"
|
||||||
import { reloadEntries, search } from "app/slices/entries"
|
import { Constants } from "app/constants"
|
||||||
|
import { reloadEntries, search, selectNextEntry, selectPreviousEntry } from "app/slices/entries"
|
||||||
import { changeReadingMode, changeReadingOrder } from "app/slices/user"
|
import { changeReadingMode, changeReadingOrder } from "app/slices/user"
|
||||||
import { useAppDispatch, useAppSelector } from "app/store"
|
import { useAppDispatch, useAppSelector } from "app/store"
|
||||||
import { ActionButton } from "components/ActionButtton"
|
import { ActionButton } from "components/ActionButtton"
|
||||||
import { ButtonToolbar } from "components/ButtonToolbar"
|
|
||||||
import { Loader } from "components/Loader"
|
import { Loader } from "components/Loader"
|
||||||
import { useBrowserExtension } from "hooks/useBrowserExtension"
|
import { useBrowserExtension } from "hooks/useBrowserExtension"
|
||||||
|
import { useMobile } from "hooks/useMobile"
|
||||||
import { useEffect } from "react"
|
import { useEffect } from "react"
|
||||||
import { TbArrowDown, TbArrowUp, TbExternalLink, TbEye, TbEyeOff, TbRefresh, TbSearch, TbSettings, TbUser, TbX } from "react-icons/tb"
|
import {
|
||||||
|
TbArrowDown,
|
||||||
|
TbArrowUp,
|
||||||
|
TbExternalLink,
|
||||||
|
TbEye,
|
||||||
|
TbEyeOff,
|
||||||
|
TbRefresh,
|
||||||
|
TbSearch,
|
||||||
|
TbSettings,
|
||||||
|
TbSortAscending,
|
||||||
|
TbSortDescending,
|
||||||
|
TbUser,
|
||||||
|
TbX,
|
||||||
|
} from "react-icons/tb"
|
||||||
import { MarkAllAsReadButton } from "./MarkAllAsReadButton"
|
import { MarkAllAsReadButton } from "./MarkAllAsReadButton"
|
||||||
import { ProfileMenu } from "./ProfileMenu"
|
import { ProfileMenu } from "./ProfileMenu"
|
||||||
|
|
||||||
@@ -17,6 +31,24 @@ function HeaderDivider() {
|
|||||||
return <Divider orientation="vertical" />
|
return <Divider orientation="vertical" />
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function HeaderToolbar(props: { children: React.ReactNode }) {
|
||||||
|
const mobile = useMobile("480px")
|
||||||
|
return mobile ? (
|
||||||
|
// on mobile use all available width
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
width: "100%",
|
||||||
|
display: "flex",
|
||||||
|
justifyContent: "space-between",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{props.children}
|
||||||
|
</Box>
|
||||||
|
) : (
|
||||||
|
<Group spacing={Constants.layout.buttonSpacing}>{props.children}</Group>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
const iconSize = 18
|
const iconSize = 18
|
||||||
|
|
||||||
export function Header() {
|
export function Header() {
|
||||||
@@ -42,7 +74,34 @@ export function Header() {
|
|||||||
if (!settings) return <Loader />
|
if (!settings) return <Loader />
|
||||||
return (
|
return (
|
||||||
<Center>
|
<Center>
|
||||||
<ButtonToolbar>
|
<HeaderToolbar>
|
||||||
|
<ActionButton
|
||||||
|
icon={<TbArrowDown size={iconSize} />}
|
||||||
|
label={<Trans>Next</Trans>}
|
||||||
|
onClick={() =>
|
||||||
|
dispatch(
|
||||||
|
selectNextEntry({
|
||||||
|
expand: true,
|
||||||
|
markAsRead: true,
|
||||||
|
scrollToEntry: true,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
<ActionButton
|
||||||
|
icon={<TbArrowUp size={iconSize} />}
|
||||||
|
label={<Trans>Previous</Trans>}
|
||||||
|
onClick={() =>
|
||||||
|
dispatch(
|
||||||
|
selectPreviousEntry({
|
||||||
|
expand: true,
|
||||||
|
markAsRead: true,
|
||||||
|
scrollToEntry: true,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
|
||||||
<ActionButton
|
<ActionButton
|
||||||
icon={<TbRefresh size={iconSize} />}
|
icon={<TbRefresh size={iconSize} />}
|
||||||
label={<Trans>Refresh</Trans>}
|
label={<Trans>Refresh</Trans>}
|
||||||
@@ -58,7 +117,7 @@ export function Header() {
|
|||||||
onClick={() => dispatch(changeReadingMode(settings.readingMode === "all" ? "unread" : "all"))}
|
onClick={() => dispatch(changeReadingMode(settings.readingMode === "all" ? "unread" : "all"))}
|
||||||
/>
|
/>
|
||||||
<ActionButton
|
<ActionButton
|
||||||
icon={settings.readingOrder === "asc" ? <TbArrowUp size={iconSize} /> : <TbArrowDown size={iconSize} />}
|
icon={settings.readingOrder === "asc" ? <TbSortAscending size={iconSize} /> : <TbSortDescending size={iconSize} />}
|
||||||
label={settings.readingOrder === "asc" ? <Trans>Asc</Trans> : <Trans>Desc</Trans>}
|
label={settings.readingOrder === "asc" ? <Trans>Asc</Trans> : <Trans>Desc</Trans>}
|
||||||
onClick={() => dispatch(changeReadingOrder(settings.readingOrder === "asc" ? "desc" : "asc"))}
|
onClick={() => dispatch(changeReadingOrder(settings.readingOrder === "asc" ? "desc" : "asc"))}
|
||||||
/>
|
/>
|
||||||
@@ -106,7 +165,7 @@ export function Header() {
|
|||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</ButtonToolbar>
|
</HeaderToolbar>
|
||||||
</Center>
|
</Center>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "الأحدث أولاً"
|
msgstr "الأحدث أولاً"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "التالي"
|
msgstr "التالي"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "كلمات المرور غير متطابقة"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "المنـصب"
|
msgstr "المنـصب"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "الملف الشخصي"
|
msgstr "الملف الشخصي"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "El més nou primer"
|
msgstr "El més nou primer"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Següent"
|
msgstr "Següent"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Les contrasenyes no coincideixen"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Posició"
|
msgstr "Posició"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Perfil"
|
msgstr "Perfil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Nejnovější jako první"
|
msgstr "Nejnovější jako první"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Další"
|
msgstr "Další"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Hesla se neshodují"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Pozice"
|
msgstr "Pozice"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Y diweddaraf yn gyntaf"
|
msgstr "Y diweddaraf yn gyntaf"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Nesaf"
|
msgstr "Nesaf"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Nid yw cyfrineiriau yn cyfateb"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Swydd"
|
msgstr "Swydd"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Proffil"
|
msgstr "Proffil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Nyeste først"
|
msgstr "Nyeste først"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Næste"
|
msgstr "Næste"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Adgangskoder stemmer ikke overens"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Neueste zuerst"
|
msgstr "Neueste zuerst"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Weiter"
|
msgstr "Weiter"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Passwörter stimmen nicht überein"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Stellung"
|
msgstr "Stellung"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Newest first"
|
msgstr "Newest first"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Next"
|
msgstr "Next"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Passwords do not match"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Position"
|
msgstr "Position"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Previous"
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profile"
|
msgstr "Profile"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "más reciente primero"
|
msgstr "más reciente primero"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Siguiente"
|
msgstr "Siguiente"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Las contraseñas no coinciden"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Posición"
|
msgstr "Posición"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Perfil"
|
msgstr "Perfil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "ابتدا جدیدترین"
|
msgstr "ابتدا جدیدترین"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "بعد"
|
msgstr "بعد"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "گذرواژه ها مطابقت ندارند"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "موقعیت"
|
msgstr "موقعیت"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "نمایه"
|
msgstr "نمایه"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Uusin ensin"
|
msgstr "Uusin ensin"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Seuraava"
|
msgstr "Seuraava"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Salasanat eivät täsmää"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Sijainti"
|
msgstr "Sijainti"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profiili"
|
msgstr "Profiili"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Plus récent en premier"
|
msgstr "Plus récent en premier"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Suivant"
|
msgstr "Suivant"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Les mots de passe ne correspondent pas"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Position"
|
msgstr "Position"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "o máis novo primeiro"
|
msgstr "o máis novo primeiro"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Seguinte"
|
msgstr "Seguinte"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Os contrasinais non coinciden"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Posición"
|
msgstr "Posición"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Perfil"
|
msgstr "Perfil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "A legújabbak először"
|
msgstr "A legújabbak először"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Következő"
|
msgstr "Következő"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "A jelszavak nem egyeznek"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Pozíció"
|
msgstr "Pozíció"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Terbaru dulu"
|
msgstr "Terbaru dulu"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Selanjutnya"
|
msgstr "Selanjutnya"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Kata sandi tidak cocok"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Posisi"
|
msgstr "Posisi"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Il più recente prima"
|
msgstr "Il più recente prima"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Avanti"
|
msgstr "Avanti"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Le password non corrispondono"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Posizione"
|
msgstr "Posizione"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profilo"
|
msgstr "Profilo"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "最新順"
|
msgstr "最新順"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "次へ"
|
msgstr "次へ"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "パスワードが一致しません"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "位置"
|
msgstr "位置"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "プロフィール"
|
msgstr "プロフィール"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "최신순"
|
msgstr "최신순"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "다음"
|
msgstr "다음"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "비밀번호가 일치하지 않습니다"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "위치"
|
msgstr "위치"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "프로필"
|
msgstr "프로필"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Terbaharu dahulu"
|
msgstr "Terbaharu dahulu"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Seterusnya"
|
msgstr "Seterusnya"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Kata laluan tidak sepadan"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Kedudukan"
|
msgstr "Kedudukan"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Nyeste først"
|
msgstr "Nyeste først"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Neste"
|
msgstr "Neste"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Passordene samsvarer ikke"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Posisjon"
|
msgstr "Posisjon"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Nieuwste eerst"
|
msgstr "Nieuwste eerst"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Volgende"
|
msgstr "Volgende"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Wachtwoorden komen niet overeen"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Positie"
|
msgstr "Positie"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profiel"
|
msgstr "Profiel"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Nyeste først"
|
msgstr "Nyeste først"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Neste"
|
msgstr "Neste"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Passordene samsvarer ikke"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Posisjon"
|
msgstr "Posisjon"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Najnowsze jako pierwsze"
|
msgstr "Najnowsze jako pierwsze"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Dalej"
|
msgstr "Dalej"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Hasła nie pasują"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Pozycja"
|
msgstr "Pozycja"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Mais novo primeiro"
|
msgstr "Mais novo primeiro"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Próximo"
|
msgstr "Próximo"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Senhas não coincidem"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Posição"
|
msgstr "Posição"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Perfil"
|
msgstr "Perfil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Сначала новые"
|
msgstr "Сначала новые"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Далее"
|
msgstr "Далее"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Пароли не совпадают"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Позиция"
|
msgstr "Позиция"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Профиль"
|
msgstr "Профиль"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Najnovšie ako prvé"
|
msgstr "Najnovšie ako prvé"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Ďalej"
|
msgstr "Ďalej"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Heslá sa nezhodujú"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Pozícia"
|
msgstr "Pozícia"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Nyast först"
|
msgstr "Nyast först"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Nästa"
|
msgstr "Nästa"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Lösenorden matchar inte"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "Önce en yenisi"
|
msgstr "Önce en yenisi"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Sonraki"
|
msgstr "Sonraki"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "Parolalar eşleşmiyor"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "Konum"
|
msgstr "Konum"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ msgid "Newest first"
|
|||||||
msgstr "最新优先"
|
msgstr "最新优先"
|
||||||
|
|
||||||
#: src/components/content/add/Subscribe.tsx
|
#: src/components/content/add/Subscribe.tsx
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "下一个"
|
msgstr "下一个"
|
||||||
|
|
||||||
@@ -639,6 +640,10 @@ msgstr "密码不匹配"
|
|||||||
msgid "Position"
|
msgid "Position"
|
||||||
msgstr "位置"
|
msgstr "位置"
|
||||||
|
|
||||||
|
#: src/components/header/Header.tsx
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/app/SettingsPage.tsx
|
#: src/pages/app/SettingsPage.tsx
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "配置文件"
|
msgstr "配置文件"
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import { Trans } from "@lingui/macro"
|
import { Trans } from "@lingui/macro"
|
||||||
import { Anchor, Box, Center, Container, Divider, Group, Image, Title, useMantineColorScheme } from "@mantine/core"
|
import { Anchor, Box, Center, Container, Divider, Group, Image, Title, useMantineColorScheme } from "@mantine/core"
|
||||||
import { client } from "app/client"
|
import { client } from "app/client"
|
||||||
|
import { Constants } from "app/constants"
|
||||||
import { redirectToApiDocumentation, redirectToLogin, redirectToRegistration, redirectToRootCategory } from "app/slices/redirect"
|
import { redirectToApiDocumentation, redirectToLogin, redirectToRegistration, redirectToRootCategory } from "app/slices/redirect"
|
||||||
import { useAppDispatch, useAppSelector } from "app/store"
|
import { useAppDispatch, useAppSelector } from "app/store"
|
||||||
import welcome_page_dark from "assets/welcome_page_dark.png"
|
import welcome_page_dark from "assets/welcome_page_dark.png"
|
||||||
import welcome_page_light from "assets/welcome_page_light.png"
|
import welcome_page_light from "assets/welcome_page_light.png"
|
||||||
import { ActionButton } from "components/ActionButtton"
|
import { ActionButton } from "components/ActionButtton"
|
||||||
import { ButtonToolbar } from "components/ButtonToolbar"
|
|
||||||
import { useBrowserExtension } from "hooks/useBrowserExtension"
|
import { useBrowserExtension } from "hooks/useBrowserExtension"
|
||||||
import { useMobile } from "hooks/useMobile"
|
import { useMobile } from "hooks/useMobile"
|
||||||
import { useAsyncCallback } from "react-async-hook"
|
import { useAsyncCallback } from "react-async-hook"
|
||||||
@@ -73,7 +73,7 @@ function Buttons() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ButtonToolbar>
|
<Group spacing={Constants.layout.buttonSpacing}>
|
||||||
{serverInfos?.demoAccountEnabled && (
|
{serverInfos?.demoAccountEnabled && (
|
||||||
<ActionButton
|
<ActionButton
|
||||||
label={<Trans>Try the demo!</Trans>}
|
label={<Trans>Try the demo!</Trans>}
|
||||||
@@ -115,7 +115,7 @@ function Buttons() {
|
|||||||
hideLabelOnDesktop
|
hideLabelOnDesktop
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</ButtonToolbar>
|
</Group>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ export default function Layout(props: LayoutProps) {
|
|||||||
)}
|
)}
|
||||||
{!mobileMenuOpen && (
|
{!mobileMenuOpen && (
|
||||||
<Group>
|
<Group>
|
||||||
<Box mr="sm">{burger}</Box>
|
<Box>{burger}</Box>
|
||||||
<Box sx={{ flexGrow: 1 }}>{props.header}</Box>
|
<Box sx={{ flexGrow: 1 }}>{props.header}</Box>
|
||||||
</Group>
|
</Group>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user