/** * External dependencies */ import { useSelect } from '@wordpress/data'; import { Badge } from '@woocommerce/components'; import { Button, Panel, PanelBody, PanelRow, __experimentalText as Text, } from '@wordpress/components'; import { ONBOARDING_STORE_NAME, ORDERS_STORE_NAME, PRODUCTS_STORE_NAME, } from '@woocommerce/data'; import { recordEvent } from '@woocommerce/tracks'; import { useEffect } from '@wordpress/element'; import { snakeCase } from 'lodash'; /** * Internal dependencies */ import './style.scss'; import { getLowStockCount, getOrderStatuses, getUnreadOrders, } from './orders/utils'; import { getAllPanels } from './panels'; import { getUnapprovedReviews } from './reviews/utils'; import { getUrlParams } from '../../utils'; import { getAdminSetting } from '~/utils/admin-settings'; const ORDERS_QUERY_PARAMS = { _fields: [ 'id' ] }; const PUBLISHED_PRODUCTS_QUERY_PARAMS = { status: 'publish', _fields: [ 'id' ], }; export const ActivityPanel = () => { const panelsData = useSelect( ( select ) => { const { getOrdersTotalCount, hasFinishedResolution: hasFinishedOrdersResolution, } = select( ORDERS_STORE_NAME ); const { getProductsTotalCount, hasFinishedResolution: hasFinishedProductsResolution, } = select( PRODUCTS_STORE_NAME ); const totalOrderCount = getOrdersTotalCount( ORDERS_QUERY_PARAMS, 0 ); const orderStatuses = getOrderStatuses( select ); const reviewsEnabled = getAdminSetting( 'reviewsEnabled', 'no' ); const unreadOrdersCount = getUnreadOrders( select, orderStatuses ); const manageStock = getAdminSetting( 'manageStock', 'no' ); const lowStockProductsCount = getLowStockCount( select ); const unapprovedReviewsCount = getUnapprovedReviews( select ); const publishedProductCount = getProductsTotalCount( PUBLISHED_PRODUCTS_QUERY_PARAMS, 0 ); const loadingOrderAndProductCount = ! hasFinishedOrdersResolution( 'getOrdersTotalCount', [ ORDERS_QUERY_PARAMS, 0, ] ) || ! hasFinishedProductsResolution( 'getProductsTotalCount', [ PUBLISHED_PRODUCTS_QUERY_PARAMS, 0, ] ); const taskList = select( ONBOARDING_STORE_NAME ).getTaskList( 'setup' ); return { loadingOrderAndProductCount, lowStockProductsCount, unapprovedReviewsCount, unreadOrdersCount, manageStock, isTaskListHidden: taskList?.isHidden, publishedProductCount, reviewsEnabled, totalOrderCount, orderStatuses, }; } ); const panels = panelsData.loadingOrderAndProductCount ? [] : getAllPanels( panelsData ); useEffect( () => { if ( panelsData.isTaskListHidden !== undefined ) { const visiblePanels = panels.reduce( ( acc, panel ) => { const panelId = snakeCase( panel.id ); acc[ panelId ] = true; return acc; }, { task_list: panelsData.isTaskListHidden } ); recordEvent( 'activity_panel_visible_panels', visiblePanels ); } }, [ panelsData.isTaskListHidden ] ); if ( panels.length === 0 ) { return null; } const getInitialOpenState = ( panelId ) => { const { opened_panel: openedPanel } = getUrlParams( window.location.search ); return panelId === openedPanel; }; return ( { panels.map( ( panelData ) => { const { className, count, id, initialOpen, panel, title, collapsible, } = panelData; return collapsible ? ( { title } , count !== null && ( ), ] } key={ id } className={ className } initialOpen={ getInitialOpenState( id ) || initialOpen } collapsible={ collapsible } disabled={ ! collapsible } onToggle={ ( isOpen ) => { if ( ! isOpen ) { return; } recordEvent( 'activity_panel_open', { tab: id, } ); } } > { panel } ) : (

); } ) }
); };