/**
* External dependencies
*/
import { __ } from '@wordpress/i18n';
import { MenuGroup, MenuItem } from '@wordpress/components';
import { check } from '@wordpress/icons';
import { Fragment, useEffect } from '@wordpress/element';
import { useDispatch, useSelect } from '@wordpress/data';
import { ONBOARDING_STORE_NAME, OPTIONS_STORE_NAME } from '@woocommerce/data';
import { useExperiment } from '@woocommerce/explat';
import { recordEvent } from '@woocommerce/tracks';
/**
* Internal dependencies
*/
import { DisplayOption } from '~/activity-panel/display-options';
import { Task } from './task';
import { TaskList } from './task-list';
import { TasksPlaceholder } from './placeholder';
import './tasks.scss';
export type TasksProps = {
query: { task?: string };
};
export const Tasks: React.FC< TasksProps > = ( { query } ) => {
const { task } = query;
const { hideTaskList } = useDispatch( ONBOARDING_STORE_NAME );
const { updateOptions } = useDispatch( OPTIONS_STORE_NAME );
const [ isLoadingExperiment, experimentAssignment ] = useExperiment(
'woocommerce_tasklist_progression'
);
const { isResolving, taskLists } = useSelect( ( select ) => {
return {
isResolving: select( ONBOARDING_STORE_NAME ).isResolving(
'getTaskLists'
),
taskLists: select( ONBOARDING_STORE_NAME ).getTaskLists(),
};
} );
const getCurrentTask = () => {
if ( ! task ) {
return null;
}
const tasks = taskLists.reduce(
( acc, taskList ) => [ ...acc, ...taskList.tasks ],
[]
);
const currentTask = tasks.find( ( t ) => t.id === task );
if ( ! currentTask ) {
return null;
}
return currentTask;
};
const toggleTaskList = ( taskList ) => {
const { id, eventPrefix, isHidden } = taskList;
const newValue = ! isHidden;
recordEvent(
newValue ? `${ eventPrefix }hide` : `${ eventPrefix }show`,
{}
);
hideTaskList( id );
};
useEffect( () => {
// @todo Update this when all task lists have been hidden or completed.
const taskListsFinished = false;
updateOptions( {
woocommerce_task_list_prompt_shown: true,
} );
}, [ taskLists, isResolving ] );
const currentTask = getCurrentTask();
if ( task && ! currentTask ) {
return null;
}
if ( isResolving ) {
return