From 2d7fe56ce250f066a5f26346420f82f8ca88cc6d Mon Sep 17 00:00:00 2001 From: Kowyo Date: Fri, 13 Feb 2026 20:03:52 +0800 Subject: [PATCH] fix(store): handle null titles when sorting imported subscriptions (#4840) --- .../store/src/modules/subscription/getter.ts | 6 +++--- packages/internal/utils/src/utils.ts | 13 ++++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/internal/store/src/modules/subscription/getter.ts b/packages/internal/store/src/modules/subscription/getter.ts index c793f54ad..6b3f8cdb0 100644 --- a/packages/internal/store/src/modules/subscription/getter.ts +++ b/packages/internal/store/src/modules/subscription/getter.ts @@ -103,8 +103,8 @@ const sortUngroupedSubscriptionByAlphabet = ( if (!leftFeed || !rightFeed) return 0 - const comparedLeftTitle = leftSubscription.title || leftFeed.title! - const comparedRightTitle = rightSubscription.title || rightFeed.title! + const comparedLeftTitle = leftSubscription.title ?? leftFeed.title ?? "" + const comparedRightTitle = rightSubscription.title ?? rightFeed.title ?? "" return sortByAlphabet(comparedLeftTitle, comparedRightTitle) } @@ -273,7 +273,7 @@ export const getSortedFeedSubscriptionByAlphabetSelector = const leftFeed = getFeedById(a) const rightFeed = getFeedById(b) if (!leftFeed || !rightFeed) return 0 - return sortByAlphabet(leftFeed.title!, rightFeed.title!) + return sortByAlphabet(leftFeed.title ?? "", rightFeed.title ?? "") }) } diff --git a/packages/internal/utils/src/utils.ts b/packages/internal/utils/src/utils.ts index a8731223e..c6ad2949f 100644 --- a/packages/internal/utils/src/utils.ts +++ b/packages/internal/utils/src/utils.ts @@ -185,9 +185,12 @@ export const omitObjectUndefinedValue = (obj: Record) => { return newObj } -export const sortByAlphabet = (a: string, b: string) => { - const isALetter = /^[a-z]/i.test(a) - const isBLetter = /^[a-z]/i.test(b) +export const sortByAlphabet = (a: string | null | undefined, b: string | null | undefined) => { + const safeA = String(a ?? "") + const safeB = String(b ?? "") + + const isALetter = /^[a-z]/i.test(safeA) + const isBLetter = /^[a-z]/i.test(safeB) if (isALetter && !isBLetter) { return -1 @@ -197,10 +200,10 @@ export const sortByAlphabet = (a: string, b: string) => { } if (isALetter && isBLetter) { - return a.localeCompare(b) + return safeA.localeCompare(safeB) } - return a.localeCompare(b, "zh-CN") + return safeA.localeCompare(safeB, "zh-CN") } export const isEmptyObject = (obj: Record) => Object.keys(obj).length === 0