1
0
mirror of https://github.com/garraflavatra/rolens.git synced 2025-07-20 06:28:04 +00:00

Application settings

This commit is contained in:
2023-01-20 15:35:16 +01:00
parent 6703950734
commit 6c77941ae9
10 changed files with 234 additions and 20 deletions

View File

@ -1,21 +1,20 @@
<script>
import { onMount } from 'svelte';
import { OpenConnection } from '../wailsjs/go/app/App';
import { Environment, WindowSetTitle } from '../wailsjs/runtime';
import { WindowSetTitle } from '../wailsjs/runtime';
import BlankState from './components/blankstate.svelte';
import ContextMenu from './components/contextmenu.svelte';
import AddressBar from './organisms/addressbar/index.svelte';
import Connection from './organisms/connection/index.svelte';
import { busy, contextMenu, connections } from './stores';
import Settings from './organisms/settings/index.svelte';
import { busy, contextMenu, connections, environment, applicationSettings } from './stores';
import { controlKeyDown } from './utils';
let hosts = {};
let environment;
let activeHostKey = '';
let activeDbKey = '';
let activeCollKey = '';
let addressBarModalOpen = true;
let settingsModalOpen = false;
$: host = hosts[activeHostKey];
$: connection = $connections[activeHostKey];
@ -39,17 +38,20 @@
busy.end();
}
onMount(() => {
Environment().then(e => environment = e);
});
function keydown(e) {
if (controlKeyDown(e) && e.key === ',') {
settingsModalOpen = true;
e.preventDefault();
}
}
</script>
<svelte:window on:contextmenu|preventDefault />
<svelte:window on:contextmenu|preventDefault on:keydown={keydown} />
<div id="root" class="platform-{environment?.platform}">
<div id="root" class="platform-{$environment?.platform}">
<div class="titlebar"></div>
{#if environment}
{#if $environment && $applicationSettings}
<main class:empty={!host || !connection}>
<AddressBar bind:hosts bind:activeHostKey on:select={e => openConnection(e.detail)} bind:modalOpen={addressBarModalOpen} />
@ -63,6 +65,7 @@
{#key $contextMenu}
<ContextMenu {...$contextMenu} on:close={contextMenu.hide} />
{/key}
<Settings bind:show={settingsModalOpen} />
{/if}
</div>

View File

@ -8,15 +8,16 @@
import FindViewConfigModal from './find-viewconfig.svelte';
import { onMount } from 'svelte';
import Grid from '../../../components/grid.svelte';
import { applicationSettings } from '../../../stores';
export let collection;
const defaults = {
query: '{}',
sort: '{ "_id": 1 }',
sort: $applicationSettings.defaultSort || '{ "_id": 1 }',
fields: '{}',
skip: 0,
limit: 15,
limit: $applicationSettings.defaultLimit || 15,
};
let form = { ...defaults };
@ -72,7 +73,9 @@
async function refresh() {
await getViewConfig();
await submitQuery();
if ($applicationSettings.autosubmitQuery) {
await submitQuery();
}
}
function prev() {

View File

@ -1,7 +1,6 @@
<script>
import { onMount, tick } from 'svelte';
import { Hosts } from '../../../wailsjs/go/app/App';
import { Environment } from '../../../wailsjs/runtime';
import { input } from '../../actions';
import Modal from '../../components/modal.svelte';
import DatabaseList from './dblist.svelte';
@ -13,7 +12,6 @@
export let activeDbKey = '';
export let activeCollKey = '';
let environment;
let addressBarModalOpen = true;
let dbList;
@ -43,7 +41,6 @@
}
onMount(() => {
Environment().then(e => environment = e);
Hosts().then(h => hosts = h);
});
</script>

View File

@ -0,0 +1,37 @@
<script>
import { input } from '../../actions';
import Modal from '../../components/modal.svelte';
import { applicationSettings as settings } from '../../stores';
export let show = false;
</script>
<Modal title="Prefrences" bind:show>
<div class="prefs">
<label for="defaultLimit">Initial number of items to retrieve using one query (limit):</label>
<label class="field">
<input type="number" bind:value={$settings.defaultLimit} id="defaultLimit" use:input={{ autofocus: true }} />
<span class="label">items</span>
</label>
<label for="defaultSort">Default sort query</label>
<label class="field">
<input type="text" class="code" bind:value={$settings.defaultSort} id="defaultSort" use:input={{ json: true }} />
</label>
<label for="autosubmitQuery">Autosubmit query</label>
<span>
<input type="checkbox" id="autosubmitQuery" bind:checked={$settings.autosubmitQuery} />
<label for="autosubmitQuery">Query items automatically when you open a collection</label>
</span>
</div>
</Modal>
<style>
.prefs {
display: grid;
grid-template-columns: auto auto;
gap: 0.5rem;
align-items: center;
}
</style>

View File

@ -1,4 +1,6 @@
import { writable } from 'svelte/store';
import { Environment } from '../wailsjs/runtime/runtime';
import { Settings, UpdateSettings } from '../wailsjs/go/app/App';
export const busy = (() => {
const { update, subscribe } = writable(0);
@ -21,6 +23,7 @@ export const busy = (() => {
export const contextMenu = (() => {
const { set, subscribe } = writable();
return {
show: (evt, menu) => set(menu ? {
position: [ evt.clientX, evt.clientY ],
@ -32,3 +35,31 @@ export const contextMenu = (() => {
})();
export const connections = writable({});
export const applicationSettings = (() => {
const { set, subscribe } = writable({});
const reload = async() => {
const newSettings = await Settings();
set(newSettings);
return newSettings;
};
reload();
subscribe(newSettings => {
UpdateSettings(JSON.stringify(newSettings || {}));
});
return { reload, set, subscribe };
})();
export const environment = (() => {
const { set, subscribe } = writable({});
const reload = async() => {
const newEnv = await Environment();
set(newEnv);
return newEnv;
};
reload();
return { reload, subscribe };
})();

View File

@ -1,3 +1,6 @@
import { get } from 'svelte/store';
import { environment } from './stores';
export function resolveKeypath(object, path) {
// Get a value from an object with a JSON path, from Webdesq core
@ -19,3 +22,14 @@ export function resolveKeypath(object, path) {
return result;
}
export function controlKeyDown(event) {
const env = get(environment);
// @ts-ignore
if (env?.platform === 'darwin') {
return event?.metaKey;
}
else {
return event?.ctrlKey;
}
}