Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}