app.AddDataModel("people", "id", false)
app.AddDataModelLongTexts("people", Array("profiledisplay","clannames"))
app.AddDataModelStrings("people", Array("id","gender","firstname","middlename","lastname","suffix","dateofbirth","placeofbirth","dateofdeath","placeofdeath","father","mother","parentsstatus"))
app.AddDataModelBooleans("people", Array("isliving"))
drawermenu.AddMenuItemIconText("pg-people", "", "People", False)
Case "people"
pgPeople.Show(App)
CREATE TABLE IF NOT EXISTS `people` (`id` VARCHAR(255) PRIMARY KEY, `profiledisplay` LONGTEXT, `gender` VARCHAR(255), `firstname` VARCHAR(255), `middlename` VARCHAR(255), `lastname` VARCHAR(255), `suffix` VARCHAR(255), `dateofbirth` VARCHAR(255), `isliving` BOOL, `placeofbirth` VARCHAR(255), `dateofdeath` VARCHAR(255), `placeofdeath` VARCHAR(255), `father` VARCHAR(255), `mother` VARCHAR(255), `parentsstatus` VARCHAR(255), `clannames` LONGTEXT)
Sub Process_Globals
Private BANano As BANano
Private app As SDUI5App
Private tblPeople As SDUI5Table
Private prefPeople As SDUI5Preferences
Private SDUI5Column1 As SDUI5Column
Private SDUI5Column2 As SDUI5Column2
Private Mode As String = ""
Private toDeleteID As String
Private toDeleteName As String
Public name As String = "people"
Public title As String = "People"
Public icon As String = "./assets/page.svg"
Public color As String = "#000000"
Private PeopleObject As Map
Private PeopleObjectM As Map
End Sub
Public Sub Show(MainApp As SDUI5App)
app = MainApp
app.PagePause
BANano.LoadLayout(app.PageView, "peopleview")
pgIndex.UpdateTitle("People")
tblPeople.Title = "People"
BANano.Await(BuildTablePeople)
BANano.Await(BuildPreferencePeople)
BANano.Await(MountPeople)
app.PageResume
End Sub
Private Sub BuildTablePeople
tblPeople.Title = "People"
tblPeople.HasAlphaChooser = true
tblPeople.AlphaChooserColumn = "firstname"
tblPeople.HasColumnChooser = true
tblPeople.AddNewTooltip = "Add a Person"
tblPeople.RefreshTooltip = "Refresh People"
tblPeople.BackTooltip = "Go back to Dashboard"
tblPeople.HasEdit = True
tblPeople.EditTooltip = "Edit Person"
tblPeople.HasClone = True
tblPeople.CloneTooltip = "Clone Person"
tblPeople.HasDelete = True
tblPeople.DeleteTooltip = "Delete Person"
tblPeople.AlphaChooserColumn = "firstname"
tblPeople.AddColumn("id", "#")
tblPeople.SetColumnVisible("id", False)
tblPeople.AddColumnAvatar("profiledisplay", "Profile Display", "80px", "circle")
tblPeople.AddColumnBadge("gender", "Gender", "neutral")
tblPeople.AddColumnTextBox("firstname", "First Name", false)
tblPeople.AddColumnTextBox("middlename", "Middle Name", false)
tblPeople.SetColumnVisible("middlename", False)
tblPeople.AddColumnTextBox("lastname", "Last Name", false)
tblPeople.AddColumnTextBox("suffix", "Suffix", false)
tblPeople.SetColumnVisible("suffix", False)
tblPeople.AddColumnDatePicker("dateofbirth", "Date of Birth", false, "Y-m-d", "F j, Y", False, false, False, "en")
tblPeople.AddColumnCheckBox("isliving", "Living", "success", false)
tblPeople.AddColumnTextBox("placeofbirth", "Place of Birth", false)
tblPeople.SetColumnVisible("placeofbirth", False)
tblPeople.AddColumnDatePicker("dateofdeath", "Date of Death", false, "Y-m-d", "F j, Y", False, false, False, "en")
tblPeople.SetColumnVisible("dateofdeath", False)
tblPeople.AddColumnTextBox("placeofdeath", "Place of Death", false)
tblPeople.SetColumnVisible("placeofdeath", False)
tblPeople.AddColumnSelect("father", "Father", false, True, CreateMap())
tblPeople.SetColumnVisible("father", False)
tblPeople.AddColumnSelect("mother", "Mother", false, True, CreateMap())
tblPeople.SetColumnVisible("mother", False)
tblPeople.AddColumnSelect("parentsstatus", "Parents Status", false, True, CreateMap("married":"Married","divorced":"Divorced","nevermarried":"Never Married","other":"Other","separated":"Separated"))
tblPeople.SetColumnVisible("parentsstatus", False)
tblPeople.AddDesignerColums
tblPeople.MoveBackButton
End Sub
Private Sub BuildPreferencePeople
prefPeople.AddPropertyTextBox("id", "#", "", true)
prefPeople.SetPropertyVisible("id", False)
prefPeople.AddPropertyAvatar("profiledisplay", "Profile Display", "80px", "circle", "./assets/mashy.jpg")
prefPeople.SetPropertyAvatarRing("profiledisplay", false, "primary", "2", "base-100")
prefPeople.SetPropertyAvatarOnline("profiledisplay", false, false)
prefPeople.AddPropertyCamera("selectprofile", "Choose Profile Image", "80px", "42px", "error", "#ffffff")
Dim genderoptions As Map
genderoptions.Initialize
genderoptions.put("Male", "Male")
genderoptions.put("Female", "Female")
prefPeople.AddPropertyRadioGroup("gender", "Gender", "Male", "neutral", "#22c55e", genderoptions)
prefPeople.AddPropertyTextBox("firstname", "First Name", "", true)
prefPeople.AddPropertyTextBox("middlename", "Middle Name", "", false)
prefPeople.AddPropertyTextBox("lastname", "Last Name", "", true)
prefPeople.AddPropertyTextBox("suffix", "Suffix", "", false)
prefPeople.AddPropertyDatePicker("dateofbirth", "Date of Birth", "", false, "Y-m-d", "F j, Y", "en")
prefPeople.AddPropertyCheckBox("isliving", "Living", true, "success")
prefPeople.SetPropertyChecked("isliving", true)
prefPeople.AddPropertyTextBox("placeofbirth", "Place of Birth", "", false)
prefPeople.AddPropertyDatePicker("dateofdeath", "Date of Death", "", false, "Y-m-d", "F j, Y", "en")
prefPeople.AddPropertyTextBox("placeofdeath", "Place of Death", "", false)
Dim fatheroptions As Map
fatheroptions.Initialize
prefPeople.AddPropertySelect("father", "Father", "", false, fatheroptions)
Dim motheroptions As Map
motheroptions.Initialize
prefPeople.AddPropertySelect("mother", "Mother", "", false, motheroptions)
Dim parentsstatusoptions As Map
parentsstatusoptions.Initialize
parentsstatusoptions.put("married", "Married")
parentsstatusoptions.put("divorced", "Divorced")
parentsstatusoptions.put("nevermarried", "Never Married")
parentsstatusoptions.put("other", "Other")
parentsstatusoptions.put("separated", "Separated")
prefPeople.AddPropertyFilter("parentsstatus", "Parents Status", "married", "neutral", "#22c55e", parentsstatusoptions)
prefPeople.AddPropertyTextArea("clannames", "Clan Names", "", false, "4")
End Sub
Private Sub MountPeople
SDUI5Column1.Size = 12
SDUI5Column2.Visible = False
app.PagePause
BANano.Await(LoadPeople)
Dim db As SDUIMySQLREST
db.Initialize(Me, "people", Main.ServerURL, "people")
db.SetSchemaFromDataModel(app.DataModels)
db.ApiFile = "api"
db.UseApiKey = True
db.ApiKey = Main.APIKey
db.CLEAR_WHERE
db.ADD_ORDER_BY("firstname")
db.ADD_ORDER_BY("lastname")
BANano.Await(db.SELECT_ALL)
tblPeople.SetColumnOptions("father", peopleObject)
tblPeople.SetColumnOptions("mother", peopleObject)
tblPeople.SetItemsPaginate(db.result)
app.PageResume
End Sub
Private Sub tblPeople_Add (e As BANanoEvent)
e.preventdefault
app.PagePause
BANano.Await(LoadPeople)
BANano.Await(AddMode)
app.PageResume
End Sub
Private Sub tblPeople_Refresh (e As BANanoEvent)
e.PreventDefault
app.PagePause
BANano.Await(MountPeople)
app.pageresume
End Sub
Private Sub tblPeople_Back (e As BANanoEvent)
e.preventdefault
pgDashboard.Show(app)
End Sub
private Sub AddMode
Mode = "C"
SDUI5Column1.Size = 8
SDUI5Column2.Visible = True
prefPeople.Title = "Add Person"
BANano.Await(prefPeople.SetPropertySelectMap("father", peopleObject))
BANano.Await(prefPeople.SetPropertySelectMap("mother", peopleObject))
BANano.Await(prefPeople.SetPropertyBagDefaults)
prefPeople.SetPropertyValue("id", app.NextID)
prefPeople.SetPropertyFocus("firstname")
End Sub
private Sub EditMode(item As Map)
Mode = "U"
SDUI5Column1.Size = 8
SDUI5Column2.Visible = True
prefPeople.Title = "Edit Person"
BANano.Await(prefPeople.SetPropertySelectMap("father", peopleObject))
BANano.Await(prefPeople.SetPropertySelectMap("mother", peopleObject))
banano.Await(prefPeople.SetPropertyBagDefaults)
item.Remove("selectprofile")
prefPeople.PropertyBag = item
prefPeople.SetPropertyFocus("firstname")
End Sub
private Sub CloneMode(item As Map)
Mode = "C"
SDUI5Column1.Size = 8
SDUI5Column2.Visible = True
prefPeople.Title = "Add Person"
BANano.Await(prefPeople.SetPropertySelectMap("father", peopleObject))
BANano.Await(prefPeople.SetPropertySelectMap("mother", peopleObject))
banano.Await(prefPeople.SetPropertyBagDefaults)
item.Put("id", app.NextID)
item.Remove("selectprofile")
prefPeople.PropertyBag = item
prefPeople.SetPropertyFocus("firstname")
End Sub
Private Sub tblPeople_EditRow (Row As Int, item As Map)
app.pagepause
BANano.Await(LoadPeople)
Dim sID As String = item.Get("id")
Dim db As SDUIMySQLREST
db.Initialize(Me, "people", Main.ServerURL, "people")
db.SetSchemaFromDataModel(app.DataModels)
db.ApiFile = "api"
db.UseApiKey = True
db.ApiKey = Main.APIKey
Dim rec As Map = BANano.Await(db.READ(sID))
BANano.Await(EditMode(rec))
app.pageresume
End Sub
Private Sub tblPeople_DeleteRow (Row As Int, item As Map)
toDeleteID = item.Get("id")
toDeleteName = item.Get("firstname")
Dim sMsg As String = $"<h2 class="text-2xl font-bold mt-2">${toDeleteName}</h2><br>Are you sure that you want to delete this Person?"$
Dim bConfirm As Boolean = BANano.Await(app.ShowSwalConfirmWait("Confirm Delete", sMsg, "Yes", "No"))
If bConfirm = False Then Return
app.pagepause
Dim db As SDUIMySQLREST
db.Initialize(Me, "people", Main.ServerURL, "people")
db.SetSchemaFromDataModel(app.DataModels)
db.ApiFile = "api"
db.UseApiKey = True
db.ApiKey = Main.APIKey
BANano.Await(db.DELETE(toDeleteID))
BANano.Await(MountPeople)
app.pageresume
End Sub
Private Sub tblPeople_CloneRow (Row As Int, item As Map)
app.PagePause
BANano.Await(LoadPeople)
Dim sID As String = item.Get("id")
Dim db As SDUIMySQLREST
db.Initialize(Me, "people", Main.ServerURL, "people")
db.SetSchemaFromDataModel(app.DataModels)
db.ApiFile = "api"
db.UseApiKey = True
db.ApiKey = Main.APIKey
Dim rec As Map = BANano.Await(db.READ(sID))
BANano.Await(CloneMode(rec))
app.PageResume
End Sub
Private Sub tblPeople_ChangeRow (Row As Int, Value As Object, Column As String, item As Map)
item.Remove("selectprofile")
item.Put(Column, Value)
tblPeople.UpdateRow(Row, item)
tblPeople.SaveLastAccessedPage
Dim db As SDUIMySQLREST
db.Initialize(Me, "people", Main.ServerURL, "people")
db.SetSchemaFromDataModel(app.DataModels)
db.ApiFile = "api"
db.UseApiKey = True
db.ApiKey = Main.APIKey
db.SetRecord(item)
Dim newid As String = banano.Await(db.UPDATE)
If newid <> "" Then
app.ShowSwalSuccess("The Person has been saved!")
Else
app.ShowSwalError("The Person could not be saved, please try again!")
Return
End If
banano.Await(MountPeople)
banano.Await(tblPeople.ShowLastAccessedPage)
tblPeople.SetRowEnsureVisible(Row)
End Sub
Private Sub prefPeople_Yes_Click (e As BANanoEvent)
e.PreventDefault
Dim bValid As Boolean = BANano.Await(prefPeople.IsPropertyBagValid)
If bValid = False Then
BANano.Await(app.ShowSwalErrorWait("Person", "The person details are not complete!", "Ok"))
Return
End If
Dim pb As Map = BANano.Await(prefPeople.PropertyBag)
pb.Remove("selectprofile")
app.pagepause
Dim db As SDUIMySQLREST
db.Initialize(Me, "people", Main.ServerURL, "people")
db.SetSchemaFromDataModel(app.DataModels)
db.ApiFile = "api"
db.UseApiKey = True
db.ApiKey = Main.APIKey
db.SetRecord(pb)
Select Case Mode
Case "C"
Dim nid As String = BANano.Await(db.CREATE)
Case "U"
Dim nid As String = BANano.Await(db.UPDATE)
End Select
If nid <> "" Then
app.ShowToastSuccess("Person has been created/updated.")
Else
app.ShowToastError("Person has NOT been created/updated. Please try again")
Return
End If
BANano.Await(MountPeople)
app.pageresume
End Sub
Private Sub prefPeople_No_Click (e As BANanoEvent)
SDUI5Column1.Size = 12
SDUI5Column2.Visible = False
End Sub
Private Sub prefPeople_selectprofile_filechange(e As BANanoEvent)
e.PreventDefault
Dim fileObj As Map = prefPeople.GetFileFromEvent(e)
If banano.IsNull(fileObj) Or banano.IsUndefined(fileObj) Then Return
Dim fileDet As FileObject
fileDet = App.UI.GetFileDetails(fileObj)
Dim fn As String = fileDet.FileName
Dim fs As Long = fileDet.FileSize
Dim maxSize As Int = App.UI.ToKiloBytes(500)
If fs > maxSize Then
app.ShowToastError("File Size is limited to 500KB!")
Return
End If
Dim fText As String = BANano.Await(app.readAsDataURLWait(fileObj))
prefPeople.SetPropertyValue("profiledisplay", fText)
End Sub
Private Sub LoadPeople
PeopleObject.Initialize
PeopleObjectM.Initialize
Dim db As SDUIMySQLREST
db.Initialize(Me, "people", Main.ServerURL, "people")
db.SetSchemaFromDataModel(app.DataModels)
db.ApiFile = "api"
db.UseApiKey = True
db.ApiKey = Main.APIKey
db.CLEAR_WHERE
db.ADD_ORDER_BY("firstname")
db.ADD_ORDER_BY("lastname")
db.ADD_FIELDS(Array("firstname","id","lastname"))
BANano.Await(db.SELECT_ALL)
Do While db.NextRow
Dim rec As Map = db.Record
Dim sid As String = db.GetString("id")
Dim sfirstname As String = db.GetString("firstname")
Dim slastname As String = db.GetString("lastname")
peopleObject.Put(sid, sfirstname & " " & slastname)
peopleObjectM.Put(sid, rec)
Loop
End Sub