mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-19 03:54:19 +00:00
aeac79e1b3
- Introduced TagsFilter component for selecting and filtering plugins by tags. - Updated PluginMarketComponent to handle tag selection and display. - Enhanced PluginMarketCardComponent to show selected tags. - Modified CloudServiceClient to fetch available tags from the API. - Updated localization files to support new tag-related strings.
61 lines
1.7 KiB
TypeScript
61 lines
1.7 KiB
TypeScript
'use client';
|
|
|
|
import styles from './layout.module.css';
|
|
import HomeSidebar from '@/app/home/components/home-sidebar/HomeSidebar';
|
|
import HomeTitleBar from '@/app/home/components/home-titlebar/HomeTitleBar';
|
|
import React, {
|
|
useState,
|
|
useCallback,
|
|
useMemo,
|
|
useEffect,
|
|
Suspense,
|
|
} from 'react';
|
|
import { SidebarChildVO } from '@/app/home/components/home-sidebar/HomeSidebarChild';
|
|
import { I18nObject } from '@/app/infra/entities/common';
|
|
import { userInfo, initializeUserInfo } from '@/app/infra/http';
|
|
|
|
export default function HomeLayout({
|
|
children,
|
|
}: Readonly<{
|
|
children: React.ReactNode;
|
|
}>) {
|
|
const [title, setTitle] = useState<string>('');
|
|
const [subtitle, setSubtitle] = useState<string>('');
|
|
const [helpLink, setHelpLink] = useState<I18nObject>({
|
|
en_US: '',
|
|
zh_Hans: '',
|
|
});
|
|
|
|
// Initialize user info if not already initialized
|
|
useEffect(() => {
|
|
if (!userInfo) {
|
|
initializeUserInfo();
|
|
}
|
|
}, []);
|
|
|
|
const onSelectedChangeAction = useCallback((child: SidebarChildVO) => {
|
|
setTitle(child.name);
|
|
setSubtitle(child.description);
|
|
setHelpLink(child.helpLink);
|
|
}, []);
|
|
|
|
// Memoize the main content area to prevent re-renders when sidebar state changes
|
|
const mainContent = useMemo(() => children, [children]);
|
|
|
|
return (
|
|
<div className={styles.homeLayoutContainer}>
|
|
<aside className={styles.sidebar}>
|
|
<Suspense fallback={<div />}>
|
|
<HomeSidebar onSelectedChangeAction={onSelectedChangeAction} />
|
|
</Suspense>
|
|
</aside>
|
|
|
|
<div className={styles.main}>
|
|
<HomeTitleBar title={title} subtitle={subtitle} helpLink={helpLink} />
|
|
|
|
<main className={styles.mainContent}>{mainContent}</main>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|