Client:Packages:Login:Fix double request to cultures

This commit is contained in:
Darya Umrikhina 2024-08-22 17:21:13 +04:00
parent 5366f41f37
commit c4ae671ca3
3 changed files with 24 additions and 14 deletions

View File

@ -69,16 +69,24 @@ export default async function Layout({
isComboboxVisible = false; isComboboxVisible = false;
} }
let cultures;
if (isComboboxVisible) {
cultures = await getPortalCultures();
}
return ( return (
<div style={{ width: "100%", height: "100%" }}> <div style={{ width: "100%", height: "100%" }}>
<SimpleNav <SimpleNav
culture={culture} culture={culture}
initialCultures={cultures}
isLanguageComboboxVisible={isComboboxVisible} isLanguageComboboxVisible={isComboboxVisible}
/> />
<ContentWrapper id="content-wrapper" bgPattern={bgPattern}> <ContentWrapper id="content-wrapper" bgPattern={bgPattern}>
<div className="bg-cover" /> <div className="bg-cover" />
<Scrollbar id="customScrollBar"> <Scrollbar id="customScrollBar">
{isComboboxVisible && <LanguageComboboxWrapper />} {isComboboxVisible && (
<LanguageComboboxWrapper initialCultures={cultures} />
)}
<StyledPage id="styled-page">{children}</StyledPage> <StyledPage id="styled-page">{children}</StyledPage>
</Scrollbar> </Scrollbar>

View File

@ -33,25 +33,25 @@ import { setLanguageForUnauthorized } from "@docspace/shared/utils/common";
import { LanguageCombobox } from "@docspace/shared/components/language-combobox"; import { LanguageCombobox } from "@docspace/shared/components/language-combobox";
import { DeviceType } from "@docspace/shared/enums"; import { DeviceType } from "@docspace/shared/enums";
import { Nullable } from "@docspace/shared/types"; import { Nullable } from "@docspace/shared/types";
import { getPortalCultures } from "@docspace/shared/api/settings";
import { TPortalCultures } from "@docspace/shared/api/settings/types"; import { TPortalCultures } from "@docspace/shared/api/settings/types";
import useDeviceType from "@/hooks/useDeviceType"; import useDeviceType from "@/hooks/useDeviceType";
const LanguageComboboxWrapper = () => { type TLanguageComboboxWrapper = {
initialCultures?: TPortalCultures;
};
const LanguageComboboxWrapper = ({
initialCultures,
}: TLanguageComboboxWrapper) => {
const { i18n } = useTranslation(["Login", "Common"]); const { i18n } = useTranslation(["Login", "Common"]);
const currentCulture = i18n.language; const currentCulture = i18n.language;
const [cultures, setCultures] = useState<Nullable<TPortalCultures>>(null); const [cultures, setCultures] = useState<Nullable<TPortalCultures>>(null);
useEffect(() => { useEffect(() => {
const fetchData = async () => { if (initialCultures) setCultures(initialCultures);
const cultures = await getPortalCultures(); }, [initialCultures]);
if (cultures) setCultures(cultures);
};
fetchData();
}, []);
const onLanguageSelect = (culture: { key: string }) => { const onLanguageSelect = (culture: { key: string }) => {
const { key } = culture; const { key } = culture;

View File

@ -29,8 +29,8 @@
import React from "react"; import React from "react";
import styled, { useTheme } from "styled-components"; import styled, { useTheme } from "styled-components";
import { useSearchParams } from "next/navigation";
import { TPortalCultures } from "@docspace/shared/api/settings/types";
import { mobile } from "@docspace/shared/utils/device"; import { mobile } from "@docspace/shared/utils/device";
import { getLogoUrl } from "@docspace/shared/utils/common"; import { getLogoUrl } from "@docspace/shared/utils/common";
import { Base } from "@docspace/shared/themes"; import { Base } from "@docspace/shared/themes";
@ -38,8 +38,6 @@ import { WhiteLabelLogoType } from "@docspace/shared/enums";
import LanguageComboboxWrapper from "./LanguageCombobox"; import LanguageComboboxWrapper from "./LanguageCombobox";
import { TYPE_LINK_WITHOUT_LNG_COMBOBOX } from "@/utils/constants";
const StyledSimpleNav = styled.div` const StyledSimpleNav = styled.div`
display: none; display: none;
height: 48px; height: 48px;
@ -66,11 +64,13 @@ StyledSimpleNav.defaultProps = { theme: Base };
interface SimpleNavProps { interface SimpleNavProps {
culture?: string; culture?: string;
initialCultures?: TPortalCultures;
isLanguageComboboxVisible?: boolean; isLanguageComboboxVisible?: boolean;
} }
const SimpleNav = ({ const SimpleNav = ({
culture, culture,
initialCultures,
isLanguageComboboxVisible = true, isLanguageComboboxVisible = true,
}: SimpleNavProps) => { }: SimpleNavProps) => {
const theme = useTheme(); const theme = useTheme();
@ -87,7 +87,9 @@ const SimpleNav = ({
return ( return (
<StyledSimpleNav id="login-header"> <StyledSimpleNav id="login-header">
<img className="logo" src={logoUrl} alt="logo-url" /> <img className="logo" src={logoUrl} alt="logo-url" />
{isLanguageComboboxVisible && <LanguageComboboxWrapper />} {isLanguageComboboxVisible && (
<LanguageComboboxWrapper initialCultures={initialCultures} />
)}
</StyledSimpleNav> </StyledSimpleNav>
); );
}; };