// 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 'shared/components/dynamic-docs/org.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} {t('workbench:savePattern')} {withNotes ? ( {t('workbench:addSettingsToNotes')} ) : ( setWithNotes(true)} > {t('workbench:addNotes')} )} {t('workbench:bookmarkPattern')} ) }