mirror of
https://github.com/facebook/docusaurus.git
synced 2025-07-28 14:08:21 +02:00
feat(theme-classic): allow className as option for type: "search" (#7357)
* feat(theme-classic): allow className as option for type: "search" * fixup! feat(theme-classic): allow className as option for type: "search" * refactor Co-authored-by: Jan Peer Stoecklmair <jan.peer.stoecklmair@dynatrace.com> Co-authored-by: Joshua Chen <sidachen2003@gmail.com>
This commit is contained in:
parent
cd21a31005
commit
5fcb742aa1
7 changed files with 23 additions and 6 deletions
|
@ -243,6 +243,12 @@ describe('themeConfig', () => {
|
||||||
position: 'left',
|
position: 'left',
|
||||||
label: 'Current version',
|
label: 'Current version',
|
||||||
},
|
},
|
||||||
|
// Search with className
|
||||||
|
{
|
||||||
|
type: 'search',
|
||||||
|
position: 'right',
|
||||||
|
className: 'search-bar-wrapper',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -777,6 +777,7 @@ declare module '@theme/Navbar/Search' {
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
readonly children: ReactNode;
|
readonly children: ReactNode;
|
||||||
|
readonly className?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function NavbarSearch(props: Props): JSX.Element;
|
export default function NavbarSearch(props: Props): JSX.Element;
|
||||||
|
@ -834,6 +835,7 @@ declare module '@theme/NavbarItem/DropdownNavbarItem' {
|
||||||
declare module '@theme/NavbarItem/SearchNavbarItem' {
|
declare module '@theme/NavbarItem/SearchNavbarItem' {
|
||||||
export interface Props {
|
export interface Props {
|
||||||
readonly mobile?: boolean;
|
readonly mobile?: boolean;
|
||||||
|
readonly className?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function SearchNavbarItem(props: Props): JSX.Element;
|
export default function SearchNavbarItem(props: Props): JSX.Element;
|
||||||
|
|
|
@ -56,7 +56,7 @@ export default function NavbarContent(): JSX.Element {
|
||||||
const items = useNavbarItems();
|
const items = useNavbarItems();
|
||||||
const [leftItems, rightItems] = splitNavbarItems(items);
|
const [leftItems, rightItems] = splitNavbarItems(items);
|
||||||
|
|
||||||
const autoAddSearchBar = !items.some((item) => item.type === 'search');
|
const searchBarItem = items.find((item) => item.type === 'search');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<NavbarContentLayout
|
<NavbarContentLayout
|
||||||
|
@ -74,7 +74,7 @@ export default function NavbarContent(): JSX.Element {
|
||||||
<>
|
<>
|
||||||
<NavbarItems items={rightItems} />
|
<NavbarItems items={rightItems} />
|
||||||
<NavbarColorModeToggle className={styles.colorModeToggle} />
|
<NavbarColorModeToggle className={styles.colorModeToggle} />
|
||||||
{autoAddSearchBar && (
|
{!searchBarItem && (
|
||||||
<NavbarSearch>
|
<NavbarSearch>
|
||||||
<SearchBar />
|
<SearchBar />
|
||||||
</NavbarSearch>
|
</NavbarSearch>
|
||||||
|
|
|
@ -6,10 +6,14 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import clsx from 'clsx';
|
||||||
import type {Props} from '@theme/Navbar/Search';
|
import type {Props} from '@theme/Navbar/Search';
|
||||||
|
|
||||||
import styles from './styles.module.css';
|
import styles from './styles.module.css';
|
||||||
|
|
||||||
export default function NavbarSearch({children}: Props): JSX.Element {
|
export default function NavbarSearch({
|
||||||
return <div className={styles.searchBox}>{children}</div>;
|
children,
|
||||||
|
className,
|
||||||
|
}: Props): JSX.Element {
|
||||||
|
return <div className={clsx(className, styles.searchBox)}>{children}</div>;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,13 +10,16 @@ import SearchBar from '@theme/SearchBar';
|
||||||
import NavbarSearch from '@theme/Navbar/Search';
|
import NavbarSearch from '@theme/Navbar/Search';
|
||||||
import type {Props} from '@theme/NavbarItem/SearchNavbarItem';
|
import type {Props} from '@theme/NavbarItem/SearchNavbarItem';
|
||||||
|
|
||||||
export default function SearchNavbarItem({mobile}: Props): JSX.Element | null {
|
export default function SearchNavbarItem({
|
||||||
|
mobile,
|
||||||
|
className,
|
||||||
|
}: Props): JSX.Element | null {
|
||||||
if (mobile) {
|
if (mobile) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<NavbarSearch>
|
<NavbarSearch className={className}>
|
||||||
<SearchBar />
|
<SearchBar />
|
||||||
</NavbarSearch>
|
</NavbarSearch>
|
||||||
);
|
);
|
||||||
|
|
|
@ -200,6 +200,7 @@ const LocaleDropdownNavbarItemSchema = NavbarItemBaseSchema.append({
|
||||||
|
|
||||||
const SearchItemSchema = Joi.object({
|
const SearchItemSchema = Joi.object({
|
||||||
type: Joi.string().equal('search').required(),
|
type: Joi.string().equal('search').required(),
|
||||||
|
className: Joi.string(),
|
||||||
});
|
});
|
||||||
|
|
||||||
const NavbarItemSchema = Joi.object({
|
const NavbarItemSchema = Joi.object({
|
||||||
|
|
|
@ -602,6 +602,7 @@ However, with this special navbar item type, you can change the default location
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| `type` | `'search'` | **Required** | Sets the type of this item to a search bar. |
|
| `type` | `'search'` | **Required** | Sets the type of this item to a search bar. |
|
||||||
| `position` | <code>'left' \| 'right'</code> | `'left'` | The side of the navbar this item should appear on. |
|
| `position` | <code>'left' \| 'right'</code> | `'left'` | The side of the navbar this item should appear on. |
|
||||||
|
| `className` | `string` | / | Custom CSS class for this navbar item. |
|
||||||
|
|
||||||
</APITable>
|
</APITable>
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue