feat: daily notes (dev only) (#1894)
This commit is contained in:
@@ -20,6 +20,8 @@ import {
|
||||
WebAppEvent,
|
||||
NewNoteTitleFormat,
|
||||
useBoolean,
|
||||
TemplateNoteViewAutofocusBehavior,
|
||||
isTag,
|
||||
} from '@standardnotes/snjs'
|
||||
import { action, computed, makeObservable, observable, reaction, runInAction } from 'mobx'
|
||||
import { WebApplication } from '../../Application/Application'
|
||||
@@ -165,18 +167,20 @@ export class ItemListController
|
||||
|
||||
this.disposers.push(
|
||||
application.addEventObserver(async () => {
|
||||
void this.reloadItems(ItemsReloadSource.SyncEvent).then(() => {
|
||||
if (
|
||||
this.notes.length === 0 &&
|
||||
this.navigationController.selected instanceof SmartView &&
|
||||
this.navigationController.selected.uuid === SystemViewId.AllNotes &&
|
||||
this.noteFilterText === '' &&
|
||||
!this.getActiveItemController()
|
||||
) {
|
||||
this.createPlaceholderNote()?.catch(console.error)
|
||||
}
|
||||
})
|
||||
this.setCompletedFullSync(true)
|
||||
if (!this.completedFullSync) {
|
||||
void this.reloadItems(ItemsReloadSource.SyncEvent).then(() => {
|
||||
if (
|
||||
this.notes.length === 0 &&
|
||||
this.navigationController.selected instanceof SmartView &&
|
||||
this.navigationController.selected.uuid === SystemViewId.AllNotes &&
|
||||
this.noteFilterText === '' &&
|
||||
!this.getActiveItemController()
|
||||
) {
|
||||
this.createPlaceholderNote()?.catch(console.error)
|
||||
}
|
||||
})
|
||||
this.setCompletedFullSync(true)
|
||||
}
|
||||
}, ApplicationEvent.CompletedFullSync),
|
||||
)
|
||||
|
||||
@@ -211,6 +215,7 @@ export class ItemListController
|
||||
notesToDisplay: observable,
|
||||
panelTitle: observable,
|
||||
panelWidth: observable,
|
||||
items: observable,
|
||||
renderedItems: observable,
|
||||
showDisplayOptionsMenu: observable,
|
||||
|
||||
@@ -253,7 +258,7 @@ export class ItemListController
|
||||
async handleEvent(event: InternalEventInterface): Promise<void> {
|
||||
if (event.type === CrossControllerEvent.TagChanged) {
|
||||
const payload = event.payload as { userTriggered: boolean }
|
||||
this.handleTagChange(payload.userTriggered)
|
||||
await this.handleTagChange(payload.userTriggered)
|
||||
} else if (event.type === CrossControllerEvent.ActiveEditorChanged) {
|
||||
this.handleEditorChange().catch(console.error)
|
||||
}
|
||||
@@ -375,12 +380,6 @@ export class ItemListController
|
||||
)
|
||||
}
|
||||
|
||||
private shouldSelectFirstItem = (itemsReloadSource: ItemsReloadSource) => {
|
||||
return (
|
||||
itemsReloadSource === ItemsReloadSource.UserTriggeredTagChange || !this.selectionController.selectedUuids.size
|
||||
)
|
||||
}
|
||||
|
||||
private shouldCloseActiveItem = (activeItem: SNNote | FileItem | undefined) => {
|
||||
const isSearching = this.noteFilterText.length > 0
|
||||
const itemExistsInUpdatedResults = this.items.find((item) => item.uuid === activeItem?.uuid)
|
||||
@@ -404,6 +403,18 @@ export class ItemListController
|
||||
return activeItem && !this.selectionController.isItemSelected(activeItem)
|
||||
}
|
||||
|
||||
private shouldSelectFirstItem = (itemsReloadSource: ItemsReloadSource) => {
|
||||
const selectedTag = this.navigationController.selected
|
||||
const isDailyEntry = selectedTag && isTag(selectedTag) && selectedTag.isDailyEntry
|
||||
if (isDailyEntry) {
|
||||
return false
|
||||
}
|
||||
|
||||
const userChangedTag = itemsReloadSource === ItemsReloadSource.UserTriggeredTagChange
|
||||
const hasNoSelectedItem = !this.selectionController.selectedUuids.size
|
||||
return userChangedTag || hasNoSelectedItem
|
||||
}
|
||||
|
||||
private async recomputeSelectionAfterItemsReload(itemsReloadSource: ItemsReloadSource) {
|
||||
const activeController = this.getActiveItemController()
|
||||
|
||||
@@ -561,48 +572,65 @@ export class ItemListController
|
||||
return { didReloadItems: true }
|
||||
}
|
||||
|
||||
async createNewNoteController(title?: string) {
|
||||
async createNewNoteController(
|
||||
title?: string,
|
||||
createdAt?: Date,
|
||||
autofocusBehavior?: TemplateNoteViewAutofocusBehavior,
|
||||
) {
|
||||
const selectedTag = this.navigationController.selected
|
||||
|
||||
const activeRegularTagUuid = selectedTag instanceof SNTag ? selectedTag.uuid : undefined
|
||||
|
||||
await this.application.itemControllerGroup.createItemController({
|
||||
return this.application.itemControllerGroup.createItemController({
|
||||
title,
|
||||
tag: activeRegularTagUuid,
|
||||
createdAt,
|
||||
autofocusBehavior,
|
||||
})
|
||||
}
|
||||
|
||||
createNewNote = async () => {
|
||||
this.notesController.unselectNotes()
|
||||
|
||||
if (this.navigationController.isInSmartView() && !this.navigationController.isInHomeView()) {
|
||||
await this.navigationController.selectHomeNavigationView()
|
||||
titleForNewNote = (createdAt?: Date) => {
|
||||
if (this.isFiltering) {
|
||||
return this.noteFilterText
|
||||
}
|
||||
|
||||
const titleFormat =
|
||||
this.navigationController.selected?.preferences?.newNoteTitleFormat ||
|
||||
this.application.getPreference(PrefKey.NewNoteTitleFormat, PrefDefaults[PrefKey.NewNoteTitleFormat])
|
||||
|
||||
let title = formatDateAndTimeForNote(new Date())
|
||||
|
||||
if (titleFormat === NewNoteTitleFormat.CurrentNoteCount) {
|
||||
title = `Note ${this.notes.length + 1}`
|
||||
} else if (titleFormat === NewNoteTitleFormat.CustomFormat) {
|
||||
return `Note ${this.notes.length + 1}`
|
||||
}
|
||||
|
||||
if (titleFormat === NewNoteTitleFormat.CustomFormat) {
|
||||
const customFormat =
|
||||
this.navigationController.selected?.preferences?.customNoteTitleFormat ||
|
||||
this.application.getPreference(PrefKey.CustomNoteTitleFormat, PrefDefaults[PrefKey.CustomNoteTitleFormat])
|
||||
title = dayjs().format(customFormat)
|
||||
} else if (titleFormat === NewNoteTitleFormat.Empty) {
|
||||
title = ''
|
||||
|
||||
return dayjs(createdAt).format(customFormat)
|
||||
}
|
||||
|
||||
if (this.isFiltering) {
|
||||
title = this.noteFilterText
|
||||
if (titleFormat === NewNoteTitleFormat.Empty) {
|
||||
return ''
|
||||
}
|
||||
|
||||
await this.createNewNoteController(title)
|
||||
return formatDateAndTimeForNote(createdAt || new Date())
|
||||
}
|
||||
|
||||
createNewNote = async (title?: string, createdAt?: Date, autofocusBehavior?: TemplateNoteViewAutofocusBehavior) => {
|
||||
this.notesController.unselectNotes()
|
||||
|
||||
if (this.navigationController.isInSmartView() && !this.navigationController.isInHomeView()) {
|
||||
await this.navigationController.selectHomeNavigationView()
|
||||
}
|
||||
|
||||
const useTitle = title || this.titleForNewNote(createdAt)
|
||||
|
||||
const controller = await this.createNewNoteController(useTitle, createdAt, autofocusBehavior)
|
||||
|
||||
this.linkingController.reloadAllLinks()
|
||||
|
||||
this.selectionController.scrollToItem(controller.item)
|
||||
}
|
||||
|
||||
createPlaceholderNote = () => {
|
||||
@@ -721,7 +749,7 @@ export class ItemListController
|
||||
this.application.itemControllerGroup.closeItemController(controller)
|
||||
}
|
||||
|
||||
handleTagChange = (userTriggered: boolean) => {
|
||||
handleTagChange = async (userTriggered: boolean) => {
|
||||
const activeNoteController = this.getActiveItemController()
|
||||
if (activeNoteController instanceof NoteViewController && activeNoteController.isTemplateNote) {
|
||||
this.closeItemController(activeNoteController)
|
||||
@@ -739,7 +767,7 @@ export class ItemListController
|
||||
|
||||
this.reloadNotesDisplayOptions()
|
||||
|
||||
void this.reloadItems(userTriggered ? ItemsReloadSource.UserTriggeredTagChange : ItemsReloadSource.TagChange)
|
||||
await this.reloadItems(userTriggered ? ItemsReloadSource.UserTriggeredTagChange : ItemsReloadSource.TagChange)
|
||||
}
|
||||
|
||||
onFilterEnter = () => {
|
||||
|
||||
Reference in New Issue
Block a user