/**
* External dependencies
*/
import {
Suspense,
lazy,
useCallback,
useLayoutEffect,
useRef,
useState,
} from '@wordpress/element';
import { compose } from '@wordpress/compose';
import { withDispatch, withSelect } from '@wordpress/data';
import classnames from 'classnames';
import PropTypes from 'prop-types';
import {
useUserPreferences,
NOTES_STORE_NAME,
ONBOARDING_STORE_NAME,
OPTIONS_STORE_NAME,
} from '@woocommerce/data';
import { __ } from '@wordpress/i18n';
import moment from 'moment';
import { useExperiment } from '@woocommerce/explat';
/**
* Internal dependencies
*/
import ActivityHeader from '~/activity-panel/activity-header';
import { ActivityPanel } from './activity-panel';
import { Column } from './column';
import InboxPanel from '../inbox-panel';
import { IntroModal as NavigationIntroModal } from '../navigation/components/intro-modal';
import StatsOverview from './stats-overview';
import { StoreManagementLinks } from '../store-management-links';
import { TasksPlaceholder } from '../tasks';
import {
WELCOME_MODAL_DISMISSED_OPTION_NAME,
WELCOME_FROM_CALYPSO_MODAL_DISMISSED_OPTION_NAME,
} from './constants';
import { WelcomeFromCalypsoModal } from './welcome-from-calypso-modal';
import { WelcomeModal } from './welcome-modal';
import './style.scss';
import '../dashboard/style.scss';
const Tasks = lazy( () =>
import( /* webpackChunkName: "tasks" */ '../tasks' )
);
const TwoColumnTasks = lazy( () =>
import( /* webpackChunkName: "two-column-tasks" */ '../two-column-tasks' )
);
const TwoColumnTasksExtended = lazy( () =>
import(
/* webpackChunkName: "two-column-tasks-extended" */ '../two-column-tasks/extended-task'
)
);
export const Layout = ( {
defaultHomescreenLayout,
isBatchUpdating,
query,
taskListComplete,
hasTaskList,
shouldShowWelcomeModal,
shouldShowWelcomeFromCalypsoModal,
isTaskListHidden,
updateOptions,
} ) => {
const userPrefs = useUserPreferences();
const shouldShowStoreLinks = taskListComplete || isTaskListHidden;
const hasTwoColumnContent =
shouldShowStoreLinks || window.wcAdminFeatures.analytics;
const [ showInbox, setShowInbox ] = useState( true );
const isDashboardShown = ! query.task;
const momentDate = moment().utc();
const [
isLoadingExperimentAssignment,
experimentAssignment,
] = useExperiment(
'woocommerce_tasklist_progression_headercard_' +
momentDate.format( 'YYYY' ) +
'_' +
momentDate.format( 'MM' )
);
const [
isLoadingTwoColExperimentAssignment,
twoColExperimentAssignment,
] = useExperiment(
'woocommerce_tasklist_progression_headercard_2col_' +
momentDate.format( 'YYYY' ) +
'_' +
momentDate.format( 'MM' )
);
const isRunningTwoColumnExperiment =
twoColExperimentAssignment?.variationName === 'treatment';
// New TaskList UI is enabled when either experiment is treatment.
const isRunningTaskListExperiment =
experimentAssignment?.variationName === 'treatment' ||
isRunningTwoColumnExperiment;
// Override defaultHomescreenLayout if store is in the experiment.
const defaultHomescreenLayoutOverride = () => {
if (
isLoadingExperimentAssignment ||
isLoadingTwoColExperimentAssignment
) {
return defaultHomescreenLayout; // Experiments are still loading, don't override.
}
if ( ! isRunningTaskListExperiment ) {
return defaultHomescreenLayout; // Not in the experiment, don't override.
}
return isRunningTwoColumnExperiment ? 'two_columns' : 'single_column';
};
const twoColumns =
( userPrefs.homepage_layout || defaultHomescreenLayoutOverride() ) ===
'two_columns' && hasTwoColumnContent;
if ( isBatchUpdating && ! showInbox ) {
setShowInbox( true );
}
const isWideViewport = useRef( true );
const maybeToggleColumns = useCallback( () => {
isWideViewport.current = window.innerWidth >= 782;
}, [] );
useLayoutEffect( () => {
maybeToggleColumns();
window.addEventListener( 'resize', maybeToggleColumns );
return () => {
window.removeEventListener( 'resize', maybeToggleColumns );
};
}, [ maybeToggleColumns ] );
const shouldStickColumns = isWideViewport.current && twoColumns;
const renderColumns = () => {
return (
<>