diff --git a/packages/web/src/commands/stdCommands.ts b/packages/web/src/commands/stdCommands.ts index f1a903852..4a090084f 100644 --- a/packages/web/src/commands/stdCommands.ts +++ b/packages/web/src/commands/stdCommands.ts @@ -4,12 +4,14 @@ import { derived, get } from 'svelte/store'; import { ThemeDefinition } from 'dbgate-types'; import ConnectionModal from '../modals/ConnectionModal.svelte'; import AboutModal from '../modals/AboutModal.svelte'; +import ImportExportModal from '../modals/ImportExportModal.svelte'; import { showModal } from '../modals/modalTools'; import newQuery from '../query/newQuery'; import saveTabFile from '../utility/saveTabFile'; import openNewTab from '../utility/openNewTab'; import getElectron from '../utility/getElectron'; import { openElectronFile } from '../utility/openElectronFile'; +import { getDefaultFileFormat } from '../plugins/fileformats'; const electron = getElectron(); @@ -150,6 +152,19 @@ if (electron) { }); } +registerCommand({ + id: 'file.import', + category: 'File', + name: 'Import data', + toolbar: true, + icon: 'icon import', + onClick: () => + showModal(ImportExportModal, { + importToArchive: true, + initialValues: { sourceStorageType: getDefaultFileFormat(get(extensions)).storageType }, + }), +}); + export function registerFileCommands({ idPrefix, category, diff --git a/packages/web/src/elements/FormStyledButtonLikeLabel.svelte b/packages/web/src/elements/FormStyledButtonLikeLabel.svelte new file mode 100644 index 000000000..4adec94fe --- /dev/null +++ b/packages/web/src/elements/FormStyledButtonLikeLabel.svelte @@ -0,0 +1,30 @@ + + + + + diff --git a/packages/web/src/forms/FormArchiveFilesSelect.svelte b/packages/web/src/forms/FormArchiveFilesSelect.svelte new file mode 100644 index 000000000..caa9f77eb --- /dev/null +++ b/packages/web/src/forms/FormArchiveFilesSelect.svelte @@ -0,0 +1,39 @@ + + +
+ +
+ setFieldValue(name, _.uniq([...($values[name] || []), ...($files && $files.map(x => x.name))]))} + /> + setFieldValue(name, [])} /> +
+
+ + diff --git a/packages/web/src/impexp/ElectronFilesInput.svelte b/packages/web/src/impexp/ElectronFilesInput.svelte new file mode 100644 index 000000000..03465b304 --- /dev/null +++ b/packages/web/src/impexp/ElectronFilesInput.svelte @@ -0,0 +1,53 @@ + + + + + +{#if isLoading} + +{/if} diff --git a/packages/web/src/impexp/FilesInput.svelte b/packages/web/src/impexp/FilesInput.svelte new file mode 100644 index 000000000..7c0e89f24 --- /dev/null +++ b/packages/web/src/impexp/FilesInput.svelte @@ -0,0 +1,73 @@ + + + + +
+
+ {#if electron} + + {:else} + + {/if} + +
+ +
Drag & drop imported files here
+
+ + diff --git a/packages/web/src/impexp/ImportExportConfigurator.svelte b/packages/web/src/impexp/ImportExportConfigurator.svelte index e3309538f..71750248b 100644 --- a/packages/web/src/impexp/ImportExportConfigurator.svelte +++ b/packages/web/src/impexp/ImportExportConfigurator.svelte @@ -8,7 +8,14 @@ }; } - async function addFilesToSourceList(extensions, files, values, valuesStore, preferedStorageType, setPreviewSource) { + export async function addFilesToSourceList( + extensions, + files, + values, + valuesStore, + preferedStorageType = undefined, + setPreviewSource = undefined + ) { const newSources = []; const newValues = {}; const storage = preferedStorageType || values.sourceStorageType; @@ -118,6 +125,7 @@ archiveFolderField="sourceArchiveFolder" schemaNameField="sourceSchemaName" tablesField="sourceList" + setPreviewSource={previewSource.set} />
diff --git a/packages/web/src/impexp/SourceTargetConfig.svelte b/packages/web/src/impexp/SourceTargetConfig.svelte index 4188a212d..e0fc62848 100644 --- a/packages/web/src/impexp/SourceTargetConfig.svelte +++ b/packages/web/src/impexp/SourceTargetConfig.svelte @@ -1,11 +1,19 @@ + +
+ Upload file + +