mirror of
https://github.com/standardnotes/app
synced 2026-10-20 21:03:15 -04:00
118 lines
3.7 KiB
TypeScript
118 lines
3.7 KiB
TypeScript
import { FileItem } from '@standardnotes/snjs'
|
|
import { AbstractComponent } from '@/Components/Abstract/PureComponent'
|
|
import MultipleSelectedNotes from '@/Components/MultipleSelectedNotes/MultipleSelectedNotes'
|
|
import MultipleSelectedFiles from '../MultipleSelectedFiles/MultipleSelectedFiles'
|
|
import { AppPaneId } from '../Panes/AppPaneMetadata'
|
|
import FileView from '../FileView/FileView'
|
|
import NoteView from '../NoteView/NoteView'
|
|
import { NoteViewController } from '../NoteView/Controller/NoteViewController'
|
|
import { FileViewController } from '../NoteView/Controller/FileViewController'
|
|
import { WebApplication } from '@/Application/WebApplication'
|
|
|
|
type State = {
|
|
showMultipleSelectedNotes: boolean
|
|
showMultipleSelectedFiles: boolean
|
|
controllers: (NoteViewController | FileViewController)[]
|
|
selectedFile: FileItem | undefined
|
|
selectedPane?: AppPaneId
|
|
isInMobileView?: boolean
|
|
}
|
|
|
|
type Props = {
|
|
application: WebApplication
|
|
className?: string
|
|
}
|
|
|
|
class NoteGroupView extends AbstractComponent<Props, State> {
|
|
private removeChangeObserver!: () => void
|
|
|
|
constructor(props: Props) {
|
|
super(props, props.application)
|
|
this.state = {
|
|
showMultipleSelectedNotes: false,
|
|
showMultipleSelectedFiles: false,
|
|
controllers: [],
|
|
selectedFile: undefined,
|
|
}
|
|
}
|
|
|
|
override componentDidMount(): void {
|
|
super.componentDidMount()
|
|
|
|
const controllerGroup = this.application.itemControllerGroup
|
|
this.removeChangeObserver = this.application.itemControllerGroup.addActiveControllerChangeObserver(() => {
|
|
const controllers = controllerGroup.itemControllers
|
|
this.setState({
|
|
controllers: controllers,
|
|
})
|
|
})
|
|
|
|
this.autorun(() => {
|
|
if (this.application.notesController) {
|
|
this.setState({
|
|
showMultipleSelectedNotes: this.application.notesController.selectedNotesCount > 1,
|
|
})
|
|
}
|
|
|
|
if (this.application.itemListController) {
|
|
this.setState({
|
|
showMultipleSelectedFiles: this.application.itemListController.selectedFilesCount > 1,
|
|
})
|
|
}
|
|
})
|
|
|
|
this.autorun(() => {
|
|
if (this.application.itemListController) {
|
|
this.setState({
|
|
selectedFile: this.application.itemListController.selectedFiles[0],
|
|
})
|
|
}
|
|
})
|
|
|
|
this.autorun(() => {
|
|
if (this.application.paneController) {
|
|
this.setState({
|
|
selectedPane: this.application.paneController.currentPane,
|
|
isInMobileView: this.application.paneController.isInMobileView,
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
override deinit() {
|
|
this.removeChangeObserver?.()
|
|
;(this.removeChangeObserver as unknown) = undefined
|
|
|
|
super.deinit()
|
|
}
|
|
|
|
override render() {
|
|
const shouldNotShowMultipleSelectedItems =
|
|
!this.state.showMultipleSelectedNotes && !this.state.showMultipleSelectedFiles
|
|
|
|
const hasControllers = this.state.controllers.length > 0
|
|
|
|
return (
|
|
<>
|
|
{this.state.showMultipleSelectedNotes && <MultipleSelectedNotes application={this.application} />}
|
|
{this.state.showMultipleSelectedFiles && (
|
|
<MultipleSelectedFiles itemListController={this.application.itemListController} />
|
|
)}
|
|
{shouldNotShowMultipleSelectedItems && hasControllers && (
|
|
<>
|
|
{this.state.controllers.map((controller) => {
|
|
return controller instanceof NoteViewController ? (
|
|
<NoteView key={controller.runtimeId} application={this.application} controller={controller} />
|
|
) : (
|
|
<FileView key={controller.runtimeId} application={this.application} file={controller.item} />
|
|
)
|
|
})}
|
|
</>
|
|
)}
|
|
</>
|
|
)
|
|
}
|
|
}
|
|
|
|
export default NoteGroupView
|