diff --git a/src/lang/en.ts b/src/lang/en.ts index 027f1f3e..b12b336b 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -644,4 +644,5 @@ export const languageEnglish = { start: "Start", end: "End", index: "Index", + search: "Search", } \ No newline at end of file diff --git a/src/lib/Setting/Pages/Module/ModuleChatMenu.svelte b/src/lib/Setting/Pages/Module/ModuleChatMenu.svelte index 8b671dda..6f40a28a 100644 --- a/src/lib/Setting/Pages/Module/ModuleChatMenu.svelte +++ b/src/lib/Setting/Pages/Module/ModuleChatMenu.svelte @@ -2,11 +2,35 @@ import { CheckCircle2Icon, Globe, XIcon } from "lucide-svelte"; import { language } from "src/lang"; import Button from "src/lib/UI/GUI/Button.svelte"; + import TextInput from "src/lib/UI/GUI/TextInput.svelte"; + import type { RisuModule } from "src/ts/process/modules"; import { DataBase } from "src/ts/storage/database"; import { CurrentChat } from "src/ts/stores"; import { SettingsMenuIndex, settingsOpen } from "src/ts/stores"; export let close = () => {} + let moduleSearch = '' + + function sortModules(modules:RisuModule[], search:string){ + const db = $DataBase + return modules.filter((v) => { + if(search === '') return true + return v.name.toLowerCase().includes(search.toLowerCase()) + + }).sort((a, b) => { + let score = a.name.toLowerCase().localeCompare(b.name.toLowerCase()) + + if(db.enabledModules.includes(a.id)){ + score += 1000 + } + if(db.enabledModules.includes(b.id)){ + score -= 1000 + } + + return score + }) + } + @@ -20,22 +44,28 @@ + {language.chatModulesInfo} + +
{#if $DataBase.modules.length === 0}
{language.noModules}
{:else} - {#each $DataBase.modules as rmodule, i} + {#each sortModules($DataBase.modules, moduleSearch) as rmodule, i} {#if i !== 0}
{/if} -
- {rmodule.name} +
+ {#if $DataBase.enabledModules.includes(rmodule.id)} + {rmodule.name} + {:else} + {rmodule.name} + {/if}
{#if $DataBase.enabledModules.includes(rmodule.id)} - {:else}
-
- {rmodule.description || 'No description provided'} -
{/each} {/if}