Untitled
unknown
plain_text
a year ago
2.6 kB
6
Indexable
import React, { createContext, useContext, useState, useRef, useEffect } from 'react'; import ReactDOM from 'react-dom'; import { Portal } from '@mui/material'; //////////////////////////////////////////////////////////// const TopbarContext = createContext(); export const TopbarProvider = ({ children }) => { const titleRef = useRef(null); const searchInputRef = useRef(null); const backButtonRef = useRef(null); const value = { titleRef, searchInputRef, backButtonRef, }; return ( <TopbarContext.Provider value={value}> {children} </TopbarContext.Provider> ); }; export const useTopbar = () => { return useContext(TopbarContext); }; //////////////////////////////////////////////////////////// const Topbar = () => { const { titleRef, searchInputRef, backButtonRef } = useTopbar(); return ( <div className="topbar"> <div ref={backButtonRef}></div> <div ref={titleRef}></div> <div ref={searchInputRef}></div> </div> ); }; export default Topbar; //////////////////////////////////////////////////////////// export const TopbarTitle = ({ value }) => { const { titleRef } = useTopbar(); return ( <Portal container={titleRef.current}> <h1>{value}</h1> </Portal> ); }; export const TopbarBackButton = ({ onClick }) => { const { backButtonRef } = useTopbar(); return ( <Portal container={backButtonRef.current}> <button onClick={onClick}>Back</button> </Portal> ); }; export const TopbarSearchInput = ({ value, onChange }) => { const { searchInputRef } = useTopbar(); return ( <Portal container={searchInputRef.current}> <input type="text" value={value} onChange={onChange} /> </Portal> ); }; //////////////////////////////////////////////////////////// const SomeDropdown = ({ phrase, placeholder, onClose, onSearchPhraseChange }) => { return ( <div> <TopbarTitle value={placeholder} /> <TopbarBackButton onClick={onClose} /> <TopbarSearchInput value={phrase} onChange={onSearchPhraseChange} /> {/* Reszta komponentu */} </div> ); }; export default SomeDropdown; //////////////////////////////////////////////////////////// const App = () => { return ( <TopbarProvider> <Topbar /> <Page> <Form /> {/* Zakładam, że SomeDropdown jest używany gdzieś w Form */} </Page> </TopbarProvider> ); }; ReactDOM.render(<App />, document.getElementById('root'));
Editor is loading...
Leave a Comment