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}
}
labelPlacement="top"
aria-label={config.label}
/>
))}
{selectedProvider ? (
<>
>
) : (
<>
Please select a provider.
>
)}
);
};
export default ProviderInstanceConfiguration;