From d3621d70b1a34537417b06830275467055b753cb Mon Sep 17 00:00:00 2001 From: Aman Harwara Date: Sat, 24 Sep 2022 16:04:31 +0530 Subject: [PATCH] feat: new note title format w/ prefs (#1629) --- .../src/Domain/Syncable/UserPrefs/PrefKey.ts | 8 ++++ .../Preferences/Panes/General/Defaults.tsx | 38 ++++++++++++++++++- .../ItemList/ItemListController.ts | 16 +++++++- .../web/src/javascripts/Utils/DateUtils.ts | 6 +++ 4 files changed, 66 insertions(+), 2 deletions(-) diff --git a/packages/models/src/Domain/Syncable/UserPrefs/PrefKey.ts b/packages/models/src/Domain/Syncable/UserPrefs/PrefKey.ts index c52a1f29e..9afb93428 100644 --- a/packages/models/src/Domain/Syncable/UserPrefs/PrefKey.ts +++ b/packages/models/src/Domain/Syncable/UserPrefs/PrefKey.ts @@ -32,6 +32,13 @@ export enum PrefKey { MobileDoNotShowAgainUnsupportedEditors = 'mobileDoNotShowAgainUnsupportedEditors', MobileSelectedTagUuid = 'mobileSelectedTagUuid', MobileNotesHideEditorIcon = 'mobileHideEditorIcon', + NewNoteTitleFormat = 'newNoteTitleFormat', +} + +export enum NewNoteTitleFormat { + CurrentDateAndTime = 'CurrentDateAndTime', + CurrentNoteCount = 'CurrentNoteCount', + Empty = 'Empty', } export type PrefValue = { @@ -65,4 +72,5 @@ export type PrefValue = { [PrefKey.MobileDoNotShowAgainUnsupportedEditors]: boolean [PrefKey.MobileSelectedTagUuid]: string | undefined [PrefKey.MobileNotesHideEditorIcon]: boolean + [PrefKey.NewNoteTitleFormat]: NewNoteTitleFormat } diff --git a/packages/web/src/javascripts/Components/Preferences/Panes/General/Defaults.tsx b/packages/web/src/javascripts/Components/Preferences/Panes/General/Defaults.tsx index 20b447148..64c2f659d 100644 --- a/packages/web/src/javascripts/Components/Preferences/Panes/General/Defaults.tsx +++ b/packages/web/src/javascripts/Components/Preferences/Panes/General/Defaults.tsx @@ -7,6 +7,7 @@ import { ComponentMutator, SNComponent, StorageValueModes, + NewNoteTitleFormat, } from '@standardnotes/snjs' import { Subtitle, Text, Title } from '@/Components/Preferences/PreferencesComponents/Content' import { WebApplication } from '@/Application/Application' @@ -61,6 +62,14 @@ const Defaults: FunctionComponent = ({ application }) => { const [spellcheck, setSpellcheck] = useState(() => application.getPreference(PrefKey.EditorSpellcheck, true)) + const [newNoteTitleFormat, setNewNoteTitleFormat] = useState(() => + application.getPreference(PrefKey.NewNoteTitleFormat, NewNoteTitleFormat.CurrentDateAndTime), + ) + const handleNewNoteTitleFormatChange = (value: string) => { + setNewNoteTitleFormat(value as NewNoteTitleFormat) + application.setPreference(PrefKey.NewNoteTitleFormat, value as NewNoteTitleFormat) + } + const [addNoteToParentFolders, setAddNoteToParentFolders] = useState(() => application.getPreference(PrefKey.NoteAddToParentFolders, true), ) @@ -138,7 +147,7 @@ const Defaults: FunctionComponent = ({ application }) => { )}
Default Note Type - New notes will be created using this type. + New notes will be created using this type
= ({ application }) => {
+
+ Default Note Title Format + New notes will be created with a title in this format +
+ +
+
+
Spellcheck diff --git a/packages/web/src/javascripts/Controllers/ItemList/ItemListController.ts b/packages/web/src/javascripts/Controllers/ItemList/ItemListController.ts index f24cf88e5..e3d9033b7 100644 --- a/packages/web/src/javascripts/Controllers/ItemList/ItemListController.ts +++ b/packages/web/src/javascripts/Controllers/ItemList/ItemListController.ts @@ -18,6 +18,7 @@ import { FileViewController, FileItem, WebAppEvent, + NewNoteTitleFormat, } from '@standardnotes/snjs' import { action, computed, makeObservable, observable, reaction, runInAction } from 'mobx' import { WebApplication } from '../../Application/Application' @@ -29,6 +30,7 @@ import { SearchOptionsController } from '../SearchOptionsController' import { SelectedItemsController } from '../SelectedItemsController' import { NotesController } from '../NotesController' import { NoteTagsController } from '../NoteTagsController' +import { formatDateAndTimeForNote } from '@/Utils/DateUtils' const MinNoteCellHeight = 51.0 const DefaultListNumNotes = 20 @@ -485,7 +487,19 @@ export class ItemListController extends AbstractViewController implements Intern await this.navigationController.selectHomeNavigationView() } - let title = `Note ${this.notes.length + 1}` + const titleFormat = this.application.getPreference( + PrefKey.NewNoteTitleFormat, + NewNoteTitleFormat.CurrentDateAndTime, + ) + + let title = formatDateAndTimeForNote(new Date()) + + if (titleFormat === NewNoteTitleFormat.CurrentNoteCount) { + title = `Note ${this.notes.length + 1}` + } else if (titleFormat === NewNoteTitleFormat.Empty) { + title = '' + } + if (this.isFiltering) { title = this.noteFilterText } diff --git a/packages/web/src/javascripts/Utils/DateUtils.ts b/packages/web/src/javascripts/Utils/DateUtils.ts index 90d7943bc..78bf60c6d 100644 --- a/packages/web/src/javascripts/Utils/DateUtils.ts +++ b/packages/web/src/javascripts/Utils/DateUtils.ts @@ -11,3 +11,9 @@ export const formatDateForContextMenu = (date: Date | undefined) => { return `${date.toDateString()} ${date.toLocaleTimeString()}` } + +export const formatDateAndTimeForNote = (date: Date) => { + return `${date.toLocaleDateString(undefined, { + dateStyle: 'full', + })} ${date.toLocaleTimeString()}` +}