/**
* External dependencies
*/
import { compose } from '@wordpress/compose';
import { __ } from '@wordpress/i18n';
import clsx from 'clsx';
import { withDispatch, withSelect } from '@wordpress/data';
import { useState } from '@wordpress/element';
import PropTypes from 'prop-types';
import { Pagination, EmptyContent } from '@woocommerce/components';
import { recordEvent } from '@woocommerce/tracks';
/**
* Internal dependencies
*/
import './style.scss';
import { STORE_KEY } from '~/marketing/data/constants';
import { ReadBlogMessage } from '~/marketing/components';
import Card from '../card';
import Slider from '../slider';
import KnowledgebaseCardPostPlaceholder from './placeholder';
const KnowledgeBase = ( {
posts,
isLoading,
error,
title = __( 'WooCommerce knowledge base', 'woocommerce' ),
description = __(
'Learn the ins and outs of successful marketing from the experts at WooCommerce.',
'woocommerce'
),
category,
} ) => {
const [ page, updatePage ] = useState( 1 );
const [ animate, updateAnimate ] = useState( null );
const onPaginationPageChange = ( newPage ) => {
let newAnimate;
if ( newPage > page ) {
newAnimate = 'left';
recordEvent( 'marketing_knowledge_carousel', {
direction: 'forward',
page: newPage,
} );
} else {
newAnimate = 'right';
recordEvent( 'marketing_knowledge_carousel', {
direction: 'back',
page: newPage,
} );
}
updatePage( newPage );
updateAnimate( newAnimate );
};
const onPostClick = ( post ) => {
recordEvent( 'marketing_knowledge_article', { title: post.title } );
};
/**
* Get the 2 posts we need for the current page
*/
const getCurrentSlide = () => {
const currentPosts = posts.slice(
( page - 1 ) * 2,
( page - 1 ) * 2 + 2
);
const pageClass = clsx(
'woocommerce-marketing-knowledgebase-card__page',
{
'page-with-single-post': currentPosts.length === 1,
}
);
const displayPosts = currentPosts.map( ( post, index ) => {
return (
{
onPostClick( post );
} }
target="_blank"
rel="noopener noreferrer"
>
{ !! post.image && (
{ __( 'By', 'woocommerce' ) + ' ' }
{ post.author_name }
{ !! post.author_avatar && (
) }
{ post.title }