chore: Release v0.2.0-beta.2 for hotfix (#1530)
This commit is contained in:
commit
cafeb079d2
13
CHANGELOG.md
13
CHANGELOG.md
|
|
@ -1,6 +1,6 @@
|
|||
# CHANGELOG
|
||||
|
||||
# [0.2.0-beta.0](https://github.com/RSSNext/follow/compare/v0.1.2-beta.0...v0.2.0-beta.0) (2024-11-08)
|
||||
# [0.2.0-beta.2](https://github.com/RSSNext/follow/compare/v0.2.0-beta.1...v0.2.0-beta.2) (2024-11-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
|
@ -14,23 +14,26 @@
|
|||
* add Supsense wrapper for app upgrade provider ([58f1791](https://github.com/RSSNext/follow/commit/58f1791526620f470aa11c776fd7b245d54c45ab))
|
||||
* add turbo build in ci ([7b848cd](https://github.com/RSSNext/follow/commit/7b848cd08aa4f97b1df35666166561d6fc30c5c9))
|
||||
* adjust activation toast style ([e81245e](https://github.com/RSSNext/follow/commit/e81245e395ce1829f0c185a5a184c4cba8f8406c))
|
||||
* allow select from all sidebar ([198bb17](https://github.com/RSSNext/follow/commit/198bb17d838729ec0c406a2c6eed2fba97b196b3))
|
||||
* app upgrade toast open link should in new window ([fc81546](https://github.com/RSSNext/follow/commit/fc81546bed6b07626215a57543a735001728f520))
|
||||
* app upgraded toast href error ([#1444](https://github.com/RSSNext/follow/issues/1444)) ([c875d69](https://github.com/RSSNext/follow/commit/c875d697b2a1cd9e49f3c91397531a82928e1bc8))
|
||||
* assets rewrite ([#1204](https://github.com/RSSNext/follow/issues/1204)) ([488e8ef](https://github.com/RSSNext/follow/commit/488e8effc6f00769df7dbf68d4e6d1e4e950b8e7))
|
||||
* auto archived list flash ([#1269](https://github.com/RSSNext/follow/issues/1269)) ([8d2478c](https://github.com/RSSNext/follow/commit/8d2478c6a93aa9f5a99fddc55bbb8e532e1a0fe1))
|
||||
* auto load achieved entries when show achieved button is available ([074a60d](https://github.com/RSSNext/follow/commit/074a60d3cf93bcede88ea4d70b07cf7480be4229))
|
||||
* **boost:** card text align center ([632d5d4](https://github.com/RSSNext/follow/commit/632d5d42d67999523e602fb18f59ca72543b7d7a))
|
||||
* build ([740783a](https://github.com/RSSNext/follow/commit/740783a537f85e0bc215cd38ce37bf5bd6fc9b1a))
|
||||
* build pre script ([8bd2de8](https://github.com/RSSNext/follow/commit/8bd2de84b898ffc1a4863d29d7056a0b9e7a9e2f))
|
||||
* bump config ([117bd1b](https://github.com/RSSNext/follow/commit/117bd1ba08e4c287dc071669614567197e470d12))
|
||||
* can not exit entry by close button ([e654c3a](https://github.com/RSSNext/follow/commit/e654c3ac165e5eb276ba51dc4ae0ab2da230a9d1)), closes [#1311](https://github.com/RSSNext/follow/issues/1311)
|
||||
* can not play bilibili video ([11ff813](https://github.com/RSSNext/follow/commit/11ff813c450fb519292b187a15236abe7d900abb)), closes [#1376](https://github.com/RSSNext/follow/issues/1376)
|
||||
* **ci:** concurrency group ([fb0152e](https://github.com/RSSNext/follow/commit/fb0152eaec76b28ed9fc26381917ca7ec2aecb0b))
|
||||
* **ci:** forge build error ([#1500](https://github.com/RSSNext/follow/issues/1500)) ([a5e3e02](https://github.com/RSSNext/follow/commit/a5e3e0228c7088e78061801466267ebdbd288e2c))
|
||||
* **ci:** turbo not found ([c812bd7](https://github.com/RSSNext/follow/commit/c812bd71aabc63b5c9ebbe032f25aba5ac51bd64))
|
||||
* **ci:** windows build ([9f72c26](https://github.com/RSSNext/follow/commit/9f72c263a6945fe90899f85f732c0866c7f61b25))
|
||||
* clear selection when pointer down, fixed [#1448](https://github.com/RSSNext/follow/issues/1448) ([33d3906](https://github.com/RSSNext/follow/commit/33d39067b5c5fdc8f302ca3ea13a740bbb014088))
|
||||
* **cmdk:** change default cmdk search type to feed ([4a8fdea](https://github.com/RSSNext/follow/commit/4a8fdea84a4df90313f8c577d77d3944a34aa149))
|
||||
* correct z-index in toast ([6507744](https://github.com/RSSNext/follow/commit/6507744847b6ceee093adb17076292993d525313))
|
||||
* csrf token singleton ([b4e935f](https://github.com/RSSNext/follow/commit/b4e935fba0b2f874a5c24006d5afdd54f50f3e76))
|
||||
* csrf token singleton ([#1463](https://github.com/RSSNext/follow/issues/1463)) ([16b5349](https://github.com/RSSNext/follow/commit/16b5349c3d4461356ef124c10df8c117fd3bac81))
|
||||
* css editor lazy and input composition handler ([5c6004a](https://github.com/RSSNext/follow/commit/5c6004a0905c6207c6119de0d37e9a5baf744dab))
|
||||
* ctx sub menu z-index higher than root ([8daec12](https://github.com/RSSNext/follow/commit/8daec12d2c1e61260b8917ee43066b752d4c9f06))
|
||||
* debug html ([e9afc79](https://github.com/RSSNext/follow/commit/e9afc7944f4dc42be2ea530b4852e9c2f6207ac8))
|
||||
|
|
@ -39,7 +42,9 @@
|
|||
* disable `pointerDownOutside` trigger `onDismiss` ([#1215](https://github.com/RSSNext/follow/issues/1215)) ([2bf5245](https://github.com/RSSNext/follow/commit/2bf5245126bc9ef890c06afe5a825d1e1ab4059c))
|
||||
* disable auto load archive for inbox and list ([7825e16](https://github.com/RSSNext/follow/commit/7825e16b6d1230ba2c13e5ef00474fc05cc510e5))
|
||||
* **discover:** card text truncate ([557e912](https://github.com/RSSNext/follow/commit/557e91228af27251663904dfd3211c535b5b5415))
|
||||
* dnd and scroll ([#1528](https://github.com/RSSNext/follow/issues/1528)) ([b1e28be](https://github.com/RSSNext/follow/commit/b1e28be2b0049eae73d51a18cd9180b077a512ca))
|
||||
* dnd responsive ([1f51abe](https://github.com/RSSNext/follow/commit/1f51abe3ed2fbca66e6d9ab2ab63ef71b7b9eda4))
|
||||
* don't cache user session ([e8d7e6c](https://github.com/RSSNext/follow/commit/e8d7e6ce64d09bb1f2b8f3e26f7aba250c3cca84))
|
||||
* entry action deps ([4eba28b](https://github.com/RSSNext/follow/commit/4eba28b76fc62133ecd0e4746b3bb0b4d341b338))
|
||||
* entry thumbnail keep origin aspect ratio ([6e04e6e](https://github.com/RSSNext/follow/commit/6e04e6eacd6346bd2869c683ec417932a0d13807))
|
||||
* entry title bar margin-left in zen mode ([25abd8f](https://github.com/RSSNext/follow/commit/25abd8ff1c42a37b741676e1b3a3312f99decb8a))
|
||||
|
|
@ -81,6 +86,7 @@
|
|||
* optimize the animation of the Follow button on the User Profile Modal ([#1156](https://github.com/RSSNext/follow/issues/1156)) ([87717d6](https://github.com/RSSNext/follow/commit/87717d642607cca4254f11d673a8a910fc6ab076))
|
||||
* pass a component for Trans ([7d38cb6](https://github.com/RSSNext/follow/commit/7d38cb6d2f814d3b6012b66ba6024c05b6edcf2d))
|
||||
* pnpm lockfile ([fdc547a](https://github.com/RSSNext/follow/commit/fdc547a5aaeb11aa13d6321ea60f1d3a4e01a8b4))
|
||||
* polling unread and add ua for electron api client ([549f10d](https://github.com/RSSNext/follow/commit/549f10d7ebb9e0eca9faa4d9cb27b7e448a8af0f))
|
||||
* power icon align ([11059f6](https://github.com/RSSNext/follow/commit/11059f639ee955a0f10cbd97cb6eed85e335fed7))
|
||||
* preferred title not working in entry column ([#1268](https://github.com/RSSNext/follow/issues/1268)) ([4bdf28e](https://github.com/RSSNext/follow/commit/4bdf28ea766242c74af051e36a9ef205f02eb874))
|
||||
* prevent default for cmd+k ([81d49f0](https://github.com/RSSNext/follow/commit/81d49f0893100de85a22d114765f76e7c9dea36c))
|
||||
|
|
@ -93,8 +99,10 @@
|
|||
* relogin ([80515f6](https://github.com/RSSNext/follow/commit/80515f67652a77fbdbe20a2a3298fd916515a8d7))
|
||||
* remove `useSingleton` ([d1d3fcf](https://github.com/RSSNext/follow/commit/d1d3fcf493bf26ce58cd33fedd7320cfcfe8ef5f))
|
||||
* remove cache-control header ([#1202](https://github.com/RSSNext/follow/issues/1202)) ([c683bda](https://github.com/RSSNext/follow/commit/c683bdaef63716659ca78875022ff38350e50b82))
|
||||
* remove callbackUrl in electron ([10a217e](https://github.com/RSSNext/follow/commit/10a217e8c1262a7ab695f65e21087d96169930bb))
|
||||
* remove gcore icon ([#1220](https://github.com/RSSNext/follow/issues/1220)) ([486fa20](https://github.com/RSSNext/follow/commit/486fa202ee9488981a733f235f95c90a073e7166))
|
||||
* remove immer set to avoid object extensible ([7e5a791](https://github.com/RSSNext/follow/commit/7e5a79155a083a8242579dee18d019049b7ad6f5))
|
||||
* remove vercel header rewrite ([#1463](https://github.com/RSSNext/follow/issues/1463)) ([#1480](https://github.com/RSSNext/follow/issues/1480)) ([94971da](https://github.com/RSSNext/follow/commit/94971dad4e1d828aa4c90d8f02445cc04a8500c9))
|
||||
* remove vercel header rewrite for assets ([79e6f48](https://github.com/RSSNext/follow/commit/79e6f483265216773e0ccf5ac0690d06300d3e80))
|
||||
* response error toast style ([7748588](https://github.com/RSSNext/follow/commit/77485886089e9faea54cf80a96a48a0bedd2a39e))
|
||||
* scroll bar z index ([5057999](https://github.com/RSSNext/follow/commit/50579995367b871e84768c5983b3302f75f8e077)), closes [#1233](https://github.com/RSSNext/follow/issues/1233)
|
||||
|
|
@ -128,6 +136,7 @@
|
|||
* **ui:** use safe inset top to fix windows overlays, fixed [#1184](https://github.com/RSSNext/follow/issues/1184) ([dc85570](https://github.com/RSSNext/follow/commit/dc855703289ac98db76f4a57760fcd66047b8dd1))
|
||||
* **ui:** user profile follow button style ([d629215](https://github.com/RSSNext/follow/commit/d629215305a0ec9323dea0db929582e9609a82f6))
|
||||
* update daily claim amount reference in tooltip ([#1487](https://github.com/RSSNext/follow/issues/1487)) ([3792c2d](https://github.com/RSSNext/follow/commit/3792c2d850d9fc3f96ea4591784b61c631ee7e86))
|
||||
* update tray icon path for windows and improve tray behavior ([#1511](https://github.com/RSSNext/follow/issues/1511)) ([3706874](https://github.com/RSSNext/follow/commit/3706874e42c215a84df71eae1c135a114be8985a))
|
||||
* update version toast ([25e7cea](https://github.com/RSSNext/follow/commit/25e7cea3c139335960c3de2922cf0ffa9c9c6c39)), closes [#1450](https://github.com/RSSNext/follow/issues/1450)
|
||||
* **upgrade:** changelog container should w-full ([1551bf6](https://github.com/RSSNext/follow/commit/1551bf648c511cbf615f515b2e2d93077b0e42b4))
|
||||
* vercel do not support `__` prefix for api route ([45a66e0](https://github.com/RSSNext/follow/commit/45a66e0f972d18831795d92b1d3c1f3893f396dc))
|
||||
|
|
|
|||
|
|
@ -16,6 +16,11 @@ export const doMigration = async () => {
|
|||
|
||||
if (lastVersion === APP_VERSION) return
|
||||
|
||||
const lastVersionParts = lastVersion.split("-")
|
||||
const lastVersionMajorMinor = lastVersionParts[0]
|
||||
const currentVersionMajorMinor = APP_VERSION.split("-")[0]
|
||||
if (lastVersionMajorMinor === currentVersionMajorMinor) return
|
||||
|
||||
// NOTE: Add migration logic here
|
||||
|
||||
if (!APP_VERSION.includes("nightly")) {
|
||||
|
|
|
|||
|
|
@ -44,3 +44,6 @@ export const [
|
|||
setSelectedFeedIds,
|
||||
useSelectedFeedIdsSelector,
|
||||
] = createAtomHooks(atom<string[]>([]))
|
||||
|
||||
export const [, , useFeedAreaScrollProgressValue, , , setFeedAreaScrollProgressValue] =
|
||||
createAtomHooks(atom(0))
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
import { useDndContext } from "@dnd-kit/core"
|
||||
|
||||
import { useFeedAreaScrollProgressValue } from "./atom"
|
||||
|
||||
export function useShouldFreeUpSpace() {
|
||||
const dndContext = useDndContext()
|
||||
const isDragging = !!dndContext.active
|
||||
const scrollProgress = useFeedAreaScrollProgressValue()
|
||||
return isDragging && scrollProgress === 0
|
||||
}
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
import { DndContext, pointerWithin, useDroppable } from "@dnd-kit/core"
|
||||
import { useDroppable } from "@dnd-kit/core"
|
||||
import { ActionButton } from "@follow/components/ui/button/index.js"
|
||||
import type { FeedViewType } from "@follow/constants"
|
||||
import { Routes, views } from "@follow/constants"
|
||||
import { useTypeScriptHappyCallback } from "@follow/hooks"
|
||||
import { useRegisterGlobalContext } from "@follow/shared/bridge"
|
||||
|
|
@ -21,15 +20,15 @@ import { shortcuts } from "~/constants/shortcuts"
|
|||
import { useNavigateEntry } from "~/hooks/biz/useNavigateEntry"
|
||||
import { useReduceMotion } from "~/hooks/biz/useReduceMotion"
|
||||
import { getRouteParams } from "~/hooks/biz/useRouteParams"
|
||||
import { useBatchUpdateSubscription } from "~/hooks/biz/useSubscriptionActions"
|
||||
import { useAuthQuery } from "~/hooks/common"
|
||||
import { Queries } from "~/queries"
|
||||
import { useSubscriptionStore } from "~/store/subscription"
|
||||
import { useFeedUnreadStore } from "~/store/unread"
|
||||
|
||||
import { WindowUnderBlur } from "../../components/ui/background"
|
||||
import { getSelectedFeedIds, setSelectedFeedIds, useSelectedFeedIds } from "./atom"
|
||||
import { getSelectedFeedIds, setSelectedFeedIds } from "./atom"
|
||||
import { FeedColumnHeader } from "./header"
|
||||
import { useShouldFreeUpSpace } from "./hook"
|
||||
import { FeedList } from "./list"
|
||||
|
||||
const lethargy = new Lethargy()
|
||||
|
|
@ -138,72 +137,52 @@ export function FeedColumn({ children, className }: PropsWithChildren<{ classNam
|
|||
window.router.navigate(Routes.Discover)
|
||||
})
|
||||
|
||||
const [selectedIds, setSelectedIds] = useSelectedFeedIds()
|
||||
|
||||
const { mutate } = useBatchUpdateSubscription()
|
||||
const shouldFreeUpSpace = useShouldFreeUpSpace()
|
||||
|
||||
return (
|
||||
<DndContext
|
||||
collisionDetection={pointerWithin}
|
||||
onDragEnd={(event) => {
|
||||
if (!event.over) {
|
||||
return
|
||||
}
|
||||
|
||||
const { category, view } = event.over.data.current as {
|
||||
category: string
|
||||
view: FeedViewType
|
||||
}
|
||||
|
||||
mutate({ category, view, feedIdList: selectedIds })
|
||||
|
||||
setSelectedIds([])
|
||||
}}
|
||||
<WindowUnderBlur
|
||||
className={cn("relative flex h-full flex-col space-y-3 pt-2.5", className)}
|
||||
onClick={useCallback(() => navigateBackHome(), [navigateBackHome])}
|
||||
>
|
||||
<WindowUnderBlur
|
||||
className={cn("relative flex h-full flex-col space-y-3 pt-2.5", className)}
|
||||
onClick={useCallback(() => navigateBackHome(), [navigateBackHome])}
|
||||
<FeedColumnHeader />
|
||||
|
||||
<div
|
||||
className="flex w-full justify-between px-3 text-xl text-theme-vibrancyFg"
|
||||
onClick={stopPropagation}
|
||||
>
|
||||
<FeedColumnHeader />
|
||||
|
||||
<div
|
||||
className="flex w-full justify-between px-3 text-xl text-theme-vibrancyFg"
|
||||
onClick={stopPropagation}
|
||||
>
|
||||
{views.map((item, index) => (
|
||||
<ViewSwitchButton
|
||||
key={item.name}
|
||||
item={item}
|
||||
index={index}
|
||||
active={active}
|
||||
setActive={setActive}
|
||||
useHotkeysSwitch={useHotkeysSwitch}
|
||||
setUseHotkeysSwitch={setUseHotkeysSwitch}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
<div
|
||||
className={cn("relative flex size-full", !shouldFreeUpSpace && "overflow-hidden")}
|
||||
ref={carouselRef}
|
||||
onPointerDown={useTypeScriptHappyCallback((e) => {
|
||||
if (!(e.target instanceof HTMLElement) || !e.target.closest("[data-feed-id]")) {
|
||||
const nextSelectedFeedIds = getSelectedFeedIds()
|
||||
setSelectedFeedIds(nextSelectedFeedIds.length === 0 ? nextSelectedFeedIds : [])
|
||||
}
|
||||
}, [])}
|
||||
>
|
||||
<SwipeWrapper active={active}>
|
||||
{views.map((item, index) => (
|
||||
<ViewSwitchButton
|
||||
key={item.name}
|
||||
item={item}
|
||||
index={index}
|
||||
active={active}
|
||||
setActive={setActive}
|
||||
useHotkeysSwitch={useHotkeysSwitch}
|
||||
setUseHotkeysSwitch={setUseHotkeysSwitch}
|
||||
/>
|
||||
<section key={item.name} className="h-full w-feed-col shrink-0 snap-center">
|
||||
<FeedList className="flex size-full flex-col text-sm" view={index} />
|
||||
</section>
|
||||
))}
|
||||
</div>
|
||||
<div
|
||||
className="relative flex size-full"
|
||||
ref={carouselRef}
|
||||
onPointerDown={useTypeScriptHappyCallback((e) => {
|
||||
if (!(e.target instanceof HTMLElement) || !e.target.closest("[data-feed-id]")) {
|
||||
const nextSelectedFeedIds = getSelectedFeedIds()
|
||||
setSelectedFeedIds(nextSelectedFeedIds.length === 0 ? nextSelectedFeedIds : [])
|
||||
}
|
||||
}, [])}
|
||||
>
|
||||
<SwipeWrapper active={active}>
|
||||
{views.map((item, index) => (
|
||||
<section key={item.name} className="h-full w-feed-col shrink-0 snap-center">
|
||||
<FeedList className="flex size-full flex-col text-sm" view={index} />
|
||||
</section>
|
||||
))}
|
||||
</SwipeWrapper>
|
||||
</div>
|
||||
</SwipeWrapper>
|
||||
</div>
|
||||
|
||||
{children}
|
||||
</WindowUnderBlur>
|
||||
</DndContext>
|
||||
{children}
|
||||
</WindowUnderBlur>
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import { memo, useMemo, useRef, useState } from "react"
|
|||
import { useTranslation } from "react-i18next"
|
||||
import { Link } from "react-router-dom"
|
||||
import Selecto from "react-selecto"
|
||||
import { useEventListener } from "usehooks-ts"
|
||||
|
||||
import { IconOpacityTransition } from "~/components/ux/transition/icon"
|
||||
import { FEED_COLLECTION_LIST } from "~/constants"
|
||||
|
|
@ -26,12 +27,14 @@ import { useFeedUnreadStore } from "~/store/unread"
|
|||
|
||||
import {
|
||||
getFeedListSort,
|
||||
setFeedAreaScrollProgressValue,
|
||||
setFeedListSortBy,
|
||||
setFeedListSortOrder,
|
||||
useFeedListSort,
|
||||
useSelectedFeedIds,
|
||||
} from "./atom"
|
||||
import { DraggableContext } from "./context"
|
||||
import { useShouldFreeUpSpace } from "./hook"
|
||||
import { SortableFeedList, SortByAlphabeticalInbox, SortByAlphabeticalList } from "./sort-by"
|
||||
import { feedColumnStyles } from "./styles"
|
||||
import { UnreadNumber } from "./unread-number"
|
||||
|
|
@ -161,6 +164,32 @@ function FeedListImpl({ className, view }: { className?: string; view: number })
|
|||
[attributes, listeners, style],
|
||||
)
|
||||
|
||||
useEventListener(
|
||||
"scroll",
|
||||
() => {
|
||||
const round = (num: number) => Math.round(num * 1e2) / 1e2
|
||||
const getPositions = () => {
|
||||
const el = scrollerRef.current
|
||||
if (!el) return
|
||||
|
||||
return {
|
||||
x: round(el.scrollLeft / (el.scrollWidth - el.clientWidth)),
|
||||
y: round(el.scrollTop / (el.scrollHeight - el.clientHeight)),
|
||||
}
|
||||
}
|
||||
|
||||
const newScrollValues = getPositions()
|
||||
if (!newScrollValues) return
|
||||
|
||||
const { y } = newScrollValues
|
||||
setFeedAreaScrollProgressValue(y)
|
||||
},
|
||||
scrollerRef,
|
||||
{ capture: false, passive: true },
|
||||
)
|
||||
|
||||
const shouldFreeUpSpace = useShouldFreeUpSpace()
|
||||
|
||||
return (
|
||||
<div className={cn(className, "font-medium")}>
|
||||
<ListHeader view={view} />
|
||||
|
|
@ -207,8 +236,8 @@ function FeedListImpl({ className, view }: { className?: string; view: number })
|
|||
}}
|
||||
mask={false}
|
||||
flex
|
||||
viewportClassName={cn("!px-3", isDragging && "!overflow-visible")}
|
||||
rootClassName={cn("h-full", isDragging && "overflow-visible")}
|
||||
viewportClassName={cn("!px-3", shouldFreeUpSpace && "!overflow-visible")}
|
||||
rootClassName={cn("h-full", shouldFreeUpSpace && "overflow-visible")}
|
||||
>
|
||||
<div
|
||||
data-active={feedId === FEED_COLLECTION_LIST}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
import { DndContext, pointerWithin } from "@dnd-kit/core"
|
||||
import { useViewport } from "@follow/components/hooks/useViewport.js"
|
||||
import { PanelSplitter } from "@follow/components/ui/divider/index.js"
|
||||
import { RootPortal } from "@follow/components/ui/portal/index.jsx"
|
||||
import type { FeedViewType } from "@follow/constants"
|
||||
import { IN_ELECTRON } from "@follow/shared/constants"
|
||||
import { preventDefault } from "@follow/utils/dom"
|
||||
import { cn } from "@follow/utils/utils"
|
||||
|
|
@ -33,12 +35,14 @@ import { DeclarativeModal } from "~/components/ui/modal/stacked/declarative-moda
|
|||
import { HotKeyScopeMap, isDev, isWebBuild } from "~/constants"
|
||||
import { shortcuts } from "~/constants/shortcuts"
|
||||
import { useDailyTask } from "~/hooks/biz/useDailyTask"
|
||||
import { useBatchUpdateSubscription } from "~/hooks/biz/useSubscriptionActions"
|
||||
import { useAuthQuery, useI18n } from "~/hooks/common"
|
||||
import { EnvironmentIndicator } from "~/modules/app/EnvironmentIndicator"
|
||||
import { NetworkStatusIndicator } from "~/modules/app/NetworkStatusIndicator"
|
||||
import { LoginModalContent } from "~/modules/auth/LoginModalContent"
|
||||
import { DebugRegistry } from "~/modules/debug/registry"
|
||||
import { FeedColumn } from "~/modules/feed-column"
|
||||
import { useSelectedFeedIds } from "~/modules/feed-column/atom"
|
||||
import { AutoUpdater } from "~/modules/feed-column/auto-updater"
|
||||
import { CornerPlayer } from "~/modules/feed-column/corner-player"
|
||||
import { useShortcutsModal } from "~/modules/modal/shortcuts"
|
||||
|
|
@ -101,6 +105,10 @@ export function Component() {
|
|||
const { data: remoteSettings, isLoading } = useAuthQuery(settings.get(), {})
|
||||
const isNewUser = !isLoading && remoteSettings && Object.keys(remoteSettings.updated).length === 0
|
||||
|
||||
const [selectedIds, setSelectedIds] = useSelectedFeedIds()
|
||||
|
||||
const { mutate } = useBatchUpdateSubscription()
|
||||
|
||||
if (isNotSupportWidth) {
|
||||
return <NotSupport />
|
||||
}
|
||||
|
|
@ -114,14 +122,32 @@ export function Component() {
|
|||
</Suspense>
|
||||
<AppLayoutGridContainerProvider>
|
||||
<FeedResponsiveResizerContainer containerRef={containerRef}>
|
||||
<FeedColumn>
|
||||
<CornerPlayer />
|
||||
<FooterInfo />
|
||||
<DndContext
|
||||
collisionDetection={pointerWithin}
|
||||
onDragEnd={(event) => {
|
||||
if (!event.over) {
|
||||
return
|
||||
}
|
||||
|
||||
{ELECTRON && <AutoUpdater />}
|
||||
const { category, view } = event.over.data.current as {
|
||||
category: string
|
||||
view: FeedViewType
|
||||
}
|
||||
|
||||
<NetworkStatusIndicator />
|
||||
</FeedColumn>
|
||||
mutate({ category, view, feedIdList: selectedIds })
|
||||
|
||||
setSelectedIds([])
|
||||
}}
|
||||
>
|
||||
<FeedColumn>
|
||||
<CornerPlayer />
|
||||
<FooterInfo />
|
||||
|
||||
{ELECTRON && <AutoUpdater />}
|
||||
|
||||
<NetworkStatusIndicator />
|
||||
</FeedColumn>
|
||||
</DndContext>
|
||||
</FeedResponsiveResizerContainer>
|
||||
</AppLayoutGridContainerProvider>
|
||||
|
||||
|
|
|
|||
|
|
@ -54,7 +54,13 @@ class FeedActions {
|
|||
if (targetFeed?.owner) {
|
||||
feed.owner = { ...targetFeed.owner }
|
||||
}
|
||||
if (targetFeed && "tipUsers" in targetFeed && targetFeed.tipUsers) {
|
||||
if (
|
||||
targetFeed &&
|
||||
"tipUsers" in targetFeed &&
|
||||
targetFeed.tipUsers &&
|
||||
// Workaround for type issue
|
||||
Array.isArray(targetFeed.tipUsers)
|
||||
) {
|
||||
feed.tipUsers = [...targetFeed.tipUsers]
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,4 +13,5 @@ export default defineConfig({
|
|||
commit_message: "chore(release): hotfix to release v${NEW_VERSION}",
|
||||
tag: false,
|
||||
changelog: true,
|
||||
allowedBranches: ["hotfix/*"],
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# What's new in v0.1.2-beta.0
|
||||
# What's new in v0.1.2
|
||||
|
||||
## Features
|
||||
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
# What's new in v0.2.0-beta.0
|
||||
|
||||
## New Features
|
||||
|
||||
- Feed owners can now reset their feeds.
|
||||
- Image Gallery: Clicking on the image button in the entry opens the Image gallery modal (only if there are multiple large images in the entry!).
|
||||
- Now you can export the data from the local database.
|
||||
- App: In consideration of your hard drive, now it supports clearing cache and limiting the size of cache.
|
||||
- Added a new feature to allow minimizing to the system tray by enabling a switch in the settings.
|
||||
- Discover Page: Enhance RSSHub recommendations with filters
|
||||
- Quickly update views or categories at once by dragging and dropping.
|
||||
|
||||
## Improvements
|
||||
|
||||
- Optimized the Zen mode experience on macOS.
|
||||
- Improvement web app global shortcuts.
|
||||
- Optimized the Timeline's data cache, reducing data reloads within a short period of time. You can go to Settings -> General -> Timeline -> Reduce timeline refetch to control this feature, default is enabled.
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
- Fixed the issue where the Volume of VideoPlayer was not clickable.
|
||||
- While using arrow keys to switch between entries, the entry view will not scroll unexpexted.
|
||||
|
|
@ -19,8 +19,10 @@ const pkg = JSON.parse(readFileSync(resolve(pkgDir, "./package.json"), "utf8"))
|
|||
const isCI = process.env.CI === "true" || process.env.CI === "1"
|
||||
|
||||
const getChangelogFileContent = () => {
|
||||
const { version } = pkg
|
||||
const { version: pkgVersion } = pkg
|
||||
const isDev = process.env.NODE_ENV === "development"
|
||||
// get major-minor-patch, e.g. 0.2.0-beta.2 -> 0.2.0
|
||||
const version = pkgVersion.split("-")[0]
|
||||
try {
|
||||
return readFileSync(resolve(pkgDir, "./changelog", `${isDev ? "next" : version}.md`), "utf8")
|
||||
} catch {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "Follow",
|
||||
"type": "module",
|
||||
"version": "0.2.0-beta.1",
|
||||
"version": "0.2.0-beta.2",
|
||||
"private": true,
|
||||
"packageManager": "pnpm@9.12.3",
|
||||
"description": "Next generation information browser",
|
||||
|
|
|
|||
|
|
@ -9,11 +9,13 @@ const nextFile = join(changelogDir, "next.md")
|
|||
|
||||
const new_version = process.argv[2]
|
||||
|
||||
const majorMinorPatch = new_version.split("-")[0]
|
||||
|
||||
const nextContent = readFileSync(nextFile, "utf-8")
|
||||
writeFileSync(nextFile, nextContent.replaceAll("NEXT_VERSION", new_version))
|
||||
writeFileSync(nextFile, nextContent.replaceAll("NEXT_VERSION", majorMinorPatch))
|
||||
|
||||
// Rename the next.md to the new version
|
||||
renameSync(nextFile, join(changelogDir, `${new_version}.md`))
|
||||
renameSync(nextFile, join(changelogDir, `${majorMinorPatch}.md`))
|
||||
// Replace the NEXT_VERSION in the next.md file with the new version
|
||||
|
||||
// Create the new next.md file
|
||||
|
|
|
|||
Loading…
Reference in New Issue