diff --git a/shared/naturalcrit/codeEditor/autocompleteEmoji.js b/client/components/codeEditor/autocompleteEmoji.js similarity index 100% rename from shared/naturalcrit/codeEditor/autocompleteEmoji.js rename to client/components/codeEditor/autocompleteEmoji.js diff --git a/shared/naturalcrit/codeEditor/close-tag.js b/client/components/codeEditor/close-tag.js similarity index 100% rename from shared/naturalcrit/codeEditor/close-tag.js rename to client/components/codeEditor/close-tag.js diff --git a/shared/naturalcrit/codeEditor/codeEditor.jsx b/client/components/codeEditor/codeEditor.jsx similarity index 100% rename from shared/naturalcrit/codeEditor/codeEditor.jsx rename to client/components/codeEditor/codeEditor.jsx diff --git a/shared/naturalcrit/codeEditor/codeEditor.less b/client/components/codeEditor/codeEditor.less similarity index 100% rename from shared/naturalcrit/codeEditor/codeEditor.less rename to client/components/codeEditor/codeEditor.less diff --git a/shared/naturalcrit/codeEditor/fold-css.js b/client/components/codeEditor/fold-css.js similarity index 100% rename from shared/naturalcrit/codeEditor/fold-css.js rename to client/components/codeEditor/fold-css.js diff --git a/shared/naturalcrit/codeEditor/fold-pages.js b/client/components/codeEditor/fold-pages.js similarity index 100% rename from shared/naturalcrit/codeEditor/fold-pages.js rename to client/components/codeEditor/fold-pages.js diff --git a/client/homebrew/editor/editor.jsx b/client/homebrew/editor/editor.jsx index 2f38d41aa..a00c47403 100644 --- a/client/homebrew/editor/editor.jsx +++ b/client/homebrew/editor/editor.jsx @@ -6,7 +6,7 @@ const _ = require('lodash'); const dedent = require('dedent-tabs').default; import Markdown from '../../../shared/markdown.js'; -const CodeEditor = require('naturalcrit/codeEditor/codeEditor.jsx'); +const CodeEditor = require('client/components/codeEditor/codeEditor.jsx'); const SnippetBar = require('./snippetbar/snippetbar.jsx'); const MetadataEditor = require('./metadataEditor/metadataEditor.jsx'); diff --git a/client/homebrew/navbar/account.navitem.jsx b/client/homebrew/navbar/account.navitem.jsx index 6b412c368..5f7424e25 100644 --- a/client/homebrew/navbar/account.navitem.jsx +++ b/client/homebrew/navbar/account.navitem.jsx @@ -1,6 +1,6 @@ const React = require('react'); const createClass = require('create-react-class'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); const request = require('superagent'); const Account = createClass({ diff --git a/client/homebrew/navbar/error-navitem.jsx b/client/homebrew/navbar/error-navitem.jsx index a2650dbc8..6b739379b 100644 --- a/client/homebrew/navbar/error-navitem.jsx +++ b/client/homebrew/navbar/error-navitem.jsx @@ -1,6 +1,6 @@ require('./error-navitem.less'); const React = require('react'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); const ErrorNavItem = ({ error = '', clearError })=>{ const response = error.response; diff --git a/client/homebrew/navbar/help.navitem.jsx b/client/homebrew/navbar/help.navitem.jsx index bf0098c8d..0b1ff6c3a 100644 --- a/client/homebrew/navbar/help.navitem.jsx +++ b/client/homebrew/navbar/help.navitem.jsx @@ -1,7 +1,7 @@ const React = require('react'); const dedent = require('dedent-tabs').default; -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); module.exports = function(props){ return diff --git a/client/homebrew/navbar/metadata.navitem.jsx b/client/homebrew/navbar/metadata.navitem.jsx index 2a29aec40..435ad4491 100644 --- a/client/homebrew/navbar/metadata.navitem.jsx +++ b/client/homebrew/navbar/metadata.navitem.jsx @@ -2,7 +2,7 @@ const React = require('react'); const createClass = require('create-react-class'); const Moment = require('moment'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); const MetadataNav = createClass({ diff --git a/shared/naturalcrit/nav/nav.jsx b/client/homebrew/navbar/nav.jsx similarity index 100% rename from shared/naturalcrit/nav/nav.jsx rename to client/homebrew/navbar/nav.jsx diff --git a/client/homebrew/navbar/navbar.jsx b/client/homebrew/navbar/navbar.jsx index 7929bb5e2..bafed9db0 100644 --- a/client/homebrew/navbar/navbar.jsx +++ b/client/homebrew/navbar/navbar.jsx @@ -2,7 +2,7 @@ require('./navbar.less'); const React = require('react'); const createClass = require('create-react-class'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); const PatreonNavItem = require('./patreon.navitem.jsx'); const Navbar = createClass({ diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx index d19b7595f..fe8c05dc7 100644 --- a/client/homebrew/navbar/newbrew.navitem.jsx +++ b/client/homebrew/navbar/newbrew.navitem.jsx @@ -1,6 +1,6 @@ const React = require('react'); const _ = require('lodash'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); const { splitTextStyleAndMetadata } = require('../../../shared/helpers.js'); // Importing the function from helpers.js const BREWKEY = 'homebrewery-new'; diff --git a/client/homebrew/navbar/patreon.navitem.jsx b/client/homebrew/navbar/patreon.navitem.jsx index 92b42dceb..d957231de 100644 --- a/client/homebrew/navbar/patreon.navitem.jsx +++ b/client/homebrew/navbar/patreon.navitem.jsx @@ -1,5 +1,5 @@ const React = require('react'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); module.exports = function(props){ return ( brew.googleId && !brew.stubbed diff --git a/client/homebrew/navbar/vault.navitem.jsx b/client/homebrew/navbar/vault.navitem.jsx index 087297011..1087ca978 100644 --- a/client/homebrew/navbar/vault.navitem.jsx +++ b/client/homebrew/navbar/vault.navitem.jsx @@ -1,6 +1,6 @@ const React = require('react'); -const Nav = require('naturalcrit/nav/nav.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); module.exports = function (props) { return ( diff --git a/client/homebrew/pages/basePages/uiPage/uiPage.jsx b/client/homebrew/pages/basePages/uiPage/uiPage.jsx index 20dc6b26b..1880779c9 100644 --- a/client/homebrew/pages/basePages/uiPage/uiPage.jsx +++ b/client/homebrew/pages/basePages/uiPage/uiPage.jsx @@ -2,12 +2,12 @@ require('./uiPage.less'); const React = require('react'); const createClass = require('create-react-class'); -const Nav = require('naturalcrit/nav/nav.jsx'); -const Navbar = require('../../../navbar/navbar.jsx'); -const NewBrewItem = require('../../../navbar/newbrew.navitem.jsx'); -const HelpNavItem = require('../../../navbar/help.navitem.jsx'); -const RecentNavItem = require('../../../navbar/recent.navitem.jsx').both; -const Account = require('../../../navbar/account.navitem.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); +const Navbar = require('client/homebrew/navbar/navbar.jsx'); +const NewBrewItem = require('client/homebrew/navbar/newbrew.navitem.jsx'); +const HelpNavItem = require('client/homebrew/navbar/help.navitem.jsx'); +const RecentNavItem = require('client/homebrew/navbar/recent.navitem.jsx').both; +const Account = require('client/homebrew/navbar/account.navitem.jsx'); const UIPage = createClass({ diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index cb696a758..ed4ec39b4 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -14,15 +14,15 @@ import SplitPane from 'client/components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; -import Nav from 'naturalcrit/nav/nav.jsx'; -import Navbar from '../../navbar/navbar.jsx'; -import NewBrewItem from '../../navbar/newbrew.navitem.jsx'; -import AccountNavItem from '../../navbar/account.navitem.jsx'; -import ErrorNavItem from '../../navbar/error-navitem.jsx'; -import HelpNavItem from '../../navbar/help.navitem.jsx'; -import VaultNavItem from '../../navbar/vault.navitem.jsx'; -import PrintNavItem from '../../navbar/print.navitem.jsx'; -import { both as RecentNavItem } from '../../navbar/recent.navitem.jsx'; +import Nav from 'client/homebrew/navbar/nav.jsx'; +import Navbar from 'client/homebrew/navbar/navbar.jsx'; +import NewBrewItem from 'client/homebrew/navbar/newbrew.navitem.jsx'; +import AccountNavItem from 'client/homebrew/navbar/account.navitem.jsx'; +import ErrorNavItem from 'client/homebrew/navbar/error-navitem.jsx'; +import HelpNavItem from 'client/homebrew/navbar/help.navitem.jsx'; +import VaultNavItem from 'client/homebrew/navbar/vault.navitem.jsx'; +import PrintNavItem from 'client/homebrew/navbar/print.navitem.jsx'; +import { both as RecentNavItem } from 'client/homebrew/navbar/recent.navitem.jsx'; // Page specific imports import { Meta } from 'vitreum/headtags'; @@ -30,7 +30,7 @@ import { md5 } from 'hash-wasm'; import { gzipSync, strToU8 } from 'fflate'; import { makePatches, stringifyPatches } from '@sanity/diff-match-patch'; -import ShareNavItem from '../../navbar/share.navitem.jsx'; +import ShareNavItem from 'client/homebrew/navbar/share.navitem.jsx'; import LockNotification from './lockNotification/lockNotification.jsx'; import { updateHistory, versionHistoryGarbageCollection } from '../../utils/versionHistory.js'; import googleDriveIcon from '../../googleDrive.svg'; diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 8e2dd9a18..32401163c 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -14,15 +14,15 @@ import SplitPane from 'client/components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; -import Nav from 'naturalcrit/nav/nav.jsx'; -import Navbar from '../../navbar/navbar.jsx'; -import NewBrewItem from '../../navbar/newbrew.navitem.jsx'; -import AccountNavItem from '../../navbar/account.navitem.jsx'; -import ErrorNavItem from '../../navbar/error-navitem.jsx'; -import HelpNavItem from '../../navbar/help.navitem.jsx'; -import VaultNavItem from '../../navbar/vault.navitem.jsx'; -import PrintNavItem from '../../navbar/print.navitem.jsx'; -import { both as RecentNavItem } from '../../navbar/recent.navitem.jsx'; +import Nav from 'client/homebrew/navbar/nav.jsx'; +import Navbar from 'client/homebrew/navbar/navbar.jsx'; +import NewBrewItem from 'client/homebrew/navbar/newbrew.navitem.jsx'; +import AccountNavItem from 'client/homebrew/navbar/account.navitem.jsx'; +import ErrorNavItem from 'client/homebrew/navbar/error-navitem.jsx'; +import HelpNavItem from 'client/homebrew/navbar/help.navitem.jsx'; +import VaultNavItem from 'client/homebrew/navbar/vault.navitem.jsx'; +import PrintNavItem from 'client/homebrew/navbar/print.navitem.jsx'; +import { both as RecentNavItem } from 'client/homebrew/navbar/recent.navitem.jsx'; // Page specific imports import { Meta } from 'vitreum/headtags'; diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 13bddfc87..83eaeda45 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -14,15 +14,15 @@ import SplitPane from 'client/components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; -import Nav from 'naturalcrit/nav/nav.jsx'; -import Navbar from '../../navbar/navbar.jsx'; -import NewBrewItem from '../../navbar/newbrew.navitem.jsx'; -import AccountNavItem from '../../navbar/account.navitem.jsx'; -import ErrorNavItem from '../../navbar/error-navitem.jsx'; -import HelpNavItem from '../../navbar/help.navitem.jsx'; -import VaultNavItem from '../../navbar/vault.navitem.jsx'; -import PrintNavItem from '../../navbar/print.navitem.jsx'; -import { both as RecentNavItem } from '../../navbar/recent.navitem.jsx'; +import Nav from 'client/homebrew/navbar/nav.jsx'; +import Navbar from 'client/homebrew/navbar/navbar.jsx'; +import NewBrewItem from 'client/homebrew/navbar/newbrew.navitem.jsx'; +import AccountNavItem from 'client/homebrew/navbar/account.navitem.jsx'; +import ErrorNavItem from 'client/homebrew/navbar/error-navitem.jsx'; +import HelpNavItem from 'client/homebrew/navbar/help.navitem.jsx'; +import VaultNavItem from 'client/homebrew/navbar/vault.navitem.jsx'; +import PrintNavItem from 'client/homebrew/navbar/print.navitem.jsx'; +import { both as RecentNavItem } from 'client/homebrew/navbar/recent.navitem.jsx'; // Page specific imports import { Meta } from 'vitreum/headtags'; @@ -56,6 +56,10 @@ const NewPage = (props)=>{ const editorRef = useRef(null); const lastSavedBrew = useRef(_.cloneDeep(props.brew)); + // const saveTimeout = useRef(null); + // const warnUnsavedTimeout = useRef(null); + const trySaveRef = useRef(trySave); // CTRL+S listener lives outside React and needs ref to use trySave with latest copy of brew + const unsavedChangesRef = useRef(unsavedChanges); // Similarly, onBeforeUnload lives outside React and needs ref to unsavedChanges useEffect(()=>{ loadBrew(); @@ -114,6 +118,11 @@ const NewPage = (props)=>{ if(autoSaveEnabled) trySave(false, hasChange); }, [currentBrew]); + useEffect(()=>{ + trySaveRef.current = trySave; + unsavedChangesRef.current = unsavedChanges; + }); + const handleSplitMove = ()=>{ editorRef.current.update(); }; @@ -141,7 +150,7 @@ const NewPage = (props)=>{ } }; - const save = async ()=>{ + const trySave = async ()=>{ setIsSaving(true); const updatedBrew = { ...currentBrew }; @@ -190,7 +199,7 @@ const NewPage = (props)=>{ // #3 - Unsaved changes exist, click to save, show SAVE NOW if(unsavedChanges) - return save now; + return save now; // #4 - No unsaved changes, autosave is ON, show AUTO-SAVED if(autoSaveEnabled) diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 50104a665..32e88c9d8 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -3,12 +3,12 @@ const React = require('react'); const { useState, useEffect, useCallback } = React; const { Meta } = require('vitreum/headtags'); -const Nav = require('naturalcrit/nav/nav.jsx'); -const Navbar = require('../../navbar/navbar.jsx'); -const MetadataNav = require('../../navbar/metadata.navitem.jsx'); -const PrintNavItem = require('../../navbar/print.navitem.jsx'); -const RecentNavItem = require('../../navbar/recent.navitem.jsx').both; -const Account = require('../../navbar/account.navitem.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); +const Navbar = require('client/homebrew/navbar/navbar.jsx'); +const MetadataNav = require('client/homebrew/navbar/metadata.navitem.jsx'); +const PrintNavItem = require('client/homebrew/navbar/print.navitem.jsx'); +const RecentNavItem = require('client/homebrew/navbar/recent.navitem.jsx').both; +const Account = require('client/homebrew/navbar/account.navitem.jsx'); const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx'); const { DEFAULT_BREW_LOAD } = require('../../../../server/brewDefaults.js'); diff --git a/client/homebrew/pages/userPage/userPage.jsx b/client/homebrew/pages/userPage/userPage.jsx index e4a8b0b4e..b9273f3c3 100644 --- a/client/homebrew/pages/userPage/userPage.jsx +++ b/client/homebrew/pages/userPage/userPage.jsx @@ -4,14 +4,14 @@ const _ = require('lodash'); const ListPage = require('../basePages/listPage/listPage.jsx'); -const Nav = require('naturalcrit/nav/nav.jsx'); -const Navbar = require('../../navbar/navbar.jsx'); -const RecentNavItem = require('../../navbar/recent.navitem.jsx').both; -const Account = require('../../navbar/account.navitem.jsx'); -const NewBrew = require('../../navbar/newbrew.navitem.jsx'); -const HelpNavItem = require('../../navbar/help.navitem.jsx'); -const ErrorNavItem = require('../../navbar/error-navitem.jsx'); -const VaultNavitem = require('../../navbar/vault.navitem.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); +const Navbar = require('client/homebrew/navbar/navbar.jsx'); +const RecentNavItem = require('client/homebrew/navbar/recent.navitem.jsx').both; +const Account = require('client/homebrew/navbar/account.navitem.jsx'); +const NewBrew = require('client/homebrew/navbar/newbrew.navitem.jsx'); +const HelpNavItem = require('client/homebrew/navbar/help.navitem.jsx'); +const ErrorNavItem = require('client/homebrew/navbar/error-navitem.jsx'); +const VaultNavitem = require('client/homebrew/navbar/vault.navitem.jsx'); const UserPage = (props)=>{ props = { diff --git a/client/homebrew/pages/vaultPage/vaultPage.jsx b/client/homebrew/pages/vaultPage/vaultPage.jsx index e098bb1a2..f9e14c180 100644 --- a/client/homebrew/pages/vaultPage/vaultPage.jsx +++ b/client/homebrew/pages/vaultPage/vaultPage.jsx @@ -5,12 +5,12 @@ require('./vaultPage.less'); const React = require('react'); const { useState, useEffect, useRef } = React; -const Nav = require('naturalcrit/nav/nav.jsx'); -const Navbar = require('../../navbar/navbar.jsx'); -const RecentNavItem = require('../../navbar/recent.navitem.jsx').both; -const Account = require('../../navbar/account.navitem.jsx'); -const NewBrew = require('../../navbar/newbrew.navitem.jsx'); -const HelpNavItem = require('../../navbar/help.navitem.jsx'); +const Nav = require('client/homebrew/navbar/nav.jsx'); +const Navbar = require('client/homebrew/navbar/navbar.jsx'); +const RecentNavItem = require('client/homebrew/navbar/recent.navitem.jsx').both; +const Account = require('client/homebrew/navbar/account.navitem.jsx'); +const NewBrew = require('client/homebrew/navbar/newbrew.navitem.jsx'); +const HelpNavItem = require('client/homebrew/navbar/help.navitem.jsx'); const BrewItem = require('../basePages/listPage/brewItem/brewItem.jsx'); const SplitPane = require('client/components/splitPane/splitPane.jsx'); const ErrorIndex = require('../errorPage/errors/errorIndex.js');