import React, { Fragment, useEffect } from 'react';
import { useApi } from '../ajax/ajax.hooks';
import { useStoreActions } from '../store/store.hooks';
import { PlacementTabKey } from './placements.models';
import { IWidget, WidgetStatus } from 'dot-utils';
import {
baseSpacing,
GridWidget,
LoadingWrapper,
WidgetsFilter,
WidgetsGrid,
} from 'dot-design-system';
import WidgetStatsTease from 'dot-design-system/build/blocks/WidgetStatsTease';
import { AjaxState } from '../ajax/ajax.model';
import CircleIconButton from '../elements/CircleIconButton';
import EmptyItems from '../elements/EmptyItems';
interface Props {}
function PlacementWidgetSelectContainer({}: Props) {
const [state, result] = useApi('widget/get', {
data: {
status: WidgetStatus.Published,
},
});
const hasWidgets = state === AjaxState.Loaded && result?.length > 0;
const setSelectedWidget = useStoreActions((actions) => actions.placements.setSelectedWidget);
const setStep = useStoreActions((actions) => actions.placements.setStep);
const setMessage = useStoreActions((actions) => actions.admin.setMessage);
useEffect(() => {
setMessage({
title: 'Notice!',
content:
'Create your widgets at portal.dotaudiences.com. Your saved widgets will then appear below automatically.',
});
}, []);
const handleCreateWidgetClick = (e: any) => {
e.preventDefault();
const anchor = e.target.closest('a');
if (anchor) {
window.open(anchor.href);
}
};
const onSelect = (widget: IWidget) => {
setSelectedWidget(widget);
setStep(PlacementTabKey.SelectPlacement);
};
const renderWidgetStats = (widget: IWidget) => {
const [viewState, viewResult] = useApi(`widget-analytics/stat`, {
method: 'get',
data: {
stat: 'impressionsCount',
widgetId: widget.id,
},
});
const [engagementState, engagementResult] = useApi('widget-analytics/stat', {
method: 'get',
data: {
stat: 'engagementTime',
widgetId: widget.id,
},
});
const views = viewResult?.count || 0;
const engagement = engagementResult?.duration || 0;
const opacity = ([viewState, engagementState].includes(AjaxState.Loading) && 0.5) || 1;
return ;
};
return (
Create Widget (Opens New Tab)
{state === AjaxState.Loading && (
)}
{state === AjaxState.Loaded && !hasWidgets && }
{hasWidgets && (
{
return (
(
)}
/>
);
}}
css={`
max-width: 650px;
`}
/>
)}
);
}
export default PlacementWidgetSelectContainer;