import { useAtom } from "jotai" import { SelectedBank, selectedBankAccountAtom } from "./bankRecAtoms" import { useCallback } from "react" import { useGetBankAccounts, useGetUnreconciledTransactions } from "./utils" import { cn } from "@/lib/utils" import { getTimeago } from "@/lib/date" import ErrorBanner from "@/components/ui/error-banner" import _ from "@/lib/translate" import { Badge } from "@/components/ui/badge" import { useTheme } from "@/components/ui/theme-provider" import BankLogo from "@/components/common/BankLogo" import { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from "@/components/ui/empty" import { LandmarkIcon } from "lucide-react" import { Button } from "@/components/ui/button" import { useCurrentCompany } from "@/hooks/useCurrentCompany" const BankPicker = ({ className }: { className?: string }) => { const [selectedBank, setSelectedBank] = useAtom(selectedBankAccountAtom) const onLoadingSuccess = useCallback((data?: SelectedBank[]) => { // If the bank is already selected, then don't set it again if (selectedBank) { // Check if selected bank is in the data if (data?.some((bank: SelectedBank) => bank.name === selectedBank.name)) { return } } if (!data) return if (data.length === 1) { setSelectedBank(data[0]) } else if (data.length > 1) { const defaultBank = data.find((bank: SelectedBank) => bank.is_default) if (defaultBank) { setSelectedBank(defaultBank) } else { // Select the first available bank account setSelectedBank(data[0]) } } }, [setSelectedBank, selectedBank]) const selectedCompany = useCurrentCompany() const { banks, isLoading, error } = useGetBankAccounts(onLoadingSuccess) const { themeValue } = useTheme() if (isLoading) { return null } if (error) { return } if (banks?.length === 0) { return {_("No bank accounts found")} {_("You have not added any bank accounts to your company.")} } return (
4 ? 'pb-2' : '', className, )} style={{ scrollbarWidth: 'thin', scrollbarColor: themeValue === 'Dark' ? 'var(--surface-gray-2) var(--surface-gray-1)' : 'rgb(209 213 219) rgb(243 244 246)', }} > { banks?.map((bank) => ( )) }
) } const BankPickerItem = ({ bank }: { bank: SelectedBank }) => { const [selectedBank, setSelectedBank] = useAtom(selectedBankAccountAtom) const isSelected = selectedBank?.name === bank.name const { mutate } = useGetUnreconciledTransactions() const onSelect = () => { setSelectedBank(bank) mutate() } return
{bank.account_name} {bank.account_type && {bank.account_type?.slice(0, 24)} }
{bank.account} {bank.last_integration_date && {_("Last Synced Transaction")}: {getTimeago(bank.last_integration_date)}}
} export default BankPicker