{"version":3,"file":"index.cjs","sources":["../../../../src/components/erc20-token-picker/index.tsx"],"sourcesContent":["import React, {\n    type ChangeEvent,\n    useCallback,\n    useEffect,\n    useRef,\n    useState,\n} from \"react\";\nimport { Search, type SearchProps } from \"./search\";\nimport { Modal } from \"../modal\";\nimport type { TokenInfoWithBalance, TokenListWithBalance } from \"./types\";\nimport { ManageLists, type ManageListsProps } from \"./manage-lists\";\nimport { useSearchedTokens } from \"./hooks/useSearchedTokens\";\nimport { FixedSizeList } from \"react-window\";\nimport { useDebounce } from \"react-use\";\nexport * from \"./types\";\n\ntype ERC20TokenPickerView =\n    | \"search\"\n    | \"import-token\"\n    | \"import-list\"\n    | \"manage-lists\";\n\nexport interface ERC20TokenPickerProps {\n    open?: boolean;\n    onDismiss?: () => void;\n    loading?: boolean;\n    selectedToken?: TokenInfoWithBalance | null;\n    onSearchQueryChange?: (query: string) => void;\n    onSelectedTokenChange?: (token: TokenInfoWithBalance) => void;\n    chainId?: number;\n    lists?: TokenListWithBalance[];\n    selectedList?: TokenListWithBalance | null;\n    onSelectedListChange?: (list: TokenListWithBalance) => void;\n    className?: {\n        search: SearchProps[\"className\"];\n        manageLists: ManageListsProps[\"className\"];\n    };\n    messages: {\n        search: SearchProps[\"messages\"];\n        manageLists: ManageListsProps[\"messages\"];\n    };\n    dataTestIds?: {\n        search?: SearchProps[\"dataTestIds\"];\n        manageLists?: ManageListsProps[\"dataTestIds\"];\n    };\n}\n\nexport function ERC20TokenPicker({\n    open,\n    onDismiss,\n    loading,\n    onSearchQueryChange,\n    onSelectedTokenChange,\n    selectedToken,\n    chainId,\n    lists,\n    selectedList,\n    onSelectedListChange,\n    className,\n    messages,\n    dataTestIds,\n}: ERC20TokenPickerProps) {\n    const [currentView, setCurrentView] =\n        useState<ERC20TokenPickerView>(\"search\");\n\n    const fixedListRef = useRef<FixedSizeList>(null);\n    const [searchQuery, setSearchQuery] = useState(\"\");\n    const [debouncedQuery, setDebouncedQuery] = useState(searchQuery);\n\n    useDebounce(\n        () => {\n            setDebouncedQuery(searchQuery);\n            if (!!onSearchQueryChange) onSearchQueryChange(searchQuery);\n        },\n        300,\n        [searchQuery],\n    );\n\n    const { tokens } = useSearchedTokens(debouncedQuery, chainId, selectedList);\n\n    // on open, clear the search query and scroll to the top of the list\n    useEffect(() => {\n        if (!open) return;\n        setCurrentView(\"search\");\n        setSearchQuery(\"\");\n        if (!!fixedListRef.current) fixedListRef.current.scrollTo(0);\n    }, [open]);\n\n    const handleSearchChange = useCallback(\n        (event: ChangeEvent<HTMLInputElement>) => {\n            setSearchQuery(event.target.value);\n            if (!!fixedListRef.current) fixedListRef.current.scrollTo(0);\n        },\n        [],\n    );\n\n    const handleSelectedTokenChange = useCallback(\n        (token: TokenInfoWithBalance) => {\n            if (onSelectedTokenChange) onSelectedTokenChange(token);\n        },\n        [onSelectedTokenChange],\n    );\n\n    const handleSelectedListChange = useCallback(\n        (list: TokenListWithBalance) => {\n            if (onSelectedListChange) {\n                setCurrentView(\"search\");\n                onSelectedListChange(list);\n            }\n        },\n        [onSelectedListChange],\n    );\n\n    const handleManageListsClick = useCallback(() => {\n        setCurrentView(\"manage-lists\");\n    }, []);\n\n    const handleSearchClick = useCallback(() => {\n        setCurrentView(\"search\");\n    }, []);\n\n    const handleOnDismiss = () => {\n        setSearchQuery(\"\");\n        if (!!onDismiss) onDismiss();\n    };\n\n    return (\n        <Modal open={open} onDismiss={onDismiss}>\n            {currentView === \"search\" && (\n                <Search\n                    tokens={tokens}\n                    searchQuery={searchQuery}\n                    onSearchQueryChange={handleSearchChange}\n                    fixedListRef={fixedListRef}\n                    onDismiss={handleOnDismiss}\n                    loading={loading}\n                    onSelectedTokenChange={handleSelectedTokenChange}\n                    selectedToken={selectedToken}\n                    lists={lists}\n                    onManageLists={handleManageListsClick}\n                    className={className?.search}\n                    messages={messages.search}\n                    dataTestIds={dataTestIds?.search}\n                />\n            )}\n            {currentView === \"manage-lists\" && (\n                <ManageLists\n                    onDismiss={onDismiss}\n                    loading={loading}\n                    onSelectedListChange={handleSelectedListChange}\n                    selectedList={selectedList}\n                    lists={lists}\n                    chainId={chainId}\n                    onSearch={handleSearchClick}\n                    className={className?.manageLists}\n                    messages={messages.manageLists}\n                    dataTestIds={dataTestIds?.manageLists}\n                />\n            )}\n        </Modal>\n    );\n}\n"],"names":["useState","useRef","useSearchedTokens","useEffect","useCallback","Modal","Search","ManageLists"],"mappings":"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"}