import React, { Children, isValidElement } from 'react';
import { Card, CardProps } from '@wix/design-system';
import { observer } from 'mobx-react-lite';
import { SkeletonCard } from '../SkeletonCard';
import { ErrorCard, ErrorCardProps } from '../ErrorCard';
import { useWixPatternsContainer } from '@wix/bex-core/react';
import { Refresh as RefreshIcon } from '@wix/wix-ui-icons-common';
import { st, classes } from './CardContainer.st.css.js';
import { useIsMobile } from '../../hooks/useIsMobile';
export interface CardContainerProps extends CardProps {
/**
* Additional loading flag, if you need to show loader after the main entity is fetched.
* Also, if an error occurs on a side request (other than passed to `fetch`), you can use `error` to show the card error state.
* Alongside with `error` you also need to pass `errorState.onRetry` callback, which should change the `status` accordingly.
*/
status?: 'idle' | 'loading' | 'error' | 'success';
/**
* Height of content while loading (not including paddings)
*/
minHeight?: string;
/**
* Card Error State configuration
*/
errorState?: ErrorCardProps;
/**
* Identifier of the card.
* If you want to open a page and auto-scroll and focus ont his card, pass in the the query params `anchor={yourCardId}`.
*/
id?: string;
}
export function _CardContainer(props: CardContainerProps) {
const { status, minHeight, children, errorState, ...rest } = props;
const { translate: t } = useWixPatternsContainer();
const isMobile = useIsMobile();
const className = st(classes.root, { mobile: isMobile });
if (status === 'idle' || status === 'loading') {
return ;
}
if (status === 'error') {
const hasCardHeader = Children.toArray(children).some(
(el) =>
isValidElement(el) && (el.type as any)?.displayName === 'Card.Header',
);
return (
{},
text: t('cairo.entityPage.widgetError.TPAconnectionFail.CTA'),
prefixIcon: ,
...errorState?.action,
}}
{...rest}
>
{children}
);
}
return (
{children}
);
}
_CardContainer.displayName = 'CardContainer';
export const CardContainer = observer(_CardContainer);