MCPcopy Create free account
hub / github.com/adobe/react-spectrum / HomeHeader

Function HomeHeader

packages/dev/s2-docs/pages/s2/home/Header.tsx:88–278  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

86}
87
88export default function HomeHeader() {
89 const [searchOpen, setSearchOpen] = useState(false);
90 const searchMenuId = useId();
91 let renderCallback = useRef<(() => void) | null>(null);
92 let iconRef = useRef<SVGSVGElement | null>(null);
93 let labelRef = useRef<HTMLDivElement | null>(null);
94 let searchRef = useRef<HTMLDivElement | null>(null);
95
96 let openSearchMenu = async () => {
97 if (!document.startViewTransition) {
98 setSearchOpen(prev => !prev);
99 return;
100 }
101
102 // Preload SearchMenu so it is ready to render immediately.
103 await preloadSearchMenu();
104
105 // Don't transition the entire page.
106 document.documentElement.style.viewTransitionName = 'none';
107 if (window.scrollY === 0) {
108 iconRef.current!.style.viewTransitionName = 'search-menu-icon';
109 labelRef.current!.style.viewTransitionName = 'search-menu-label';
110 searchRef.current!.style.viewTransitionName = 'search-menu-search-field';
111 }
112
113 let viewTransition = document.startViewTransition(() => {
114 // Wait until next render. Using flushSync causes flickering.
115 return new Promise<void>(resolve => {
116 iconRef.current!.style.viewTransitionName = '';
117 labelRef.current!.style.viewTransitionName = '';
118 searchRef.current!.style.viewTransitionName = '';
119 renderCallback.current = resolve;
120 setSearchOpen(prev => !prev);
121 });
122 });
123
124 viewTransition.finished.then(() => {
125 document.documentElement.style.viewTransitionName = '';
126 });
127 };
128
129 let closeSearchMenu = () => {
130 if (!document.startViewTransition) {
131 setSearchOpen(false);
132 return;
133 }
134
135 document.documentElement.style.viewTransitionName = 'none';
136 let viewTransition = document.startViewTransition(() => {
137 return new Promise<void>(resolve => {
138 renderCallback.current = resolve;
139 setSearchOpen(false);
140
141 if (window.scrollY === 0) {
142 iconRef.current!.style.viewTransitionName = 'search-menu-icon';
143 labelRef.current!.style.viewTransitionName = 'search-menu-label';
144 searchRef.current!.style.viewTransitionName = 'search-menu-search-field';
145 }

Callers

nothing calls this directly

Calls 4

useIdFunction · 0.90
spaceFunction · 0.90
getBaseUrlFunction · 0.90
currentMethod · 0.45

Tested by

no test coverage detected