BoardView.jsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import React from "react";
  2. import { Board, useWire, useBoardConfig } from "react-sync-board";
  3. import { SHOW_WELCOME } from "../../utils/settings";
  4. import WelcomeModal from "./WelcomeModal";
  5. import NavBar from "./NavBar";
  6. import BoardForm from "./BoardForm";
  7. import SelectedItemsPane from "./SelectedItemsPane";
  8. import { itemTemplates, backgrounds } from "../../gameComponents";
  9. import ActionBar from "./ActionBar";
  10. import { MediaLibraryProvider, ImageDropNPaste } from "../../mediaLibrary";
  11. import HintOnLockedItem from "./HintOnLockedItem";
  12. import useGlobalConf from "../../hooks/useGlobalConf";
  13. import flipAudio from "../../media/audio/flip.wav?url";
  14. import rollAudio from "../../media/audio/roll.wav?url";
  15. import shuffleAudio from "../../media/audio/shuffle.wav?url";
  16. import { preloadAudio } from "../../utils";
  17. export const BoardView = ({
  18. mediaLibraries,
  19. edit: editMode,
  20. itemLibraries,
  21. }) => {
  22. const { isMaster } = useWire("board");
  23. const [showWelcomeModal, setShowWelcomeModal] = React.useState(
  24. SHOW_WELCOME && !editMode && isMaster
  25. );
  26. const [boardConfig] = useBoardConfig();
  27. const [moveFirst, setMoveFirst] = React.useState(true);
  28. const [hideMenu, setHideMenu] = React.useState(false);
  29. const { editItem, setEditItem } = useGlobalConf();
  30. const style = React.useMemo(() => {
  31. const currentBackground =
  32. backgrounds.find(({ type }) => type === boardConfig.bgType) ||
  33. backgrounds.find(({ type }) => type === "default");
  34. return currentBackground.getStyle(boardConfig.bgConf);
  35. }, [boardConfig.bgConf, boardConfig.bgType]);
  36. React.useEffect(() => preloadAudio([flipAudio, shuffleAudio, rollAudio]), []);
  37. return (
  38. <MediaLibraryProvider libraries={mediaLibraries}>
  39. <ImageDropNPaste>
  40. <Board
  41. moveFirst={moveFirst}
  42. style={style}
  43. itemTemplates={itemTemplates}
  44. showResizeHandle={editItem}
  45. />
  46. <NavBar editMode={editMode} />
  47. <ActionBar
  48. editMode={editMode}
  49. BoardFormComponent={BoardForm}
  50. itemLibraries={itemLibraries}
  51. moveFirst={moveFirst}
  52. setMoveFirst={setMoveFirst}
  53. hideMenu={hideMenu}
  54. setHideMenu={setHideMenu}
  55. />
  56. <WelcomeModal show={showWelcomeModal} setShow={setShowWelcomeModal} />
  57. </ImageDropNPaste>
  58. <SelectedItemsPane
  59. hideMenu={hideMenu}
  60. showEdit={editItem}
  61. setShowEdit={setEditItem}
  62. />
  63. <HintOnLockedItem />
  64. </MediaLibraryProvider>
  65. );
  66. };
  67. export default BoardView;