# Vizro is an open-source toolkit for creating modular data visualization applications.
# check out https://github.com/mckinsey/vizro for more info about Vizro
# and checkout https://vizro.readthedocs.io/en/stable/ for documentation.
import vizro.plotly.express as px
from vizro import Vizro
import vizro.models as vm
from vizro.models.types import capture
from dash import dcc
@capture("action")
def send_data_to_store(n_clicks):
"""Send data to global store"""
return f"Button clicked {n_clicks} times"
@capture("action")
def read_data_from_store(store_data):
"""Read data from global store"""
if store_data is None:
return "No data received from Page One"
return f"Received: {store_data}"
df = px.data.iris()
page_one = vm.Page(
title="Page One",
components=[
vm.Button(
id="send_button",
text="Send to Global Store",
actions=[
vm.Action(
function=send_data_to_store(),
inputs=["send_button.n_clicks"],
outputs=["user_session_storage_id.data"],
)
],
),
],
)
page_two = vm.Page(
title="Page Two",
components=[
vm.Button(
id="display_button",
text="Loading data...",
actions=[
vm.Action(
function=read_data_from_store(),
inputs=["user_session_storage_id.data"],
outputs=["display_button.children"],
)
],
),
],
)
dashboard = vm.Dashboard(pages=[page_one, page_two])
app = Vizro().build(dashboard)
# Add global store after building dashboard
app.dash.layout.children.append(
dcc.Store(id="user_session_storage_id", storage_type="session", data=None)
)
app.run()