import 'github-markdown-css/github-markdown.css'; import get from 'lodash/get'; import find from 'lodash/find'; import { updateFolderDocs } from 'providers/ReduxStore/slices/collections'; import { updateDocsEditing } from 'providers/ReduxStore/slices/tabs'; import { useTheme } from 'providers/Theme'; import { useMemo, useRef } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { saveFolderRoot } from 'providers/ReduxStore/slices/collections/actions'; import Markdown from 'components/MarkDown'; import CodeEditor from 'components/CodeEditor'; import AIAssist from 'components/AIAssist'; import { buildAiVariablesPayload, buildDocsContextFromFolder } from 'utils/ai'; import Button from 'ui/Button'; import StyledWrapper from './StyledWrapper'; import { usePersistedState } from 'hooks/usePersistedState'; import { useTrackScroll } from 'hooks/useTrackScroll'; const Documentation = ({ collection, folder }) => { const dispatch = useDispatch(); const { displayedTheme } = useTheme(); const preferences = useSelector((state) => state.app.preferences); const tabs = useSelector((state) => state.tabs.tabs); const activeTabUid = useSelector((state) => state.tabs.activeTabUid); const focusedTab = find(tabs, (t) => t.uid === activeTabUid); const isEditing = focusedTab?.docsEditing || false; const docs = folder.draft ? get(folder, 'draft.docs', '') : get(folder, 'root.docs', ''); const wrapperRef = useRef(null); const [scroll, setScroll] = usePersistedState({ key: `folder-docs-scroll-${folder.uid}`, default: 0 }); useTrackScroll({ ref: wrapperRef, selector: '.folder-settings-content', onChange: setScroll, enabled: !isEditing, initialValue: scroll }); const toggleViewMode = () => { dispatch(updateDocsEditing({ uid: activeTabUid, docsEditing: !isEditing })); }; const onEdit = (value) => { dispatch( updateFolderDocs({ folderUid: folder.uid, collectionUid: collection.uid, docs: value }) ); }; const onSave = () => dispatch(saveFolderRoot(collection.uid, folder.uid)); const docsContext = useMemo(() => buildDocsContextFromFolder(collection, folder), [collection, folder]); const aiVariables = useMemo(() => buildAiVariablesPayload(collection, folder), [collection, folder]); if (!folder) { return null; } return (
{isEditing ? 'Preview' : 'Edit'}
{isEditing ? (
) : (
)}
); }; export default Documentation;