From e7f8529f90107d8ef29faa570cb7ba00b091beb9 Mon Sep 17 00:00:00 2001 From: "ognev.dev" Date: Wed, 25 Feb 2026 15:50:27 +0500 Subject: [PATCH 1/3] fix topics limit --- frontend/page/create_book.templ | 2 +- frontend/page/create_book_templ.go | 2 +- frontend/page/edit_book.templ | 2 +- frontend/page/edit_book_templ.go | 2 +- frontend/page/filter_books.templ | 2 +- frontend/page/filter_books_templ.go | 2 +- frontend/page/home.templ | 1 - frontend/page/home_templ.go | 2 +- 8 files changed, 7 insertions(+), 8 deletions(-) diff --git a/frontend/page/create_book.templ b/frontend/page/create_book.templ index e984abe..4103984 100644 --- a/frontend/page/create_book.templ +++ b/frontend/page/create_book.templ @@ -63,7 +63,7 @@ templ CreateBookForm() { this.loadError = '' try { - const { resp, data } = await HTTP.requestJSON(`/api/topics/?type=book`, { method: 'GET' }) + const { resp, data } = await HTTP.requestJSON(`/api/topics/?type=book&per_page=100`, { method: 'GET' }) if (resp.status !== 200) { this.loadError = data?.error || 'Failed to load topics' return diff --git a/frontend/page/create_book_templ.go b/frontend/page/create_book_templ.go index c1ba390..c726fe0 100644 --- a/frontend/page/create_book_templ.go +++ b/frontend/page/create_book_templ.go @@ -34,7 +34,7 @@ func CreateBookForm() templ.Component { templ_7745c5c3_Var1 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "

Add Book

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "

Add Book

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/frontend/page/edit_book.templ b/frontend/page/edit_book.templ index 784c09e..ee30cbf 100644 --- a/frontend/page/edit_book.templ +++ b/frontend/page/edit_book.templ @@ -90,7 +90,7 @@ templ EditBookForm(bookID string) { this.loadError = '' try { - const { resp, data } = await HTTP.requestJSON(`/api/topics/?type=book`, { method: 'GET' }) + const { resp, data } = await HTTP.requestJSON(`/api/topics/?type=book&per_page=100`, { method: 'GET' }) if (resp.status !== 200) { this.loadError = data?.error || 'Failed to load topics' return diff --git a/frontend/page/edit_book_templ.go b/frontend/page/edit_book_templ.go index 6c256f2..2c3017a 100644 --- a/frontend/page/edit_book_templ.go +++ b/frontend/page/edit_book_templ.go @@ -47,7 +47,7 @@ func EditBookForm(bookID string) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "\"\r\n\r\n function editBookForm() {\r\n return {\r\n ...FormHelpers.makeForm({\r\n defaults: BOOK_FORM_DEFAULTS,\r\n submit: async function () {\r\n const { resp, data } = await HTTP.putJSON(`/api/books/${BOOK_ID}/`, this.form)\r\n\r\n if (resp.status === 200) {\r\n this.saveRevision = data?.revision ?? 0\r\n this.needReview = data?.status === `pending` ?? false\r\n this.success = true\r\n return\r\n }\r\n\r\n if (data?.error) this.error = data.error\r\n FormHelpers.applyInputErrors(this.errors, data?.input_errors)\r\n },\r\n }),\r\n\r\n topics: [],\r\n ...TopicPicker.make(),\r\n\r\n revision: null,\r\n revision_date: null,\r\n saveRevision: null,\r\n needReview: true,\r\n\r\n // page state\r\n loading: true,\r\n loadError: '',\r\n book: null,\r\n updatedBook: null,\r\n\r\n // uploader (init() to bind callbacks to Alpine proxy)\r\n upload: null,\r\n\r\n get bookURL() {\r\n return `/books/${BOOK_ID}/`\r\n },\r\n\r\n get revisionDateFormatted() {\r\n if (!this.revision_date) return ''\r\n\r\n return new Date(this.revision_date).toLocaleString('en-US', {\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n month: 'short',\r\n hour12: false,\r\n day: '2-digit'\r\n })\r\n\r\n },\r\n\r\n async init() {\r\n // init uploader\r\n this.upload = FileUpload.makeFileUpload({\r\n purpose: 'book-cover',\r\n onUploaded: (id) => { this.form.cover_file_id = id },\r\n onRemoved: () => { this.form.cover_file_id = '' },\r\n })\r\n\r\n this.loading = true\r\n this.loadError = ''\r\n\r\n try {\r\n const { resp, data } = await HTTP.requestJSON(`/api/topics/?type=book`, { method: 'GET' })\r\n if (resp.status !== 200) {\r\n this.loadError = data?.error || 'Failed to load topics'\r\n return\r\n }\r\n\r\n this.topics = data?.data ?? []\r\n } catch (err) {\r\n console.error(err)\r\n this.loadError = 'Failed to load topics'\r\n } finally {\r\n this.loading = false\r\n }\r\n\r\n this.loading = true\r\n this.loadError = ''\r\n\r\n try {\r\n const { resp, data } = await HTTP.requestJSON(`/api/books/${BOOK_ID}/edit/`, { method: 'GET' })\r\n if (resp.status !== 200) {\r\n this.loadError = data?.error || 'Failed to load book'\r\n return\r\n }\r\n\r\n this.book = data.data || null\r\n this.revision = data?.revision ?? null\r\n this.revision_date = data?.revision_date ?? null\r\n\r\n for (const k of Object.keys(BOOK_FORM_DEFAULTS)) {\r\n if (k in (data.data || {})) this.form[k] = data.data[k] ?? BOOK_FORM_DEFAULTS[k]\r\n }\r\n\r\n const topicByPublicID = new Map((this.topics ?? []).map(t => [t.public_id, t.id]))\r\n const bookTopicPublicIDs = data.data?.topics ?? []\r\n this.form.topics = bookTopicPublicIDs\r\n .map(pid => topicByPublicID.get(pid))\r\n .filter(Boolean)\r\n } catch (err) {\r\n console.error(err)\r\n this.loadError = 'Failed to load book'\r\n } finally {\r\n this.loading = false\r\n }\r\n },\r\n\r\n addAuthorRow() {\r\n this.form.authors.push({ name: '', link: '' })\r\n },\r\n\r\n removeAuthorRow(i) {\r\n if (this.form.authors.length <= 1) return\r\n this.form.authors.splice(i, 1)\r\n },\r\n\r\n\r\n dragIndex: null,\r\n dragOverIndex: null,\r\n\r\n onAuthorDragStart(i) {\r\n this.dragIndex = i\r\n },\r\n\r\n onAuthorDragOver(e, i) {\r\n e.preventDefault()\r\n this.dragOverIndex = i\r\n },\r\n\r\n onAuthorDrop(i) {\r\n if (this.dragIndex === null || this.dragIndex === i) {\r\n this.dragOverIndex = null\r\n return\r\n }\r\n\r\n const moved = this.form.authors.splice(this.dragIndex, 1)[0]\r\n this.form.authors.splice(i, 0, moved)\r\n\r\n this.dragIndex = null\r\n this.dragOverIndex = null\r\n },\r\n\r\n onAuthorDragLeave(i) {\r\n if (this.dragOverIndex === i) this.dragOverIndex = null\r\n },\r\n\r\n onAuthorDragEnd() {\r\n this.dragIndex = null\r\n this.dragOverIndex = null\r\n },\r\n }\r\n }\r\n

Edit Book

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "\"\r\n\r\n function editBookForm() {\r\n return {\r\n ...FormHelpers.makeForm({\r\n defaults: BOOK_FORM_DEFAULTS,\r\n submit: async function () {\r\n const { resp, data } = await HTTP.putJSON(`/api/books/${BOOK_ID}/`, this.form)\r\n\r\n if (resp.status === 200) {\r\n this.saveRevision = data?.revision ?? 0\r\n this.needReview = data?.status === `pending` ?? false\r\n this.success = true\r\n return\r\n }\r\n\r\n if (data?.error) this.error = data.error\r\n FormHelpers.applyInputErrors(this.errors, data?.input_errors)\r\n },\r\n }),\r\n\r\n topics: [],\r\n ...TopicPicker.make(),\r\n\r\n revision: null,\r\n revision_date: null,\r\n saveRevision: null,\r\n needReview: true,\r\n\r\n // page state\r\n loading: true,\r\n loadError: '',\r\n book: null,\r\n updatedBook: null,\r\n\r\n // uploader (init() to bind callbacks to Alpine proxy)\r\n upload: null,\r\n\r\n get bookURL() {\r\n return `/books/${BOOK_ID}/`\r\n },\r\n\r\n get revisionDateFormatted() {\r\n if (!this.revision_date) return ''\r\n\r\n return new Date(this.revision_date).toLocaleString('en-US', {\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n month: 'short',\r\n hour12: false,\r\n day: '2-digit'\r\n })\r\n\r\n },\r\n\r\n async init() {\r\n // init uploader\r\n this.upload = FileUpload.makeFileUpload({\r\n purpose: 'book-cover',\r\n onUploaded: (id) => { this.form.cover_file_id = id },\r\n onRemoved: () => { this.form.cover_file_id = '' },\r\n })\r\n\r\n this.loading = true\r\n this.loadError = ''\r\n\r\n try {\r\n const { resp, data } = await HTTP.requestJSON(`/api/topics/?type=book&per_page=100`, { method: 'GET' })\r\n if (resp.status !== 200) {\r\n this.loadError = data?.error || 'Failed to load topics'\r\n return\r\n }\r\n\r\n this.topics = data?.data ?? []\r\n } catch (err) {\r\n console.error(err)\r\n this.loadError = 'Failed to load topics'\r\n } finally {\r\n this.loading = false\r\n }\r\n\r\n this.loading = true\r\n this.loadError = ''\r\n\r\n try {\r\n const { resp, data } = await HTTP.requestJSON(`/api/books/${BOOK_ID}/edit/`, { method: 'GET' })\r\n if (resp.status !== 200) {\r\n this.loadError = data?.error || 'Failed to load book'\r\n return\r\n }\r\n\r\n this.book = data.data || null\r\n this.revision = data?.revision ?? null\r\n this.revision_date = data?.revision_date ?? null\r\n\r\n for (const k of Object.keys(BOOK_FORM_DEFAULTS)) {\r\n if (k in (data.data || {})) this.form[k] = data.data[k] ?? BOOK_FORM_DEFAULTS[k]\r\n }\r\n\r\n const topicByPublicID = new Map((this.topics ?? []).map(t => [t.public_id, t.id]))\r\n const bookTopicPublicIDs = data.data?.topics ?? []\r\n this.form.topics = bookTopicPublicIDs\r\n .map(pid => topicByPublicID.get(pid))\r\n .filter(Boolean)\r\n } catch (err) {\r\n console.error(err)\r\n this.loadError = 'Failed to load book'\r\n } finally {\r\n this.loading = false\r\n }\r\n },\r\n\r\n addAuthorRow() {\r\n this.form.authors.push({ name: '', link: '' })\r\n },\r\n\r\n removeAuthorRow(i) {\r\n if (this.form.authors.length <= 1) return\r\n this.form.authors.splice(i, 1)\r\n },\r\n\r\n\r\n dragIndex: null,\r\n dragOverIndex: null,\r\n\r\n onAuthorDragStart(i) {\r\n this.dragIndex = i\r\n },\r\n\r\n onAuthorDragOver(e, i) {\r\n e.preventDefault()\r\n this.dragOverIndex = i\r\n },\r\n\r\n onAuthorDrop(i) {\r\n if (this.dragIndex === null || this.dragIndex === i) {\r\n this.dragOverIndex = null\r\n return\r\n }\r\n\r\n const moved = this.form.authors.splice(this.dragIndex, 1)[0]\r\n this.form.authors.splice(i, 0, moved)\r\n\r\n this.dragIndex = null\r\n this.dragOverIndex = null\r\n },\r\n\r\n onAuthorDragLeave(i) {\r\n if (this.dragOverIndex === i) this.dragOverIndex = null\r\n },\r\n\r\n onAuthorDragEnd() {\r\n this.dragIndex = null\r\n this.dragOverIndex = null\r\n },\r\n }\r\n }\r\n

Edit Book

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/frontend/page/filter_books.templ b/frontend/page/filter_books.templ index 79f0779..5991a20 100644 --- a/frontend/page/filter_books.templ +++ b/frontend/page/filter_books.templ @@ -120,7 +120,7 @@ templ FilterBooksPage() { if (this.topics.length) return try { - const { resp, data } = await HTTP.requestJSON(`/api/topics/?type=book`, { method: 'GET' }) + const { resp, data } = await HTTP.requestJSON(`/api/topics/?type=book&per_page=100`, { method: 'GET' }) if (resp.status !== 200) { this.error = data?.error || 'Failed to load topics' return diff --git a/frontend/page/filter_books_templ.go b/frontend/page/filter_books_templ.go index 5314c63..f2663ab 100644 --- a/frontend/page/filter_books_templ.go +++ b/frontend/page/filter_books_templ.go @@ -31,7 +31,7 @@ func FilterBooksPage() templ.Component { templ_7745c5c3_Var1 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "