Merge pull request #135 from vsn4ik/fullscreen-indicator
Fullscreen native indicator
This commit is contained in:
commit
90ee0962d3
@ -7,7 +7,7 @@ import Shortcuts from "./pages/Shortcuts";
|
|||||||
import Templates from "./pages/Templates";
|
import Templates from "./pages/Templates";
|
||||||
import LandingPage from "./pages/LandingPage";
|
import LandingPage from "./pages/LandingPage";
|
||||||
import SettingsContextProvider from "./context/SettingsContext";
|
import SettingsContextProvider from "./context/SettingsContext";
|
||||||
import useSettings from "./hooks/useSettings";
|
import { useSettings } from "./hooks";
|
||||||
import NotFound from "./pages/NotFound";
|
import NotFound from "./pages/NotFound";
|
||||||
|
|
||||||
export default function App() {
|
export default function App() {
|
||||||
|
@ -56,8 +56,9 @@ import {
|
|||||||
useNotes,
|
useNotes,
|
||||||
useAreas,
|
useAreas,
|
||||||
useEnums,
|
useEnums,
|
||||||
|
useFullscreen,
|
||||||
} from "../../hooks";
|
} from "../../hooks";
|
||||||
import { enterFullscreen } from "../../utils/fullscreen";
|
import { enterFullscreen, exitFullscreen } from "../../utils/fullscreen";
|
||||||
import { dataURItoBlob } from "../../utils/utils";
|
import { dataURItoBlob } from "../../utils/utils";
|
||||||
import { IconAddArea, IconAddNote, IconAddTable } from "../../icons";
|
import { IconAddArea, IconAddNote, IconAddTable } from "../../icons";
|
||||||
import LayoutDropdown from "./LayoutDropdown";
|
import LayoutDropdown from "./LayoutDropdown";
|
||||||
@ -682,6 +683,7 @@ export default function ControlPanel({
|
|||||||
const save = () => setSaveState(State.SAVING);
|
const save = () => setSaveState(State.SAVING);
|
||||||
const open = () => setModal(MODAL.OPEN);
|
const open = () => setModal(MODAL.OPEN);
|
||||||
const saveDiagramAs = () => setModal(MODAL.SAVEAS);
|
const saveDiagramAs = () => setModal(MODAL.SAVEAS);
|
||||||
|
const fullscreen = useFullscreen();
|
||||||
|
|
||||||
const menu = {
|
const menu = {
|
||||||
file: {
|
file: {
|
||||||
@ -1204,7 +1206,12 @@ export default function ControlPanel({
|
|||||||
shortcut: "Ctrl+Down/Wheel",
|
shortcut: "Ctrl+Down/Wheel",
|
||||||
},
|
},
|
||||||
fullscreen: {
|
fullscreen: {
|
||||||
function: enterFullscreen,
|
state: fullscreen ? (
|
||||||
|
<i className="bi bi-toggle-on" />
|
||||||
|
) : (
|
||||||
|
<i className="bi bi-toggle-off" />
|
||||||
|
),
|
||||||
|
function: fullscreen ? exitFullscreen : enterFullscreen,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
settings: {
|
settings: {
|
||||||
|
@ -4,11 +4,12 @@ import {
|
|||||||
IconRowsStroked,
|
IconRowsStroked,
|
||||||
} from "@douyinfe/semi-icons";
|
} from "@douyinfe/semi-icons";
|
||||||
import { Dropdown } from "@douyinfe/semi-ui";
|
import { Dropdown } from "@douyinfe/semi-ui";
|
||||||
import { useLayout } from "../../hooks";
|
import { useFullscreen, useLayout } from "../../hooks";
|
||||||
import { enterFullscreen, exitFullscreen } from "../../utils/fullscreen";
|
import { enterFullscreen, exitFullscreen } from "../../utils/fullscreen";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
export default function LayoutDropdown() {
|
export default function LayoutDropdown() {
|
||||||
|
const fullscreen = useFullscreen();
|
||||||
const { layout, setLayout } = useLayout();
|
const { layout, setLayout } = useLayout();
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
@ -47,14 +48,15 @@ export default function LayoutDropdown() {
|
|||||||
</Dropdown.Item>
|
</Dropdown.Item>
|
||||||
<Dropdown.Divider />
|
<Dropdown.Divider />
|
||||||
<Dropdown.Item
|
<Dropdown.Item
|
||||||
icon={<div className="px-2" />}
|
icon={
|
||||||
|
fullscreen ? <IconCheckboxTick /> : <div className="px-2" />
|
||||||
|
}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
if (layout.fullscreen) {
|
if (fullscreen) {
|
||||||
exitFullscreen();
|
exitFullscreen();
|
||||||
} else {
|
} else {
|
||||||
enterFullscreen();
|
enterFullscreen();
|
||||||
}
|
}
|
||||||
invertLayout("fullscreen");
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{t("fullscreen")}
|
{t("fullscreen")}
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
import { createContext, useState } from "react";
|
import { createContext, useState } from "react";
|
||||||
import { Action, ObjectType, defaultBlue } from "../data/constants";
|
import { Action, ObjectType, defaultBlue } from "../data/constants";
|
||||||
import useUndoRedo from "../hooks/useUndoRedo";
|
import { useUndoRedo, useTransform, useSelect } from "../hooks";
|
||||||
import useTransform from "../hooks/useTransform";
|
|
||||||
import useSelect from "../hooks/useSelect";
|
|
||||||
import { Toast } from "@douyinfe/semi-ui";
|
import { Toast } from "@douyinfe/semi-ui";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
import { createContext, useState } from "react";
|
import { createContext, useState } from "react";
|
||||||
import { Action, DB, ObjectType, defaultBlue } from "../data/constants";
|
import { Action, DB, ObjectType, defaultBlue } from "../data/constants";
|
||||||
import useTransform from "../hooks/useTransform";
|
import { useTransform, useUndoRedo, useSelect } from "../hooks";
|
||||||
import useUndoRedo from "../hooks/useUndoRedo";
|
|
||||||
import useSelect from "../hooks/useSelect";
|
|
||||||
import { Toast } from "@douyinfe/semi-ui";
|
import { Toast } from "@douyinfe/semi-ui";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
|
@ -8,7 +8,6 @@ export default function LayoutContextProvider({ children }) {
|
|||||||
sidebar: true,
|
sidebar: true,
|
||||||
issues: true,
|
issues: true,
|
||||||
toolbar: true,
|
toolbar: true,
|
||||||
fullscreen: false,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
import { createContext, useState } from "react";
|
import { createContext, useState } from "react";
|
||||||
import useTransform from "../hooks/useTransform";
|
|
||||||
import { Action, ObjectType, defaultNoteTheme } from "../data/constants";
|
import { Action, ObjectType, defaultNoteTheme } from "../data/constants";
|
||||||
import useUndoRedo from "../hooks/useUndoRedo";
|
import { useUndoRedo, useTransform, useSelect } from "../hooks";
|
||||||
import useSelect from "../hooks/useSelect";
|
|
||||||
import { Toast } from "@douyinfe/semi-ui";
|
import { Toast } from "@douyinfe/semi-ui";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { createContext, useState } from "react";
|
import { createContext, useState } from "react";
|
||||||
import { Action, ObjectType } from "../data/constants";
|
import { Action, ObjectType } from "../data/constants";
|
||||||
import useUndoRedo from "../hooks/useUndoRedo";
|
import { useUndoRedo } from "../hooks";
|
||||||
import { Toast } from "@douyinfe/semi-ui";
|
import { Toast } from "@douyinfe/semi-ui";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
export { default as useAreas } from "./useAreas";
|
export { default as useAreas } from "./useAreas";
|
||||||
export { default as useCanvas } from "./useCanvas";
|
export { default as useCanvas } from "./useCanvas";
|
||||||
|
export { default as useFullscreen } from "./useFullscreen";
|
||||||
export { default as useLayout } from "./useLayout";
|
export { default as useLayout } from "./useLayout";
|
||||||
export { default as useNotes } from "./useNotes";
|
export { default as useNotes } from "./useNotes";
|
||||||
export { default as useSaveState } from "./useSaveState";
|
export { default as useSaveState } from "./useSaveState";
|
||||||
|
16
src/hooks/useFullscreen.js
Normal file
16
src/hooks/useFullscreen.js
Normal 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;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user