from dash import html, dcc from datetime import date import dash_bootstrap_components as dbc from datetime import timedelta today = date.today() one_year_ago = today - timedelta(days=365) def create_layout(data): main_body = create_main_body(data) topbar = create_topbar() return [html.Div(topbar + main_body)] def create_topbar(): return [ dbc.Container([ dbc.Row( dbc.Col( html.Div(html.H1("Data Pipeline For YNAB, Preview Visualisations"), className="text-center text-light", ), width=12, ) ), dbc.Row( [ dbc.Col( dcc.DatePickerRange( first_day_of_week=1, display_format="YYYY-MM-DD", id="date-picker-range", start_date=one_year_ago, end_date=today, ), width=4, ), dbc.Col( html.Button("Change Date Range", id="date-range-confirm-button"), width=2, ), ] ) ] ) ] def create_main_body(data): return [ dbc.Container( [ dbc.Row( [dbc.Col( dbc.Card( dbc.CardBody( [html.H4( "Spend Per Day", className="card-title" ), dcc.Graph(figure=data['spend_per_day_line'],id='spend_per_day'), ] ), className="mb-4", ), width=12, )] ), dbc.Row( [dbc.Col( dbc.Card( dbc.CardBody( [html.H4( "Spend Per Category", className="card-title" ), dcc.Graph(figure=data['spend_per_category_bar'],id='spend_per_category'), ] ), className="mb-4", ), width=5, ), dbc.Col( dbc.Card( dbc.CardBody( [ dcc.Markdown('## Total Spend:'), dcc.Markdown(data['total_spend'],id='total_spend'), ], ), className="text-center text-light", ), width=2, ), dbc.Col( dbc.Card( dbc.CardBody( [ html.H4( "Spend Per Payee", className="card-title" ), dcc.Graph(figure=data['spend_per_payee_bar'],id='spend_per_payee'), ] ), className="mb-4", ), width=5, ), ] ), ], fluid=True, ), ]