abstracted tray

This commit is contained in:
J Taylor 2021-06-22 12:28:13 +01:00
parent 5b9ccd95d1
commit 82ad9390ba
11 changed files with 36 additions and 22 deletions

View File

@ -7,7 +7,7 @@ import Room from '../Room';
import { Asides } from './Asides'; import { Asides } from './Asides';
import { Modals } from './Modals'; import { Modals } from './Modals';
export const App = ({ asides }) => { export const App = () => {
const { state, leave } = useCallState(); const { state, leave } = useCallState();
const componentForState = useCallUI({ const componentForState = useCallUI({
@ -21,7 +21,7 @@ export const App = ({ asides }) => {
<div className="app"> <div className="app">
{componentForState()} {componentForState()}
<Modals /> <Modals />
<Asides asides={asides} /> <Asides />
<style jsx>{` <style jsx>{`
color: white; color: white;
height: 100vh; height: 100vh;
@ -35,7 +35,7 @@ export const App = ({ asides }) => {
`}</style> `}</style>
</div> </div>
), ),
[componentForState, asides] [componentForState]
); );
}; };

View File

@ -1,16 +1,18 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import { PeopleAside } from '@dailyjs/shared/components/Aside/PeopleAside';
import { useUIState } from '@dailyjs/shared/contexts/UIStateProvider';
export const Asides = ({ asides }) => ( export const Asides = () => {
<> const { asides } = useUIState();
{asides.map((A) => (
<A key={A.name} />
))}
</>
);
Asides.propTypes = { return (
asides: PropTypes.arrayOf(PropTypes.func), <>
<PeopleAside />
{asides.map((AsideComponent) => (
<AsideComponent key={AsideComponent.name} />
))}
</>
);
}; };
export default Asides; export default Asides;

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import { Audio } from '@dailyjs/shared/components/Audio'; import { Audio } from '@dailyjs/shared/components/Audio';
import { Tray, TrayButton } from '@dailyjs/shared/components/Tray';
import { import {
WaitingRoomModal, WaitingRoomModal,
WaitingRoomNotification, WaitingRoomNotification,
@ -22,7 +23,6 @@ import PropTypes from 'prop-types';
import { PEOPLE_ASIDE } from '../../../shared/components/Aside/PeopleAside'; import { PEOPLE_ASIDE } from '../../../shared/components/Aside/PeopleAside';
import { VideoGrid } from '../VideoGrid'; import { VideoGrid } from '../VideoGrid';
import { Header } from './Header'; import { Header } from './Header';
import { Tray, TrayButton } from './Tray';
export const Room = ({ onLeave }) => { export const Room = ({ onLeave }) => {
const { callObject } = useCallState(); const { callObject } = useCallState();

View File

@ -19,5 +19,8 @@
"babel-plugin-module-resolver": "^4.1.0", "babel-plugin-module-resolver": "^4.1.0",
"next-compose-plugins": "^2.2.1", "next-compose-plugins": "^2.2.1",
"next-transpile-modules": "^8.0.0" "next-transpile-modules": "^8.0.0"
},
"engines": {
"node": ">=0.12"
} }
} }

View File

@ -12,7 +12,7 @@ function App({ Component, pageProps }) {
</Head> </Head>
<GlobalHead /> <GlobalHead />
<GlobalStyle /> <GlobalStyle />
<Component {...pageProps} /> <Component asides={App.asides} {...pageProps} />
</> </>
); );
} }
@ -27,4 +27,6 @@ App.propTypes = {
pageProps: PropTypes.object, pageProps: PropTypes.object,
}; };
App.asides = [];
export default App; export default App;

View File

