Add button to create a new List

This commit is contained in:
Alessio 2024-02-25 21:31:49 -08:00
parent e2952d0fda
commit 26a18592fa
3 changed files with 53 additions and 0 deletions

View File

@ -3,10 +3,12 @@ package webserver
import (
"context"
"errors"
"io"
"fmt"
"net/http"
"strconv"
"strings"
"encoding/json"
"gitlab.com/offline-twitter/twitter_offline_engine/pkg/persistence"
. "gitlab.com/offline-twitter/twitter_offline_engine/pkg/scraper"
@ -140,6 +142,21 @@ func (app *Application) Lists(w http.ResponseWriter, r *http.Request) {
return
}
// New list
if r.Method == "POST" {
var formdata struct {
Name string `json:"name"`
}
data, err := io.ReadAll(r.Body)
panic_if(err)
err = json.Unmarshal(data, &formdata)
panic_if(err)
new_list := List{Name: formdata.Name}
app.Profile.SaveList(&new_list)
http.Redirect(w, r, fmt.Sprintf("/lists/%d/users", new_list.ID), 302)
return
}
// List index
lists := app.Profile.GetAllLists()
trove := NewTweetTrove()

View File

@ -666,6 +666,30 @@ func TestListAddAndDeleteUser(t *testing.T) {
assert.Len(cascadia.QueryAll(root, selector(".users-list-container .author-info")), 2)
}
func TestCreateNewList(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
// Initial list-of-lists
resp := do_request(httptest.NewRequest("GET", "/lists", nil))
require.Equal(resp.StatusCode, 200)
root, err := html.Parse(resp.Body)
require.NoError(err)
num_lists := len(cascadia.QueryAll(root, selector(".users-list-preview")))
// Create a new list
resp_add := do_request(httptest.NewRequest("POST", "/lists", strings.NewReader(`{"name": "My New List"}`)))
require.Equal(resp_add.StatusCode, 302)
require.Equal(fmt.Sprintf("/lists/%d/users", num_lists + 1), resp_add.Header.Get("Location"))
// Should be N+1 lists now
resp = do_request(httptest.NewRequest("GET", "/lists", nil))
require.Equal(resp.StatusCode, 200)
root, err = html.Parse(resp.Body)
require.NoError(err)
assert.Len(cascadia.QueryAll(root, selector(".users-list-preview")), num_lists + 1)
}
// Messages
// --------

View File

@ -2,6 +2,18 @@
{{define "main"}}
<h1>Lists</h1>
<button onclick="document.querySelector('#newListDialog').showModal()">New list</button>
<dialog id="newListDialog">
<h3>Create new list</h3>
<form hx-post="/lists" hx-ext="json-enc" hx-target="body" hx-push-url="true">
<label for="name">Name</label>
<input name="name" />
<input type="submit" value="Create" />
</form>
<button onclick="document.querySelector('#newListDialog').close()">Cancel</button>
</dialog>
<div class="users-list-previews">
{{range .}}
{{$max_display_users := 10}}