File size: 1,254 Bytes
732e77c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# /app/components/FAQViewer.py
from __future__ import annotations
import gradio as gr
from typing import List, Dict

def build_faq_viewer(faqs: List[Dict[str, str]] | None = None):
    """
    Build a simple searchable FAQ viewer.
    Returns (search_box, results_html, set_data_fn)
    """
    faqs = faqs or []

    search = gr.Textbox(label="Search FAQs", placeholder="Type to filter…")
    results = gr.HTML()

    def _render(query: str):
        q = (query or "").strip().lower()
        items = [f for f in faqs if (q in f["q"].lower() or q in f["a"].lower())] if q else faqs
        if not items:
            return "<em>No results.</em>"
        parts = []
        for f in items[:50]:
            parts.append(
                f"<div style='margin:8px 0;'><b>{f['q']}</b><br/><span style='color:#334155'>{f['a']}</span></div>"
            )
        return "\n".join(parts)

    search.change(fn=_render, inputs=search, outputs=results)
    # Initial render
    results.value = _render("")

    # return a small setter if caller wants to replace faq list later
    def set_data(new_faqs: List[Dict[str, str]]):
        nonlocal faqs
        faqs = new_faqs
        return {results: _render(search.value)}

    return search, results, set_data