77
88import { browser } from "../common/browser" ;
99import { MESSAGE_TYPES } from "../common/constants" ;
10+ import { Model } from "../tab/utils/types" ;
1011import "./popup.scss" ;
1112
1213
@@ -25,8 +26,8 @@ document.addEventListener("DOMContentLoaded", () => {
2526 const extraSettings = document . querySelector ( ".extra-settings" ) ;
2627
2728 if ( toggleBtn && extraSettings ) {
28- toggleBtn . addEventListener ( "click" , ( ) => {
29- extraSettings . classList . toggle ( "collapsed" ) ;
29+ toggleBtn . addEventListener ( "click" , async ( ) => {
30+ const extraSettingsCollapsed = extraSettings . classList . toggle ( "collapsed" ) ;
3031 toggleBtn . classList . toggle ( "rotated" ) ;
3132
3233 /* For Firefox */
@@ -36,6 +37,40 @@ document.addEventListener("DOMContentLoaded", () => {
3637 document . documentElement . style . height = `${ document . body . scrollHeight } px` ;
3738 } , 500 ) ;
3839 /***************/
40+
41+ if ( ! extraSettingsCollapsed ) {
42+ const response = await browser . runtime . sendMessage ( { type : MESSAGE_TYPES . FETCH_MODELS } ) ;
43+
44+ if ( response && response . models ) {
45+ const { defaultLlm} = await browser . storage . local . get ( "defaultLlm" ) ;
46+ const defaultLlmSelect = document . getElementById ( "default-llm" ) as HTMLSelectElement ;
47+ const models : Model [ ] = response . models ;
48+ const defaultLlmOptions = models . map ( ( model : Model ) => {
49+ const option = document . createElement ( "option" ) ;
50+
51+ option . value = model . name ;
52+ option . textContent = model . name ;
53+
54+ if ( defaultLlm && model . name === defaultLlm ) {
55+ option . selected = true ;
56+ }
57+
58+ return option ;
59+ } ) ;
60+ const defaultLlmLabel = document . createElement ( "option" ) ;
61+
62+ defaultLlmLabel . value = "" ;
63+ defaultLlmLabel . textContent = "Select a model..." ;
64+
65+ if ( ! defaultLlm ) {
66+ defaultLlmLabel . selected = true ;
67+ }
68+
69+ defaultLlmSelect . innerHTML = "" ;
70+ defaultLlmSelect . append ( defaultLlmLabel ) ;
71+ defaultLlmSelect . append ( ...defaultLlmOptions ) ;
72+ }
73+ }
3974 } ) ;
4075 }
4176
@@ -128,6 +163,18 @@ document.getElementById("showChat")?.addEventListener("click", () => {
128163 } ) ;
129164} ) ;
130165
166+ document . getElementById ( "save-default-llm" ) ?. addEventListener ( "click" , ( ) => {
167+ const selectedLlm = ( document . getElementById ( "default-llm" ) as HTMLSelectElement ) . value ;
168+
169+ browser . storage . local . set ( { defaultLlm : selectedLlm } , ( ) => {
170+ showNotification ( "Saved" , "Default LLM saved!" ) ;
171+
172+ browser . runtime . sendMessage ( {
173+ type : MESSAGE_TYPES . ACTION_DEFAULT_LLM_UPDATED
174+ } ) ;
175+ } ) ;
176+ } ) ;
177+
131178document . getElementById ( "save-keyboard-shortcut" ) ?. addEventListener ( "click" , async ( ) => {
132179 try {
133180 const isFirefox = navigator . userAgent . toLowerCase ( ) . indexOf ( 'firefox' ) > - 1 ;
0 commit comments