// Dependencies import { 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 } from 'shared/components/inputs.mjs' import { UploadIcon, EditIcon, PlusIcon, BookmarkIcon } from 'shared/components/icons.mjs' import { Popout } from 'shared/components/popout/index.mjs' import { PageLink } from 'shared/components/link.mjs' import { DynamicOrgDocs } from 'site/components/dynamic-org-docs.mjs' export const ns = ['workbench', 'status'] export const SaveView = ({ design, settings }) => { // Hooks const { t } = 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() // When we have more than 'new' this will come in handy //const action = router.asPath.split('/')[1] const addSettingsToNotes = () => { setNotes(notes + '\n```yaml\n' + yaml.dump(settings) + '````') } const savePattern = 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, ]) setSavedId(id) } 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]) } return (

{t('workbench:savePattern')}

{savedId && (
{t('workbend:patternSaved')}
{t('workbench:see')}:{' '}
)} {bookmarkedId && (
{t('workbench:patternBookmarkCreated')}
{t('workbench:see')}:{' '}
)}
} /> {withNotes ? ( } /> ) : null}
{withNotes ? ( ) : ( )}
) }