Franknoirot/cmd bar (#328)
* Add XState and naive ActionBar
* Add basic dialog and combobox
* Selectable commands in command bar
* Add a few (broken) file actions
* Home commands
* Add subcommand descriptions, cleanup on navigate
* Refactor: move command creation and types to lib
* Refactor to allow any machine to add commands
* Add auth to command bar, add ability to hide cmds
* Refactor: consolidate theme utilities
* Add settings as machine and command set
* Fix: type tweaks
* Fix: only allow auth to navigate from signin
* Remove zustand-powered settings
* Fix: remove zustand settings from App
* Fix: browser infinite redirect
* Feature: allow commands to be hidden per-platform
* Fix: tsc errors
* Fix: hide default project directory from cmd bar
* Polish: transitions, css tweaks
* Feature: label current value in options settings
* Fix broken debug panel UI
* Refactor: move settings toasts to actions
* Tweak: css rounding
* Fix: set default directory recursion and reload 🐞
* Refactor: move machines to their own directory
* Fix formatting
* @Irev-Dev clean-up catches, import cleanup
This commit is contained in:
@ -1,6 +1,11 @@
|
||||
import { FileEntry, createDir, exists, writeTextFile } from '@tauri-apps/api/fs'
|
||||
import {
|
||||
FileEntry,
|
||||
createDir,
|
||||
exists,
|
||||
readDir,
|
||||
writeTextFile,
|
||||
} from '@tauri-apps/api/fs'
|
||||
import { documentDir } from '@tauri-apps/api/path'
|
||||
import { useStore } from '../useStore'
|
||||
import { isTauri } from './isTauri'
|
||||
import { ProjectWithEntryPointMetadata } from '../Router'
|
||||
import { metadata } from 'tauri-plugin-fs-extra-api'
|
||||
@ -12,35 +17,31 @@ const INDEX_IDENTIFIER = '$n' // $nn.. will pad the number with 0s
|
||||
export const MAX_PADDING = 7
|
||||
|
||||
// Initializes the project directory and returns the path
|
||||
export async function initializeProjectDirectory() {
|
||||
export async function initializeProjectDirectory(directory: string) {
|
||||
if (!isTauri()) {
|
||||
throw new Error(
|
||||
'initializeProjectDirectory() can only be called from a Tauri app'
|
||||
)
|
||||
}
|
||||
const { defaultDir: projectDir, setDefaultDir } = useStore.getState()
|
||||
|
||||
if (projectDir && projectDir.dir.length > 0) {
|
||||
const dirExists = await exists(projectDir.dir)
|
||||
if (directory) {
|
||||
const dirExists = await exists(directory)
|
||||
if (!dirExists) {
|
||||
await createDir(projectDir.dir, { recursive: true })
|
||||
await createDir(directory, { recursive: true })
|
||||
}
|
||||
return projectDir
|
||||
return directory
|
||||
}
|
||||
|
||||
const appData = await documentDir()
|
||||
const docDirectory = await documentDir()
|
||||
|
||||
const INITIAL_DEFAULT_DIR = {
|
||||
dir: appData + PROJECT_FOLDER,
|
||||
}
|
||||
const INITIAL_DEFAULT_DIR = docDirectory + PROJECT_FOLDER
|
||||
|
||||
const defaultDirExists = await exists(INITIAL_DEFAULT_DIR.dir)
|
||||
const defaultDirExists = await exists(INITIAL_DEFAULT_DIR)
|
||||
|
||||
if (!defaultDirExists) {
|
||||
await createDir(INITIAL_DEFAULT_DIR.dir, { recursive: true })
|
||||
await createDir(INITIAL_DEFAULT_DIR, { recursive: true })
|
||||
}
|
||||
|
||||
setDefaultDir(INITIAL_DEFAULT_DIR)
|
||||
return INITIAL_DEFAULT_DIR
|
||||
}
|
||||
|
||||
@ -51,6 +52,25 @@ export function isProjectDirectory(fileOrDir: Partial<FileEntry>) {
|
||||
)
|
||||
}
|
||||
|
||||
// Read the contents of a directory
|
||||
// and return the valid projects
|
||||
export async function getProjectsInDir(projectDir: string) {
|
||||
const readProjects = (
|
||||
await readDir(projectDir, {
|
||||
recursive: true,
|
||||
})
|
||||
).filter(isProjectDirectory)
|
||||
|
||||
const projectsWithMetadata = await Promise.all(
|
||||
readProjects.map(async (p) => ({
|
||||
entrypoint_metadata: await metadata(p.path + '/' + PROJECT_ENTRYPOINT),
|
||||
...p,
|
||||
}))
|
||||
)
|
||||
|
||||
return projectsWithMetadata
|
||||
}
|
||||
|
||||
// Creates a new file in the default directory with the default project name
|
||||
// Returns the path to the new file
|
||||
export async function createNewProject(
|
||||
|
Reference in New Issue
Block a user