import { ApolloError } from "@apollo/client";
import { FC, memo } from "react";
import { ERROR_CSS, FORM_CSS } from "./CssClasses";

export const ErrorText: FC<{
    error: ApolloError
}> = memo(({error}) => {

    const serverErrors = (error.networkError as any).result?.errors as {readonly message: string}[] | undefined;
    return (
        <div className={ERROR_CSS}>
            <div className={FORM_CSS}>
                {
                    serverErrors && 
                    <ul>
                        {
                            serverErrors.map((serverError, index) =>
                                <li key={index}>{serverError.message}</li> 
                            )
                        }
                    </ul>
                }
                {
                    serverErrors === undefined && error.networkError && 
                    <div>
                        <div>Network error</div>
                        <div>{error.networkError.message}</div>
                    </div>
                }
                {
                    error.clientErrors.length !== 0 && 
                    <div>
                        <div>Client errors</div>
                        <div>
                            <ul>
                                {
                                    error.clientErrors.map(ce =>
                                        <li>{ce.message}</li>
                                    )
                                }
                            </ul>
                        </div>
                    </div>
                }
                {
                    error.graphQLErrors.length !== 0 && 
                    <div>
                        <div>GraphQL errors</div>
                        <div>
                            <ul>
                                {
                                    error.graphQLErrors.map(ce =>
                                        <li>{ce.message}</li>
                                    )
                                }
                            </ul>
                        </div>
                    </div>
                }
            </div>
        </div>
    );
});