' MiniHtml View class
' Version 3.31
	Private App As EndsMeet$end$
End Sub

Public Sub Initialize
	App = Main.App
End Sub

Public Sub Show As String
	Dim page1 As MiniHtml = CreateOrReadFromCache("$Endpoints$ Page")
	Return page1.build	
End Sub

Public Sub Modal (Action As String, CategoryList As List, Data As Map) As String
	Select Action
		Case "Add"
			Dim modal1 As MiniHtml = CreateOrReadFromCache("$Endpoints$ Add Modal")
			Dim dd1 As MiniHtml = modal1.ChildById("category1") 'dropdown
			dd1.Children.Clear
			MH.OptionDisabled("Select Category").up(dd1).selected
			For Each row As Map In CategoryList
				MH.OptionSelected(row.Get("category_name"), row.Get("id"), False).up(dd1)
			Next
			Return modal1.build
		Case "Edit"
			Dim modal1 As MiniHtml = CreateOrReadFromCache("$Endpoints$ Edit Modal")
			modal1.ChildById("id").attr("value", Data.Get("id"))
			Dim dd1 As MiniHtml = modal1.ChildById("category2") 'dropdown
			dd1.Children.Clear
			MH.OptionDisabled("Select Category").up(dd1)
			For Each row As Map In CategoryList
				MH.OptionSelected(row.Get("category_name"), row.Get("id"), row.Get("id") = Data.Get("category_id")).up(dd1)
			Next
			modal1.ChildById("code").attr("value", Data.Get("product_code"))
			modal1.ChildById("name").attr("value", Data.Get("product_name"))			
			Return modal1.build
		Case "Delete"
			Dim modal1 As MiniHtml = CreateOrReadFromCache("$Endpoints$ Delete Modal")
			modal1.ChildById("id").attr("value", Data.Get("id"))
			modal1.ChildById("p1").text2($"Delete ${Data.Get("product_name")} (${Data.Get("product_code")})?"$)
			Return modal1.build
		Case Else
			Return ""
	End Select
End Sub

Public Sub Alert (info As AlertInfo) As String
	Return MH.Alert(info)
End Sub

Public Sub Toast (info As ToastInfo, data As List) As String
	Return MH.Toast("$endpoints$-container", $Endpoints$TableFilled(data), info)
End Sub

Public Sub RenderedTable (data As List) As String
	Return $Endpoints$TableFilled(data).build
End Sub

Private Sub CreateOrReadFromCache (CacheName As String) As MiniHtml
	Select CacheName
		Case "$Endpoints$ Page", "$Endpoints$ Table"
			If MC.ExistInCache(App.ctx, CacheName) Then
				Return MC.ReadFromCache(App.ctx, CacheName)
			End If
	End Select
	Dim Segment As MiniHtml
	Select CacheName
		Case "$Endpoints$ Page"
			Segment = $Endpoints$Page
		Case "$Endpoints$ Table"
			Segment = $Endpoints$Table
		Case "$Endpoints$ Table Row"
			Segment = $Endpoints$TableRow
		Case "$Endpoints$ Add Modal"
			Segment = ModalAdd
		Case "$Endpoints$ Edit Modal"
			Segment = ModalEdit
		Case "$Endpoints$ Delete Modal"
			Segment = ModalDelete
		Case Else
			Segment.Initialize("")
	End Select
	MC.WriteToCache(App.ctx, CacheName, Segment.ConvertToBytes)
	Return Segment
End Sub

Private Sub $Endpoints$Page As MiniHtml
	Dim main1 As MainView
	main1.Initialize
	main1.LoadContent(ContainerContent)
	main1.LoadModal(MH.ContainerModal)
	main1.LoadToast(MH.ContainerToast)
	Dim page1 As MiniHtml = main1.Render
	Dim nav1 As MiniHtml = page1.ChildByClass("navbar-nav") 'ul
	If App.api.EnableHelp Then
		MH.NavLinkItem("API", "/help", "bi bi-gear me-2", "API").up(nav1)
	End If
	MH.NavLinkItem("Categories", "/categories", "bi bi-tag me-2", "Categories").up(nav1)
	Return page1
End Sub

Private Sub ContainerContent As MiniHtml
	Dim content1 As MiniHtml = MH.Row.cls("mt-3")
	Dim col12 As MiniHtml = MH.Col("md-12").up(content1)
	Dim form1 As MiniHtml = MH.Form.up(col12).cls("form mb-3")
	Dim row1 As MiniHtml = MH.Row.up(form1)
	Dim col1 As MiniHtml = MH.Col("md-6 col-lg-6").up(row1)
	Dim fg1 As MiniHtml = MH.InputGroup.up(col1)
	MH.TextLabel("Search", "input-group-text mt-2", "keyword").up(fg1)
	MH.InputSearch("form-control col-md-6 mt-2", "keyword", "keyword").up(fg1)
	MH.ButtonSearch("Submit", "btn btn-danger btn-md pl-3 pr-3 ml-3 mt-2", "/hx/products/table", "#products-container").up(fg1)
	Dim col2 As MiniHtml = MH.Div.up(row1).cls("col-md-6 col-lg-6")
	Dim div2 As MiniHtml = MH.Div.up(col2).cls("float-end mt-2")
	MH.ButtonAdd("Add Product", "btn btn-success ml-2", "/hx/products/add", "#modal-content", "click", "#modal-container", "modal").up(div2)
	MH.ContainerHxGet("products-container", "/hx/products/table", "load", "Loading...").up(col12)
	Return content1
