Refine item form and preview
- Item form: subtitle + fields grouped into hairline-separated labeled sections (Basics / Alerts / Schedule and marketplaces / Filters / Advanced) instead of one flat card; refined Advanced summary. - Preview: refined headings; best-price hero keeps a 160px product image; Other results becomes a thumbnailed feed via the shared components. - New .v-form-section-title helper.
This commit is contained in:
@@ -136,13 +136,16 @@ func newCategory(v string, known []string) string {
|
||||
|
||||
templ itemFormBody(d ItemFormData) {
|
||||
<div>
|
||||
<h1 class="v-page-title mb-6">
|
||||
if d.IsEdit {
|
||||
Edit { d.Item.Name }
|
||||
} else {
|
||||
Add item
|
||||
}
|
||||
</h1>
|
||||
<div class="mb-6">
|
||||
<h1 class="v-page-title">
|
||||
if d.IsEdit {
|
||||
Edit { d.Item.Name }
|
||||
} else {
|
||||
Add item
|
||||
}
|
||||
</h1>
|
||||
<p class="v-page-sub">What to watch, where to look, and when to alert.</p>
|
||||
</div>
|
||||
if len(d.Errors) > 0 {
|
||||
<div class="v-flash-error">
|
||||
<ul class="list-disc pl-5">
|
||||
@@ -167,9 +170,10 @@ templ itemFormInner(d ItemFormData) {
|
||||
hx-indicator="#preview-loading"
|
||||
hx-disabled-elt="find button[type='submit']"
|
||||
}
|
||||
class="v-card p-6 space-y-4 max-w-3xl"
|
||||
class="v-card p-6 space-y-5 max-w-3xl"
|
||||
>
|
||||
@CSRFInput(d.CSRFToken)
|
||||
<div class="v-form-section-title">Basics</div>
|
||||
<div class="grid md:grid-cols-2 gap-4">
|
||||
<div>
|
||||
<label class="v-label">Name</label>
|
||||
@@ -196,6 +200,8 @@ templ itemFormInner(d ItemFormData) {
|
||||
<input class="v-input" name="url" value={ d.Item.URL }/>
|
||||
<div class="v-muted text-xs mt-1">At least one of search queries or URL is required.</div>
|
||||
</div>
|
||||
<hr class="v-rule"/>
|
||||
<div class="v-form-section-title">Alerts</div>
|
||||
<div class="grid md:grid-cols-3 gap-4">
|
||||
<div>
|
||||
<label class="v-label">Target Price</label>
|
||||
@@ -215,6 +221,8 @@ templ itemFormInner(d ItemFormData) {
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="v-rule"/>
|
||||
<div class="v-form-section-title">Schedule and marketplaces</div>
|
||||
<div class="grid md:grid-cols-3 gap-4">
|
||||
<div>
|
||||
<label class="v-label">Poll Interval</label>
|
||||
@@ -251,6 +259,8 @@ templ itemFormInner(d ItemFormData) {
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="v-rule"/>
|
||||
<div class="v-form-section-title">Filters</div>
|
||||
<div class="grid md:grid-cols-2 gap-4">
|
||||
<div>
|
||||
<label class="v-label">Minimum Price</label>
|
||||
@@ -287,8 +297,9 @@ templ itemFormInner(d ItemFormData) {
|
||||
<input type="checkbox" name="include_out_of_stock" checked?={ d.Item.IncludeOutOfStock } value="1"/>
|
||||
<span>Include out-of-stock results</span>
|
||||
</label>
|
||||
<hr class="v-rule"/>
|
||||
<details class="v-card-flat p-4">
|
||||
<summary class="cursor-pointer font-semibold">Advanced</summary>
|
||||
<summary class="cursor-pointer v-form-section-title">Advanced</summary>
|
||||
<div class="v-muted text-sm mt-2">Leave blank to use the configured default for the selected marketplace.</div>
|
||||
<div class="grid md:grid-cols-2 gap-4 mt-3">
|
||||
<div>
|
||||
|
||||
Reference in New Issue
Block a user