refactor(export): remove official sessions from conversation export flow

This commit is contained in:
aits2026
2026-03-05 19:47:06 +08:00
parent 2eff82891e
commit 933842f6af

View File

@@ -598,6 +598,10 @@ const isContentScopeSession = (session: SessionRow): boolean => (
session.kind === 'private' || session.kind === 'group' || session.kind === 'former_friend' session.kind === 'private' || session.kind === 'group' || session.kind === 'former_friend'
) )
const isExportConversationSession = (session: SessionRow): boolean => (
session.kind === 'private' || session.kind === 'group' || session.kind === 'former_friend'
)
const exportKindPriority: Record<ConversationTab, number> = { const exportKindPriority: Record<ConversationTab, number> = {
private: 0, private: 0,
group: 1, group: 1,
@@ -2722,7 +2726,7 @@ function ExportPage() {
const cachedContactMap = toContactMapFromCaches(cachedContacts, cachedAvatarEntries) const cachedContactMap = toContactMapFromCaches(cachedContacts, cachedAvatarEntries)
if (cachedContacts.length > 0) { if (cachedContacts.length > 0) {
syncContactTypeCounts(Object.values(cachedContactMap)) syncContactTypeCounts(Object.values(cachedContactMap))
setSessions(toSessionRowsWithContacts([], cachedContactMap)) setSessions(toSessionRowsWithContacts([], cachedContactMap).filter(isExportConversationSession))
setSessionDataSource('cache') setSessionDataSource('cache')
setIsLoading(false) setIsLoading(false)
} }
@@ -2741,7 +2745,7 @@ function ExportPage() {
if (sessionsResult.success && sessionsResult.sessions) { if (sessionsResult.success && sessionsResult.sessions) {
const rawSessions = sessionsResult.sessions const rawSessions = sessionsResult.sessions
const baseSessions = toSessionRowsWithContacts(rawSessions, cachedContactMap) const baseSessions = toSessionRowsWithContacts(rawSessions, cachedContactMap).filter(isExportConversationSession)
const exportableSessionIds = baseSessions const exportableSessionIds = baseSessions
.filter((session) => session.hasSession) .filter((session) => session.hasSession)
.map((session) => session.username) .map((session) => session.username)
@@ -2934,7 +2938,7 @@ function ExportPage() {
}, contactMap) }, contactMap)
if (isStale()) return if (isStale()) return
const nextSessions = toSessionRowsWithContacts(rawSessions, contactMap) const nextSessions = toSessionRowsWithContacts(rawSessions, contactMap).filter(isExportConversationSession)
.map((session) => { .map((session) => {
const extra = extraContactMap[session.username] const extra = extraContactMap[session.username]
const displayName = extra?.displayName || session.displayName || session.username const displayName = extra?.displayName || session.displayName || session.username
@@ -3029,6 +3033,12 @@ function ExportPage() {
setSnsUserPostCountsStatus(prev => (prev === 'loading' ? 'idle' : prev)) setSnsUserPostCountsStatus(prev => (prev === 'loading' ? 'idle' : prev))
}, [isExportRoute]) }, [isExportRoute])
useEffect(() => {
if (activeTab === 'official') {
setActiveTab('private')
}
}, [activeTab])
useEffect(() => { useEffect(() => {
activeTabRef.current = activeTab activeTabRef.current = activeTab
}, [activeTab]) }, [activeTab])
@@ -4068,8 +4078,7 @@ function ExportPage() {
const activeTabLabel = useMemo(() => { const activeTabLabel = useMemo(() => {
if (activeTab === 'private') return '私聊' if (activeTab === 'private') return '私聊'
if (activeTab === 'group') return '群聊' if (activeTab === 'group') return '群聊'
if (activeTab === 'former_friend') return '曾经的好友' return '曾经的好友'
return '公众号'
}, [activeTab]) }, [activeTab])
const shouldShowSnsColumn = useMemo(() => ( const shouldShowSnsColumn = useMemo(() => (
activeTab === 'private' || activeTab === 'former_friend' activeTab === 'private' || activeTab === 'former_friend'
@@ -4229,11 +4238,11 @@ function ExportPage() {
}, []) }, [])
const sessionLoadDetailRows = useMemo(() => { const sessionLoadDetailRows = useMemo(() => {
const tabOrder: ConversationTab[] = ['private', 'group', 'official', 'former_friend'] const tabOrder: ConversationTab[] = ['private', 'group', 'former_friend']
return tabOrder.map((tab) => { return tabOrder.map((tab) => {
const sessionIds = loadDetailTargetsByTab[tab] || [] const sessionIds = loadDetailTargetsByTab[tab] || []
const snsSessionIds = sessionIds.filter((sessionId) => isSingleContactSession(sessionId)) const snsSessionIds = sessionIds.filter((sessionId) => isSingleContactSession(sessionId))
const snsPostCounts = tab === 'private' || tab === 'former_friend' const snsPostCounts = tab === 'private'
? summarizeLoadTraceForTab(snsSessionIds, 'snsPostCounts') ? summarizeLoadTraceForTab(snsSessionIds, 'snsPostCounts')
: createNotApplicableLoadSummary() : createNotApplicableLoadSummary()
return { return {
@@ -5380,9 +5389,6 @@ function ExportPage() {
<button className={`tab-btn ${activeTab === 'group' ? 'active' : ''}`} onClick={() => setActiveTab('group')}> <button className={`tab-btn ${activeTab === 'group' ? 'active' : ''}`} onClick={() => setActiveTab('group')}>
{isTabCountComputing ? <span className="count-loading"><span className="animated-ellipsis" aria-hidden="true">...</span></span> : tabCounts.group} {isTabCountComputing ? <span className="count-loading"><span className="animated-ellipsis" aria-hidden="true">...</span></span> : tabCounts.group}
</button> </button>
<button className={`tab-btn ${activeTab === 'official' ? 'active' : ''}`} onClick={() => setActiveTab('official')}>
{isTabCountComputing ? <span className="count-loading"><span className="animated-ellipsis" aria-hidden="true">...</span></span> : tabCounts.official}
</button>
<button className={`tab-btn ${activeTab === 'former_friend' ? 'active' : ''}`} onClick={() => setActiveTab('former_friend')}> <button className={`tab-btn ${activeTab === 'former_friend' ? 'active' : ''}`} onClick={() => setActiveTab('former_friend')}>
{isTabCountComputing ? <span className="count-loading"><span className="animated-ellipsis" aria-hidden="true">...</span></span> : tabCounts.former_friend} {isTabCountComputing ? <span className="count-loading"><span className="animated-ellipsis" aria-hidden="true">...</span></span> : tabCounts.former_friend}
</button> </button>
@@ -5635,7 +5641,9 @@ function ExportPage() {
<span></span> <span></span>
<span></span> <span></span>
</div> </div>
{sessionLoadDetailRows.map((row) => { {sessionLoadDetailRows
.filter((row) => row.tab === 'private')
.map((row) => {
const pulse = sessionLoadProgressPulseMap[`snsPostCounts:${row.tab}`] const pulse = sessionLoadProgressPulseMap[`snsPostCounts:${row.tab}`]
const isLoading = row.snsPostCounts.statusLabel.startsWith('加载中') const isLoading = row.snsPostCounts.statusLabel.startsWith('加载中')
return ( return (