Franknoirot/multi file (#844)

* Fix unrelated bug, settings button in the home sidebar
doesn't go to the home settings after my previous fixes to routes

* Turn on "Replay Onboarding" button in home settings

* Add icons

* Add Tooltip component

* Rough-in of sidebar styling and add initial File Tree

* Polish basic styling

* Show nested files and directories

* Add tests

* use camelCase for entrypointMetadata

* Add ability to switch files via links

* Revert "Improve Prop Typings for Modals. Remove instances of `any`. (… (#813)

Revert "Improve Prop Typings for Modals. Remove instances of `any`. (#792)"

This reverts commit 629f326f4c.

* ffmpeg instructions (#814)

* Formatting

* Remove folder names from display in app header

* Highlight current file, open folders it's within

* Navigate on double click, delete on Cmd + Esc
+ highlight focused folders

* Migrate to an XState machine, add create new file

* Add ability to create folders (with naive names)
+ remove command bar stuff for now

* Use route loader data to instantiate the kcl code

* Clean up some unused things

* Add ability to rename files

* Add ability to rename folders

* Add keyboard shortcuts for creating files/folders

* Tooltip style tweaks

* Polish + re-execute when switching files with a connection

* Reset code before navigating via file tree

* Don't invoke `readProject` if you're in a browser

* Show files and folders for projects on home page

* Don't highlight folders further down the file tree

* @jgomez720 and @jessfraz feedback:
+ indentation markers
+ proper file icon
+ bump down font size
+ touch up colors

* Tune down spacing, allow scroll overflow

* Fix formatting

* Update src/lib/tauriFS.ts

* Add a confirmation dialog when deleting

Signed-off-by: Frank Noirot <frank@kittycad.io>

---------

Signed-off-by: Frank Noirot <frank@kittycad.io>
Co-authored-by: Kurt Hutten <k.hutten@protonmail.ch>
This commit is contained in:
Frank Noirot
2023-10-16 13:28:41 -04:00
committed by GitHub
parent 8eedee328b
commit 3b15bc12f7
26 changed files with 1600 additions and 100 deletions

View File

@ -1,10 +1,14 @@
import { FileEntry } from '@tauri-apps/api/fs'
import {
MAX_PADDING,
deepFileFilter,
getNextProjectIndex,
getPartsCount,
interpolateProjectNameWithIndex,
isRelevantFileOrDir,
} from './tauriFS'
describe('Test file utility functions', () => {
describe('Test project name utility functions', () => {
it('interpolates a project name without an index', () => {
expect(interpolateProjectNameWithIndex('test', 1)).toBe('test')
})
@ -46,3 +50,101 @@ describe('Test file utility functions', () => {
expect(getNextProjectIndex('new-project-$n', testFiles)).toBe(8)
})
})
describe('Test file tree utility functions', () => {
const baseFiles: FileEntry[] = [
{
name: 'show-me.kcl',
path: '/projects/show-me.kcl',
},
{
name: 'hide-me.jpg',
path: '/projects/hide-me.jpg',
},
{
name: '.gitignore',
path: '/projects/.gitignore',
},
]
const filteredBaseFiles: FileEntry[] = [
{
name: 'show-me.kcl',
path: '/projects/show-me.kcl',
},
]
it('Only includes files relevant to the project in a flat directory', () => {
expect(deepFileFilter(baseFiles, isRelevantFileOrDir)).toEqual(
filteredBaseFiles
)
})
const nestedFiles: FileEntry[] = [
...baseFiles,
{
name: 'show-me',
path: '/projects/show-me',
children: [
{
name: 'show-me-nested',
path: '/projects/show-me/show-me-nested',
children: baseFiles,
},
{
name: 'hide-me',
path: '/projects/show-me/hide-me',
children: baseFiles.filter((file) => file.name !== 'show-me.kcl'),
},
],
},
{
name: 'hide-me',
path: '/projects/hide-me',
children: baseFiles.filter((file) => file.name !== 'show-me.kcl'),
},
]
const filteredNestedFiles: FileEntry[] = [
...filteredBaseFiles,
{
name: 'show-me',
path: '/projects/show-me',
children: [
{
name: 'show-me-nested',
path: '/projects/show-me/show-me-nested',
children: filteredBaseFiles,
},
],
},
]
it('Only includes directories that include files relevant to the project in a nested directory', () => {
expect(deepFileFilter(nestedFiles, isRelevantFileOrDir)).toEqual(
filteredNestedFiles
)
})
const withHiddenDir: FileEntry[] = [
...baseFiles,
{
name: '.hide-me',
path: '/projects/.hide-me',
children: baseFiles,
},
]
it(`Hides folders that begin with a ".", even if they contain relevant files`, () => {
expect(deepFileFilter(withHiddenDir, isRelevantFileOrDir)).toEqual(
filteredBaseFiles
)
})
it(`Properly counts the number of relevant files and directories in a project`, () => {
expect(getPartsCount(nestedFiles)).toEqual({
kclFileCount: 2,
kclDirCount: 2,
})
})
})