-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Component
UI (ui.*)
Severity
P0 - Critical (crash/unusable)
Shiny Version
1.2.1
Python Version
3.12.8
Minimal Reproducible Example
from shiny import App, reactive, render, ui, req
from shinywidgets import render_widget, output_widget
import ipyleaflet as ipyl
from ipyleaflet import (
Map,
)
import xarray as xr
import pandas as pd
import numpy as np
import plotly.express as px
from ipywidgets import HTML
from ipyleaflet import Popup
import plotly.graph_objs as go
import asyncio
import time
app_ui = ui.page_fluid(output_widget("map"))
# Define Server
def server(input, output, session):
click_coords = reactive.value((None, None))
# Define interactive Plotly figure function
def create_interactive_plot():
# time.sleep(3)
x = np.linspace(0, 10, 100)
y = np.sin(x)
fig = go.FigureWidget(data=[go.Scatter(x=x, y=y, mode="lines+markers")])
fig.update_layout(
title="Interactive Plotly Plot in Popup",
width=350,
height=250,
margin=dict(l=10, r=10, t=30, b=10),
)
return fig
@reactive.effect
def _():
print("start mission1")
lat, lng = click_coords.get()
if lat != None and lng != None:
print(lat, lng)
# Create a loading spinner
loading_html = HTML()
loading_html.value = """
<div style="display: flex; justify-content: center; align-items: center; height: 100px;">
<div class="spinner" style="border: 4px solid #f3f3f3; border-top: 4px solid #3498db; border-radius: 50%; width: 50px; height: 50px; animation: spin 2s linear infinite;"></div>
</div>
<style>
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
"""
# Create a popup with the loading spinner
popup = Popup(
location=(lat, lng),
child=loading_html,
close_button=True,
auto_close=True,
close_on_escape_key=True,
)
map.widget.add(popup)
# await asyncio.sleep(2)
time.sleep(2)
plot_widget = create_interactive_plot()
popup.child = plot_widget
@render_widget
def map():
center = (18.5, 116.4)
zoom = 4.5
# Create map
m = Map(
center=center,
zoom=zoom,
# interpolation="nearest",
# basemap=basemaps.CartoDB.DarkMatter,
scroll_wheel_zoom=True,
)
def handle_map_interaction(**kwargs):
# print(kwargs)
if kwargs.get("type") == "click":
lat, lon = kwargs.get("coordinates")
click_coords.set((lat, lon))
# Observe click events
m.on_interaction(handle_map_interaction)
print("render map")
return m
# Create Shiny app
app = App(app_ui, server, debug=False)
Behavior
When user click on the map I want to show a popup with plotly figure. But sometimes it may take time to generate the figure so I add a loading spin first to the popup, and when finish generating figure I replace the popup with the true figure.
The problem is the @reactive.effect function only display the popup when all the whole functions finish and does not display the loading spin. Is there any way to add a loading spin in this scenerio?
Error Messages (if any)
Environment
Ubuntu 20
Chrome up-to-date
_libgcc_mutex 0.1 main defaults
_openmp_mutex 5.1 1_gnu defaults
altair 5.5.0 pypi_0 pypi
anyio 4.7.0 pypi_0 pypi
anywidget 0.9.13 pypi_0 pypi
appdirs 1.4.4 pypi_0 pypi
argon2-cffi 23.1.0 pypi_0 pypi
argon2-cffi-bindings 21.2.0 pypi_0 pypi
arrow 1.3.0 pypi_0 pypi
asgiref 3.8.1 pypi_0 pypi
asttokens 3.0.0 pypi_0 pypi
async-lru 2.0.4 pypi_0 pypi
attrs 24.3.0 pypi_0 pypi
babel 2.16.0 pypi_0 pypi
beautifulsoup4 4.12.3 pypi_0 pypi
black 24.10.0 pypi_0 pypi
bleach 6.2.0 pypi_0 pypi
blinker 1.9.0 pypi_0 pypi
bqplot 0.12.43 pypi_0 pypi
branca 0.8.1 pypi_0 pypi
bzip2 1.0.8 h5eee18b_6 defaults
ca-certificates 2024.11.26 h06a4308_0 defaults
cachetools 5.5.0 pypi_0 pypi
certifi 2024.12.14 pypi_0 pypi
cffi 1.17.1 pypi_0 pypi
cftime 1.6.4.post1 pypi_0 pypi
charset-normalizer 3.4.0 pypi_0 pypi
click 8.1.7 pypi_0 pypi
colour 0.1.5 pypi_0 pypi
comm 0.2.2 pypi_0 pypi
contourpy 1.3.1 pypi_0 pypi
cycler 0.12.1 pypi_0 pypi
debugpy 1.8.11 pypi_0 pypi
decorator 5.1.1 pypi_0 pypi
defusedxml 0.7.1 pypi_0 pypi
duckdb 1.1.3 pypi_0 pypi
earthengine-api 1.4.3 pypi_0 pypi
eerepr 0.0.4 pypi_0 pypi
executing 2.1.0 pypi_0 pypi
expat 2.6.4 h6a678d5_0 defaults
faicons 0.2.2 pypi_0 pypi
fastjsonschema 2.21.1 pypi_0 pypi
filelock 3.16.1 pypi_0 pypi
folium 0.19.2 pypi_0 pypi
fonttools 4.55.3 pypi_0 pypi
fqdn 1.5.1 pypi_0 pypi
future 1.0.0 pypi_0 pypi
gdown 5.2.0 pypi_0 pypi
geemap 0.35.1 pypi_0 pypi
geocoder 1.38.1 pypi_0 pypi
geographiclib 2.0 pypi_0 pypi
geojson 3.1.0 pypi_0 pypi
geojsoncontour 0.5.1 pypi_0 pypi
geopy 2.4.1 pypi_0 pypi
gitdb 4.0.11 pypi_0 pypi
gitpython 3.1.43 pypi_0 pypi
google-api-core 2.24.0 pypi_0 pypi
google-api-python-client 2.156.0 pypi_0 pypi
google-auth 2.37.0 pypi_0 pypi
google-auth-httplib2 0.2.0 pypi_0 pypi
google-cloud-core 2.4.1 pypi_0 pypi
google-cloud-storage 2.19.0 pypi_0 pypi
google-crc32c 1.6.0 pypi_0 pypi
google-resumable-media 2.7.2 pypi_0 pypi
googleapis-common-protos 1.66.0 pypi_0 pypi
h11 0.14.0 pypi_0 pypi
htmltools 0.6.0 pypi_0 pypi
httpcore 1.0.7 pypi_0 pypi
httplib2 0.22.0 pypi_0 pypi
httpx 0.28.1 pypi_0 pypi
humanize 4.11.0 pypi_0 pypi
idna 3.10 pypi_0 pypi
ipyevents 2.0.2 pypi_0 pypi
ipyfilechooser 0.6.0 pypi_0 pypi
ipykernel 6.29.5 pypi_0 pypi
ipyleaflet 0.19.2 pypi_0 pypi
ipympl 0.9.7 pypi_0 pypi
ipython 8.30.0 pypi_0 pypi
ipython-genutils 0.2.0 pypi_0 pypi
ipytree 0.2.2 pypi_0 pypi
ipyvue 1.11.2 pypi_0 pypi
ipyvuetify 1.10.0 pypi_0 pypi
ipywidgets 7.8.5 pypi_0 pypi
isoduration 20.11.0 pypi_0 pypi
jedi 0.19.2 pypi_0 pypi
jinja2 3.1.4 pypi_0 pypi
json5 0.10.0 pypi_0 pypi
jsonpointer 3.0.0 pypi_0 pypi
jsonschema 4.23.0 pypi_0 pypi
jsonschema-specifications 2024.10.1 pypi_0 pypi
jupyter-client 8.6.3 pypi_0 pypi
jupyter-core 5.7.2 pypi_0 pypi
jupyter-events 0.11.0 pypi_0 pypi
jupyter-leaflet 0.19.2 pypi_0 pypi
jupyter-lsp 2.2.5 pypi_0 pypi
jupyter-server 2.14.2 pypi_0 pypi
jupyter-server-terminals 0.5.3 pypi_0 pypi
jupyterlab 4.4.2 pypi_0 pypi
jupyterlab-pygments 0.3.0 pypi_0 pypi
jupyterlab-server 2.27.3 pypi_0 pypi
jupyterlab-widgets 1.1.11 pypi_0 pypi
kiwisolver 1.4.7 pypi_0 pypi
ld_impl_linux-64 2.40 h12ee557_0 defaults
leafmap 0.42.6 pypi_0 pypi
libffi 3.4.4 h6a678d5_1 defaults
libgcc-ng 11.2.0 h1234567_1 defaults
libgomp 11.2.0 h1234567_1 defaults
libstdcxx-ng 11.2.0 h1234567_1 defaults
libuuid 1.41.5 h5eee18b_0 defaults
linkify-it-py 2.0.3 pypi_0 pypi
magic-dash 0.3.2 pypi_0 pypi
markdown 3.7 pypi_0 pypi
markdown-it-py 3.0.0 pypi_0 pypi
markupsafe 3.0.2 pypi_0 pypi
matplotlib 3.10.0 pypi_0 pypi
matplotlib-inline 0.1.7 pypi_0 pypi
mdit-py-plugins 0.4.2 pypi_0 pypi
mdurl 0.1.2 pypi_0 pypi
mistune 3.0.2 pypi_0 pypi
mypy-extensions 1.0.0 pypi_0 pypi
narwhals 1.19.0 pypi_0 pypi
nbclient 0.10.2 pypi_0 pypi
nbconvert 7.16.4 pypi_0 pypi
nbformat 5.10.4 pypi_0 pypi
ncurses 6.4 h6a678d5_0 defaults
nest-asyncio 1.6.0 pypi_0 pypi
netcdf4 1.7.2 pypi_0 pypi
notebook 7.4.2 pypi_0 pypi
notebook-shim 0.2.4 pypi_0 pypi
numpy 2.2.0 pypi_0 pypi
openssl 3.0.15 h5eee18b_0 defaults
orjson 3.10.13 pypi_0 pypi
overrides 7.7.0 pypi_0 pypi
packaging 24.2 pypi_0 pypi
palmerpenguins 0.1.4 pypi_0 pypi
pandas 2.2.3 pypi_0 pypi
pandocfilters 1.5.1 pypi_0 pypi
parso 0.8.4 pypi_0 pypi
pathspec 0.12.1 pypi_0 pypi
pexpect 4.9.0 pypi_0 pypi
pillow 11.0.0 pypi_0 pypi
pip 24.2 py312h06a4308_0 defaults
platformdirs 4.3.6 pypi_0 pypi
plotly 5.24.1 pypi_0 pypi
prometheus-client 0.21.1 pypi_0 pypi
prompt-toolkit 3.0.48 pypi_0 pypi
proto-plus 1.25.0 pypi_0 pypi
protobuf 5.29.2 pypi_0 pypi
psutil 6.1.1 pypi_0 pypi
psygnal 0.11.1 pypi_0 pypi
ptyprocess 0.7.0 pypi_0 pypi
pure-eval 0.2.3 pypi_0 pypi
pyarrow 18.1.0 pypi_0 pypi
pyasn1 0.6.1 pypi_0 pypi
pyasn1-modules 0.4.1 pypi_0 pypi
pycparser 2.22 pypi_0 pypi
pydeck 0.9.1 pypi_0 pypi
pygments 2.18.0 pypi_0 pypi
pymdown-extensions 10.12 pypi_0 pypi
pyparsing 3.2.0 pypi_0 pypi
pyperclip 1.9.0 pypi_0 pypi
pyshp 2.3.1 pypi_0 pypi
pysocks 1.7.1 pypi_0 pypi
pystac 1.11.0 pypi_0 pypi
pystac-client 0.8.5 pypi_0 pypi
python 3.12.8 h5148396_0 defaults
python-box 7.3.0 pypi_0 pypi
python-dateutil 2.9.0.post0 pypi_0 pypi
python-json-logger 3.2.1 pypi_0 pypi
python-multipart 0.0.20 pypi_0 pypi
pytz 2024.2 pypi_0 pypi
pyyaml 6.0.2 pypi_0 pypi
pyzmq 26.2.0 pypi_0 pypi
questionary 2.1.0 pypi_0 pypi
ratelim 0.1.6 pypi_0 pypi
reacton 1.9.0 pypi_0 pypi
readline 8.2 h5eee18b_0 defaults
referencing 0.35.1 pypi_0 pypi
requests 2.32.3 pypi_0 pypi
rfc3339-validator 0.1.4 pypi_0 pypi
rfc3986-validator 0.1.1 pypi_0 pypi
rich 13.9.4 pypi_0 pypi
rich-click 1.8.5 pypi_0 pypi
rpds-py 0.22.3 pypi_0 pypi
rsa 4.9 pypi_0 pypi
scipy 1.15.2 pypi_0 pypi
scooby 0.10.0 pypi_0 pypi
send2trash 1.8.3 pypi_0 pypi
setuptools 75.1.0 py312h06a4308_0 defaults
shiny 1.2.1 pypi_0 pypi
shinywidgets 0.3.4 pypi_0 pypi
six 1.17.0 pypi_0 pypi
smmap 5.0.1 pypi_0 pypi
sniffio 1.3.1 pypi_0 pypi
solara 1.43.0 pypi_0 pypi
solara-server 1.43.0 pypi_0 pypi
solara-ui 1.43.0 pypi_0 pypi
soupsieve 2.6 pypi_0 pypi
sqlite 3.45.3 h5eee18b_0 defaults
stack-data 0.6.3 pypi_0 pypi
starlette 0.42.0 pypi_0 pypi
streamlit 1.41.1 pypi_0 pypi
streamlit-folium 0.24.0 pypi_0 pypi
tenacity 9.0.0 pypi_0 pypi
terminado 0.18.1 pypi_0 pypi
tinycss2 1.4.0 pypi_0 pypi
tk 8.6.14 h39e8969_0 defaults
toml 0.10.2 pypi_0 pypi
tornado 6.4.2 pypi_0 pypi
tqdm 4.67.1 pypi_0 pypi
traitlets 5.14.3 pypi_0 pypi
traittypes 0.2.1 pypi_0 pypi
types-python-dateutil 2.9.0.20241206 pypi_0 pypi
typing-extensions 4.12.2 pypi_0 pypi
tzdata 2024.2 pypi_0 pypi
uc-micro-py 1.0.3 pypi_0 pypi
unicorn 2.1.3 pypi_0 pypi
uri-template 1.3.0 pypi_0 pypi
uritemplate 4.1.1 pypi_0 pypi
urllib3 2.2.3 pypi_0 pypi
uvicorn 0.34.0 pypi_0 pypi
watchdog 6.0.0 pypi_0 pypi
watchfiles 1.0.3 pypi_0 pypi
wcwidth 0.2.13 pypi_0 pypi
webcolors 24.11.1 pypi_0 pypi
webencodings 0.5.1 pypi_0 pypi
websocket-client 1.8.0 pypi_0 pypi
websockets 14.1 pypi_0 pypi
wheel 0.44.0 py312h06a4308_0 defaults
whitebox 2.3.5 pypi_0 pypi
whiteboxgui 2.3.0 pypi_0 pypi
widgetsnbextension 3.6.10 pypi_0 pypi
xarray 2024.11.0 pypi_0 pypi
xyzservices 2024.9.0 pypi_0 pypi
xz 5.4.6 h5eee18b_1 defaults
zlib 1.2.13 h5eee18b_1 defaults
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working