// __SDEFILE__ - This file is a dependency for the stand-alone environment // Dependencies import { workbenchHash, capitalize, shortDate, notEmpty, horFlexClassesNoSm, } from 'shared/utils.mjs' import yaml from 'js-yaml' // Context import { LoadingStatusContext } from 'shared/context/loading-status-context.mjs' // Hooks import { useState, useContext } from 'react' import { useTranslation } from 'next-i18next' import { useRouter } from 'next/router' import { useBackend } from 'shared/hooks/use-backend.mjs' // Components import { AuthWrapper } from 'shared/components/wrappers/auth/index.mjs' import { StringInput, MarkdownInput, ListInput } from 'shared/components/inputs.mjs' import { SaveIcon, SaveAsIcon, EditIcon, PlusIcon, BookmarkIcon, ExportIcon, } from 'shared/components/icons.mjs' import { Popout } from 'shared/components/popout/index.mjs' import { PageLink } from 'shared/components/link.mjs' import { DynamicMdx } from 'shared/components/mdx/dynamic.mjs' export const ns = ['workbench', 'status'] export const SaveView = ({ design, settings, setView, saveAs }) => { // Hooks const { t, i18n } = useTranslation(ns) const backend = useBackend() const router = useRouter() const { setLoadingStatus } = useContext(LoadingStatusContext) // State const [name, setName] = useState(`${capitalize(design)} / ${shortDate(router.locale)}`) const [withNotes, setWithNotes] = useState(false) const [notes, setNotes] = useState('') const [savedId, setSavedId] = useState() const [bookmarkedId, setBookmarkedId] = useState() const [editAfterSaveAs, setEditAfterSaveAs] = useState(true) const addSettingsToNotes = () => { setNotes(notes + '\n```yaml\n' + yaml.dump(settings) + '````') } const saveAsNewPattern = async () => { setLoadingStatus([true, 'savingPattern']) const patternData = { design, name, public: false, settings, data: {} } if (withNotes) patternData.notes = notes const result = await backend.createPattern(patternData) if (result.success) { const id = result.data.pattern.id setLoadingStatus([ true, <> {t('status:patternSaved')} [#{id}] , true, true, ]) router.push( `/account/patterns/${id}` + (editAfterSaveAs ? '/edit' + workbenchHash({ settings, view: 'draft' }) : '') ) if (editAfterSaveAs) setView('draft') } else setLoadingStatus([true, 'backendError', true, false]) } const savePattern = async () => { setLoadingStatus([true, 'savingPattern']) const patternData = { design, name, public: false, settings, data: {} } const result = await backend.updatePattern(saveAs.pattern, patternData) if (result.success) { setLoadingStatus([ true, <> {t('status:patternSaved')} [#{saveAs.pattern}] , true, true, ]) setSavedId(saveAs.pattern) } else setLoadingStatus([true, 'backendError', true, false]) } const bookmarkPattern = async () => { setLoadingStatus([true, 'creatingBookmark']) const result = await backend.createBookmark({ type: 'pattern', title: name, url: window.location.pathname + window.location.search + window.location.hash, }) if (result.success) { const id = result.data.bookmark.id setLoadingStatus([ true, <> {t('status:bookmarkCreated')} [#{id}] , true, true, ]) setBookmarkedId(id) } else setLoadingStatus([true, 'backendError', true, false]) } const docs = {} for (const field of ['name', 'notes', 'goto']) { docs[field] = } return (
{saveAs && saveAs.pattern ? ( <>

{t('workbench:savePattern')}

{savedId && (
{t('workbend:patternSaved')}
{t('workbench:see')}:{' '}
)} ) : null}

{t('workbench:saveAsNewPattern')}

{bookmarkedId && (
{t('workbench:patternBookmarkCreated')}
{t('workbench:see')}:{' '}
)}
{withNotes ? ( ) : null}
{withNotes ? ( ) : ( )}

{t('workbench:bookmarkPattern')} / {t('workbench:exportPattern')}

) }