import { FileItem, FileViewController, NoteViewController } from '@standardnotes/snjs'
import { PureComponent } from '@/Components/Abstract/PureComponent'
import { WebApplication } from '@/Application/Application'
import MultipleSelectedNotes from '@/Components/MultipleSelectedNotes/MultipleSelectedNotes'
import NoteView from '@/Components/NoteView/NoteView'
import MultipleSelectedFiles from '../MultipleSelectedFiles/MultipleSelectedFiles'
import { ElementIds } from '@/Constants/ElementIDs'
import FileView from '@/Components/FileView/FileView'
import { FileDnDContext } from '@/Components/FileDragNDropProvider/FileDragNDropProvider'
import { AppPaneId } from '../ResponsivePane/AppPaneMetadata'
import ResponsivePaneContent from '../ResponsivePane/ResponsivePaneContent'
import Icon from '../Icon/Icon'
import { useResponsiveAppPane } from '../ResponsivePane/ResponsivePaneProvider'
const MobileItemsListButton = () => {
const { toggleAppPane } = useResponsiveAppPane()
return (
)
}
type State = {
showMultipleSelectedNotes: boolean
showMultipleSelectedFiles: boolean
controllers: (NoteViewController | FileViewController)[]
selectedFile: FileItem | undefined
}
type Props = {
application: WebApplication
}
class NoteGroupView extends PureComponent {
static override contextType = FileDnDContext
declare context: React.ContextType
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.viewControllerManager) {
return
}
if (this.viewControllerManager && this.viewControllerManager.notesController) {
this.setState({
showMultipleSelectedNotes: this.viewControllerManager.notesController.selectedNotesCount > 1,
})
}
if (this.viewControllerManager.selectionController) {
this.setState({
showMultipleSelectedFiles: this.viewControllerManager.selectionController.selectedFilesCount > 1,
})
}
})
this.autorun(() => {
if (this.viewControllerManager && this.viewControllerManager.selectionController) {
this.setState({
selectedFile: this.viewControllerManager.selectionController.selectedFiles[0],
})
}
})
}
override deinit() {
this.removeChangeObserver?.()
;(this.removeChangeObserver as unknown) = undefined
super.deinit()
}
override render() {
const fileDragNDropContext = this.context
const shouldNotShowMultipleSelectedItems =
!this.state.showMultipleSelectedNotes && !this.state.showMultipleSelectedFiles
return (
{this.state.showMultipleSelectedNotes && (
)}
{this.state.showMultipleSelectedFiles && (
)}
{this.viewControllerManager.navigationController.isInFilesView && fileDragNDropContext?.isDraggingFiles && (
Drop your files to upload them
)}
{shouldNotShowMultipleSelectedItems && this.state.controllers.length > 0 && (
<>
{this.state.controllers.map((controller) => {
return controller instanceof NoteViewController ? (
) : (
)
})}
>
)}
)
}
}
export default NoteGroupView