11import { createSettingAtom } from "@follow/atoms/helper/setting.js"
22import type { SupportedLanguages } from "@follow/models"
33import { defaultGeneralSettings } from "@follow/shared/settings/defaults"
4- import { enhancedGeneralSettingKeys } from "@follow/shared/settings/enhanced"
5- import type { GeneralSettings } from "@follow/shared/settings/interface"
6- import { useCallback , useMemo } from "react"
4+ import { hookEnhancedSettings as baseHookEnhancedSettings } from "@follow/shared/settings/hook"
5+ import type { GeneralSettings as BaseGeneralSettings } from "@follow/shared/settings/interface"
76
87import { jotaiStore } from "~/lib/jotai"
98import { getDefaultLanguage } from "~/lib/language"
109
1110export const DEFAULT_ACTION_LANGUAGE = "default"
1211
12+ export interface GeneralSettings extends BaseGeneralSettings {
13+ showCompactTimelineInSub : boolean
14+ }
1315export const createDefaultGeneralSettings = ( ) : GeneralSettings => ( {
1416 ...defaultGeneralSettings ,
1517 language : getDefaultLanguage ( ) ,
18+ showCompactTimelineInSub : false ,
1619} )
1720
1821const {
@@ -27,35 +30,7 @@ const {
2730
2831 settingAtom : __generalSettingAtom ,
2932} = createSettingAtom ( "general" , createDefaultGeneralSettings )
30-
31- const [
32- useGeneralSettingKey ,
33- useGeneralSettingSelector ,
34- useGeneralSettingKeys ,
35- getGeneralSettings ,
36- useGeneralSettingValue ,
37- ] = hookEnhancedSettings (
38- useGeneralSettingKeyInternal ,
39- useGeneralSettingSelectorInternal ,
40- useGeneralSettingKeysInternal ,
41- getGeneralSettingsInternal ,
42- useGeneralSettingValueInternal ,
43-
44- enhancedGeneralSettingKeys ,
45- defaultGeneralSettings ,
46- )
47- export {
48- __generalSettingAtom ,
49- clearGeneralSettings ,
50- getGeneralSettings ,
51- initializeDefaultGeneralSettings ,
52- setGeneralSetting ,
53- useGeneralSettingKey ,
54- useGeneralSettingKeys ,
55- useGeneralSettingSelector ,
56- useGeneralSettingValue ,
57- }
58- export function hookEnhancedSettings <
33+ export const hookEnhancedSettings = <
5934 T1 extends ( key : any ) => any ,
6035 T2 extends ( selector : ( s : any ) => any ) => any ,
6136 T3 extends ( keys : any ) => any ,
@@ -70,108 +45,21 @@ export function hookEnhancedSettings<
7045
7146 enhancedSettingKeys : Set < string > ,
7247 defaultSettings : Record < string , any > ,
73- ) : [ T1 , T2 , T3 , T4 , T5 ] {
74- const useNextSettingKey = ( key : string ) => {
75- const enableEnhancedSettings = useGeneralSettingKeyInternal ( "enhancedSettings" )
76- const settingValue = useSettingKey ( key )
77- const shouldBackToDefault = enhancedSettingKeys . has ( key ) && ! enableEnhancedSettings
78- if ( ! shouldBackToDefault ) {
79- return settingValue
80- }
81-
82- return defaultSettings [ key ] === undefined ? settingValue : defaultSettings [ key ]
83- }
84-
85- const useNextSettingSelector = ( selector : ( s : any ) => any ) => {
86- const enableEnhancedSettings = useGeneralSettingKeyInternal ( "enhancedSettings" )
87- return useSettingSelector (
88- useCallback (
89- ( settings ) => {
90- if ( enableEnhancedSettings ) {
91- return selector ( settings )
92- }
93-
94- const enhancedSettings = { ...settings }
95- for ( const key of enhancedSettingKeys ) {
96- if ( defaultSettings [ key ] !== undefined ) {
97- enhancedSettings [ key ] = defaultSettings [ key ]
98- }
99- }
100-
101- return selector ( enhancedSettings )
102- } ,
103- [ enableEnhancedSettings , selector ] ,
104- ) ,
105- )
106- }
107-
108- const useNextSettingKeys = ( keys : string [ ] ) => {
109- const enableEnhancedSettings = useGeneralSettingKeyInternal ( "enhancedSettings" )
110- const rawSettingValues : string [ ] = useSettingKeys ( keys )
111-
112- return useMemo ( ( ) => {
113- if ( enableEnhancedSettings ) {
114- return rawSettingValues
115- }
116-
117- const result : string [ ] = [ ]
118-
119- for ( const [ i , key ] of keys . entries ( ) ) {
120- if ( enhancedSettingKeys . has ( key ) && defaultSettings [ key ] !== undefined ) {
121- result . push ( defaultSettings [ key ] )
122- } else if ( rawSettingValues [ i ] !== undefined ) {
123- result . push ( rawSettingValues [ i ] )
124- }
125- }
126-
127- return result
128- } , [ enableEnhancedSettings , keys , rawSettingValues ] )
129- }
130-
131- const getNextSettings = ( ) => {
132- const settings = getSettings ( )
133- const enableEnhancedSettings = jotaiStore . get ( __generalSettingAtom ) . enhancedSettings
134-
135- if ( enableEnhancedSettings ) {
136- return settings
137- }
138-
139- const enhancedSettings = { ...settings }
140- for ( const key of enhancedSettingKeys ) {
141- if ( defaultSettings [ key ] !== undefined ) {
142- enhancedSettings [ key ] = defaultSettings [ key ]
143- }
144- }
145-
146- return enhancedSettings
147- }
148-
149- const useNextSettingValue = ( ) => {
150- const settingValues = useSettingValue ( )
151- const enableEnhancedSettings = useGeneralSettingKeyInternal ( "enhancedSettings" )
152-
153- return useMemo ( ( ) => {
154- if ( enableEnhancedSettings ) {
155- return settingValues
156- }
157-
158- const result = { ...settingValues }
159- for ( const key of enhancedSettingKeys ) {
160- if ( defaultSettings [ key ] !== undefined ) {
161- result [ key ] = defaultSettings [ key ]
162- }
163- }
164-
165- return result
166- } , [ enableEnhancedSettings , settingValues ] )
167- }
168- return [
169- useNextSettingKey as T1 ,
170- useNextSettingSelector as T2 ,
171- useNextSettingKeys as T3 ,
172- getNextSettings as T4 ,
173- useNextSettingValue as T5 ,
174- ]
48+ ) : [ T1 , T2 , T3 , T4 , T5 ] => {
49+ return baseHookEnhancedSettings (
50+ useSettingKey ,
51+ useSettingSelector ,
52+ useSettingKeys ,
53+ getSettings ,
54+ useSettingValue ,
55+
56+ enhancedSettingKeys ,
57+ defaultSettings ,
58+ {
59+ useEnhancedEnabled : ( ) => useGeneralSettingKeyInternal ( "enhancedSettings" ) ,
60+ getEnhancedEnabled : ( ) => jotaiStore . get ( __generalSettingAtom ) . enhancedSettings ,
61+ } ,
62+ )
17563}
17664
17765export function useActionLanguage ( ) {
@@ -201,3 +89,37 @@ export const generalServerSyncWhiteListKeys: (keyof GeneralSettings)[] = [
20189 "language" ,
20290 "voice" ,
20391]
92+
93+ export const enhancedGeneralSettingKeys = new Set < keyof GeneralSettings > ( [
94+ "groupByDate" ,
95+ "autoExpandLongSocialMedia" ,
96+ "showCompactTimelineInSub" ,
97+ ] )
98+
99+ const [
100+ useGeneralSettingKey ,
101+ useGeneralSettingSelector ,
102+ useGeneralSettingKeys ,
103+ getGeneralSettings ,
104+ useGeneralSettingValue ,
105+ ] = hookEnhancedSettings (
106+ useGeneralSettingKeyInternal ,
107+ useGeneralSettingSelectorInternal ,
108+ useGeneralSettingKeysInternal ,
109+ getGeneralSettingsInternal ,
110+ useGeneralSettingValueInternal ,
111+
112+ enhancedGeneralSettingKeys ,
113+ defaultGeneralSettings ,
114+ )
115+ export {
116+ __generalSettingAtom ,
117+ clearGeneralSettings ,
118+ getGeneralSettings ,
119+ initializeDefaultGeneralSettings ,
120+ setGeneralSetting ,
121+ useGeneralSettingKey ,
122+ useGeneralSettingKeys ,
123+ useGeneralSettingSelector ,
124+ useGeneralSettingValue ,
125+ }
0 commit comments