webui/src/routes/Settings.svelte

332 lines
7.9 KiB
Svelte
Raw Normal View History

2023-11-17 00:05:35 +00:00
<script lang="ts">
2023-11-19 19:27:22 +00:00
import { PUBLIC_BASE_URL } from '$env/static/public';
2023-11-21 20:22:29 +00:00
import { createEventDispatcher } from 'svelte';
2023-11-17 00:05:35 +00:00
import { _ } from 'svelte-i18n';
import {
2023-11-19 19:27:22 +00:00
Button,
2023-11-17 00:05:35 +00:00
Card,
CardBody,
2023-11-19 19:27:22 +00:00
CardHeader,
CardTitle,
Col,
2023-11-17 00:05:35 +00:00
Form,
FormText,
Input,
InputGroup,
InputGroupText,
2023-11-19 19:27:22 +00:00
Label,
Row
2023-11-17 00:05:35 +00:00
} from 'sveltestrap';
export let settings;
2023-11-17 02:15:23 +00:00
2023-11-21 15:05:00 +00:00
const wifiTxPowerMap = new Map<string, number>([
['Default', 80],
['19.5dBm', 78], // 19.5dBm
['19dBm', 76], // 19dBm
['18.5dBm', 74], // 18.5dBm
['17dBm', 68], // 17dBm
['15dBm', 60], // 15dBm
['13dBm', 52], // 13dBm
['11dBm', 44], // 11dBm
['8.5dBm', 34], // 8.5dBm
['7dBm', 28], // 7dBm
['5dBm', 20] // 5dBm
]);
2023-11-21 20:22:29 +00:00
const dispatch = createEventDispatcher();
2023-11-24 23:42:37 +00:00
const handleReset = (e: Event) => {
e.preventDefault();
dispatch('formReset');
};
2023-11-19 19:27:22 +00:00
const onSave = async (e: Event) => {
e.preventDefault();
let formSettings = $settings;
2023-11-17 02:15:23 +00:00
2023-11-19 19:27:22 +00:00
delete formSettings['gitRev'];
delete formSettings['ip'];
delete formSettings['lastBuildTime'];
2023-11-17 02:15:23 +00:00
2023-11-19 19:27:22 +00:00
await fetch(`${PUBLIC_BASE_URL}/api/json/settings`, {
2023-11-17 02:15:23 +00:00
method: 'PATCH',
2023-11-19 19:27:22 +00:00
headers: {
'Content-Type': 'application/json'
},
2023-11-17 02:15:23 +00:00
body: JSON.stringify(formSettings)
2023-11-21 20:22:29 +00:00
})
.then(() => {
dispatch('showToast', {
color: 'success',
text: $_('section.settings.settingsSaved')
});
})
.catch(() => {
dispatch('showToast', {
color: 'danger',
text: $_('section.settings.errorSavingSettings')
});
});
2023-11-19 19:27:22 +00:00
};
2023-11-17 00:05:35 +00:00
</script>
<Col>
<Card>
<CardHeader>
2023-11-17 02:15:23 +00:00
<CardTitle>{$_('section.settings.title', { default: 'Settings' })}</CardTitle>
2023-11-17 00:05:35 +00:00
</CardHeader>
<CardBody>
2023-11-17 02:15:23 +00:00
<Form on:submit={onSave}>
2023-11-17 00:05:35 +00:00
<Row>
2023-11-19 19:27:22 +00:00
<Label md={6} for="fgColor" size="sm"
>{$_('section.settings.textColor', { default: 'Text color' })}</Label
>
2023-11-17 00:05:35 +00:00
<Col md="6">
<Input
type="select"
2023-11-17 02:15:23 +00:00
bind:value={$settings.fgColor}
2023-11-17 00:05:35 +00:00
name="select"
id="fgColor"
bsSize="sm"
class="form-select-sm"
>
2023-11-19 19:27:22 +00:00
<option value="0">{$_('colors.black')}</option>
<option value="65535">{$_('colors.white')}</option>
2023-11-17 00:05:35 +00:00
</Input>
</Col>
</Row>
<Row>
2023-11-19 19:27:22 +00:00
<Label md={6} for="bgColor" size="sm">{$_('section.settings.backgroundColor')}</Label>
2023-11-17 00:05:35 +00:00
<Col md="6">
<Input
type="select"
bind:value={$settings.bgColor}
name="select"
id="bgColor"
bsSize="sm"
class="form-select-sm"
>
2023-11-19 19:27:22 +00:00
<option value="0">{$_('colors.black')}</option>
<option value="65535">{$_('colors.white')}</option>
2023-11-17 00:05:35 +00:00
</Input>
</Col>
</Row>
<Row>
2023-11-19 19:27:22 +00:00
<Label md={6} for="timePerScreen" size="sm">{$_('section.settings.timePerScreen')}</Label>
2023-11-17 00:05:35 +00:00
<Col md="6">
<InputGroup size="sm">
2023-11-24 23:42:37 +00:00
<Input
type="number"
id="timePerScreen"
min={1}
step="1"
bind:value={$settings.timePerScreen}
/>
2023-11-19 19:27:22 +00:00
<InputGroupText>{$_('time.minutes')}</InputGroupText>
2023-11-17 00:05:35 +00:00
</InputGroup>
</Col>
</Row>
<Row>
2023-11-19 19:27:22 +00:00
<Label md={6} for="fullRefreshMin" size="sm"
>{$_('section.settings.fullRefreshEvery')}</Label
>
2023-11-17 00:05:35 +00:00
<Col md="6">
<InputGroup size="sm">
2023-11-24 23:42:37 +00:00
<Input
type="number"
id="fullRefreshMin"
min={1}
step="1"
bind:value={$settings.fullRefreshMin}
/>
2023-11-19 19:27:22 +00:00
<InputGroupText>{$_('time.minutes')}</InputGroupText>
2023-11-17 00:05:35 +00:00
</InputGroup>
</Col>
</Row>
<Row>
2023-11-19 19:27:22 +00:00
<Label md={6} for="minSecPriceUpd" size="sm"
>{$_('section.settings.timeBetweenPriceUpdates')}</Label
>
2023-11-17 00:05:35 +00:00
<Col md="6">
<InputGroup size="sm">
2023-11-24 23:42:37 +00:00
<Input
type="number"
id="minSecPriceUpd"
min={1}
step="1"
bind:value={$settings.minSecPriceUpd}
/>
2023-11-19 19:27:22 +00:00
<InputGroupText>{$_('time.seconds')}</InputGroupText>
2023-11-17 00:05:35 +00:00
</InputGroup>
2023-11-19 19:27:22 +00:00
<FormText>{$_('section.settings.shortAmountsWarning')}</FormText>
2023-11-17 00:05:35 +00:00
</Col>
</Row>
<Row>
2023-11-19 19:27:22 +00:00
<Label md={6} for="tzOffset" size="sm">{$_('section.settings.timezoneOffset')}</Label>
2023-11-17 00:05:35 +00:00
<Col md="6">
<InputGroup size="sm">
<Input
type="number"
step="1"
name="tzOffset"
id="tzOffset"
bind:value={$settings.tzOffset}
/>
2023-11-19 19:27:22 +00:00
<InputGroupText>{$_('time.minutes')}</InputGroupText>
2023-11-17 00:05:35 +00:00
</InputGroup>
2023-11-19 19:27:22 +00:00
<FormText>{$_('section.settings.tzOffsetHelpText')}</FormText>
2023-11-17 00:05:35 +00:00
</Col>
</Row>
<Row>
2023-11-19 19:27:22 +00:00
<Label md={6} for="ledBrightness" size="sm">{$_('section.settings.ledBrightness')}</Label>
2023-11-17 00:05:35 +00:00
<Col md="6">
<Input
type="range"
name="ledBrightness"
id="ledBrightness"
2023-11-19 19:27:22 +00:00
bind:value={$settings.ledBrightness}
2023-11-17 00:05:35 +00:00
min={0}
max={255}
step={1}
/>
</Col>
</Row>
<Row>
2023-11-19 19:27:22 +00:00
<Label md={6} for="mempoolInstance" size="sm"
>{$_('section.settings.mempoolnstance')}</Label
>
<Col md="6">
2023-11-17 00:05:35 +00:00
<Input
type="text"
bind:value={$settings.mempoolInstance}
name="mempoolInstance"
id="mempoolInstance"
bsSize="sm"
2023-11-19 19:27:22 +00:00
></Input>
2023-11-17 00:05:35 +00:00
</Col>
</Row>
<Row>
2023-11-19 19:27:22 +00:00
<Label md={6} for="hostnamePrefix" size="sm"
>{$_('section.settings.hostnamePrefix')}</Label
>
<Col md="6">
2023-11-17 00:05:35 +00:00
<Input
type="text"
bind:value={$settings.hostnamePrefix}
name="hostnamePrefix"
id="hostnamePrefix"
bsSize="sm"
2023-11-19 19:27:22 +00:00
></Input>
</Col>
</Row>
2023-11-21 15:05:00 +00:00
<Row>
<Label md={6} for="wifiTxPower" size="sm"
>{$_('section.settings.wifiTxPower', { default: 'WiFi Tx Power' })}</Label
>
<Col md="6">
<Input
type="select"
bind:value={$settings.txPower}
name="select"
id="fgColor"
bsSize="sm"
class="form-select-sm"
>
{#each wifiTxPowerMap as [key, value]}
<option {value}>{key}</option>
{/each}
</Input>
<FormText>{$_('section.settings.wifiTxPowerText')}</FormText>
</Col>
</Row>
2023-11-19 19:27:22 +00:00
<Row>
<Col md="6">
<Input
id="ledTestOnPower"
bind:checked={$settings.ledTestOnPower}
type="switch"
bsSize="sm"
label={$_('section.settings.ledPowerOnTest')}
/>
</Col>
<Col md="6">
<Input
id="ledFlashOnUpd"
bind:checked={$settings.ledFlashOnUpd}
type="switch"
bsSize="sm"
label={$_('section.settings.ledFlashOnBlock')}
/>
</Col>
<Col md="6">
<Input
id="stealFocus"
bind:checked={$settings.stealFocus}
type="switch"
bsSize="sm"
label={$_('section.settings.StealFocusOnNewBlock')}
/>
</Col>
<Col md="6">
<Input
id="mcapBigChar"
bind:checked={$settings.mcapBigChar}
type="switch"
bsSize="sm"
label={$_('section.settings.useBigCharsMcap')}
/>
</Col>
<Col md="6">
<Input
id="otaEnabled"
bind:checked={$settings.otaEnabled}
type="switch"
bsSize="sm"
label="{$_('section.settings.otaUpdates')} ({$_('restartRequired')})"
/>
</Col>
<Col md="6">
<Input
id="mdnsEnabled"
bind:checked={$settings.mdnsEnabled}
type="switch"
bsSize="sm"
label="{$_('section.settings.enableMdns')} ({$_('restartRequired')})"
/>
</Col>
<Col md="6">
<Input
id="fetchEurPrice"
bind:checked={$settings.fetchEurPrice}
type="switch"
bsSize="sm"
label="{$_('section.settings.fetchEuroPrice')} ({$_('restartRequired')})"
/>
2023-11-17 00:05:35 +00:00
</Col>
</Row>
2023-11-17 02:15:23 +00:00
2023-11-19 19:27:22 +00:00
<Row>
<h3>{$_('section.settings.screens')}</h3>
{#if $settings.screens}
{#each $settings.screens as s}
<Col md="6">
<Input
id="screens_{s.id}"
bind:checked={s.enabled}
type="switch"
bsSize="sm"
label={s.name}
/>
</Col>
{/each}
{/if}
</Row>
2023-11-24 23:42:37 +00:00
<Button on:click={handleReset} color="secondary">{$_('button.reset')}</Button>
2023-11-19 19:27:22 +00:00
<Button color="primary">{$_('button.save')}</Button>
2023-11-17 00:05:35 +00:00
</Form>
</CardBody>
</Card>
</Col>