Remove hidden water inputs, add missing duration input
This commit is contained in:
parent
203d2014b0
commit
5e638bdf1d
5 changed files with 107 additions and 96 deletions
|
|
@ -168,6 +168,15 @@ var PublicreportWaters = Table[
|
||||||
Generated: false,
|
Generated: false,
|
||||||
AutoIncr: false,
|
AutoIncr: false,
|
||||||
},
|
},
|
||||||
|
Duration: column{
|
||||||
|
Name: "duration",
|
||||||
|
DBType: "publicreport.nuisancedurationtype",
|
||||||
|
Default: "",
|
||||||
|
Comment: "",
|
||||||
|
Nullable: false,
|
||||||
|
Generated: false,
|
||||||
|
AutoIncr: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Indexes: publicreportWaterIndexes{
|
Indexes: publicreportWaterIndexes{
|
||||||
WaterPkey: index{
|
WaterPkey: index{
|
||||||
|
|
@ -226,11 +235,12 @@ type publicreportWaterColumns struct {
|
||||||
OwnerName column
|
OwnerName column
|
||||||
OwnerPhone column
|
OwnerPhone column
|
||||||
ReportID column
|
ReportID column
|
||||||
|
Duration column
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c publicreportWaterColumns) AsSlice() []column {
|
func (c publicreportWaterColumns) AsSlice() []column {
|
||||||
return []column{
|
return []column{
|
||||||
c.AccessComments, c.AccessGate, c.AccessFence, c.AccessLocked, c.AccessDog, c.AccessOther, c.Comments, c.IsReporterConfidential, c.IsReporterOwner, c.HasAdult, c.HasBackyardPermission, c.HasLarvae, c.HasPupae, c.OwnerEmail, c.OwnerName, c.OwnerPhone, c.ReportID,
|
c.AccessComments, c.AccessGate, c.AccessFence, c.AccessLocked, c.AccessDog, c.AccessOther, c.Comments, c.IsReporterConfidential, c.IsReporterOwner, c.HasAdult, c.HasBackyardPermission, c.HasLarvae, c.HasPupae, c.OwnerEmail, c.OwnerName, c.OwnerPhone, c.ReportID, c.Duration,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
6
db/migrations/00145_publicerport_water_duration.sql
Normal file
6
db/migrations/00145_publicerport_water_duration.sql
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
-- +goose Up
|
||||||
|
ALTER TABLE publicreport.water ADD COLUMN duration publicreport.NuisanceDurationType;
|
||||||
|
UPDATE publicreport.water SET duration = 'none';
|
||||||
|
ALTER TABLE publicreport.water ALTER COLUMN duration SET NOT NULL;
|
||||||
|
-- +goose Down
|
||||||
|
ALTER TABLE publicreport.water DROP COLUMN duration;
|
||||||
|
|
@ -17,28 +17,30 @@ import (
|
||||||
"github.com/Gleipnir-Technology/bob/expr"
|
"github.com/Gleipnir-Technology/bob/expr"
|
||||||
"github.com/Gleipnir-Technology/bob/orm"
|
"github.com/Gleipnir-Technology/bob/orm"
|
||||||
"github.com/Gleipnir-Technology/bob/types/pgtypes"
|
"github.com/Gleipnir-Technology/bob/types/pgtypes"
|
||||||
|
enums "github.com/Gleipnir-Technology/nidus-sync/db/enums"
|
||||||
"github.com/aarondl/opt/omit"
|
"github.com/aarondl/opt/omit"
|
||||||
)
|
)
|
||||||
|
|
||||||
// PublicreportWater is an object representing the database table.
|
// PublicreportWater is an object representing the database table.
|
||||||
type PublicreportWater struct {
|
type PublicreportWater struct {
|
||||||
AccessComments string `db:"access_comments" `
|
AccessComments string `db:"access_comments" `
|
||||||
AccessGate bool `db:"access_gate" `
|
AccessGate bool `db:"access_gate" `
|
||||||
AccessFence bool `db:"access_fence" `
|
AccessFence bool `db:"access_fence" `
|
||||||
AccessLocked bool `db:"access_locked" `
|
AccessLocked bool `db:"access_locked" `
|
||||||
AccessDog bool `db:"access_dog" `
|
AccessDog bool `db:"access_dog" `
|
||||||
AccessOther bool `db:"access_other" `
|
AccessOther bool `db:"access_other" `
|
||||||
Comments string `db:"comments" `
|
Comments string `db:"comments" `
|
||||||
IsReporterConfidential bool `db:"is_reporter_confidential" `
|
IsReporterConfidential bool `db:"is_reporter_confidential" `
|
||||||
IsReporterOwner bool `db:"is_reporter_owner" `
|
IsReporterOwner bool `db:"is_reporter_owner" `
|
||||||
HasAdult bool `db:"has_adult" `
|
HasAdult bool `db:"has_adult" `
|
||||||
HasBackyardPermission bool `db:"has_backyard_permission" `
|
HasBackyardPermission bool `db:"has_backyard_permission" `
|
||||||
HasLarvae bool `db:"has_larvae" `
|
HasLarvae bool `db:"has_larvae" `
|
||||||
HasPupae bool `db:"has_pupae" `
|
HasPupae bool `db:"has_pupae" `
|
||||||
OwnerEmail string `db:"owner_email" `
|
OwnerEmail string `db:"owner_email" `
|
||||||
OwnerName string `db:"owner_name" `
|
OwnerName string `db:"owner_name" `
|
||||||
OwnerPhone string `db:"owner_phone" `
|
OwnerPhone string `db:"owner_phone" `
|
||||||
ReportID int32 `db:"report_id,pk" `
|
ReportID int32 `db:"report_id,pk" `
|
||||||
|
Duration enums.PublicreportNuisancedurationtype `db:"duration" `
|
||||||
|
|
||||||
R publicreportWaterR `db:"-" `
|
R publicreportWaterR `db:"-" `
|
||||||
}
|
}
|
||||||
|
|
@ -61,7 +63,7 @@ type publicreportWaterR struct {
|
||||||
func buildPublicreportWaterColumns(alias string) publicreportWaterColumns {
|
func buildPublicreportWaterColumns(alias string) publicreportWaterColumns {
|
||||||
return publicreportWaterColumns{
|
return publicreportWaterColumns{
|
||||||
ColumnsExpr: expr.NewColumnsExpr(
|
ColumnsExpr: expr.NewColumnsExpr(
|
||||||
"access_comments", "access_gate", "access_fence", "access_locked", "access_dog", "access_other", "comments", "is_reporter_confidential", "is_reporter_owner", "has_adult", "has_backyard_permission", "has_larvae", "has_pupae", "owner_email", "owner_name", "owner_phone", "report_id",
|
"access_comments", "access_gate", "access_fence", "access_locked", "access_dog", "access_other", "comments", "is_reporter_confidential", "is_reporter_owner", "has_adult", "has_backyard_permission", "has_larvae", "has_pupae", "owner_email", "owner_name", "owner_phone", "report_id", "duration",
|
||||||
).WithParent("publicreport.water"),
|
).WithParent("publicreport.water"),
|
||||||
tableAlias: alias,
|
tableAlias: alias,
|
||||||
AccessComments: psql.Quote(alias, "access_comments"),
|
AccessComments: psql.Quote(alias, "access_comments"),
|
||||||
|
|
@ -81,6 +83,7 @@ func buildPublicreportWaterColumns(alias string) publicreportWaterColumns {
|
||||||
OwnerName: psql.Quote(alias, "owner_name"),
|
OwnerName: psql.Quote(alias, "owner_name"),
|
||||||
OwnerPhone: psql.Quote(alias, "owner_phone"),
|
OwnerPhone: psql.Quote(alias, "owner_phone"),
|
||||||
ReportID: psql.Quote(alias, "report_id"),
|
ReportID: psql.Quote(alias, "report_id"),
|
||||||
|
Duration: psql.Quote(alias, "duration"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -104,6 +107,7 @@ type publicreportWaterColumns struct {
|
||||||
OwnerName psql.Expression
|
OwnerName psql.Expression
|
||||||
OwnerPhone psql.Expression
|
OwnerPhone psql.Expression
|
||||||
ReportID psql.Expression
|
ReportID psql.Expression
|
||||||
|
Duration psql.Expression
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c publicreportWaterColumns) Alias() string {
|
func (c publicreportWaterColumns) Alias() string {
|
||||||
|
|
@ -118,27 +122,28 @@ func (publicreportWaterColumns) AliasedAs(alias string) publicreportWaterColumns
|
||||||
// All values are optional, and do not have to be set
|
// All values are optional, and do not have to be set
|
||||||
// Generated columns are not included
|
// Generated columns are not included
|
||||||
type PublicreportWaterSetter struct {
|
type PublicreportWaterSetter struct {
|
||||||
AccessComments omit.Val[string] `db:"access_comments" `
|
AccessComments omit.Val[string] `db:"access_comments" `
|
||||||
AccessGate omit.Val[bool] `db:"access_gate" `
|
AccessGate omit.Val[bool] `db:"access_gate" `
|
||||||
AccessFence omit.Val[bool] `db:"access_fence" `
|
AccessFence omit.Val[bool] `db:"access_fence" `
|
||||||
AccessLocked omit.Val[bool] `db:"access_locked" `
|
AccessLocked omit.Val[bool] `db:"access_locked" `
|
||||||
AccessDog omit.Val[bool] `db:"access_dog" `
|
AccessDog omit.Val[bool] `db:"access_dog" `
|
||||||
AccessOther omit.Val[bool] `db:"access_other" `
|
AccessOther omit.Val[bool] `db:"access_other" `
|
||||||
Comments omit.Val[string] `db:"comments" `
|
Comments omit.Val[string] `db:"comments" `
|
||||||
IsReporterConfidential omit.Val[bool] `db:"is_reporter_confidential" `
|
IsReporterConfidential omit.Val[bool] `db:"is_reporter_confidential" `
|
||||||
IsReporterOwner omit.Val[bool] `db:"is_reporter_owner" `
|
IsReporterOwner omit.Val[bool] `db:"is_reporter_owner" `
|
||||||
HasAdult omit.Val[bool] `db:"has_adult" `
|
HasAdult omit.Val[bool] `db:"has_adult" `
|
||||||
HasBackyardPermission omit.Val[bool] `db:"has_backyard_permission" `
|
HasBackyardPermission omit.Val[bool] `db:"has_backyard_permission" `
|
||||||
HasLarvae omit.Val[bool] `db:"has_larvae" `
|
HasLarvae omit.Val[bool] `db:"has_larvae" `
|
||||||
HasPupae omit.Val[bool] `db:"has_pupae" `
|
HasPupae omit.Val[bool] `db:"has_pupae" `
|
||||||
OwnerEmail omit.Val[string] `db:"owner_email" `
|
OwnerEmail omit.Val[string] `db:"owner_email" `
|
||||||
OwnerName omit.Val[string] `db:"owner_name" `
|
OwnerName omit.Val[string] `db:"owner_name" `
|
||||||
OwnerPhone omit.Val[string] `db:"owner_phone" `
|
OwnerPhone omit.Val[string] `db:"owner_phone" `
|
||||||
ReportID omit.Val[int32] `db:"report_id,pk" `
|
ReportID omit.Val[int32] `db:"report_id,pk" `
|
||||||
|
Duration omit.Val[enums.PublicreportNuisancedurationtype] `db:"duration" `
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s PublicreportWaterSetter) SetColumns() []string {
|
func (s PublicreportWaterSetter) SetColumns() []string {
|
||||||
vals := make([]string, 0, 17)
|
vals := make([]string, 0, 18)
|
||||||
if s.AccessComments.IsValue() {
|
if s.AccessComments.IsValue() {
|
||||||
vals = append(vals, "access_comments")
|
vals = append(vals, "access_comments")
|
||||||
}
|
}
|
||||||
|
|
@ -190,6 +195,9 @@ func (s PublicreportWaterSetter) SetColumns() []string {
|
||||||
if s.ReportID.IsValue() {
|
if s.ReportID.IsValue() {
|
||||||
vals = append(vals, "report_id")
|
vals = append(vals, "report_id")
|
||||||
}
|
}
|
||||||
|
if s.Duration.IsValue() {
|
||||||
|
vals = append(vals, "duration")
|
||||||
|
}
|
||||||
return vals
|
return vals
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -245,6 +253,9 @@ func (s PublicreportWaterSetter) Overwrite(t *PublicreportWater) {
|
||||||
if s.ReportID.IsValue() {
|
if s.ReportID.IsValue() {
|
||||||
t.ReportID = s.ReportID.MustGet()
|
t.ReportID = s.ReportID.MustGet()
|
||||||
}
|
}
|
||||||
|
if s.Duration.IsValue() {
|
||||||
|
t.Duration = s.Duration.MustGet()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *PublicreportWaterSetter) Apply(q *dialect.InsertQuery) {
|
func (s *PublicreportWaterSetter) Apply(q *dialect.InsertQuery) {
|
||||||
|
|
@ -253,7 +264,7 @@ func (s *PublicreportWaterSetter) Apply(q *dialect.InsertQuery) {
|
||||||
})
|
})
|
||||||
|
|
||||||
q.AppendValues(bob.ExpressionFunc(func(ctx context.Context, w io.StringWriter, d bob.Dialect, start int) ([]any, error) {
|
q.AppendValues(bob.ExpressionFunc(func(ctx context.Context, w io.StringWriter, d bob.Dialect, start int) ([]any, error) {
|
||||||
vals := make([]bob.Expression, 17)
|
vals := make([]bob.Expression, 18)
|
||||||
if s.AccessComments.IsValue() {
|
if s.AccessComments.IsValue() {
|
||||||
vals[0] = psql.Arg(s.AccessComments.MustGet())
|
vals[0] = psql.Arg(s.AccessComments.MustGet())
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -356,6 +367,12 @@ func (s *PublicreportWaterSetter) Apply(q *dialect.InsertQuery) {
|
||||||
vals[16] = psql.Raw("DEFAULT")
|
vals[16] = psql.Raw("DEFAULT")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if s.Duration.IsValue() {
|
||||||
|
vals[17] = psql.Arg(s.Duration.MustGet())
|
||||||
|
} else {
|
||||||
|
vals[17] = psql.Raw("DEFAULT")
|
||||||
|
}
|
||||||
|
|
||||||
return bob.ExpressSlice(ctx, w, d, start, vals, "", ", ", "")
|
return bob.ExpressSlice(ctx, w, d, start, vals, "", ", ", "")
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
@ -365,7 +382,7 @@ func (s PublicreportWaterSetter) UpdateMod() bob.Mod[*dialect.UpdateQuery] {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s PublicreportWaterSetter) Expressions(prefix ...string) []bob.Expression {
|
func (s PublicreportWaterSetter) Expressions(prefix ...string) []bob.Expression {
|
||||||
exprs := make([]bob.Expression, 0, 17)
|
exprs := make([]bob.Expression, 0, 18)
|
||||||
|
|
||||||
if s.AccessComments.IsValue() {
|
if s.AccessComments.IsValue() {
|
||||||
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
||||||
|
|
@ -486,6 +503,13 @@ func (s PublicreportWaterSetter) Expressions(prefix ...string) []bob.Expression
|
||||||
}})
|
}})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if s.Duration.IsValue() {
|
||||||
|
exprs = append(exprs, expr.Join{Sep: " = ", Exprs: []bob.Expression{
|
||||||
|
psql.Quote(append(prefix, "duration")...),
|
||||||
|
psql.Arg(s.Duration),
|
||||||
|
}})
|
||||||
|
}
|
||||||
|
|
||||||
return exprs
|
return exprs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -802,6 +826,7 @@ type publicreportWaterWhere[Q psql.Filterable] struct {
|
||||||
OwnerName psql.WhereMod[Q, string]
|
OwnerName psql.WhereMod[Q, string]
|
||||||
OwnerPhone psql.WhereMod[Q, string]
|
OwnerPhone psql.WhereMod[Q, string]
|
||||||
ReportID psql.WhereMod[Q, int32]
|
ReportID psql.WhereMod[Q, int32]
|
||||||
|
Duration psql.WhereMod[Q, enums.PublicreportNuisancedurationtype]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (publicreportWaterWhere[Q]) AliasedAs(alias string) publicreportWaterWhere[Q] {
|
func (publicreportWaterWhere[Q]) AliasedAs(alias string) publicreportWaterWhere[Q] {
|
||||||
|
|
@ -827,6 +852,7 @@ func buildPublicreportWaterWhere[Q psql.Filterable](cols publicreportWaterColumn
|
||||||
OwnerName: psql.Where[Q, string](cols.OwnerName),
|
OwnerName: psql.Where[Q, string](cols.OwnerName),
|
||||||
OwnerPhone: psql.Where[Q, string](cols.OwnerPhone),
|
OwnerPhone: psql.Where[Q, string](cols.OwnerPhone),
|
||||||
ReportID: psql.Where[Q, int32](cols.ReportID),
|
ReportID: psql.Where[Q, int32](cols.ReportID),
|
||||||
|
Duration: psql.Where[Q, enums.PublicreportNuisancedurationtype](cols.Duration),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,26 +33,27 @@ type water struct {
|
||||||
URI string `json:"uri"`
|
URI string `json:"uri"`
|
||||||
}
|
}
|
||||||
type waterForm struct {
|
type waterForm struct {
|
||||||
AccessComments string `schema:"access-comments"`
|
AccessComments string `schema:"access-comments"`
|
||||||
AccessDog bool `schema:"access-dog"`
|
AccessDog bool `schema:"access-dog"`
|
||||||
AccessFence bool `schema:"access-fence"`
|
AccessFence bool `schema:"access-fence"`
|
||||||
AccessGate bool `schema:"access-gate"`
|
AccessGate bool `schema:"access-gate"`
|
||||||
AccessLocked bool `schema:"access-locked"`
|
AccessLocked bool `schema:"access-locked"`
|
||||||
AccessOther bool `schema:"access-other"`
|
AccessOther bool `schema:"access-other"`
|
||||||
Address types.Address `schema:"address"`
|
Address types.Address `schema:"address"`
|
||||||
AddressGID string `schema:"address-gid"`
|
AddressGID string `schema:"address-gid"`
|
||||||
ClientID uuid.UUID `schema:"client_id" json:"client_id"`
|
ClientID uuid.UUID `schema:"client_id" json:"client_id"`
|
||||||
Comments string `schema:"comments"`
|
Comments string `schema:"comments"`
|
||||||
HasAdult bool `schema:"has-adult"`
|
Duration omit.Val[enums.PublicreportNuisancedurationtype] `schema:"duration"`
|
||||||
HasBackyardPermission bool `schema:"backyard-permission"`
|
HasAdult bool `schema:"has-adult"`
|
||||||
HasLarvae bool `schema:"has-larvae"`
|
HasBackyardPermission bool `schema:"backyard-permission"`
|
||||||
HasPupae bool `schema:"has-pupae"`
|
HasLarvae bool `schema:"has-larvae"`
|
||||||
IsReporterConfidential bool `schema:"reporter-confidential"`
|
HasPupae bool `schema:"has-pupae"`
|
||||||
IsReporter_owner bool `schema:"property-ownership"`
|
IsReporterConfidential bool `schema:"reporter-confidential"`
|
||||||
Location types.Location `schema:"location"`
|
IsReporter_owner bool `schema:"property-ownership"`
|
||||||
OwnerEmail string `schema:"owner-email"`
|
Location types.Location `schema:"location"`
|
||||||
OwnerName string `schema:"owner-name"`
|
OwnerEmail string `schema:"owner-email"`
|
||||||
OwnerPhone string `schema:"owner-phone"`
|
OwnerName string `schema:"owner-name"`
|
||||||
|
OwnerPhone string `schema:"owner-phone"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (res *waterR) ByID(ctx context.Context, r *http.Request, query QueryParams) (*types.PublicReportWater, *nhttp.ErrorWithStatus) {
|
func (res *waterR) ByID(ctx context.Context, r *http.Request, query QueryParams) (*types.PublicReportWater, *nhttp.ErrorWithStatus) {
|
||||||
|
|
@ -115,6 +116,7 @@ func (res *waterR) Create(ctx context.Context, r *http.Request, w waterForm) (*w
|
||||||
AccessLocked: omit.From(w.AccessLocked),
|
AccessLocked: omit.From(w.AccessLocked),
|
||||||
AccessOther: omit.From(w.AccessOther),
|
AccessOther: omit.From(w.AccessOther),
|
||||||
Comments: omit.From(w.Comments),
|
Comments: omit.From(w.Comments),
|
||||||
|
Duration: w.Duration,
|
||||||
HasAdult: omit.From(w.HasAdult),
|
HasAdult: omit.From(w.HasAdult),
|
||||||
HasBackyardPermission: omit.From(w.HasBackyardPermission),
|
HasBackyardPermission: omit.From(w.HasBackyardPermission),
|
||||||
HasLarvae: omit.From(w.HasLarvae),
|
HasLarvae: omit.From(w.HasLarvae),
|
||||||
|
|
|
||||||
|
|
@ -207,36 +207,6 @@ select.tall {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row mb-3">
|
|
||||||
<!-- Hidden fields for location data -->
|
|
||||||
<input type="hidden" id="address-country" name="address-country" />
|
|
||||||
<input
|
|
||||||
type="hidden"
|
|
||||||
id="address-locality"
|
|
||||||
name="address-locality"
|
|
||||||
/>
|
|
||||||
<input type="hidden" id="address-number" name="address-number" />
|
|
||||||
<input
|
|
||||||
type="hidden"
|
|
||||||
id="address-postalcode"
|
|
||||||
name="address-postalcode"
|
|
||||||
/>
|
|
||||||
<input type="hidden" id="address-region" name="address-region" />
|
|
||||||
<input type="hidden" id="address-street" name="address-street" />
|
|
||||||
<input type="hidden" id="latitude" name="latitude" />
|
|
||||||
<input type="hidden" id="longitude" name="longitude" />
|
|
||||||
<input
|
|
||||||
type="hidden"
|
|
||||||
id="latlng-accuracy-type"
|
|
||||||
name="latlng-accuracy-type"
|
|
||||||
/>
|
|
||||||
<input
|
|
||||||
type="hidden"
|
|
||||||
id="latlng-accuracy-value"
|
|
||||||
name="latlng-accuracy-value"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p class="small text-muted mb-2">
|
<p class="small text-muted mb-2">
|
||||||
You can also click on the map to mark the location precisely
|
You can also click on the map to mark the location precisely
|
||||||
</p>
|
</p>
|
||||||
|
|
@ -266,17 +236,14 @@ select.tall {
|
||||||
<label for="duration" class="form-label"
|
<label for="duration" class="form-label"
|
||||||
>How long has this production source been present?</label
|
>How long has this production source been present?</label
|
||||||
>
|
>
|
||||||
<select
|
<select class="form-select" id="duration" name="duration">
|
||||||
class="form-select"
|
|
||||||
id="duration"
|
|
||||||
name="source-duration"
|
|
||||||
>
|
|
||||||
<option value="none">I don't know</option>
|
<option value="none">I don't know</option>
|
||||||
<option value="less-than-week">Less than a week</option>
|
<option value="just-noticed">Just noticed</option>
|
||||||
|
<option value="few-days">Less than a week</option>
|
||||||
<option value="1-2-weeks">1-2 weeks</option>
|
<option value="1-2-weeks">1-2 weeks</option>
|
||||||
<option value="2-4-weeks">2-4 weeks</option>
|
<option value="2-4-weeks">2-4 weeks</option>
|
||||||
<option value="1-3-months">1-3 months</option>
|
<option value="1-3-months">1-3 months</option>
|
||||||
<option value="more-than-3-months">More than 3 months</option>
|
<option value="seasonal">More than 3 months</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue