fullscreen indicator

This commit is contained in:
Vasilii A 2024-06-14 16:27:44 +00:00
parent 4d0983b3f7
commit 9f66df90b1
10 changed files with 37 additions and 18 deletions

View File

@ -7,7 +7,7 @@ import Shortcuts from "./pages/Shortcuts";
import Templates from "./pages/Templates";
import LandingPage from "./pages/LandingPage";
import SettingsContextProvider from "./context/SettingsContext";
import useSettings from "./hooks/useSettings";
import { useSettings } from "./hooks";
import NotFound from "./pages/NotFound";
export default function App() {

View File

@ -56,8 +56,9 @@ import {
useNotes,
useAreas,
useEnums,
useFullscreen,
} from "../../hooks";
import { enterFullscreen } from "../../utils/fullscreen";
import { enterFullscreen, exitFullscreen } from "../../utils/fullscreen";
import { dataURItoBlob } from "../../utils/utils";
import { IconAddArea, IconAddNote, IconAddTable } from "../../icons";
import LayoutDropdown from "./LayoutDropdown";
@ -682,6 +683,7 @@ export default function ControlPanel({
const save = () => setSaveState(State.SAVING);
const open = () => setModal(MODAL.OPEN);
const saveDiagramAs = () => setModal(MODAL.SAVEAS);
const fullscreen = useFullscreen();
const menu = {
file: {
@ -1204,7 +1206,12 @@ export default function ControlPanel({
shortcut: "Ctrl+Down/Wheel",
},
fullscreen: {
function: enterFullscreen,
state: fullscreen ? (
<i className="bi bi-toggle-on" />
) : (
<i className="bi bi-toggle-off" />
),
function: fullscreen ? exitFullscreen : enterFullscreen,
},
},
settings: {

View File

@ -4,11 +4,12 @@ import {
IconRowsStroked,
} from "@douyinfe/semi-icons";
import { Dropdown } from "@douyinfe/semi-ui";
import { useLayout } from "../../hooks";
import { useFullscreen, useLayout } from "../../hooks";
import { enterFullscreen, exitFullscreen } from "../../utils/fullscreen";
import { useTranslation } from "react-i18next";
export default function LayoutDropdown() {
const fullscreen = useFullscreen();
const { layout, setLayout } = useLayout();
const { t } = useTranslation();
@ -47,14 +48,15 @@ export default function LayoutDropdown() {
</Dropdown.Item>
<Dropdown.Divider />
<Dropdown.Item
icon={<div className="px-2" />}
icon={
fullscreen ? <IconCheckboxTick /> : <div className="px-2" />
}
onClick={() => {
if (layout.fullscreen) {
if (fullscreen) {
exitFullscreen();
} else {
enterFullscreen();
}
invertLayout("fullscreen");
}}
>
{t("fullscreen")}

View File

@ -1,8 +1,6 @@
import { createContext, useState } from "react";
import { Action, ObjectType, defaultBlue } from "../data/constants";
import useUndoRedo from "../hooks/useUndoRedo";
import useTransform from "../hooks/useTransform";
import useSelect from "../hooks/useSelect";
import { useUndoRedo, useTransform, useSelect } from "../hooks";
import { Toast } from "@douyinfe/semi-ui";
import { useTranslation } from "react-i18next";

View File

@ -1,8 +1,6 @@
import { createContext, useState } from "react";
import { Action, DB, ObjectType, defaultBlue } from "../data/constants";
import useTransform from "../hooks/useTransform";
import useUndoRedo from "../hooks/useUndoRedo";
import useSelect from "../hooks/useSelect";
import { useTransform, useUndoRedo, useSelect } from "../hooks";
import { Toast } from "@douyinfe/semi-ui";
import { useTranslation } from "react-i18next";

View File

@ -8,7 +8,6 @@ export default function LayoutContextProvider({ children }) {
sidebar: true,
issues: true,
toolbar: true,
fullscreen: false,
});
return (

View File

@ -1,8 +1,6 @@
import { createContext, useState } from "react";
import useTransform from "../hooks/useTransform";
import { Action, ObjectType, defaultNoteTheme } from "../data/constants";
import useUndoRedo from "../hooks/useUndoRedo";
import useSelect from "../hooks/useSelect";
import { useUndoRedo, useTransform, useSelect } from "../hooks";
import { Toast } from "@douyinfe/semi-ui";
import { useTranslation } from "react-i18next";

View File

@ -1,6 +1,6 @@
import { createContext, useState } from "react";
import { Action, ObjectType } from "../data/constants";
import useUndoRedo from "../hooks/useUndoRedo";
import { useUndoRedo } from "../hooks";
import { Toast } from "@douyinfe/semi-ui";
import { useTranslation } from "react-i18next";

View File

@ -1,5 +1,6 @@
export { default as useAreas } from "./useAreas";
export { default as useCanvas } from "./useCanvas";
export { default as useFullscreen } from "./useFullscreen";
export { default as useLayout } from "./useLayout";
export { default as useNotes } from "./useNotes";
export { default as useSaveState } from "./useSaveState";

View File

@ -0,0 +1,16 @@
import { useState } from "react";
import { useEventListener } from "usehooks-ts";
export default function useFullscreen() {
const [value, setValue] = useState(() => {
return document.fullscreenElement === document.documentElement;
});
function handleFullscreenChange() {
setValue(document.fullscreenElement === document.documentElement);
}
useEventListener("fullscreenchange", handleFullscreenChange, document);
return value;
}