diff --git a/packages/api/src/controllers/plugins.js b/packages/api/src/controllers/plugins.js index bc438ce42..7a2b941bc 100644 --- a/packages/api/src/controllers/plugins.js +++ b/packages/api/src/controllers/plugins.js @@ -149,7 +149,7 @@ module.exports = { return content.commands[command](args); }, - authTypes_meta: 'post', + authTypes_meta: 'get', async authTypes({ engine }) { const packageName = extractPackageName(engine); const content = requirePlugin(packageName); diff --git a/packages/types/engines.d.ts b/packages/types/engines.d.ts index 9544c1cd1..a8e3cc753 100644 --- a/packages/types/engines.d.ts +++ b/packages/types/engines.d.ts @@ -27,6 +27,7 @@ export interface EngineAuthType { export interface EngineDriver { engine: string; title: string; + defaultPort?: number; connect({ server, port, user, password, database }): any; query(pool: any, sql: string): Promise; stream(pool: any, sql: string, options: StreamOptions); diff --git a/packages/web/public/dimensions.css b/packages/web/public/dimensions.css index 94997eb40..4d0c9248f 100644 --- a/packages/web/public/dimensions.css +++ b/packages/web/public/dimensions.css @@ -3,6 +3,7 @@ --dim-statusbar-height: 20px; --dim-left-panel-width: 300px; --dim-tabs-panel-height: 53px; + --dim-tabs-height: 33px; --dim-splitter-thickness: 3px; --dim-visible-left-panel: 1; /* set from JS */ @@ -16,4 +17,6 @@ --dim-toolbar-height: 30px; --dim-header-top: calc(var(--dim-toolbar-height) * var(--dim-visible-toolbar)); --dim-content-top: calc(var(--dim-header-top) + var(--dim-tabs-panel-height)); + + --dim-large-form-margin: 20px; } diff --git a/packages/web/public/global.css b/packages/web/public/global.css index 20dd298e5..87b922cdc 100644 --- a/packages/web/public/global.css +++ b/packages/web/public/global.css @@ -56,66 +56,26 @@ body { max-width: 25%; } -/* html, body { - position: relative; - width: 100%; - height: 100%; +.largeFormMarker input[type='text'] { + width: 100%; + padding: 10px 10px; + font-size: 14px; + box-sizing: border-box; + border-radius: 4px; } -body { - color: #333; - margin: 0; - padding: 8px; - box-sizing: border-box; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; +.largeFormMarker input[type='password'] { + width: 100%; + padding: 10px 10px; + font-size: 14px; + box-sizing: border-box; + border-radius: 4px; } -a { - color: rgb(0,100,200); - text-decoration: none; +.largeFormMarker select { + width: 100%; + padding: 10px 10px; + font-size: 14px; + box-sizing: border-box; + border-radius: 4px; } - -a:hover { - text-decoration: underline; -} - -a:visited { - color: rgb(0,80,160); -} - -label { - display: block; -} - -input, button, select, textarea { - font-family: inherit; - font-size: inherit; - -webkit-padding: 0.4em 0; - padding: 0.4em; - margin: 0 0 0.5em 0; - box-sizing: border-box; - border: 1px solid #ccc; - border-radius: 2px; -} - -input:disabled { - color: #ccc; -} - -button { - color: #333; - background-color: #f4f4f4; - outline: none; -} - -button:disabled { - color: #999; -} - -button:not(:disabled):active { - background-color: #ddd; -} - -button:focus { - border-color: #666; -} */ diff --git a/packages/web/src/forms/CheckboxField.svelte b/packages/web/src/forms/CheckboxField.svelte new file mode 100644 index 000000000..8331051ba --- /dev/null +++ b/packages/web/src/forms/CheckboxField.svelte @@ -0,0 +1 @@ + diff --git a/packages/web/src/forms/FormButton.svelte b/packages/web/src/forms/FormButton.svelte index c4f09b3c4..fe4ec3f60 100644 --- a/packages/web/src/forms/FormButton.svelte +++ b/packages/web/src/forms/FormButton.svelte @@ -1,5 +1,15 @@ - + diff --git a/packages/web/src/forms/FormCheckboxField.svelte b/packages/web/src/forms/FormCheckboxField.svelte new file mode 100644 index 000000000..63b0d1d3c --- /dev/null +++ b/packages/web/src/forms/FormCheckboxField.svelte @@ -0,0 +1,14 @@ + + + + + diff --git a/packages/web/src/forms/FormProvider.svelte b/packages/web/src/forms/FormProvider.svelte index dd21824d0..ba6ad8ad4 100644 --- a/packages/web/src/forms/FormProvider.svelte +++ b/packages/web/src/forms/FormProvider.svelte @@ -2,11 +2,12 @@ import { writable } from 'svelte/store'; import FormProviderCore from './FormProviderCore.svelte'; - export let initivalValues = {}; + export let initialValues = {}; + export let template; - const values = writable(initivalValues); + const values = writable(initialValues); - + diff --git a/packages/web/src/forms/FormProviderCore.svelte b/packages/web/src/forms/FormProviderCore.svelte index d42e43b38..b17cbc76f 100644 --- a/packages/web/src/forms/FormProviderCore.svelte +++ b/packages/web/src/forms/FormProviderCore.svelte @@ -1,5 +1,6 @@ + + + + diff --git a/packages/web/src/forms/FormSubmit.svelte b/packages/web/src/forms/FormSubmit.svelte index 0809e6a56..8265dce48 100644 --- a/packages/web/src/forms/FormSubmit.svelte +++ b/packages/web/src/forms/FormSubmit.svelte @@ -6,10 +6,15 @@ const dispatch = createEventDispatcher(); const { submitActionRef } = getFormContext(); - + const { values } = getFormContext(); + + function handleClick() { + dispatch('click', $values); + } + submitActionRef.current = () => { - dispatch('click'); + handleClick(); }; - + diff --git a/packages/web/src/forms/FormTextField.svelte b/packages/web/src/forms/FormTextField.svelte new file mode 100644 index 000000000..4eac349c7 --- /dev/null +++ b/packages/web/src/forms/FormTextField.svelte @@ -0,0 +1,14 @@ + + + + + diff --git a/packages/web/src/forms/FromCheckboxFieldRaw.svelte b/packages/web/src/forms/FromCheckboxFieldRaw.svelte new file mode 100644 index 000000000..eb5328772 --- /dev/null +++ b/packages/web/src/forms/FromCheckboxFieldRaw.svelte @@ -0,0 +1,10 @@ + + + setFieldValue(name, e.target['checked'])} /> diff --git a/packages/web/src/forms/FromSelectFieldRaw.svelte b/packages/web/src/forms/FromSelectFieldRaw.svelte new file mode 100644 index 000000000..1600fc248 --- /dev/null +++ b/packages/web/src/forms/FromSelectFieldRaw.svelte @@ -0,0 +1,10 @@ + + + setFieldValue(name, e.target['value'])} /> diff --git a/packages/web/src/forms/FromTextFieldRaw.svelte b/packages/web/src/forms/FromTextFieldRaw.svelte new file mode 100644 index 000000000..b5a171c6c --- /dev/null +++ b/packages/web/src/forms/FromTextFieldRaw.svelte @@ -0,0 +1,10 @@ + + + setFieldValue(name, e.target['value'])} /> diff --git a/packages/web/src/forms/SelectField.svelte b/packages/web/src/forms/SelectField.svelte new file mode 100644 index 000000000..f3b92f7a3 --- /dev/null +++ b/packages/web/src/forms/SelectField.svelte @@ -0,0 +1,14 @@ + + + diff --git a/packages/web/src/forms/TextField.svelte b/packages/web/src/forms/TextField.svelte new file mode 100644 index 000000000..f69d17f77 --- /dev/null +++ b/packages/web/src/forms/TextField.svelte @@ -0,0 +1,5 @@ + + + diff --git a/packages/web/src/modals/ConnectionModal.svelte b/packages/web/src/modals/ConnectionModal.svelte index b60be9a06..8be51e852 100644 --- a/packages/web/src/modals/ConnectionModal.svelte +++ b/packages/web/src/modals/ConnectionModal.svelte @@ -3,18 +3,42 @@ import FormButton from '../forms/FormButton.svelte'; import FormProvider from '../forms/FormProvider.svelte'; import FormSubmit from '../forms/FormSubmit.svelte'; + import TabControl from '../widgets/TabControl.svelte'; + import ConnectionModalDriverFields from './ConnectionModalDriverFields.svelte'; + import FormFieldTemplateLarge from './FormFieldTemplateLarge.svelte'; import ModalBase from './ModalBase.svelte'; + + export let connection; - - + +
Add connection
- xxx + + +
SSH
+
+
- console.log('SAVE')} /> + console.log('SAVE', v.detail)} />
diff --git a/packages/web/src/modals/ConnectionModalDriverFields.svelte b/packages/web/src/modals/ConnectionModalDriverFields.svelte new file mode 100644 index 000000000..d681d83e6 --- /dev/null +++ b/packages/web/src/modals/ConnectionModalDriverFields.svelte @@ -0,0 +1,55 @@ + + + ({ + value: driver.engine, + label: driver.title, + })), + ]} +/> + +
+
+ +
+
+ +
+
+ + diff --git a/packages/web/src/modals/FormFieldTemplateLarge.svelte b/packages/web/src/modals/FormFieldTemplateLarge.svelte new file mode 100644 index 000000000..4a5abb9b4 --- /dev/null +++ b/packages/web/src/modals/FormFieldTemplateLarge.svelte @@ -0,0 +1,32 @@ + + +
+ {#if type == 'checkbox'} + + {label} + {:else} +
+ {label} +
+ + {/if} +
+ + diff --git a/packages/web/src/modals/ModalBase.svelte b/packages/web/src/modals/ModalBase.svelte index 6b151705d..259b8d414 100644 --- a/packages/web/src/modals/ModalBase.svelte +++ b/packages/web/src/modals/ModalBase.svelte @@ -4,8 +4,8 @@ import clickOutside from '../utility/clickOutside'; import keycodes from '../utility/keycodes'; - export let fullScreen; - export let noPadding; + export let fullScreen = false; + export let noPadding = false; export let modalId; function handleCloseModal() { diff --git a/packages/web/src/utility/metadataLoaders.ts b/packages/web/src/utility/metadataLoaders.ts index b187f2091..4ffc6f059 100644 --- a/packages/web/src/utility/metadataLoaders.ts +++ b/packages/web/src/utility/metadataLoaders.ts @@ -119,6 +119,11 @@ const allFilesLoader = () => ({ params: {}, reloadTrigger: `all-files-changed`, }); +const authTypesLoader = ({ engine }) => ({ + url: 'plugins/auth-types', + params: { engine }, + reloadTrigger: `installed-plugins-changed`, +}); async function getCore(loader, args) { const { url, params, reloadTrigger, transform } = loader(args); @@ -377,3 +382,10 @@ export function getFavorites(args) { export function useFavorites(args) { return useCore(favoritesLoader, args); } + +export function getAuthTypes(args) { + return getCore(authTypesLoader, args); +} +export function useAuthTypes(args) { + return useCore(authTypesLoader, args); +} diff --git a/packages/web/src/widgets/TabControl.svelte b/packages/web/src/widgets/TabControl.svelte new file mode 100644 index 000000000..88d917ac2 --- /dev/null +++ b/packages/web/src/widgets/TabControl.svelte @@ -0,0 +1,93 @@ + + +
+
+ {#each tabs as tab, index} +
(value = index)}> + + {tab.label} + +
+ {/each} +
+ +
+ {#each tabs as tab, index} +
+ + {#if tab.slot == 0}{/if} + {#if tab.slot == 1}{/if} + {#if tab.slot == 2}{/if} + {#if tab.slot == 3}{/if} + {#if tab.slot == 4}{/if} + {#if tab.slot == 5}{/if} + {#if tab.slot == 6}{/if} + {#if tab.slot == 7}{/if} +
+ {/each} +
+
+ +