Skip to content

Commit 10aa7c9

Browse files
authored
Feat plan render (#641)
* feat: integrate cloud plan support into MDXContent and CustomContent components - Updated MDXContent to accept cloudPlan as a prop and pass it to useCustomContent. - Enhanced useCustomContent to handle cloudPlan logic for conditional rendering. - Modified CustomContent to include cloudPlan checks for display logic. - Refactored useCloudPlan to ensure consistent type handling for cloudPlan across components. * fix: enhance cloud plan display logic in CustomContent component - Updated the logic in CustomContent to handle cloudPlan as an array, allowing for more flexible checks against the cloudPlanFromURL. - Improved the readability and maintainability of the cloud plan display conditions. * refactor: simplify conditional checks in CustomContent component - Streamlined the logic for determining display conditions by removing unnecessary double negations in the checks for pageType, language, and cloudPlan.
1 parent ff36541 commit 10aa7c9

File tree

4 files changed

+34
-19
lines changed

4 files changed

+34
-19
lines changed
Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
import { PropsWithChildren } from "react";
22
import { PageType } from "shared/utils";
3+
import { CloudPlan } from "shared/useCloudPlan";
34

45
interface CustomContentProps {
56
platform?: "tidb" | "tidb-cloud";
67
language?: string;
8+
cloudPlan?: CloudPlan;
79
pageTypeFromURL?: PageType;
810
languageFromURL?: string;
11+
cloudPlanFromURL?: CloudPlan | null;
912
}
1013

1114
export const useCustomContent = (
1215
pageTypeFromURL: PageType,
16+
cloudPlanFromURL?: CloudPlan | null,
1317
languageFromURL?: string
1418
) => {
1519
return (props: PropsWithChildren<CustomContentProps>) => {
@@ -18,6 +22,7 @@ export const useCustomContent = (
1822
{...props}
1923
pageTypeFromURL={pageTypeFromURL}
2024
languageFromURL={languageFromURL}
25+
cloudPlanFromURL={cloudPlanFromURL}
2126
/>
2227
);
2328
};
@@ -32,25 +37,27 @@ export const CustomContent: React.FC<PropsWithChildren<CustomContentProps>> = (
3237
children,
3338
languageFromURL,
3439
language,
40+
cloudPlanFromURL,
41+
cloudPlan,
3542
} = props;
3643
const pageType = _pageType?.replace("-", "") || "";
3744
const shouldDisplayByPageType = pageTypeFromURL === pageType;
3845

46+
const cloudPlanArray = cloudPlan?.split(",").map((plan) => plan.trim()) || [];
47+
const shouldDisplayByCloudPlan = cloudPlanArray.includes(
48+
cloudPlanFromURL || ""
49+
);
50+
3951
const languageArray = language
4052
? language.split(",").map((lang) => lang.trim())
4153
: [];
4254
const shouldDisplayByLanguage = languageArray.includes(languageFromURL || "");
4355

44-
const onlyPageType = !!pageType && !language;
45-
const onlyLanguage = !pageType && !!language;
46-
const showOnlyPageType = onlyPageType && shouldDisplayByPageType;
47-
const showOnlyLanguage = onlyLanguage && shouldDisplayByLanguage;
48-
const showAll =
49-
!!pageType &&
50-
!!languageFromURL &&
51-
shouldDisplayByPageType &&
52-
shouldDisplayByLanguage;
53-
const shouldDisplay = showOnlyPageType || showOnlyLanguage || showAll;
56+
const isPageTypeMatch = !pageType || shouldDisplayByPageType;
57+
const isLanguageMatch = !language || shouldDisplayByLanguage;
58+
const isCloudPlanMatch = !cloudPlan || shouldDisplayByCloudPlan;
59+
60+
const shouldDisplay = isPageTypeMatch && isLanguageMatch && isCloudPlanMatch;
5461

5562
return <>{shouldDisplay ? children : <></>}</>;
5663
};

src/components/MDXContent.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import replaceInternalHref from "shared/utils/anchor";
1414
import { Pre } from "components/MDXComponents/Pre";
1515
import { useCustomContent } from "components/MDXComponents/CustomContent";
1616
import { getPageType } from "shared/utils";
17+
import { CloudPlan } from "shared/useCloudPlan";
1718

1819
export default function MDXContent(props: {
1920
data: any;
@@ -26,6 +27,7 @@ export default function MDXContent(props: {
2627
language: string;
2728
buildType: BuildType;
2829
pageUrl: string;
30+
cloudPlan: CloudPlan | null;
2931
}) {
3032
const {
3133
data,
@@ -38,10 +40,11 @@ export default function MDXContent(props: {
3840
language,
3941
buildType,
4042
pageUrl,
43+
cloudPlan,
4144
} = props;
4245

4346
const pageType = getPageType(language, pageUrl);
44-
const CustomContent = useCustomContent(pageType, language);
47+
const CustomContent = useCustomContent(pageType, cloudPlan, language);
4548
// const isAutoTranslation = useIsAutoTranslation(pageUrl || "");
4649

4750
React.useEffect(() => {

src/shared/useCloudPlan.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ export const CLOUD_MODE_KEY = "plan";
1313
export const CLOUD_MODE_VALUE_STARTER = "starter";
1414
export const CLOUD_MODE_VALUE_ESSENTIAL = "essential";
1515

16+
export type CloudPlan = "dedicated" | "starter" | "essential";
17+
1618
const CloudPlanContext = createContext<{
1719
repo: Repo;
18-
cloudPlan: string | null;
19-
setCloudPlan: Dispatch<SetStateAction<string | null>>;
20+
cloudPlan: CloudPlan | null;
21+
setCloudPlan: Dispatch<SetStateAction<CloudPlan | null>>;
2022
}>({
2123
repo: Repo.tidb,
2224
cloudPlan: null,
@@ -35,16 +37,17 @@ export const useCloudPlan = () => {
3537
const [isEssential, setIsEssential] = useState<boolean>(false);
3638
const [isClassic, setIsClassic] = useState<boolean>(true);
3739

38-
const setCloudPlan = (cloudPlan: string) => {
40+
const setCloudPlan = (cloudPlan: CloudPlan) => {
3941
_setCloudPlan(cloudPlan);
4042
sessionStorage.setItem(CLOUD_MODE_KEY, cloudPlan);
4143
};
4244

4345
useEffect(() => {
4446
const searchParams = new URLSearchParams(location.search);
4547
const cloudPlanFromSession = sessionStorage.getItem(CLOUD_MODE_KEY);
46-
const cloudPlan =
47-
searchParams.get(CLOUD_MODE_KEY) || cloudPlanFromSession || _cloudPlan;
48+
const cloudPlan = (searchParams.get(CLOUD_MODE_KEY) ||
49+
cloudPlanFromSession ||
50+
_cloudPlan) as CloudPlan;
4851
const isStarter = isTidbcloud && cloudPlan === CLOUD_MODE_VALUE_STARTER;
4952
const isEssential = isTidbcloud && cloudPlan === CLOUD_MODE_VALUE_ESSENTIAL;
5053
const isClassic =

src/templates/DocTemplate.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { FeedbackSurveyCampaign } from "components/Campaign/FeedbackSurvey";
3232
import { DOC_HOME_URL } from "shared/resources";
3333
import { useReportReadingRate } from "shared/useReportReadingRate";
3434
import {
35+
CloudPlan,
3536
CloudPlanProvider,
3637
useCloudPlan,
3738
useCloudPlanNavigate,
@@ -74,8 +75,8 @@ interface DocTemplateProps {
7475
}
7576

7677
const DocTemplateWithProvider = (props: DocTemplateProps) => {
77-
const [cloudPlan, setCloudPlan] = React.useState<string | null>(
78-
props.pageContext.inDefaultPlan
78+
const [cloudPlan, setCloudPlan] = React.useState<CloudPlan | null>(
79+
props.pageContext.inDefaultPlan as CloudPlan | null
7980
);
8081
return (
8182
<CloudPlanProvider
@@ -112,7 +113,7 @@ function DocTemplate({
112113
essentialNavigation: essentialNav,
113114
} = data;
114115

115-
const { isStarter, isEssential } = useCloudPlan();
116+
const { cloudPlan, isStarter, isEssential } = useCloudPlan();
116117
useCloudPlanNavigate(pathConfig.repo, inDefaultPlan);
117118
useReportReadingRate(timeToRead);
118119

@@ -285,6 +286,7 @@ function DocTemplate({
285286
language={language}
286287
buildType={buildType}
287288
pageUrl={pageUrl}
289+
cloudPlan={cloudPlan}
288290
/>
289291
{!frontmatter?.hide_commit && buildType !== "archive" && (
290292
<GitCommitInfoCard

0 commit comments

Comments
 (0)