import { FormControlLabel, Grid, Radio, RadioGroup, Typography } from "@material-ui/core"; import { makeStyles } from "@saleor/macaw-ui"; import Image from "next/image"; import React from "react"; import { CMSProviderSchema, providersConfig, SingleProviderSchema } from "../../../lib/cms/config"; import { AppPaper } from "../../ui/app-paper"; import ProviderInstanceConfigurationForm from "./provider-instance-configuration-form"; import { Skeleton } from "@material-ui/lab"; import { ProvidersErrors, ProvidersLoading } from "./types"; import { getProviderByName, Provider } from "../../providers/config"; const useStyles = makeStyles((theme) => ({ radioLabel: { width: "100%", padding: theme.spacing(1), "&: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), }, textCenter: { textAlign: "center", }, textHeader: { textAlign: "center", margin: theme.spacing(1, 0, 3, 0), }, })); const ProviderInstanceConfigurationSkeleton = () => { return (
); }; interface ProviderInstanceConfigurationProps { activeProviderInstance?: SingleProviderSchema | null; newProviderInstance?: SingleProviderSchema | null; saveProviderInstance: (providerInstance: SingleProviderSchema) => any; deleteProviderInstance: (providerInstance: SingleProviderSchema) => any; loading: ProvidersLoading; errors: ProvidersErrors; } const ProviderInstanceConfiguration = ({ activeProviderInstance, newProviderInstance, saveProviderInstance, deleteProviderInstance, loading, errors, }: ProviderInstanceConfigurationProps) => { const [selectedProvider, setSelectedProvider] = React.useState( getProviderByName(activeProviderInstance?.providerName) ); const styles = useStyles(); React.useEffect(() => { const provider = getProviderByName(activeProviderInstance?.providerName); setSelectedProvider(provider); }, [activeProviderInstance]); const handleProviderChange = (e: React.ChangeEvent) => { const providerName = e.target.value as CMSProviderSchema; const provider = getProviderByName(providerName); setSelectedProvider(provider); }; if (loading.fetching || loading.saving) { return ; } if (!newProviderInstance && !activeProviderInstance) { return ( Please select a provider instance or add new one. ); } return ( {errors.fetching && ( Error fetching available providers )} {errors.saving && ( Error saving provider instance configuration )} {!!newProviderInstance && ( Add new instance )} {Object.entries(providersConfig).map(([name, config]) => ( } label={
{`${config.label} {config.label}
} labelPlacement="top" aria-label={config.label} />
))}
{selectedProvider ? ( <>
) : ( <>
Please select a provider. )}
); }; export default ProviderInstanceConfiguration;