From 1ccacf546faaa4b480730de8b942cfa95f61440f Mon Sep 17 00:00:00 2001 From: Komediruzecki Date: Sun, 26 Sep 2021 10:23:52 +0200 Subject: [PATCH] Add initial welcome note Add welcome notes on space import or create Fix navigation on remove space Rename storage from invalid navigation for spaces to space --- CHANGELOG.md | 10 ++++++++-- src/components/App.tsx | 4 ++-- src/lib/db/FSNoteDb.ts | 9 +++++++-- src/lib/db/createStore.ts | 16 ++++++++++------ src/lib/templates/welcomeNote.ts | 24 ++++++++++++++++++++++++ src/lib/v2/hooks/local/useLocalUI.tsx | 7 ++++--- 6 files changed, 55 insertions(+), 15 deletions(-) create mode 100644 src/lib/templates/welcomeNote.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 716f8a67e..ace2c2c70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,11 +11,17 @@ For more info on features and upcoming changes, please visit our [Open Issues](h ## [0.23.0] - 2021-10-20 -### TBA +### Added + +- The welcome note on space creation or import + +### Fixed + +- Space navigation on space remove (defaults to first available space) ## [Released] -## [0.22.3] - 2021-09-18 +## [0.22.3] - 2021-09-24 ### Added diff --git a/src/components/App.tsx b/src/components/App.tsx index 9f845d368..f0fe955f2 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -106,12 +106,12 @@ const App = () => { const spaceCount = size(storageMap) if (index >= spaceCount) { pushMessage({ - title: 'No such storage.', + title: 'No such space.', description: `You selected ${index + 1}${ index == 0 ? 'st' : index == 1 ? 'nd' : 'th' } space but only ${spaceCount} space${spaceCount == 1 ? '' : 's'} ${ spaceCount > 1 ? 'are' : 'is' - } available. Please add more storages or switch to existing ones. `, + } available. Please add more spaces or switch to existing ones. `, }) } else { navigateToStorage(targetStorageId) diff --git a/src/lib/db/FSNoteDb.ts b/src/lib/db/FSNoteDb.ts index 9c4cad153..ed00bb987 100644 --- a/src/lib/db/FSNoteDb.ts +++ b/src/lib/db/FSNoteDb.ts @@ -41,6 +41,7 @@ import { unlinkFile, } from '../electronOnly' import { removeDuplicates } from '../../shared/lib/utils/array' +import { welcomeNote } from '../templates/welcomeNote' interface StorageJSONData { folderMap: ObjectMap @@ -60,7 +61,7 @@ class FSNoteDb implements NoteDb { this.location = location } - async init(): Promise { + async init(newStorage?: boolean): Promise { await prepareDirectory(this.location) await prepareDirectory(this.getNotesFolderPathname()) await prepareDirectory(this.getAttachmentsFolderPathname()) @@ -82,6 +83,10 @@ class FSNoteDb implements NoteDb { }) } + if (newStorage) { + notes.push(await this.createNote(welcomeNote)) + } + await Promise.all([ ...[...missingFolderPathnameSet].map((pathname) => this.upsertFolder(pathname) @@ -97,7 +102,7 @@ class FSNoteDb implements NoteDb { anyFolderDocUpdated = true } }) - if (anyFolderDocUpdated) { + if (anyFolderDocUpdated || newStorage) { await this.saveBoostNoteJSON() } } diff --git a/src/lib/db/createStore.ts b/src/lib/db/createStore.ts index 1f1a37fde..6d8267860 100644 --- a/src/lib/db/createStore.ts +++ b/src/lib/db/createStore.ts @@ -205,10 +205,13 @@ export function createDbStoreCreator( const storageData = { id, name } - const storage = await prepareStorage({ - ...storageData, - ...props, - }) + const storage = await prepareStorage( + { + ...storageData, + ...props, + }, + true + ) let newStorageMap: ObjectMap = {} setStorageMap((prevStorageMap) => { @@ -1347,11 +1350,12 @@ function saveStorageDataList( } async function prepareStorage( - storageData: NoteStorageData + storageData: NoteStorageData, + newStorage?: boolean ): Promise { const { id, name } = storageData const db = new FSNoteDb(id, name, storageData.location) - await db.init() + await db.init(newStorage) const foldersToUpdateOrderedIds: string[] = [] diff --git a/src/lib/templates/welcomeNote.ts b/src/lib/templates/welcomeNote.ts new file mode 100644 index 000000000..c07cd139f --- /dev/null +++ b/src/lib/templates/welcomeNote.ts @@ -0,0 +1,24 @@ +import { NoteDocEditibleProps, NoteDocImportableProps } from '../db/types' + +const noteContent = [ + '# Welcome to Boost Note Local', + '', + '## Here are few helpful links to get you started', + '', + '- [About](https://github.com/BoostIO/BoostNote.next-local/wiki/About)', + '', + '- [Keymap](https://github.com/BoostIO/BoostNote.next-local/wiki/Keyboard-Shortcuts)', + '', + '- [Discussions](https://github.com/BoostIO/BoostNote.next-local/discussions)', + '', + '- [Q&A](https://github.com/BoostIO/BoostNote.next-local/discussions/categories/q-a)', + '', +] + +export const welcomeNote: Partial< + NoteDocEditibleProps | NoteDocImportableProps +> = { + title: 'Welcome', + content: noteContent.join('\n'), + folderPathname: '/', +} diff --git a/src/lib/v2/hooks/local/useLocalUI.tsx b/src/lib/v2/hooks/local/useLocalUI.tsx index cf3c72b6c..8fbbee1d5 100644 --- a/src/lib/v2/hooks/local/useLocalUI.tsx +++ b/src/lib/v2/hooks/local/useLocalUI.tsx @@ -303,8 +303,9 @@ export function useLocalUI() { { variant: 'warning', label: t('storage.remove'), - onClick: () => { - removeStorage(workspace.id) + onClick: async () => { + await removeStorage(workspace.id) + push('/') }, }, { @@ -316,7 +317,7 @@ export function useLocalUI() { ], }) }, - [messageBox, removeStorage, t] + [messageBox, push, removeStorage, t] ) const deleteFolder = useCallback(