-
Notifications
You must be signed in to change notification settings - Fork 380
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: setting atoms and support disable scroll to mark read (#108)
* refactor: setting atoms Signed-off-by: Innei <i@innei.in> * fix: export Signed-off-by: Innei <i@innei.in> * feat: show settings hotkey in web app Signed-off-by: Innei <i@innei.in> * feat: mark unread when scroll switch Signed-off-by: Innei <i@innei.in> * chore: pin electron builder. electron-userland/electron-builder#8175 Signed-off-by: Innei <i@innei.in> --------- Signed-off-by: Innei <i@innei.in>
- Loading branch information
Showing
33 changed files
with
373 additions
and
1,191 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
import { jotaiStore } from "@renderer/lib/jotai" | ||
|
||
import { createSettingAtom } from "./helper" | ||
|
||
const createDefaultSettings = () => ({ | ||
dataPersist: true, | ||
|
||
// mark unread | ||
scrollMarkUnread: true, | ||
|
||
}) | ||
export const { | ||
useSettingKey: useGeneralSettingKey, | ||
useSettingSelector: useGeneralSettingSelector, | ||
setSetting: setGeneralSetting, | ||
clearSettings: clearGeneralSettings, | ||
initializeDefaultSettings: initializeDefaultGeneralSettings, | ||
getSettings: getGeneralSettings, | ||
useSettingValue: useGeneralSettingValue, | ||
|
||
settingAtom: __generalSettingAtom, | ||
} = createSettingAtom("general", createDefaultSettings) | ||
|
||
export const subscribeShouldUseIndexedDB = ( | ||
callback: (value: boolean) => void, | ||
) => | ||
jotaiStore.sub(__generalSettingAtom, () => | ||
callback(getGeneralSettings().dataPersist)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
import { useRefValue } from "@renderer/hooks/common" | ||
import { createAtomHooks } from "@renderer/lib/jotai" | ||
import { getStorageNS } from "@renderer/lib/ns" | ||
import { useAtomValue } from "jotai" | ||
import { atomWithStorage, selectAtom } from "jotai/utils" | ||
import { useMemo } from "react" | ||
|
||
export const createSettingAtom = <T extends Record<string, unknown>>( | ||
settingKey: string, | ||
createDefaultSettings: () => T, | ||
) => { | ||
const atom = atomWithStorage( | ||
getStorageNS(settingKey), | ||
createDefaultSettings(), | ||
undefined, | ||
{ | ||
getOnInit: true, | ||
}, | ||
) | ||
const [, , useSettingValue, , getSettings, setSettings] = | ||
createAtomHooks(atom) | ||
|
||
const initializeDefaultSettings = () => { | ||
const currentSettings = getSettings() | ||
const defaultSettings = createDefaultSettings() | ||
if (typeof currentSettings !== "object") setSettings(defaultSettings) | ||
const newSettings = { ...defaultSettings, ...currentSettings } | ||
setSettings(newSettings) | ||
} | ||
|
||
const useSettingKey = <T extends keyof ReturnType<typeof getSettings>>( | ||
key: T, | ||
) => useAtomValue(useMemo(() => selectAtom(atom, (s) => s[key]), [key])) | ||
|
||
const useSettingSelector = < | ||
T extends keyof ReturnType<typeof getSettings>, | ||
S extends ReturnType<typeof getSettings>, | ||
R = S[T], | ||
>( | ||
selector: (s: S) => R, | ||
): R => { | ||
const stableSelector = useRefValue(selector) | ||
|
||
return useAtomValue( | ||
// @ts-expect-error | ||
Check warning on line 45 in src/renderer/src/atoms/settings/helper.ts GitHub Actions / Lint and Typecheck (18.x)
|
||
useMemo(() => selectAtom(atom, stableSelector.current), [stableSelector]), | ||
) | ||
} | ||
|
||
const setSetting = <K extends keyof ReturnType<typeof getSettings>>( | ||
key: K, | ||
value: ReturnType<typeof getSettings>[K], | ||
) => { | ||
setSettings({ | ||
...getSettings(), | ||
[key]: value, | ||
}) | ||
} | ||
|
||
const clearSettings = () => { | ||
setSettings(createDefaultSettings()) | ||
} | ||
|
||
return { | ||
useSettingKey, | ||
useSettingSelector, | ||
setSetting, | ||
clearSettings, | ||
initializeDefaultSettings, | ||
|
||
useSettingValue, | ||
getSettings, | ||
|
||
settingAtom: atom, | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import { initializeDefaultGeneralSettings } from "./general" | ||
import { initializeDefaultUISettings } from "./ui" | ||
|
||
export const initializeSettings = () => { | ||
initializeDefaultUISettings() | ||
initializeDefaultGeneralSettings() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
import { createSettingAtom } from "./helper" | ||
|
||
const createDefaultSettings = () => ({ | ||
// Sidebar | ||
entryColWidth: 340, | ||
opaqueSidebar: false, | ||
sidebarShowUnreadCount: true, | ||
|
||
// Global UI | ||
uiTextSize: 16, | ||
// System | ||
showDockBadge: true, | ||
// Misc | ||
modalOverlay: true, | ||
modalDraggable: true, | ||
modalOpaque: true, | ||
reduceMotion: false, | ||
|
||
// Content | ||
readerFontFamily: "SN Pro", | ||
readerRenderInlineStyle: false, | ||
codeHighlightTheme: "github-dark", | ||
}) | ||
export const { | ||
useSettingKey: useUISettingKey, | ||
useSettingSelector: useUISettingSelector, | ||
setSetting: setUISetting, | ||
clearSettings: clearUISettings, | ||
initializeDefaultSettings: initializeDefaultUISettings, | ||
getSettings: getUISettings, | ||
useSettingValue: useUISettingValue, | ||
} = createSettingAtom("ui", createDefaultSettings) |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
src/renderer/src/components/ui/code-highlighter/shiki/Shiki.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,3 @@ | ||
export * from "./db" | ||
export * from "./hooks" | ||
export * from "./models" | ||
export * from "./schemas" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.