import React, { useEffect } from 'react'; import { useAction } from '../ajax/ajax.hooks'; import { Placement, PlacementAjaxOperation } from './placements.models'; import { LoadingWrapper, Wrapper } from 'dot-design-system'; import SavedPlacementsTable from './SavedPlacementsTable'; import { AjaxState } from '../ajax/ajax.model'; import { ajaxAction, ajaxApi } from '../ajax/ajax.utils'; import { useStoreActions, useStoreState } from '../store/store.hooks'; import { is, pathOr, propEq } from 'ramda'; import store from '../store/store'; import { IframeType } from 'dot-utils'; import { AdminScreen } from '../admin/admin.models'; import { WordpressTaxonomy } from '../models/wp'; import { isAllTaxonomies, triggerResetCache } from './placements.utils'; import EmptyItems from '../elements/EmptyItems'; import { useTimeout } from '../utils/timings'; interface Props {} function SavedPlacementsContainer({}: Props) { const data = useStoreState((state) => state.placements.data); const setMessage = useStoreActions((actions) => actions.admin.setMessage); const [status, placements, rerun] = useAction('dot_press_placement'); useEffect(() => { setMessage({ title: 'Tip!', content: 'Did you know? You can see your widget performance within the Analytics page', }); }, []); const handleDelete = async (placement: Placement) => { const result = await ajaxAction({ action: 'dot_press_placement', method: 'post', data: { operation: PlacementAjaxOperation.DELETE, placement_ids: [placement.ID], }, }); if (result !== AjaxState.Error) { triggerResetCache(); rerun(); } }; const handleOnEdit = async (placement: Placement) => { const res = await ajaxApi(`widget/${placement.meta.widget_id[0]}`); const taxonomyType = placement.meta?.taxonomy_type?.[0] || 'category'; const placementTaxonomyProp = taxonomyType === 'category' ? 'categories' : 'tags'; const taxonomies = pathOr([], [placementTaxonomyProp], placement).map( (item: number | WordpressTaxonomy) => { const termId = pathOr(item, ['term_id'], item); return data[placementTaxonomyProp].find(propEq('term_id', termId as any)); } ); if (isAllTaxonomies(placement)) { taxonomies.unshift({ term_id: 'all', name: 'All', taxonomy: taxonomyType, } as WordpressTaxonomy); } store.dispatch.placements.updatePlacementSelect({ currentPlacementId: placement.ID, selectedAlignment: placement.meta.alignment[0], selectedFormat: placement.meta.format[0].split(',') as IframeType[], selectedInsertionPoint: placement.meta.insertion_point[0], selectedInsertionNumber: Number(placement.meta.insertion_number[0]), selectedTaxonomies: taxonomies as WordpressTaxonomy[], selectedTaxonomyType: taxonomyType, selectedWidget: res, }); store.dispatch.admin.setScreen(AdminScreen.Publish); }; const isNoPlacements = !placements || !placements.length; if (status === AjaxState.Loaded && isNoPlacements) { return ; } const renderTaxonomy = ( type: 'categories' | 'tags', item: string | number | WordpressTaxonomy ) => { if (is(Object, item)) { // @ts-ignore return item.name; } const taxonomy = data[type].find(propEq('term_id', Number(item) as any)); if (taxonomy) { return taxonomy.name; } return String(item); }; return ( {status === AjaxState.Loading && isNoPlacements && ( )} ); } export default SavedPlacementsContainer;