Almost have pagination working. On the backend it works but I can't figure out how to make alpine do the request and update.

main
Zed A. Shaw 3 days ago
parent c8ece708c3
commit 52e92a3814
  1. 4
      admin/db.go
  2. 24
      admin/handlers.go
  3. 26
      views/admin/table/contents.html

@ -8,9 +8,9 @@ import (
sq "github.com/Masterminds/squirrel"
)
func SelectTable(table string, the_type reflect.Type, limit uint64, offset uint64) ([]interface{}, error) {
func SelectTable(table string, the_type reflect.Type, limit uint64, page uint64) ([]interface{}, error) {
var results []interface{}
sql_query, args, err := sq.Select("*").Limit(limit).Offset(offset).From(table).ToSql()
sql_query, args, err := sq.Select("*").Limit(limit).Offset(limit * page).From(table).ToSql()
if err != nil { return results, err }
rows, err := data.DB.Queryx(sql_query, args...)

@ -2,7 +2,6 @@ package admin
import (
"maps"
"strconv"
"reflect"
"fmt"
"github.com/gofiber/fiber/v2"
@ -23,10 +22,13 @@ func GetApiTableIndex(c *fiber.Ctx) error {
func GetApiSelectAll(c *fiber.Ctx) error {
table := c.Params("table")
if table == "" { return c.Redirect("/admin/") }
type_is := data.Models()[table]
result, err := SelectTable(table, type_is, 20, 0);
page := c.QueryInt("page", 0)
fmt.Println("-------------------------", page)
if page < 0 { page = 0 }
result, err := SelectTable(table, type_is, 20, uint64(page));
if err != nil { return IfErrNil(err, c) }
return c.JSON(result)
@ -38,12 +40,12 @@ func GetPageSelectAll(c *fiber.Ctx) error {
func GetApiSelectOne(c *fiber.Ctx) error {
table := c.Params("table")
id, err := strconv.ParseInt(c.Params("id"), 10, 64)
if err != nil { return IfErrNil(err, c) }
id, err := c.ParamsInt("id", -1)
if err != nil || id < 0 { return IfErrNil(err, c) }
type_is := data.Models()[table]
result, err := Get(table, type_is, id)
result, err := Get(table, type_is, int64(id))
if err != nil { return IfErrNil(err, c) }
return c.JSON(result.Interface())
@ -51,8 +53,8 @@ func GetApiSelectOne(c *fiber.Ctx) error {
func GetPageSelectOne(c *fiber.Ctx) error {
table := c.Params("table")
id, err := strconv.ParseInt(c.Params("id"), 10, 64)
if err != nil { return IfErrNil(err, c) }
id, err := c.ParamsInt("id", -1)
if err != nil || id < 0 { return IfErrNil(err, c) }
return c.Render("admin/table/view", fiber.Map{
"Table": table,
@ -100,10 +102,10 @@ func PostApiInsert(c *fiber.Ctx) error {
func DeleteApi(c *fiber.Ctx) error {
table := c.Params("table")
id, err := strconv.ParseInt(c.Params("id"), 10, 64)
if err != nil { return IfErrNil(err, c) }
id, err := c.ParamsInt("id", -1)
if err != nil || id < 0 { return IfErrNil(err, c) }
err = Delete(table, id)
err = Delete(table, int64(id))
if err != nil { return IfErrNil(err, c) }
return c.JSON(fiber.Map{})

@ -1,13 +1,25 @@
<script>
let Tables = new GetJson("/api/admin/table/{{ .Table }}/")
console.log("Tables", Tables)
let page = 0;
let Tables = new GetJson(`/api/admin/table/{{ .Table }}/?page=${page}`);
const newPage = (new_page_num) => {
console.log("the function");
page = new_page_num;
new GetJson(`/api/admin/table/{{ .Table }}/?page=${page}`);
}
</script>
<blockstart>
<h1>Admin Tables</h1>
<h1><a href="/admin/table/">&laquo;</a> Admin {{ .Table }}</h1>
<block x-data="Tables">
<button type="button"><a href="/admin/new/table/{{ .Table }}/">New</a></button>
<block x-data="Tables" x-effect="newPage(page)">
<block class="horizontal">
<button type="button"><a href="/admin/new/table/{{ .Table }}/">New</a></button>
<button type="button" @click="page -= 1">Prev</button>
<button type="button" @click="page += 1">Next</button>
<input type="text" name="search" size="35" placeholder="Search" />
<button type="button">Search</button>
</block>
<table>
<template x-for="item in theData">
<tr>
@ -22,10 +34,6 @@
</tr>
</template>
</table>
<block class="horizontal">
<a href="/admin/table/{{.Table}}/?page=2">Prev</a>
<a href="/admin/table/{{.Table}}/?page=2">Next</a>
</block>
</block>
</blockstart>

Loading…
Cancel
Save