import { FormControlLabel, Grid, Radio, RadioGroup, Typography } from "@material-ui/core"; import { makeStyles } from "@saleor/macaw-ui"; import React from "react"; import { AvataxConfiguration } from "../../taxes/providers/avatax/ui/avatax-configuration"; import { providerConfig, TaxProviderName } from "../../taxes/providers/config"; import { TaxJarConfiguration } from "../../taxes/providers/taxjar/ui/taxjar-configuration"; import { useInstanceId } from "../../taxes/tax-context"; import { trpcClient } from "../../trpc/trpc-client"; import { AppPaper } from "../../ui/app-paper"; import { ProviderIcon } from "./provider-icon"; const providersConfigurationComponent: Record = { taxjar: TaxJarConfiguration, avatax: AvataxConfiguration, }; const useStyles = makeStyles((theme) => ({ radioLabel: { width: "100%", padding: theme.spacing(1), border: `1px solid ${theme.palette.divider}`, "&:hover": { backgroundColor: theme.palette.type === "dark" ? theme.palette.primary.dark : theme.palette.grey[50], }, }, gridItem: { display: "flex", justifyContent: "center", }, radioLabelActive: { backgroundColor: theme.palette.type === "dark" ? theme.palette.primary.dark : theme.palette.grey[50], }, iconWithLabel: { display: "flex", alignItems: "center", flexDirection: "column", gap: theme.spacing(1), }, })); export const Configuration = () => { const [provider, setProvider] = React.useState("taxjar"); const { instanceId } = useInstanceId(); const { data: providersConfigurationData } = trpcClient.providersConfiguration.getAll.useQuery(); const styles = useStyles(); React.useEffect(() => { const instance = providersConfigurationData?.find((instance) => instance.id === instanceId); setProvider(instance?.provider ?? "taxjar"); }, [instanceId, providersConfigurationData]); const SelectedConfigurationForm = React.useMemo( () => (provider ? providersConfigurationComponent[provider] : () => null), [provider] ); return ( {!instanceId && (
Please select one of the providers:
setProvider(e.target.value as TaxProviderName)} > {Object.entries(providerConfig).map(([name, config]) => ( } label={
{config.label}
} labelPlacement="top" aria-label={config.label} />
))}
)}
); };