@ -1,5 +1,4 @@
import React, { useState, useCallback } from 'react'; import React, { useState, useCallback } from 'react';
import { PeopleAside } from '@dailyjs/shared/components/Aside';
import { CallProvider } from '@dailyjs/shared/contexts/CallProvider'; import { CallProvider } from '@dailyjs/shared/contexts/CallProvider';
import { MediaDeviceProvider } from '@dailyjs/shared/contexts/MediaDeviceProvider'; import { MediaDeviceProvider } from '@dailyjs/shared/contexts/MediaDeviceProvider';
import { ParticipantsProvider } from '@dailyjs/shared/contexts/ParticipantsProvider'; import { ParticipantsProvider } from '@dailyjs/shared/contexts/ParticipantsProvider';
@ -18,7 +17,7 @@ import { Intro, NotConfigured } from '../components/Intro';
* - Set call owner status * - Set call owner status
* - Finally, renders the main application loop * - Finally, renders the main application loop
*/ */
export default function Index({ domain, isConfigured = false }) { export default function Index({ domain, isConfigured = false, asides }) {
const [roomName, setRoomName] = useState(''); const [roomName, setRoomName] = useState('');
const [fetchingToken, setFetchingToken] = useState(false); const [fetchingToken, setFetchingToken] = useState(false);
const [token, setToken] = useState(); const [token, setToken] = useState();
@ -93,13 +92,13 @@ export default function Index({ domain, isConfigured = false }) {
* Main call UI * Main call UI
*/ */
return ( return (
<UIStateProvider> <UIStateProvider asides={asides}>
<CallProvider domain={domain} room={roomName} token={token}> <CallProvider domain={domain} room={roomName} token={token}>
<ParticipantsProvider> <ParticipantsProvider>
<TracksProvider> <TracksProvider>
<MediaDeviceProvider> <MediaDeviceProvider>
<WaitingRoomProvider> <WaitingRoomProvider>
<App asides={Index.asides} /> <App />
</WaitingRoomProvider> </WaitingRoomProvider>
</MediaDeviceProvider> </MediaDeviceProvider>
</TracksProvider> </TracksProvider>
@ -112,10 +111,9 @@ export default function Index({ domain, isConfigured = false }) {
Index.propTypes = { Index.propTypes = {
isConfigured: PropTypes.bool.isRequired, isConfigured: PropTypes.bool.isRequired,
domain: PropTypes.string, domain: PropTypes.string,
asides: PropTypes.arrayOf(PropTypes.func),
}; };
Index.asides = [PeopleAside];
export async function getStaticProps() { export async function getStaticProps() {
// Check that both domain and key env vars are set // Check that both domain and key env vars are set
const isConfigured = const isConfigured =

View File

@ -0,0 +1,2 @@
export { Tray as default } from './Tray';
export { Tray, TrayButton } from './Tray';

View File

@ -3,13 +3,14 @@ import PropTypes from 'prop-types';
export const UIStateContext = createContext(); export const UIStateContext = createContext();
export const UIStateProvider = ({ children }) => { export const UIStateProvider = ({ asides, children }) => {
const [showDeviceModal, setShowDeviceModal] = useState(false); const [showDeviceModal, setShowDeviceModal] = useState(false);
const [showAside, setShowAside] = useState(); const [showAside, setShowAside] = useState();
return ( return (
<UIStateContext.Provider <UIStateContext.Provider
value={{ value={{
asides,
showDeviceModal, showDeviceModal,
setShowDeviceModal, setShowDeviceModal,
showAside, showAside,
@ -23,6 +24,7 @@ export const UIStateProvider = ({ children }) => {
UIStateProvider.propTypes = { UIStateProvider.propTypes = {
children: PropTypes.node, children: PropTypes.node,
asides: PropTypes.arrayOf(PropTypes.func),
}; };
export const useUIState = () => useContext(UIStateContext); export const useUIState = () => useContext(UIStateContext);

View File

@ -1,3 +1,5 @@
import App from '@dailyjs/basic-call/pages/_app'; import App from '@dailyjs/basic-call/pages/_app';
App.asides = [];
export default App; export default App;

View File

@ -8,6 +8,9 @@
"dailyjs/*", "dailyjs/*",
"prebuilt-ui/*" "prebuilt-ui/*"
], ],
"engines": {
"node": ">=0.12"
},
"devDependencies": { "devDependencies": {
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"babel-plugin-inline-react-svg": "^2.0.1", "babel-plugin-inline-react-svg": "^2.0.1",