diff --git a/demo/src/App.tsx b/demo/src/App.tsx index d824ad99..463334e9 100644 --- a/demo/src/App.tsx +++ b/demo/src/App.tsx @@ -1,6 +1,6 @@ -import { useContext, useEffect } from 'react'; +import { useContext, useEffect, useState } from 'react'; -import { Header, SlideMenu, SpacesContext, CurrentSlide, AblySvg, slides } from './components'; +import { Header, SlideMenu, SpacesContext, CurrentSlide, AblySvg, slides, Modal } from './components'; import { getRandomName, getRandomColor } from './utils'; import { useMembers } from './hooks'; import { PreviewProvider } from './components/PreviewContext.tsx'; @@ -8,14 +8,17 @@ import { PreviewProvider } from './components/PreviewContext.tsx'; const App = () => { const space = useContext(SpacesContext); const { self, others } = useMembers(); + const [isModalVisible, setModalIsVisible] = useState(false); useEffect(() => { if (!space || self?.profileData.name) return; + const enter = async () => { const name = getRandomName(); await space.enter({ name, color: getRandomColor() }); await space.locations.set({ slide: `${0}`, element: null }); + setModalIsVisible(true) }; enter(); @@ -47,6 +50,7 @@ const App = () => { + ); }; diff --git a/demo/src/components/Modal.tsx b/demo/src/components/Modal.tsx new file mode 100644 index 00000000..c2275c0d --- /dev/null +++ b/demo/src/components/Modal.tsx @@ -0,0 +1,50 @@ +import { FormEvent, useContext, useEffect, useState } from "react"; +import cn from "classnames" + +import { SpacesContext } from "."; +import { Member } from "../utils/types"; + +interface Props { + self?: Member; + isVisible?: boolean + setIsVisible?: (isVisible: boolean) => void +} + +export const Modal = ({ isVisible = false, setIsVisible, self }: Props) => { + const space = useContext(SpacesContext); + const [value, setValue] = useState(self?.profileData?.name); + + console.log(self?.profileData?.name, value) + + const handleChange = (e: FormEvent) => { + setValue(e.currentTarget.value) + } + + const handleSubmit = (e: FormEvent) => { + e.preventDefault(); + + if (!space || !setIsVisible) return; + + space.updateProfileData(currentProfile => { + console.log(currentProfile) + return { name: value } + }); + + setIsVisible(false) + } + + useEffect(() => { + setValue(self?.profileData?.name) + }, [self?.profileData?.name]) + + return
+
+

Enter your name

+ + +
+
+} \ No newline at end of file diff --git a/demo/src/components/index.ts b/demo/src/components/index.ts index e4957dd2..28b16ad4 100644 --- a/demo/src/components/index.ts +++ b/demo/src/components/index.ts @@ -5,6 +5,7 @@ export * from './CurrentSlide'; export * from './Cursors'; export * from './Header'; export * from './Image'; +export * from './Modal'; export * from './Paragraph'; export * from './SlideMenu'; export * from './SlidePreview'; diff --git a/demo/src/hooks/useMembers.ts b/demo/src/hooks/useMembers.ts index a218b347..dd5a220b 100644 --- a/demo/src/hooks/useMembers.ts +++ b/demo/src/hooks/useMembers.ts @@ -49,13 +49,13 @@ export const useMembers: () => Partial<{ self?: Member; others: Member[]; member if (areMembers(initMembers)) { setMembers(initMembers); setOthers(membersToOthers(initMembers, initSelf)); - } - - space.subscribe('update', handler); + } }; init(); - + console.log('update!') + space.subscribe('update', handler); + return () => { space.unsubscribe('update', handler); };