Merge pull request #135 from vsn4ik/fullscreen-indicator

Fullscreen native indicator
This commit is contained in:
1ilit 2024-07-20 11:41:35 +04:00 committed by GitHub
commit 90ee0962d3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
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 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() {

View File

@ -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: {

View File

@ -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")}

View File

@ -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";

View File

@ -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";

View File

@ -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 (

View File

@ -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";

View File

@ -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";

View File

@ -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";

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;
}