import { useCallback, useEffect, useState } from 'react'; import { useOutletContext } from 'react-router-dom'; import Metadata from './Metadata'; import Warning from '../../common/display/Warning'; import apiLoader from '../../../services/utilities/apiLoader'; import useLoadingMessages from '../../hooks/useLoadingMessages'; function Editor({ loadNotes, noteId, setCurrentNote, toggleNote }) { const nowRunning = 'utilities/notes/Editor.jsx'; const errorNumber = 354; const [state, setState] = useState({ loaded: false, note: {}, }); const { loaded, note, } = state; const { handleError, setLoadingMessages } = useOutletContext(); const { addLoadingMessage, removeLoadingMessage } = useLoadingMessages(setLoadingMessages); const loadNote = useCallback(async () => { const context = `${nowRunning}.loadNote`; const loadingMessage = 'loading the note...'; try { addLoadingMessage(loadingMessage); const api = 'utilities/notes/get-by-id'; const payload = { noteId }; const { data } = await apiLoader({ api, payload }); if (!data.success) { handleError(data.failure, context, errorNumber, true); return; } setState((prevState) => ({ ...prevState, note: data.note })); } catch (e) { handleError(e, context, errorNumber); } finally { removeLoadingMessage(loadingMessage); } }, [addLoadingMessage, handleError, noteId, removeLoadingMessage]); useEffect(() => { const context = `${nowRunning}.useEffect`; const runThis = async () => { if (!loaded) { setState((prevState) => ({ ...prevState, loaded: true, })); await loadNote(); } }; runThis().catch((e) => handleError(e, context, errorNumber)); }, [handleError, loaded, loadNote]); try { if (!loaded) return null; if (loaded && !note) return ; return ( <> ); } catch (e) { handleError(e, nowRunning, ); } } export default Editor;