End Sub

Public Sub $Endpoints$TableFilled (data As List) As MiniHtml
	Dim table1 As MiniHtml = CreateOrReadFromCache("$Endpoints$ Table")
	Dim tbody1 As MiniHtml = table1.ChildByName("tbody")
	tbody1.Children.Clear
	For Each row As Map In data
		Dim tr1 As MiniHtml = CreateOrReadFromCache("$Endpoints$ Table Row")
		tr1.child(0).text2(row.Get("id"))
		tr1.child(1).text2(row.Get("$endpoint$_code"))
		tr1.child(2).text2(row.Get("$endpoint$_name"))
		tr1.child(3).text2(row.Get("category_name"))
		tr1.child(4).child(0).attr("hx-get", "/hx/$endpoints$/edit/" & row.Get("id"))
		tr1.child(4).child(1).attr("hx-get", "/hx/$endpoints$/delete/" & row.Get("id"))
		tr1.up(tbody1)
	Next
	Return table1
End Sub

Private Sub $Endpoints$Table As MiniHtml
	Dim table1 As MiniHtml = MH.Table
	table1.cls("table table-bordered table-hover rounded small")
	Dim thead1 As MiniHtml = MH.Thead.cls("table-light").up(table1)
	MH.Th.up(thead1).sty("text-align: right; width: 50px").text("#")
	MH.Th.up(thead1).text("Code")
	MH.Th.up(thead1).text("Name")
	MH.Th.up(thead1).text("Category")
	MH.Th.up(thead1).sty("text-align: center; width: 120px").text("Actions")
	MH.Tbody.up(table1)
	Return table1
End Sub

Private Sub $Endpoints$TableRow As MiniHtml
	Dim tr1 As MiniHtml = MH.Tr
	MH.Td.up(tr1).cls("align-middle").sty("text-align: right")
	MH.Td.up(tr1).cls("align-middle")
	MH.Td.up(tr1).cls("align-middle")
	MH.Td.up(tr1).cls("align-middle")
	Dim td5 As MiniHtml = MH.Td.up(tr1)
	td5.cls("align-middle text-center px-1 py-1")
	MH.AnchorIcon("edit text-primary mx-2", "/hx/$endpoints$/edit/{id}", "Edit", "bi bi-pencil").up(td5)
	MH.AnchorIcon("delete text-danger mx-2", "/hx/$endpoints$/delete/{id}", "Delete", "bi bi-trash3").up(td5)
	Return tr1
End Sub

Private Sub ModalAdd As MiniHtml
	Dim form1 As MiniHtml = MH.FormHxPost("/hx/$endpoints$", "#modal-messages")
	MH.ModalHeader("Add $Endpoint$").up(form1)
	Dim mb1 As MiniHtml = MH.ModalBody.up(form1)
	MH.ModalMessage.up(mb1)
	Dim fg1 As MiniHtml = MH.FormGroup.up(mb1)
	MH.RequiredLabel("Category ", "category1").up(fg1)
	MH.RequiredDropdown("category1", "category").up(fg1)
	Dim fg2 As MiniHtml = MH.FormGroup.up(mb1)
	MH.RequiredLabel("Code ", "").up(fg2)
	MH.RequiredTextInput("", "code", "").up(fg2)
	Dim fg3 As MiniHtml = MH.FormGroup.up(mb1)
	MH.RequiredLabel("Name ", "").up(fg3)
	MH.RequiredTextInput("", "name", "").up(fg3)
	MH.ModalFooter("Create", "Cancel", "success", "secondary").up(form1)
	Return form1
End Sub

Private Sub ModalEdit As MiniHtml
	Dim form1 As MiniHtml = MH.FormHxPut("/hx/$endpoints$", "#modal-messages")
	MH.ModalHeader("Edit $Endpoint$").up(form1)
	Dim mb1 As MiniHtml = MH.ModalBody.up(form1)
	MH.ModalMessage.up(mb1)
	MH.HiddenInput("id", "id", "").up(mb1)
	Dim fg1 As MiniHtml = MH.FormGroup.up(mb1)
	MH.RequiredLabel("Category ", "category2").up(fg1)
	Dim dd1 As MiniHtml = MH.RequiredDropdown("category2", "category").up(fg1) 'dropdown
	MH.Option.up(dd1).attr("value", "").text("Select Category")
	Dim fg2 As MiniHtml = MH.FormGroup.up(mb1)
	MH.RequiredLabel("Code ", "").up(fg2)
	MH.RequiredTextInput("code", "code", "").up(fg2)
	Dim fg3 As MiniHtml = MH.FormGroup.up(mb1)
	MH.RequiredLabel("Name ", "").up(fg3)
	MH.RequiredTextInput("name", "name", "").up(fg3)
	MH.ModalFooter("Update", "Cancel", "primary", "secondary").up(form1)
	Return form1
End Sub

Private Sub ModalDelete As MiniHtml
	Dim form1 As MiniHtml = MH.FormHxDelete("/hx/$endpoints$", "#modal-messages")
	MH.ModalHeader("Delete $Endpoint$").up(form1)
	Dim ModalBody As MiniHtml = MH.ModalBody.up(form1)
	MH.ModalMessage.up(ModalBody)
	MH.HiddenInput("id", "id", "").up(ModalBody)
	MH.P.up(ModalBody).Id = "p1"
	MH.ModalFooter("Delete", "Cancel", "danger", "secondary").up(form1)
	Return form1