|
from pathlib import Path |
|
|
|
from htmltools import HTMLDependency, tags |
|
from shiny import App, reactive, ui |
|
|
|
from query import query_output_server, query_output_ui |
|
|
|
button_style = {"style": "margin: 15px"} |
|
|
|
www_dir = Path(__file__).parent / "www" |
|
app_ui = ui.page_fluid( |
|
HTMLDependency( |
|
"bootstrap", |
|
version="9.99", |
|
source={"subdir": str(www_dir)}, |
|
script={"src": "bootstrap.bundle.min.js"}, |
|
stylesheet={"href": "theme.css"}, |
|
), |
|
ui.row( |
|
ui.column( |
|
2, |
|
ui.row( |
|
button_style, |
|
ui.input_action_button("add_query", "Add Query"), |
|
), |
|
ui.row( |
|
button_style, |
|
ui.input_action_button("remove_query", "Remove Query"), |
|
), |
|
), |
|
ui.column( |
|
10, |
|
ui.tags.div(query_output_ui("initial_query"), id="module_container"), |
|
), |
|
), |
|
) |
|
|
|
|
|
def server(input, output, session): |
|
mod_counter = reactive.Value(0) |
|
|
|
query_output_server("initial_query") |
|
|
|
@reactive.Effect |
|
@reactive.event(input.add_query) |
|
def _(): |
|
counter = mod_counter.get() + 1 |
|
mod_counter.set(counter) |
|
id = "query_" + str(counter) |
|
ui.insert_ui( |
|
selector="#module_container", where="afterBegin", ui=query_output_ui(id) |
|
) |
|
query_output_server(id) |
|
|
|
@reactive.Effect |
|
@reactive.event(input.remove_query) |
|
def _(): |
|
ui.remove_ui(selector=f"#module_container .row:first-child") |
|
|
|
|
|
app = App(app_ui, server) |
|
|