2
0
Files
bot/apps/builder/src/features/theme/components/general/FontSelector.tsx

52 lines
1.3 KiB
TypeScript
Raw Normal View History

2021-12-23 09:37:42 +01:00
import React, { useEffect, useState } from 'react'
import { Text, HStack } from '@chakra-ui/react'
import { env, isEmpty } from '@typebot.io/lib'
import { AutocompleteInput } from '@/components/inputs/AutocompleteInput'
2021-12-23 09:37:42 +01:00
type FontSelectorProps = {
activeFont?: string
onSelectFont: (font: string) => void
}
export const FontSelector = ({
activeFont,
onSelectFont,
}: FontSelectorProps) => {
const [currentFont, setCurrentFont] = useState(activeFont)
const [googleFonts, setGoogleFonts] = useState<string[]>([])
useEffect(() => {
fetchPopularFonts().then(setGoogleFonts)
}, [])
const fetchPopularFonts = async () => {
if (isEmpty(env('GOOGLE_API_KEY'))) return []
2021-12-23 09:37:42 +01:00
const response = await fetch(
`https://www.googleapis.com/webfonts/v1/webfonts?key=${env(
'GOOGLE_API_KEY'
)}&sort=popularity`
2021-12-23 09:37:42 +01:00
)
return (await response.json()).items.map(
(item: { family: string }) => item.family
)
}
2022-01-22 18:24:57 +01:00
const handleFontSelected = (nextFont: string) => {
if (nextFont === currentFont) return
2022-01-22 18:24:57 +01:00
setCurrentFont(nextFont)
onSelectFont(nextFont)
}
2021-12-23 09:37:42 +01:00
return (
<HStack justify="space-between" align="center">
2021-12-23 09:37:42 +01:00
<Text>Font</Text>
<AutocompleteInput
value={activeFont}
2021-12-23 09:37:42 +01:00
items={googleFonts}
onChange={handleFontSelected}
withVariableButton={false}
2021-12-23 09:37:42 +01:00
/>
</HStack>
2021-12-23 09:37:42 +01:00
)
}