emilhe / dash-extensions

The dash-extensions package is a collection of utility functions, syntax extensions, and Dash components that aim to improve the Dash development experience

Home Page:https://www.dash-extensions.com/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Callbacks not being executed using DashProxy when embedding dash app

jmpaya opened this issue · comments

Hi,

We are developing a dash application that needs to be embedded on another web application using the dash-embedded-component from Dash Enterprise.

Also, we are using DashProxy to enable us to use some built-in transforms of this library. We have realised that the callbacks work properly when accessing the app directly through Dash Enterprise, but not when it is embedded into another website.

It looks like there is some incompatibility between DashProxy and Dash Embedded Component. Using the simple example below, the callback is not being called, but changing DashProxy for Dash makes it work. Would you mind helping us with this?

from dash import Dash, html, Input, Output
from dash_extensions.enrich import DashProxy
from dash_embedded import Embeddable

app = DashProxy(__name__, plugins=[Embeddable(origins=[r'^.+dash.tests(:\d+)?'])])
server = app.server  # expose server variable for Procfile

app.layout = html.Div([
    "Press button to execute callback",
    html.Button("Click me!", id="button"),
    html.Div(id="my-div")
])

@app.callback(Output('my-div', 'children'),
              [Input('button', 'n_clicks')])
def update_graph(n_clicks):
    return f"You have clicked the button {n_clicks} times"

if __name__ == '__main__':
    app.run_server(debug=True)
dash==2.7.1
gunicorn==20.0.4
dash-extensions==0.1.8
dash-embedded==2.0.0

Screenshot of the application and its network calls when callback is working (you can see that an extra request is made):
image
image

Screenshot of the application when callback is not working:
image
image

It's probably related to the app initialization being different when using the Embeddable plugin, causing the callback transformation to not being invoked correctly. Unfortunately, I don't have access to Dash Enterprise, so I am not able to help.