diff --git a/newIDE/app/src/MainFrame/EditorContainers/BaseEditor.js b/newIDE/app/src/MainFrame/EditorContainers/BaseEditor.js index 01c4d96ba4..47c3e9878f 100644 --- a/newIDE/app/src/MainFrame/EditorContainers/BaseEditor.js +++ b/newIDE/app/src/MainFrame/EditorContainers/BaseEditor.js @@ -52,6 +52,9 @@ export type RenderEditorContainerProps = {| storageProvider: StorageProvider, setToolbar: (?React.Node) => void, setGamesPlatformFrameShown: ({| shown: boolean, isMobile: boolean |}) => void, + setTabsTitleBarAndEditorToolbarVisibility: ( + visibility: 'visible' | 'hidden' | 'removed' + ) => void, // Some optional extra props to pass to the rendered editor extraEditorProps: ?EditorContainerExtraProps, diff --git a/newIDE/app/src/MainFrame/EditorContainers/HomePage/HomePageMenuBar.js b/newIDE/app/src/MainFrame/EditorContainers/HomePage/HomePageMenuBar.js index b20e5cc716..fdc6919b8d 100644 --- a/newIDE/app/src/MainFrame/EditorContainers/HomePage/HomePageMenuBar.js +++ b/newIDE/app/src/MainFrame/EditorContainers/HomePage/HomePageMenuBar.js @@ -133,7 +133,7 @@ const HomePageMenuBar = ({ borderTop: `1px solid ${gdevelopTheme.home.separator.color}`, }} > - + {tabsToDisplay.map(({ label, tab, getIcon, id }) => { const isActive = activeTab === tab; diff --git a/newIDE/app/src/MainFrame/EditorContainers/HomePage/LearnSection/index.js b/newIDE/app/src/MainFrame/EditorContainers/HomePage/LearnSection/index.js index 962d0036ba..c698aad826 100644 --- a/newIDE/app/src/MainFrame/EditorContainers/HomePage/LearnSection/index.js +++ b/newIDE/app/src/MainFrame/EditorContainers/HomePage/LearnSection/index.js @@ -38,6 +38,7 @@ import { getBundleListingDataFromUserFriendlySlug, } from '../../../../AssetStore/AssetStoreUtils'; import useAlertDialog from '../../../../UI/Alert/useAlertDialog'; +import { useResponsiveWindowSize } from '../../../../UI/Responsive/ResponsiveWindowMeasurer'; type Props = {| selectInAppTutorial: (tutorialId: string) => void, @@ -88,6 +89,7 @@ type Props = {| initialBundleUserFriendlySlug: ?string, initialBundleCategory: ?string, clearInitialBundleValues: () => void, + onTabsTitleBarAndEditorToolbarRemoved: boolean => void, |}; const LearnSection = ({ @@ -118,6 +120,7 @@ const LearnSection = ({ initialBundleUserFriendlySlug, initialBundleCategory, clearInitialBundleValues, + onTabsTitleBarAndEditorToolbarRemoved, }: Props) => { const { fetchTutorials } = React.useContext(TutorialContext); const { fetchBundles, bundleListingDatas } = React.useContext( @@ -125,6 +128,7 @@ const LearnSection = ({ ); const { navigateToRoute } = React.useContext(RouterContext); const { showAlert } = useAlertDialog(); + const { isMobile } = useResponsiveWindowSize(); const [ selectedBundleListingData, @@ -143,9 +147,10 @@ const LearnSection = ({ priceValue: priceForUsageType && priceForUsageType.value, priceCurrency: priceForUsageType && priceForUsageType.currency, }); + onTabsTitleBarAndEditorToolbarRemoved(false); setSelectedBundleListingData(bundleListingData); }, - [setSelectedBundleListingData] + [setSelectedBundleListingData, onTabsTitleBarAndEditorToolbarRemoved] ); // When the bundles are loaded, @@ -193,6 +198,11 @@ const LearnSection = ({ priceValue: priceForUsageType && priceForUsageType.value, priceCurrency: priceForUsageType && priceForUsageType.currency, }); + // We are coming from a web link, let's hide the top navigation of the app, + // so the user can focus on the bundle information. + if (isMobile) { + onTabsTitleBarAndEditorToolbarRemoved(true); + } setSelectedBundleListingData(bundleListingData); }, [ @@ -201,6 +211,8 @@ const LearnSection = ({ initialBundleUserFriendlySlug, initialBundleCategory, clearInitialBundleValues, + onTabsTitleBarAndEditorToolbarRemoved, + isMobile, ] ); @@ -226,9 +238,10 @@ const LearnSection = ({ }); } + onTabsTitleBarAndEditorToolbarRemoved(false); onSelectCourse(courseId); }, - [onSelectCourse, courses] + [onSelectCourse, courses, onTabsTitleBarAndEditorToolbarRemoved] ); React.useEffect( @@ -259,6 +272,7 @@ const LearnSection = ({ course={course} courseChapters={courseChapters} onBack={() => { + onTabsTitleBarAndEditorToolbarRemoved(false); onSelectCourse(null); }} onOpenTemplateFromCourseChapter={onOpenTemplateFromCourseChapter} @@ -281,7 +295,10 @@ const LearnSection = ({ return ( setSelectedBundleListingData(null)} + onBack={() => { + onTabsTitleBarAndEditorToolbarRemoved(false); + setSelectedBundleListingData(null); + }} getSubscriptionPlansWithPricingSystems={ getSubscriptionPlansWithPricingSystems } diff --git a/newIDE/app/src/MainFrame/EditorContainers/HomePage/index.js b/newIDE/app/src/MainFrame/EditorContainers/HomePage/index.js index 3357b8f97e..f96ec2741f 100644 --- a/newIDE/app/src/MainFrame/EditorContainers/HomePage/index.js +++ b/newIDE/app/src/MainFrame/EditorContainers/HomePage/index.js @@ -109,6 +109,9 @@ type Props = {| project: ?gdProject, setToolbar: (?React.Node) => void, setGamesPlatformFrameShown: ({| shown: boolean, isMobile: boolean |}) => void, + setTabsTitleBarAndEditorToolbarVisibility: ( + visibility: 'visible' | 'hidden' | 'removed' + ) => void, storageProviders: Array, // Games @@ -200,6 +203,7 @@ export const HomePage = React.memo( onCreateProjectFromExample, setToolbar, setGamesPlatformFrameShown, + setTabsTitleBarAndEditorToolbarVisibility, selectInAppTutorial, onOpenPreferences, onOpenAbout, @@ -281,6 +285,10 @@ export const HomePage = React.memo( includeLegacy: false, }); + const [ + isRemovingTabsTitleBarAndEditorToolbarTemporarily, + setIsRemovingTabsTitleBarAndEditorToolbarTemporarily, + ] = React.useState(false); const { isMobile } = useResponsiveWindowSize(); const { values: { showCreateSectionByDefault }, @@ -295,6 +303,10 @@ export const HomePage = React.memo( : 'learn'; const [activeTab, setActiveTab] = React.useState(initialTab); + const onTabChange = (tab: HomeTab) => { + setActiveTab(tab); + setIsRemovingTabsTitleBarAndEditorToolbarTemporarily(false); + }; const { setInitialPackUserFriendlySlug } = React.useContext( AssetStoreContext @@ -331,7 +343,7 @@ export const HomePage = React.memo( if (!requestedTab) return; - setActiveTab(requestedTab); + onTabChange(requestedTab); if (requestedTab === 'shop') { if (routeArguments['asset-pack']) { setInitialPackUserFriendlySlug(routeArguments['asset-pack']); @@ -482,16 +494,21 @@ export const HomePage = React.memo( if (activeTab === 'play') { setGamesPlatformFrameShown({ shown: true, isMobile }); } else { + if (isRemovingTabsTitleBarAndEditorToolbarTemporarily) { + return; + } setGamesPlatformFrameShown({ shown: false, isMobile }); updateToolbar(); } - - // Ensure we show it again when the tab changes. - return () => { - setGamesPlatformFrameShown({ shown: false, isMobile }); - }; }, - [updateToolbar, activeTab, setGamesPlatformFrameShown, isMobile] + [ + updateToolbar, + activeTab, + isActive, + setGamesPlatformFrameShown, + isMobile, + isRemovingTabsTitleBarAndEditorToolbarTemporarily, + ] ); const forceUpdateEditor = React.useCallback(() => { @@ -653,6 +670,14 @@ export const HomePage = React.memo( initialBundleUserFriendlySlugForLearn } initialBundleCategory={initialBundleCategoryForLearn} + onTabsTitleBarAndEditorToolbarRemoved={removed => { + setIsRemovingTabsTitleBarAndEditorToolbarTemporarily( + removed + ); + setTabsTitleBarAndEditorToolbarVisibility( + removed ? 'removed' : 'visible' + ); + }} /> )} {activeTab === 'play' && ( @@ -671,7 +696,7 @@ export const HomePage = React.memo( onExtensionInstalled={onExtensionInstalled} onCourseOpen={(courseId: string) => { onSelectCourse(courseId); - setActiveTab('learn'); + onTabChange('learn'); }} receivedCourses={ courses @@ -694,7 +719,7 @@ export const HomePage = React.memo( currentFileMetadata={fileMetadata} onOpenTeachingResources={() => { setLearnCategory('education-curriculum'); - setActiveTab('learn'); + onTabChange('learn'); }} /> ) : ( @@ -711,7 +736,7 @@ export const HomePage = React.memo( @@ -738,6 +763,9 @@ export const renderHomePageContainer = ( projectItemName={props.projectItemName} setToolbar={props.setToolbar} setGamesPlatformFrameShown={props.setGamesPlatformFrameShown} + setTabsTitleBarAndEditorToolbarVisibility={ + props.setTabsTitleBarAndEditorToolbarVisibility + } canOpen={props.canOpen} onChooseProject={props.onChooseProject} onOpenRecentFile={props.onOpenRecentFile} diff --git a/newIDE/app/src/MainFrame/EditorTabsPane.js b/newIDE/app/src/MainFrame/EditorTabsPane.js index e9879c53b4..117c53e1ad 100644 --- a/newIDE/app/src/MainFrame/EditorTabsPane.js +++ b/newIDE/app/src/MainFrame/EditorTabsPane.js @@ -321,14 +321,16 @@ const EditorTabsPane = React.forwardRef((props, ref) => { const containerRef = React.useRef(null); const [ - tabsTitleBarAndEditorToolbarHidden, - setTabsTitleBarAndEditorToolbarHidden, - ] = React.useState(false); + tabsTitleBarAndEditorToolbarVisibility, + setTabsTitleBarAndEditorToolbarVisibility, + ] = React.useState<'visible' | 'hidden' | 'removed'>('visible'); const onSetGamesPlatformFrameShown = React.useCallback( ({ shown, isMobile }: {| shown: boolean, isMobile: boolean |}) => { onSetPointerEventsNone(shown); - setTabsTitleBarAndEditorToolbarHidden(shown && isMobile); + setTabsTitleBarAndEditorToolbarVisibility( + shown && isMobile ? 'hidden' : 'visible' + ); }, [onSetPointerEventsNone] ); @@ -485,7 +487,7 @@ const EditorTabsPane = React.forwardRef((props, ref) => { isLeftMostPane={isLeftMostPane} isRightMostPane={isRightMostPane} displayMenuIcon={paneIdentifier === 'center'} - hidden={tabsTitleBarAndEditorToolbarHidden} + visibility={tabsTitleBarAndEditorToolbarVisibility} toggleProjectManager={toggleProjectManager} renderTabs={(onEditorTabHovered, onEditorTabClosing) => ( ((props, ref) => { )}