forms_json.gno
2.26 Kb ยท 79 lines
1package forms
2
3import (
4 "strings"
5
6 "gno.land/p/onbloc/json"
7)
8
9type FormNodeBuilder struct {
10 *json.NodeBuilder
11}
12
13type FormArrayBuilder struct {
14 *json.ArrayBuilder
15}
16
17func (b *FormNodeBuilder) WriteArray(key string, fn func(*FormArrayBuilder)) *FormNodeBuilder {
18 b.NodeBuilder.WriteArray(key, func(ab *json.ArrayBuilder) {
19 fn(&FormArrayBuilder{ab})
20 })
21 return b
22}
23
24func (b *FormNodeBuilder) WriteObject(key string, fn func(*FormNodeBuilder)) *FormNodeBuilder {
25 b.NodeBuilder.WriteObject(key, func(nb *json.NodeBuilder) {
26 fn(&FormNodeBuilder{nb})
27 })
28 return b
29}
30
31func (b *FormArrayBuilder) WriteObject(fn func(*FormNodeBuilder)) *FormArrayBuilder {
32 b.ArrayBuilder.WriteObject(func(nb *json.NodeBuilder) {
33 fn(&FormNodeBuilder{nb})
34 })
35 return b
36}
37
38func (b *FormNodeBuilder) WriteFormFields(key string, fields []Field) *FormNodeBuilder {
39 b.WriteArray(key, func(builder *FormArrayBuilder) {
40 for _, field := range fields {
41 builder.WriteObject(func(builder *FormNodeBuilder) {
42 builder.WriteString("label", field.Label).
43 WriteString("fieldType", field.FieldType).
44 WriteBool("required", field.Required)
45 })
46 }
47 })
48 return b
49}
50
51func (b *FormNodeBuilder) WriteFormSubmission(key string, submission *Submission) *FormNodeBuilder {
52 b.WriteObject(key, func(builder *FormNodeBuilder) {
53 builder.WriteString("submittedAt", submission.SubmittedAt.Format("2006-01-02 15:04:05")).
54 WriteString("answers", strings.ReplaceAll(submission.Answers, "\"", "'"))
55 })
56 return b
57}
58
59func (b *FormNodeBuilder) WriteForm(key string, value *Form) *FormNodeBuilder {
60 b.WriteString("id", value.ID).
61 WriteString("owner", value.Owner.String()).
62 WriteString("title", value.Title).
63 WriteString("description", value.Description).
64 WriteString("createdAt", value.CreatedAt.Format("2006-01-02 15:04:05"))
65 b.WriteFormFields("fields", value.Fields)
66 return b
67}
68
69func (b *FormArrayBuilder) WriteForm(key string, value *Form) *FormArrayBuilder {
70 b.WriteObject(func(builder *FormNodeBuilder) {
71 builder.WriteString("id", value.ID).
72 WriteString("owner", value.Owner.String()).
73 WriteString("title", value.Title).
74 WriteString("description", value.Description).
75 WriteString("createdAt", value.CreatedAt.Format("2006-01-02 15:04:05"))
76 builder.WriteFormFields("fields", value.Fields)
77 })
78 return b
79}