Fix scroll jumping when changing settings

This commit is contained in:
Webifi 2023-06-14 18:39:47 -05:00
parent e6c638a60a
commit ac2a44224d
2 changed files with 17 additions and 4 deletions

View File

@ -8,14 +8,25 @@
import Fa from 'svelte-fa/src/fa.svelte' import Fa from 'svelte-fa/src/fa.svelte'
import { openModal } from 'svelte-modals' import { openModal } from 'svelte-modals'
import PromptConfirm from './PromptConfirm.svelte' import PromptConfirm from './PromptConfirm.svelte'
import { afterUpdate, onMount } from 'svelte'
export let setting:ChatSetting export let setting:ChatSetting
export let chatSettings:ChatSettings export let chatSettings:ChatSettings
export let chat:Chat export let chat:Chat
export let chatDefaults:Record<string, any> export let chatDefaults:Record<string, any>
export let originalProfile:String export let originalProfile:String
export let rkey:number = 0
const chatId = chat.id const chatId = chat.id
let show = false
onMount(() => {
show = (typeof setting.hide !== 'function') || !setting.hide(chatId)
})
afterUpdate(() => {
show = (typeof setting.hide !== 'function') || !setting.hide(chatId)
})
const fieldControls:ControlAction[] = (setting.fieldControls || [] as FieldControl[]).map(fc => { const fieldControls:ControlAction[] = (setting.fieldControls || [] as FieldControl[]).map(fc => {
return fc.getAction(chatId, setting, chatSettings[setting.key]) return fc.getAction(chatId, setting, chatSettings[setting.key])
@ -124,7 +135,7 @@
</script> </script>
{#if (typeof setting.hide !== 'function') || !setting.hide(chatId)} {#if show}
{#if setting.header} {#if setting.header}
<p class="notification {setting.headerClass}"> <p class="notification {setting.headerClass}">
{@html setting.header} {@html setting.header}
@ -180,11 +191,13 @@
{:else if setting.type === 'select' || setting.type === 'select-number'} {:else if setting.type === 'select' || setting.type === 'select-number'}
<!-- <div class="select"> --> <!-- <div class="select"> -->
<div class="select" class:control={fieldControls.length}> <div class="select" class:control={fieldControls.length}>
{#key rkey}
<select id="settings-{setting.key}" title="{setting.title}" on:change={e => queueSettingValueChange(e, setting) } > <select id="settings-{setting.key}" title="{setting.title}" on:change={e => queueSettingValueChange(e, setting) } >
{#each setting.options as option} {#each setting.options as option}
<option class:is-default={option.value === chatDefaults[setting.key]} value={option.value} selected={option.value === chatSettings[setting.key]}>{option.text}</option> <option class:is-default={option.value === chatDefaults[setting.key]} value={option.value} selected={option.value === chatSettings[setting.key]}>{option.text}</option>
{/each} {/each}
</select> </select>
{/key}
</div> </div>
{#each fieldControls as cont} {#each fieldControls as cont}
<div class="control"> <div class="control">

View File

@ -282,11 +282,11 @@
<button class="delete" aria-label="close" on:click={closeSettings}></button> <button class="delete" aria-label="close" on:click={closeSettings}></button>
</header> </header>
<section class="modal-card-body"> <section class="modal-card-body">
{#key showSettingsModal}
{#each settingsList as setting} {#each settingsList as setting}
<ChatSettingField on:refresh={refreshSettings} on:change={setDirty} chat={chat} chatDefaults={chatDefaults} chatSettings={chatSettings} setting={setting} originalProfile={originalProfile} /> <!-- {#key showSettingsModal} -->
<ChatSettingField rkey={showSettingsModal} on:refresh={refreshSettings} on:change={setDirty} chat={chat} chatDefaults={chatDefaults} chatSettings={chatSettings} setting={setting} originalProfile={originalProfile} />
<!-- {/key} -->
{/each} {/each}
{/key}
</section> </section>
<footer class="modal-card-foot"> <footer class="modal-card-foot">