From 0f4c102c5149776001e80a34ceb985d9464d7a21 Mon Sep 17 00:00:00 2001 From: louwie17 Date: Mon, 3 May 2021 14:13:47 -0300 Subject: [PATCH] Expand collapse extendable task list (https://github.com/woocommerce/woocommerce-admin/pull/6910) * Partial change with new task-list * Made use of the new CollapsibleList for the extended list * Add test for expansion item * Add changelog * Add tracks for expand and collapse * Update translation to plural/singular option --- .../client/task-list/index.js | 2 +- .../task-list/{list.js => task-list.js} | 32 +++++++++++++++++-- .../client/task-list/test/index.js | 24 +++++++++++++- plugins/woocommerce-admin/readme.txt | 3 +- 4 files changed, 55 insertions(+), 6 deletions(-) rename plugins/woocommerce-admin/client/task-list/{list.js => task-list.js} (90%) diff --git a/plugins/woocommerce-admin/client/task-list/index.js b/plugins/woocommerce-admin/client/task-list/index.js index afa99090560..026cdbd2f6f 100644 --- a/plugins/woocommerce-admin/client/task-list/index.js +++ b/plugins/woocommerce-admin/client/task-list/index.js @@ -21,7 +21,7 @@ import './style.scss'; import CartModal from '../dashboard/components/cart-modal'; import { getAllTasks } from './tasks'; import { getCountryCode } from '../dashboard/utils'; -import TaskList from './list'; +import TaskList from './task-list'; import { DisplayOption } from '../header/activity-panel/display-options'; import { TaskStep } from './task-step'; diff --git a/plugins/woocommerce-admin/client/task-list/list.js b/plugins/woocommerce-admin/client/task-list/task-list.js similarity index 90% rename from plugins/woocommerce-admin/client/task-list/list.js rename to plugins/woocommerce-admin/client/task-list/task-list.js index 3cf5f926a15..fe35def76e5 100644 --- a/plugins/woocommerce-admin/client/task-list/list.js +++ b/plugins/woocommerce-admin/client/task-list/task-list.js @@ -1,7 +1,7 @@ /** * External dependencies */ -import { __ } from '@wordpress/i18n'; +import { __, _n, sprintf } from '@wordpress/i18n'; import { useEffect, useRef } from '@wordpress/element'; import { Button, Card, CardBody, CardHeader } from '@wordpress/components'; import { useSelect, useDispatch } from '@wordpress/data'; @@ -9,6 +9,7 @@ import { EllipsisMenu, Badge, __experimentalList as List, + __experimentalCollapsibleList as CollapsibleList, } from '@woocommerce/components'; import { updateQueryString } from '@woocommerce/navigation'; import { OPTIONS_STORE_NAME, ONBOARDING_STORE_NAME } from '@woocommerce/data'; @@ -246,6 +247,31 @@ export const TaskList = ( { return
; } + const expandLabel = sprintf( + /* translators: %i = number of hidden tasks */ + _n( + 'Show %i more task.', + 'Show %i more tasks.', + listTasks.length - 2, + 'woocommerce-admin' + ), + listTasks.length - 2 + ); + const collapseLabel = __( 'Show less', 'woocommerce-admin' ); + const ListComp = name === 'task_list' ? List : CollapsibleList; + + const listProps = + name === 'task_list' + ? {} + : { + collapseLabel, + expandLabel, + show: 2, + onCollapse: () => + recordEvent( 'extended_tasklist_collapse' ), + onExpand: () => recordEvent( 'extended_tasklist_expand' ), + }; + return ( <>
@@ -261,7 +287,7 @@ export const TaskList = ( { { renderMenu() } - + { listTasks.map( ( task ) => ( ) ) } - +
diff --git a/plugins/woocommerce-admin/client/task-list/test/index.js b/plugins/woocommerce-admin/client/task-list/test/index.js index 9eb887c3f56..4cdc86dece5 100644 --- a/plugins/woocommerce-admin/client/task-list/test/index.js +++ b/plugins/woocommerce-admin/client/task-list/test/index.js @@ -18,7 +18,7 @@ import { useDispatch, useSelect } from '@wordpress/data'; * Internal dependencies */ import TaskDashboard from '../'; -import { TaskList } from '../list'; +import { TaskList } from '../task-list'; import { getAllTasks } from '../tasks'; import { DisplayOption } from '../../header/activity-panel/display-options'; @@ -206,6 +206,28 @@ describe( 'TaskDashboard and TaskList', () => { expect( queryByText( EXTENDED_TASK_LIST_HEADING ) ).not.toBeNull(); } ); + it( 'renders only the extended task list with expansion', () => { + useSelect.mockImplementation( () => ( { + dismissedTasks: [], + isSetupTaskListHidden: true, + profileItems: {}, + } ) ); + apiFetch.mockResolvedValue( {} ); + getAllTasks.mockReturnValue( { + setup: [], + extension: [ ...tasks.setup, ...tasks.extension ], + } ); + const { queryByText } = render( ); + + expect( queryByText( TASK_LIST_HEADING ) ).toBeNull(); + + expect( queryByText( EXTENDED_TASK_LIST_HEADING ) ).not.toBeNull(); + const taskLength = tasks.setup.length + tasks.extension.length; + expect( + queryByText( `Show ${ taskLength - 2 } more tasks.` ) + ).toBeInTheDocument(); + } ); + it( 'sets homescreen layout default when dismissed', () => { const { getByRole } = render(