Integrate address search feature on to the map

When I enter any address in the search bar I want map to show me the address zoomed in with marker on it similar to google map. I already have a map where I am importing data frames of different categories, have search bar for filtering data, toggle checklist to select datasets, map adjusts to display all markers based on selected datasets. I am using plotly, dash pandas library. Below is Minimal, Reproducible Example (MRE).

import os
import dash
from dash import dcc, html, Input, Output, State, callback, Dash
import plotly.graph_objects as go
import pandas as pd
from geopy.geocoders import Nominatim
from math import radians, sin, cos, sqrt, atan2
import base64

# Assume you have dynamic dataframes df1, df2, df3
df1 = pd.DataFrame({'Latitude': [37.7749, 40.7128], 'Longitude': [-122.4194, -74.0060], 'PhoneNumber': [123, 456], 'PhoneModel': ['Model1', 'Model2'], 'SIMCardData': ['SIM1', 'SIM2']})
df2 = pd.DataFrame({'Latitude': [34.0522, 41.8781], 'Longitude': [-118.2437, -87.6298], 'CellSiteData1': [1, 2], 'CellSiteData2': ['A', 'B'], 'CellSiteData3': ['X', 'Y']})
df3 = pd.DataFrame({'Latitude': [32.7767, 29.7604], 'Longitude': [-96.7970, -95.3698], 'MicroData1': ['Alpha', 'Beta'], 'MicroData2': ['Gamma', 'Delta'], 'MicroData3': ['One', 'Two']})

# Set up Dash app
app = dash.Dash(__name__)

color_sequence = {'customers Tickets': 'blue', 'cell_sites Tickets': 'red', 'micro Tickets': 'darkgreen'}

# ... # Initial map layout
fig = go.Figure(go.Scattermapbox(lat=[0], lon=[0], mode='markers', marker=dict(size=20)))

fig.update_layout(
    mapbox=dict(style='open-street-map', center=dict(lat=0, lon=0), zoom=1),
    showlegend=False,
    images=[dict(x=0, y=1, sizex=0.1, sizey=0.1, xanchor="left", yanchor="bottom")]
)


# Layout of the app
app.layout = html.Div([
    html.Img(src='data:image/png;base64,{}'.format(encoded_image.decode()),style={'width': '10%'}),
    html.Img(src='data:image/png;base64,{}'.format(powered_encoded_image.decode()),style={'width': '10%','height':'auto','margin-left':'10px'}),
    ],style={'display':'flex','align-items':'center'}),
    html.Div([
    html.H1(id='map-title',style={'margin-top':'10px'}),# Adjusted margin-top for map title
    html.H3(id='timestamp',style={'margin-top':'10px'}),
    ],style={'textAlign':'center','marginBottom':'20px'}),

  dcc.Loading(
  id="loading-map",
  type="circle",
  children=[
    dcc.Graph(id='map', figure=fig, style={'height': '80vh','margin-top':'10px'}),
    dcc.Input(id='search-input', type='text', placeholder='Search...'),
    dcc.Checklist(
        id='data-toggle',
        options=[
            {'label': 'Customers', 'value': 'customers Tickets'},
            {'label': 'Cell Sites', 'value': 'cell_sites Tickets'},
            {'label': 'Micro Data', 'value': 'micro Tickets'}
        ],
        value=['customers Tickets', 'cell_sites Tickets', 'micro Tickets'],
        labelStyle={'display': 'block'}
    ),
    html.Div([
    dcc.Input(id='location-input', type='text', placeholder='Enter location...'),
    html.Button('Search Location', id='search-location-btn', n_clicks=0),
    html.Div(id='location-output'),  
  ],
 ),
])
# Callback 1
@app.callback(
    [Output('map', 'figure'),
     Output('map-title', 'children'),
     Output('timestamp', 'children')],
    [Input('search-input', 'value'),
     Input('data-toggle', 'value')]
)
def update_map_callback(search_query, data_toggle):
    # ...
# Return the modified figure and title
return fig, title , timestamp

#Callback 2
@app.callback(
    Output('location-output', 'children'),
    [Input('search-location-btn', 'n_clicks')],
    [State('location-input', 'value')]
)
def search_location(n_clicks, location_input):
     if n_clicks and location_input:
      geolocator = Nominatim(user_agent="geo_search")
      location = geolocator.geocode(location_input)
  fig.update_layout(mapbox=dict(style='open-street-map', center=dict(lat=location.latitude, lon=location.longitude), zoom=15),
)
  return fig

if __name__ == '__main__':
    app.run_server(debug=True, use_reloader=True)

Here, map is not zooming to searched address. There is no change