From b396bb818d38ba0c2c57ec80434e2f5f9cbf257e Mon Sep 17 00:00:00 2001 From: Webifi Date: Thu, 1 Jun 2023 17:05:42 -0500 Subject: [PATCH] Move setting fields into separate component --- src/ChatSettingField.svelte | 146 +++++++++++++++++++++++++++++++ src/lib/ChatSettingsModal.svelte | 123 +------------------------- 2 files changed, 148 insertions(+), 121 deletions(-) create mode 100644 src/ChatSettingField.svelte diff --git a/src/ChatSettingField.svelte b/src/ChatSettingField.svelte new file mode 100644 index 0000000..2055706 --- /dev/null +++ b/src/ChatSettingField.svelte @@ -0,0 +1,146 @@ + + +{#if (typeof setting.hide !== 'function') || !setting.hide(chatId)} + {#if setting.header} +

+ {@html setting.header} +

+ {/if} +
+ {#if setting.type === 'boolean'} +
+ +
+ {:else if setting.type === 'textarea'} +
+ + +
+ {:else} +
+ +
+ {/if} +
+
+ {#if setting.type === 'number'} + queueSettingValueChange(e, setting)} + /> + {:else if setting.type === 'select'} +
+ +
+ {:else if setting.type === 'text'} +
+ { queueSettingValueChange(e, setting) }} + > +
+ {/if} +
+
+
+{/if} \ No newline at end of file diff --git a/src/lib/ChatSettingsModal.svelte b/src/lib/ChatSettingsModal.svelte index 17860fe..d1d0353 100644 --- a/src/lib/ChatSettingsModal.svelte +++ b/src/lib/ChatSettingsModal.svelte @@ -27,6 +27,7 @@ } from '@fortawesome/free-solid-svg-icons/index' import { exportProfileAsJSON } from './Export.svelte' import { afterUpdate } from 'svelte' + import ChatSettingField from '../ChatSettingField.svelte'; export let chatId:number export const show = () => { showSettings() } @@ -167,51 +168,6 @@ setTimeout(() => sizeTextElements(), 0) } - const debounce = {} - - const queueSettingValueChange = (event: Event, setting: ChatSetting) => { - clearTimeout(debounce[setting.key]) - if (event.target === null) return - const val = chatSettings[setting.key] - const el = (event.target as HTMLInputElement) - const doSet = () => { - try { - (typeof setting.beforeChange === 'function') && setting.beforeChange(chatId, setting, el.checked || el.value) && - refreshSettings() - } catch (e) { - window.alert('Unable to change:\n' + e.message) - } - switch (setting.type) { - case 'boolean': - setChatSettingValue(chatId, setting, el.checked) - refreshSettings() - break - default: - setChatSettingValue(chatId, setting, el.value) - } - try { - (typeof setting.afterChange === 'function') && setting.afterChange(chatId, setting, chatSettings[setting.key]) && - refreshSettings() - } catch (e) { - setChatSettingValue(chatId, setting, val) - window.alert('Unable to change:\n' + e.message) - } - } - if (setting.key === 'profile' && chat.sessionStarted && - (getProfile(el.value).characterName !== chatSettings.characterName)) { - const val = chatSettings[setting.key] - if (window.confirm('Personality change will not correctly apply to existing chat session.\n Continue?')) { - doSet() - } else { - // roll-back - setChatSettingValue(chatId, setting, val) - // refresh setting modal, if open - showSettingsModal && showSettingsModal++ - } - } - debounce[setting.key] = setTimeout(doSet, 250) - } - const saveProfile = () => { showProfileMenu = false try { @@ -285,82 +241,7 @@ {#key showSettingsModal} {#each settingsList as setting} - {#if (typeof setting.hide !== 'function') || !setting.hide(chatId)} - {#if setting.header} -

- {@html setting.header} -

- {/if} -
- {#if setting.type === 'boolean'} -
- -
- {:else if setting.type === 'textarea'} -
- - -
- {:else} -
- -
- {/if} -
-
- {#if setting.type === 'number'} - queueSettingValueChange(e, setting)} - /> - {:else if setting.type === 'select'} -
- -
- {:else if setting.type === 'text'} -
- { queueSettingValueChange(e, setting) }} - > -
- {/if} -
-
-
- {/if} + {/each} {/key}