✊🏿 Black Lives Matter. Please consider donating to Black Girls Code today.
🐇 Announcing Dash VTK for 3d simulation graphics. Check out the March webinar.

UIRevision on a 3d dcc.Graph doesn't work the first time

Hello,

I’m trying to draw a new random 3d graph (generated from Perlin noise) on button click. The problem is that uirevision doesn’t save angle and zoom on the first click, only on second and all the next ones.
gen_surface() returns 50x50 np.array

import plotly.graph_objects as go
import dash
import dash_core_components as dcc
import dash_html_components as html
import func
from dash.dependencies import Input, Output

app = dash.Dash()

app.layout = html.Div([
    html.Div([
        dcc.Graph(id='graph',
                  style={'height': 800},
                  clickData={})
    ],
        style={'width': '70%', 'display': 'inline-block', 'padding': '0 0'}),

    html.Div([
        html.Button(id='new-surface-button', children='New surface')
    ],
        style={'width': '30%', 'display': 'inline-block', 'vertical-align': 'top'})
])

@app.callback(
    Output('graph', 'figure'),
    [Input('new-surface-button', 'n_clicks')])
def new_surface(n_clicks):
    surf = func.gen_surface()
    fig = go.Figure(layout={'uirevision': 'const'})  # save zoom and camera angle on fig updating
    fig.add_trace(go.Surface(colorscale="Inferno", z=surf))
    return fig


app.run_server(debug=True, use_reloader=True)