mirror of
https://github.com/misode/misode.github.io.git
synced 2026-04-24 07:37:10 +00:00
Allow creating new files (#437)
* allow creating new files * icon and translation key fix * Change how new file works * Fix selected file in tree view * Reword to "New empty file" * Reword to "Save as" --------- Co-authored-by: Flemmli97 <Flemmli97@users.noreply.github.com> Co-authored-by: Misode <misoloo64@gmail.com>
This commit is contained in:
@@ -124,8 +124,9 @@ export function ProjectPanel({ onRename, onCreate, onDeleteProject }: Props) {
|
||||
evt.preventDefault()
|
||||
setFocus()
|
||||
}
|
||||
|
||||
return <div class={`entry ${entry === selected ? 'active' : ''} ${focused ? 'focused' : ''}`} onClick={() => selectFile(entry)} onContextMenu={onContextMenu} >
|
||||
const file = disectEntry(entry)
|
||||
|
||||
return <div class={`entry ${file && getFilePath(file) === selected ? 'active' : ''} ${focused ? 'focused' : ''}`} onClick={() => selectFile(entry)} onContextMenu={onContextMenu} >
|
||||
{Octicon.file}
|
||||
<span>{entry.split('/').at(-1)}</span>
|
||||
{focused && <div class="entry-menu">
|
||||
@@ -135,7 +136,7 @@ export function ProjectPanel({ onRename, onCreate, onDeleteProject }: Props) {
|
||||
</div>)}
|
||||
</div>}
|
||||
</div>
|
||||
}, [actions])
|
||||
}, [actions, disectEntry])
|
||||
|
||||
return <>
|
||||
<div class="project-controls">
|
||||
|
||||
@@ -22,7 +22,7 @@ interface Props {
|
||||
export function SchemaGenerator({ gen, allowedVersions }: Props) {
|
||||
const { locale } = useLocale()
|
||||
const { version, changeVersion, changeTargetVersion } = useVersion()
|
||||
const { projects, project, file, updateProject, updateFile } = useProject()
|
||||
const { projects, project, file, updateProject, updateFile, closeFile } = useProject()
|
||||
const [error, setError] = useState<Error | string | null>(null)
|
||||
const [errorBoundary, errorRetry] = useErrorBoundary()
|
||||
if (errorBoundary) {
|
||||
@@ -298,6 +298,20 @@ export function SchemaGenerator({ gen, allowedVersions }: Props) {
|
||||
const [projectDeleting, setprojectDeleting] = useState(false)
|
||||
const [fileSaving, setFileSaving] = useState<string | undefined>(undefined)
|
||||
const [fileRenaming, setFileRenaming] = useState<{ type: string, id: string } | undefined>(undefined)
|
||||
const [newFileQueued, setNewFileQueued] = useState(false)
|
||||
|
||||
const onNewFile = useCallback(() => {
|
||||
closeFile()
|
||||
// Need to queue reset because otherwise the useModel hook will update the old file
|
||||
setNewFileQueued(true)
|
||||
}, [closeFile])
|
||||
|
||||
useEffect(() => {
|
||||
if (file === undefined && newFileQueued) {
|
||||
model?.reset(DataModel.wrapLists(model.schema.default()), true)
|
||||
setNewFileQueued(false)
|
||||
}
|
||||
}, [model, newFileQueued, file])
|
||||
|
||||
return <>
|
||||
<main class={`generator${previewShown ? ' has-preview' : ''}${projectShown ? ' has-project' : ''}`}>
|
||||
@@ -316,6 +330,7 @@ export function SchemaGenerator({ gen, allowedVersions }: Props) {
|
||||
{backup !== undefined && <Btn icon="history" label={locale('restore_backup')} onClick={loadBackup} />}
|
||||
<Btn icon="arrow_left" label={locale('undo')} onClick={undo} />
|
||||
<Btn icon="arrow_right" label={locale('redo')} onClick={redo} />
|
||||
<Btn icon="plus_circle" label={locale('project.new_file')} onClick={onNewFile} />
|
||||
<Btn icon="file" label={locale('project.save')} onClick={() => setFileSaving('menu')} />
|
||||
</BtnMenu>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user