* Add state and taskName in elastic page mappings * Add state and taskName in elastic page interface * Create page with PROCESSING state before scrapping * Update createArticleRequest API * Fix tests * Add default state for pages * Update createArticle API * Update save page * Update save file * Update saving item description * Show unable to parse content for failed page * Fix date parsing * Search for not failed pages * Fix tests * Add test for saveUrl * Update get article saving request api * Update get article test * Add test for articleSavingRequest API * Add test for failure * Return new page id if clientRequestId empty * Update clientRequestId in savePage * Update clientRequestId in saveFile * Replace article with slug in articleSavingRequest * Add slug in articleSavingRequest response * Depreciate article * Use slug in web * Remove article and highlight fragments * Query article.slug on Prod * Show unable to parse description for failed page * Fix a bug having duplicate pages when saving the same url multiple times * Add state in response * Rename variables in removeArticle API * Rename state * Add state in response in web * Make state an enum * Open temporary page by link id * Use an empty reader view as the background for loading pages * Progressively load the article page as content is loaded * Add includePending flag in getArticles API * Set includePending = true in web * Add elastic update mappings in migration script * Add elastic mappings in docker image * Move index_settings.json to migrate package * Remove elastic index creation in api * Move elastic migrations to a separate directory * Remove index_settings from api docker image Co-authored-by: Jackson Harper <jacksonh@gmail.com>
92 lines
3.1 KiB
TypeScript
92 lines
3.1 KiB
TypeScript
import { useCallback, useState } from "react"
|
|
import { userPersonalizationMutation } from "../networking/mutations/userPersonalizationMutation"
|
|
import { useGetUserPreferences, UserPreferences } from "../networking/queries/useGetUserPreferences"
|
|
import { usePersistedState } from "./usePersistedState"
|
|
|
|
export type ReaderSettings = {
|
|
preferencesData: UserPreferences | undefined
|
|
fontSize: number
|
|
lineHeight: number
|
|
marginWidth: number
|
|
|
|
setFontSize: (newFontSize: number) => void
|
|
setLineHeight: (newLineHeight: number) => void
|
|
setMarginWidth: (newMarginWidth: number) => void
|
|
|
|
showSetLabelsModal: boolean
|
|
showEditDisplaySettingsModal: boolean
|
|
|
|
setShowSetLabelsModal: (showSetLabelsModal: boolean) => void
|
|
setShowEditDisplaySettingsModal: (showEditDisplaySettingsModal: boolean) => void
|
|
|
|
actionHandler: (action: string, arg?: unknown) => void
|
|
}
|
|
|
|
export const useReaderSettings = (): ReaderSettings => {
|
|
const { preferencesData } = useGetUserPreferences()
|
|
const [fontSize, setFontSize] = useState(preferencesData?.fontSize ?? 20)
|
|
const [lineHeight, setLineHeight] = usePersistedState({ key: 'lineHeight', initialValue: 150 })
|
|
const [marginWidth, setMarginWidth] = usePersistedState({ key: 'marginWidth', initialValue: 200 })
|
|
const [showSetLabelsModal, setShowSetLabelsModal] = useState(false)
|
|
const [showEditDisplaySettingsModal, setShowEditDisplaySettingsModal] = useState(false)
|
|
|
|
const actionHandler = useCallback(async(action: string, arg?: unknown) => {
|
|
const updateFontSize = async(newFontSize: number) => {
|
|
setFontSize(newFontSize)
|
|
await userPersonalizationMutation({ fontSize: newFontSize })
|
|
}
|
|
|
|
switch (action) {
|
|
case 'incrementFontSize':
|
|
await updateFontSize(Math.min(fontSize + 2, 28))
|
|
break
|
|
case 'decrementFontSize':
|
|
await updateFontSize(Math.max(fontSize - 2, 10))
|
|
break
|
|
case 'setMarginWidth': {
|
|
const value = Number(arg)
|
|
if (value >= 200 && value <= 560) {
|
|
setMarginWidth(value)
|
|
}
|
|
break
|
|
}
|
|
case 'incrementMarginWidth':
|
|
setMarginWidth(Math.min(marginWidth + 45, 560))
|
|
break
|
|
case 'decrementMarginWidth':
|
|
setMarginWidth(Math.max(marginWidth - 45, 200))
|
|
break
|
|
case 'setLineHeight': {
|
|
const value = Number(arg)
|
|
if (value >= 100 && value <= 300) {
|
|
setLineHeight(arg as number)
|
|
}
|
|
break
|
|
}
|
|
case 'editDisplaySettings': {
|
|
setShowEditDisplaySettingsModal(true)
|
|
break
|
|
}
|
|
case 'setLabels': {
|
|
setShowSetLabelsModal(true)
|
|
break
|
|
}
|
|
case 'resetReaderSettings': {
|
|
updateFontSize(20)
|
|
setMarginWidth(290)
|
|
setLineHeight(150)
|
|
break
|
|
}
|
|
}
|
|
}, [fontSize, setFontSize, lineHeight,
|
|
setLineHeight, marginWidth, setMarginWidth])
|
|
|
|
return {
|
|
preferencesData,
|
|
fontSize, lineHeight, marginWidth,
|
|
setFontSize, setLineHeight, setMarginWidth,
|
|
showSetLabelsModal, showEditDisplaySettingsModal,
|
|
setShowSetLabelsModal, setShowEditDisplaySettingsModal,
|
|
actionHandler,
|
|
}
|
|
} |