SimpleChatTC:Trappable UiShowObjPropsEdit for custom handling
Use it to handle apiEP and iRecentUserMsgCnt in more user friendly way, where they get a selection to choose from.
This commit is contained in:
parent
3718a39c06
commit
6253c717b3
|
|
@ -1107,60 +1107,27 @@ class Me {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Auto create ui input elements for fields in apiRequestOptions
|
|
||||||
* Currently supports text and number field types.
|
|
||||||
* @param {HTMLDivElement} elDiv
|
|
||||||
*/
|
|
||||||
show_settings_apirequestoptions(elDiv) {
|
|
||||||
let typeDict = {
|
|
||||||
"string": "text",
|
|
||||||
"number": "number",
|
|
||||||
};
|
|
||||||
let fs = document.createElement("fieldset");
|
|
||||||
let legend = document.createElement("legend");
|
|
||||||
legend.innerText = "ApiRequestOptions";
|
|
||||||
fs.appendChild(legend);
|
|
||||||
elDiv.appendChild(fs);
|
|
||||||
for(const k in this.apiRequestOptions) {
|
|
||||||
let val = this.apiRequestOptions[k];
|
|
||||||
let type = typeof(val);
|
|
||||||
if (((type == "string") || (type == "number"))) {
|
|
||||||
let inp = ui.el_creatediv_input(`Set${k}`, k, typeDict[type], this.apiRequestOptions[k], (val)=>{
|
|
||||||
if (type == "number") {
|
|
||||||
val = Number(val);
|
|
||||||
}
|
|
||||||
this.apiRequestOptions[k] = val;
|
|
||||||
});
|
|
||||||
fs.appendChild(inp.div);
|
|
||||||
} else if (type == "boolean") {
|
|
||||||
let bbtn = ui.el_creatediv_boolbutton(`Set{k}`, k, {true: "true", false: "false"}, val, (userVal)=>{
|
|
||||||
this.apiRequestOptions[k] = userVal;
|
|
||||||
});
|
|
||||||
fs.appendChild(bbtn.div);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show settings ui for configurable parameters, in the passed Div element.
|
* Show settings ui for configurable parameters, in the passed Div element.
|
||||||
* @param {HTMLDivElement} elDiv
|
* @param {HTMLDivElement} elDiv
|
||||||
*/
|
*/
|
||||||
show_settings(elDiv) {
|
show_settings(elDiv) {
|
||||||
|
|
||||||
ui.ui_show_obj_props_edit(elDiv, this, ["baseURL", "headers", "bStream", "bTools", "apiRequestOptions", "apiEP", "iRecentUserMsgCnt", "bTrimGarbage", "bCompletionFreshChatAlways", "bCompletionInsertStandardRolePrefix"], "Settings")
|
ui.ui_show_obj_props_edit(elDiv, this, ["baseURL", "headers", "bStream", "bTools", "apiRequestOptions", "TRAPME-apiEP", "TRAPME-iRecentUserMsgCnt", "bTrimGarbage", "bCompletionFreshChatAlways", "bCompletionInsertStandardRolePrefix"], "Settings", "TRAPME-", (tag, elParent)=>{
|
||||||
|
if (tag == "TRAPME-apiEP") {
|
||||||
let sel = ui.el_creatediv_select("SetApiEP", "ApiEndPoint", ApiEP.Type, this.apiEP, (val)=>{
|
let sel = ui.el_creatediv_select("SetApiEP", "ApiEndPoint", ApiEP.Type, this.apiEP, (val)=>{
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
this.apiEP = ApiEP.Type[val];
|
this.apiEP = ApiEP.Type[val];
|
||||||
});
|
});
|
||||||
elDiv.appendChild(sel.div);
|
elParent.appendChild(sel.div);
|
||||||
|
}
|
||||||
sel = ui.el_creatediv_select("SetChatHistoryInCtxt", "ChatHistoryInCtxt", this.sRecentUserMsgCnt, this.iRecentUserMsgCnt, (val)=>{
|
if (tag == "TRAPME-iRecentUserMsgCnt") {
|
||||||
|
let sel = ui.el_creatediv_select("SetChatHistoryInCtxt", "ChatHistoryInCtxt", this.sRecentUserMsgCnt, this.iRecentUserMsgCnt, (val)=>{
|
||||||
this.iRecentUserMsgCnt = this.sRecentUserMsgCnt[val];
|
this.iRecentUserMsgCnt = this.sRecentUserMsgCnt[val];
|
||||||
});
|
});
|
||||||
elDiv.appendChild(sel.div);
|
elParent.appendChild(sel.div);
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -233,14 +233,21 @@ export function el_creatediv_input(id, label, type, defaultValue, cb, className=
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Auto create ui input elements for fields in apiRequestOptions
|
* Auto create ui input elements for specified fields/properties in given object
|
||||||
* Currently supports text and number field types.
|
* Currently supports text, number, boolean field types.
|
||||||
|
* Also supports recursing if a object type field is found.
|
||||||
|
* For some reason if caller wants to handle certain properties on their own
|
||||||
|
* * prefix the prop name in lProps with sTrapTag
|
||||||
|
* * fTrapper will be called with the parent ui element
|
||||||
|
* into which the new ui elements created for editting the prop, if any, should be attached
|
||||||
* @param {HTMLDivElement|HTMLFieldSetElement} elDiv
|
* @param {HTMLDivElement|HTMLFieldSetElement} elDiv
|
||||||
* @param {any} oObj
|
* @param {any} oObj
|
||||||
* @param {Array<string>} lProps
|
* @param {Array<string>} lProps
|
||||||
* @param {string} sLegend
|
* @param {string} sLegend
|
||||||
|
* @param {string | undefined} sTrapTag
|
||||||
|
* @param {((tagPlusProp: string, elParent: HTMLFieldSetElement)=>void) | undefined} fTrapper
|
||||||
*/
|
*/
|
||||||
export function ui_show_obj_props_edit(elDiv, oObj, lProps, sLegend) {
|
export function ui_show_obj_props_edit(elDiv, oObj, lProps, sLegend, sTrapTag=undefined, fTrapper=undefined) {
|
||||||
let typeDict = {
|
let typeDict = {
|
||||||
"string": "text",
|
"string": "text",
|
||||||
"number": "number",
|
"number": "number",
|
||||||
|
|
@ -251,6 +258,14 @@ export function ui_show_obj_props_edit(elDiv, oObj, lProps, sLegend) {
|
||||||
fs.appendChild(legend);
|
fs.appendChild(legend);
|
||||||
elDiv.appendChild(fs);
|
elDiv.appendChild(fs);
|
||||||
for(const k of lProps) {
|
for(const k of lProps) {
|
||||||
|
if (sTrapTag) {
|
||||||
|
if (k.startsWith(sTrapTag)) {
|
||||||
|
if (fTrapper) {
|
||||||
|
fTrapper(k, fs)
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
let val = oObj[k];
|
let val = oObj[k];
|
||||||
let type = typeof(val);
|
let type = typeof(val);
|
||||||
if (((type == "string") || (type == "number"))) {
|
if (((type == "string") || (type == "number"))) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue