import React, { memo, useCallback, useMemo, useState } from 'react'
import { LazyIllustration } from '../../components/lazy-illustration/LazyIllustration'
import { illustrationNames } from '../../generated/illustrationAssets'
const debounce =
(
callback: (...args: P[]) => unknown,
wait: number,
) => {
let timeoutId: number
return (...args: P[]) => {
if (timeoutId) {
window.clearTimeout(timeoutId)
}
timeoutId = window.setTimeout(() => {
callback(...args)
}, wait)
}
}
const IllustrationItem = memo(
({
children,
name,
copyText,
onClick,
}: React.PropsWithChildren<{
name: string
copyText: string
onClick: () => void
}>) => {
return (
)
},
)
const IllustrationLibrary = ({
filter,
}: {
filter?: 'filled' | 'outlined'
}) => {
const [query, setQuery] = useState('')
const [copiedIllustration, setCopiedIllustration] = useState(
null,
)
const illustrationList = useMemo(() => {
const predicate =
filter !== undefined
? (name: string) => name.toLowerCase().includes(filter)
: () => true
return illustrationNames
.filter(name => !name.endsWith('Animation'))
.filter(name => predicate(name))
}, [filter])
const copyToClipboard = useCallback((illustrationName: string) => {
const importStatement = `import ${illustrationName} from '@payfit/unity-illustrations/assets/${illustrationName}'`
navigator.clipboard
.writeText(importStatement)
.then(() => {
setCopiedIllustration(illustrationName)
setTimeout(() => {
setCopiedIllustration(null)
}, 5000)
})
.catch((error: unknown) => {
console.error('Failed to copy: ', error)
})
}, [])
const updateSearchQuery = debounce((illustrationName: string) => {
setQuery(illustrationName)
}, 150)
const illustrationListMatchingSearch = illustrationList.filter(
illustrationName =>
illustrationName.toLowerCase().includes(query.toLowerCase()),
)
return (
)
}
export default IllustrationLibrary