update web preferences event listeners

This commit is contained in:
Satindar Dhillon
2022-06-03 15:59:49 -07:00
parent 6fd096bf9f
commit be5323b8ce

View File

@ -84,44 +84,56 @@ export function ArticleContainer(props: ArticleContainerProps): JSX.Element {
// Listen for preference change events sent from host apps (ios, macos...)
useEffect(() => {
const increaseLineHeight = () => {
setLineHeightOverride(
Math.min((lineHeightOverride ?? props.lineHeight ?? 150) + 25, 300)
)
interface UpdateLineHeightEvent extends Event {
lineHeight?: number
}
const decreaseLineHeight = () => {
setLineHeightOverride(
Math.max((lineHeightOverride ?? props.lineHeight ?? 150) - 25, 100)
)
const updateLineHeight = (event: UpdateLineHeightEvent) => {
const newLineHeight = event.lineHeight ?? lineHeightOverride ?? 150
if (newLineHeight >= 100 && newLineHeight <= 300) {
setLineHeightOverride(newLineHeight)
}
}
const increaseMargin = () => {
setMarginOverride(
Math.min((marginOverride ?? props.margin ?? 360) + 45, 560)
)
interface UpdateMarginEvent extends Event {
margin?: number
}
const decreaseMargin = () => {
setMarginOverride(
Math.max((marginOverride ?? props.margin ?? 360) - 45, 200)
)
const updateMargin = (event: UpdateMarginEvent) => {
const newMargin = event.margin ?? marginOverride ?? 360
if (newMargin >= 200 && newMargin <= 560) {
setMarginOverride(newMargin)
}
}
const increaseFontSize = async () => {
await updateFontSize(Math.min(fontSize + 2, 28))
interface UpdateFontFamilyEvent extends Event {
family?: string
}
const decreaseFontSize = async () => {
await updateFontSize(Math.max(fontSize - 2, 10))
const updateFontFamily = (event: UpdateFontFamilyEvent) => {
const newFontFamily =
event.family ?? fontFamilyOverride ?? props.fontFamily ?? 'inter'
setFontFamilyOverride(newFontFamily)
}
const switchToDarkMode = () => {
updateThemeLocally(ThemeId.Dark)
interface UpdateFontSizeEvent extends Event {
fontSize?: number
}
const switchToLightMode = () => {
updateThemeLocally(ThemeId.Light)
const handleFontSizeChange = async (event: UpdateFontSizeEvent) => {
const newFontSize = event.fontSize ?? 18
if (newFontSize >= 10 && newFontSize <= 28) {
updateFontSize(newFontSize)
}
}
interface UpdateColorModeEvent extends Event {
isDark?: boolean
}
const updateColorMode = (event: UpdateColorModeEvent) => {
const isDark = event.isDark ?? false
updateThemeLocally(isDark ? ThemeId.Dark : ThemeId.Light)
}
const share = () => {
@ -133,25 +145,19 @@ export function ArticleContainer(props: ArticleContainerProps): JSX.Element {
}
}
document.addEventListener('increaseLineHeight', increaseLineHeight)
document.addEventListener('decreaseLineHeight', decreaseLineHeight)
document.addEventListener('increaseMargin', increaseMargin)
document.addEventListener('decreaseMargin', decreaseMargin)
document.addEventListener('increaseFontSize', increaseFontSize)
document.addEventListener('decreaseFontSize', decreaseFontSize)
document.addEventListener('switchToDarkMode', switchToDarkMode)
document.addEventListener('switchToLightMode', switchToLightMode)
document.addEventListener('updateFontFamily', updateFontFamily)
document.addEventListener('updateLineHeight', updateLineHeight)
document.addEventListener('updateMargin', updateMargin)
document.addEventListener('updateFontSize', handleFontSizeChange)
document.addEventListener('updateColorMode', updateColorMode)
document.addEventListener('share', share)
return () => {
document.removeEventListener('increaseLineHeight', increaseLineHeight)
document.removeEventListener('decreaseLineHeight', decreaseLineHeight)
document.removeEventListener('increaseMargin', increaseMargin)
document.removeEventListener('decreaseMargin', decreaseMargin)
document.removeEventListener('increaseFontSize', increaseFontSize)
document.removeEventListener('decreaseFontSize', decreaseFontSize)
document.removeEventListener('switchToDarkMode', switchToDarkMode)
document.removeEventListener('switchToLightMode', switchToLightMode)
document.removeEventListener('updateFontFamily', updateFontFamily)
document.removeEventListener('updateLineHeight', updateLineHeight)
document.removeEventListener('updateMargin', updateMargin)
document.removeEventListener('updateFontSize', handleFontSizeChange)
document.removeEventListener('updateColorMode', updateColorMode)
document.removeEventListener('share', share)
}
})