from dash import html, dcc from ..datalake import stages from ..libs.stage.stage import AbstractStage def html_list_schema(stage:AbstractStage, with_tables=True): """ Build html list of schema in stage """ ul_classes = "ml-2" schema_baseurl = f"/stg/{stage.name}/schema/" if with_tables: return html.Ul( [ html.Li( children = [ dcc.Link( schema, href=schema_baseurl + schema, className="text-lg text-bold" ), html_list_table(stage, schema) ], className="" ) for schema in stage.schemas() ], className=ul_classes ) return html.Ul( [ html.Li( dcc.Link( schema, href=schema_baseurl + schema, className="text-lg text-bold" ), ) for schema in stage.schemas() ], className=ul_classes ) def html_list_table(stage:AbstractStage, schema:str): """ Build html list of table in stage """ table_baseurl = f"/stg/{stage.name}/schm/{schema}/table/" return html.Ul( [ html.Li( dcc.Link( table, href=table_baseurl + table, className="text-lg text-bold" ), ) for table in stage.tables(schema=schema) ], className="ml-4" ) layout = html.Div([ html.Div(children=[ html.Ul( children=[ html.Li( children=[ dcc.Link( stagename, href=f"/stage/{stagename}", className="text-2xl text-center p-2 bg-amber-100 rounded shadow" ), html_list_schema(stage) ], className="flex-1 bg-gray-100 rounded flex flex-col shadow" ) for stagename, stage in stages.items() ], className="flex flex-row space-x-2" ) ], className="w-full mt-4 px-2" ), ])