Admin table contents is now using the jzed stuff instead of alpine.js

master
Zed A. Shaw 3 days ago
parent 0c09308dd4
commit 351b2d40d0
  1. 14
      admin/table/db.go
  2. 16
      admin/table/pages.go
  3. 35
      views/admin/table/contents.html

@ -8,6 +8,20 @@ import (
sq "github.com/Masterminds/squirrel" sq "github.com/Masterminds/squirrel"
) )
func Schema(table string) []string {
the_type := data.Models()[table]
field_num := the_type.NumField()
fields := make([]string, 0, field_num)
for i := 0; i < field_num; i++ {
tag := the_type.Field(i).Name
fields = append(fields, tag)
}
return fields
}
func SearchTable(search string, table string, limit uint64, page uint64) ([]any, error) { func SearchTable(search string, table string, limit uint64, page uint64) ([]any, error) {
var results []any var results []any

@ -19,10 +19,24 @@ func GetPageSelectOne(c *fiber.Ctx) error {
}) })
} }
func GetPageContent(c *fiber.Ctx) error {
_, err := AuthCheck(c, true)
if err != nil { return c.Redirect("/") }
table := c.Params("table")
headers := Schema(table)
return c.Render("admin/table/contents", fiber.Map{
"table": table,
"headers": headers,
})
}
func SetupPages(app *fiber.App) { func SetupPages(app *fiber.App) {
AddAuthedPage(app, true, "admin/table/", "admin/table/index") AddAuthedPage(app, true, "admin/table/", "admin/table/index")
AddAuthedPage(app, true, "admin/table/:table/", "admin/table/contents")
AddAuthedPage(app, true, "admin/table/new/:table/", "admin/table/new") AddAuthedPage(app, true, "admin/table/new/:table/", "admin/table/new")
app.Get("admin/table/:table/", GetPageContent)
app.Get("/admin/table/:table/:id/", GetPageSelectOne) app.Get("/admin/table/:table/:id/", GetPageSelectOne)
} }

@ -1,21 +1,9 @@
<script> <script>
let thePage = new PaginateTable("/api/admin/table/{{ .table }}"); let thePage = new PaginateTable("/api/admin/table/{{ .table }}");
const craftTemplate = (example) => {
const tmpl = $id('table-row');
const tr = tmpl.content.children[0];
for(let header of Object.keys(example)) {
$append(tr,
$html("<td><a style='text-decoration: none' href='/admin/table/{{.table}}/${item.Id}/'>${item['" + header + "']}</a></td>"));
}
return tmpl;
}
$boot(async () => { $boot(async () => {
const items = await thePage.contents(); const items = await thePage.contents();
const tmpl = craftTemplate(items[0]); const tmpl = $id('table-row');
const rows = $id('table-items'); const rows = $id('table-items');
for(let item of items) { for(let item of items) {
@ -35,10 +23,27 @@
<input type="text" name="search" size="40" placeholder="Search" /> <input type="text" name="search" size="40" placeholder="Search" />
</bar> </bar>
<table id="table-items"> <table>
<thead>
<tr>
{{ range $header := .headers }}
<th>{{ $header }}</th>
{{ end }}
</tr>
</thead>
<tbody id="table-items">
</tbody>
</table> </table>
<template id="table-row"> <template id="table-row">
<tr class="table-row"></tr> <tr class="table-row">
{{ range $header := .headers }}
<td>
<a style='text-decoration: none' href='/admin/table/{{ $.table }}/${item.Id}/'>
${item["{{$header}}"]}
</a>
</td>
{{ end }}
</tr>
</template> </template>
</block> </block>

Loading…
Cancel
Save