chore: unable to implement insert at index, need to come back to this, wasting time
This commit is contained in:
@ -9,6 +9,7 @@ import { sortFilesAndDirectories } from '@src/lib/desktopFS'
|
||||
export interface FileExplorerEntry extends FileEntry {
|
||||
parentPath: string
|
||||
level: number
|
||||
index: number
|
||||
}
|
||||
|
||||
interface FileExplorerRow extends FileExplorerEntry {
|
||||
@ -63,11 +64,13 @@ const flattenProjectHelper = (
|
||||
parentPath: string, // the parentPath for the given f:FileEntry passed in
|
||||
level: number // the level within the tree for the given f:FileEntry, level starts at 0 goes to positive N
|
||||
) => {
|
||||
const index = list.length
|
||||
// mark the parent and level of the FileEntry
|
||||
const content: FileExplorerEntry = {
|
||||
...f,
|
||||
parentPath,
|
||||
level,
|
||||
index
|
||||
}
|
||||
// keep track of the file once within the recursive list that will be built up
|
||||
list.push(content)
|
||||
@ -112,51 +115,23 @@ const flattenProject = (
|
||||
return flattenTreeInOrder
|
||||
}
|
||||
|
||||
const insertFakeRowAtFirstPositionUnderParentAfterFolder = (fileExplorerEntries: FileExplorerEntry[], fakeRow: {path: string, isFile: boolean} | null) : void => {
|
||||
const insertFakeRowAtFirstPositionUnderParentAfterFolder = (
|
||||
fileExplorerEntries: FileExplorerEntry[],
|
||||
fakeRow: {entry: FileExplorerEntry | null, isFile: boolean} | null
|
||||
): void => {
|
||||
if (!fakeRow) {
|
||||
// no op
|
||||
return
|
||||
}
|
||||
|
||||
let insertIndex = -1
|
||||
let foundEntry = null
|
||||
for (let index = 0; index < fileExplorerEntries.length; index++) {
|
||||
const entry = fileExplorerEntries[index]
|
||||
const path = entry.parentPath
|
||||
const isFolder = entry.children !== null
|
||||
const nextEntry = index + 1 < fileExplorerEntries.length ? fileExplorerEntries[index+1] : null
|
||||
console.log(fakeRow.entry)
|
||||
|
||||
// Found first folder and my fake row is a folder
|
||||
if (path === fakeRow.path && isFolder && !fakeRow.isFile) {
|
||||
console.log('exited1')
|
||||
insertIndex = index
|
||||
foundEntry = entry
|
||||
break
|
||||
}
|
||||
|
||||
if (fakeRow.isFile && (nextEntry === null || nextEntry.path !== fakeRow.path)) {
|
||||
insertIndex = index
|
||||
foundEntry = entry
|
||||
console.log('inserting file', insertIndex)
|
||||
break
|
||||
}
|
||||
// if (path === fakeRow.path && isFolder && fakeRow.isFile && nextEntry && nextEntry.path !== fakeRow.path) {
|
||||
// console.log('exited2')
|
||||
// insertIndex = index
|
||||
// foundEntry = entry
|
||||
// break
|
||||
// const requestedEntry: FileExplorerEntry = {
|
||||
// ...fakeRow,
|
||||
// }
|
||||
}
|
||||
// fileExplorerEntries.splice(insertIndex, 0, requestedEntry)
|
||||
|
||||
|
||||
if (insertIndex >= 0 && foundEntry) {
|
||||
const requestedEntry : FileExplorerEntry = {
|
||||
...foundEntry,
|
||||
children: fakeRow.isFile ? null : [],
|
||||
name: 'dog'
|
||||
}
|
||||
console.log(requestedEntry)
|
||||
fileExplorerEntries.splice(insertIndex, 0, requestedEntry);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -164,7 +139,7 @@ const insertFakeRowAtFirstPositionUnderParentAfterFolder = (fileExplorerEntries:
|
||||
* each row is rendered one after another in the same parent DOM element
|
||||
* rows will have aria support to understand the linear div soup layout
|
||||
*
|
||||
* externall control the openedRows and selectedRows since actions need to know
|
||||
|
||||
* what is opened and selected outside of this logic level.
|
||||
*
|
||||
*/
|
||||
@ -173,13 +148,13 @@ export const FileExplorer = ({
|
||||
openedRows,
|
||||
selectedRow,
|
||||
onRowClickCallback,
|
||||
fakeRow
|
||||
fakeRow,
|
||||
}: {
|
||||
parentProject: Project
|
||||
openedRows: { [key: string]: boolean }
|
||||
selectedRow: FileEntry | null
|
||||
onRowClickCallback: (file: FileExplorerEntry) => void
|
||||
fakeRow: {path: string, isFile: boolean} | null
|
||||
fakeRow: {entry: FileExplorerEntry | null, isFile: boolean} | null
|
||||
}) => {
|
||||
// Wrap the FileEntry in a FileExplorerEntry to keep track for more metadata
|
||||
let flattenedData: FileExplorerEntry[] = []
|
||||
@ -187,10 +162,8 @@ export const FileExplorer = ({
|
||||
if (parentProject && parentProject.children) {
|
||||
// moves all folders up and files down, files are sorted within folders
|
||||
const sortedData = sortFilesAndDirectories(parentProject.children)
|
||||
console.log(sortedData)
|
||||
// pre order traversal of the tree
|
||||
flattenedData = flattenProject(sortedData, parentProject.name)
|
||||
|
||||
// insert fake row if one is present
|
||||
// insertFakeRowAtFirstPositionUnderParentAfterFolder(flattenedData, fakeRow)
|
||||
}
|
||||
@ -240,7 +213,7 @@ export const FileExplorer = ({
|
||||
rowClicked: () => {
|
||||
onRowClickCallback(child)
|
||||
},
|
||||
isFake: false
|
||||
isFake: false,
|
||||
}
|
||||
|
||||
return row
|
||||
|
||||
@ -31,7 +31,7 @@ export const ProjectExplorer = ({
|
||||
|
||||
// fake row is used for new files or folders
|
||||
// you should not be able to have multiple fake rows for creation
|
||||
const [fakeRow, setFakeRow] = useState<{path: string, isFile: boolean} | null>(null)
|
||||
const [fakeRow, setFakeRow] = useState<{entry: FileExplorerEntry | null, isFile: boolean} | null>(null)
|
||||
|
||||
const onRowClickCallback = (file: FileExplorerEntry) => {
|
||||
const newOpenedRows = { ...openedRows }
|
||||
@ -53,12 +53,7 @@ export const ProjectExplorer = ({
|
||||
<div className="h-6 flex flex-row gap-1">
|
||||
<FileExplorerHeaderActions
|
||||
onCreateFile={() => {
|
||||
// Use the selected level within the file tree or the root level of the project
|
||||
const folderPath = selectedRow?.parentPath ? constructPath({parentPath: selectedRow?.parentPath, name: selectedRow.name}) : null
|
||||
const parentPath = selectedRow?.parentPath
|
||||
const isFile = selectedRow?.children === null
|
||||
const path = (isFile ? parentPath : folderPath) || project.name
|
||||
setFakeRow({path, isFile})
|
||||
setFakeRow({entry: selectedRow, isFile: true})
|
||||
}}
|
||||
onCreateFolder={() => {
|
||||
console.log('onCreateFolder TODO')
|
||||
|
||||
Reference in New Issue
Block a user