@@ -6,12 +6,9 @@ import (
66 "time"
77
88 "gno.land/p/demo/avl"
9- "gno.land/p/eve000/event/component"
9+ eve "gno.land/p/eve000/event/component"
1010)
1111
12- // FIXME either change interface or satisfy it
13- //var _ Api = (*Event)(nil)
14-
1512type Api interface {
1613 AddOrganizer(addr std.Address)
1714 AddProposer(addr, sender std.Address)
@@ -24,6 +21,8 @@ type Api interface {
2421 JoinAsAttendee()
2522 JoinWaitlist()
2623 ListRoles() []string
24+ // REVIEW: should setLive Event be part of the API? - we may not use due to versioning issues
25+ PublishEvent(evt *Event, opts map[string]interface{}) string
2726 RegisterEvent(evt *Event, opts map[string]interface{}) string
2827 RemoveOrganizer(addr std.Address)
2928 RemoveProposer(addr, sender std.Address)
@@ -53,13 +52,13 @@ type Storage struct {
5352// the event object is protected for edits only by patching from specific 'sub-realms'
5453type Event struct {
5554 Name string
56- Location *component .Location
55+ Location *eve .Location
5756 StartDate time.Time
5857 EndDate time.Time
5958 Description string
60- Sessions []*component .Session
61- Status component .EventStatus
62- AttendanceMode component .EventAttendanceMode
59+ Sessions []*eve .Session
60+ Status eve .EventStatus
61+ AttendanceMode eve .EventAttendanceMode
6362 Images []string
6463 renderOpts map[string]interface{}
6564 storage *Storage
@@ -69,7 +68,7 @@ func (evt *Event) SetEventName(name string) {
6968 evt.Name = name
7069}
7170
72- func (evt *Event) SetEventLocation(loc *component .Location) {
71+ func (evt *Event) SetEventLocation(loc *eve .Location) {
7372 evt.Location = loc
7473}
7574
@@ -85,70 +84,69 @@ func (evt *Event) SetEventDescription(description string) {
8584 evt.Description = description
8685}
8786
88- func (evt *Event) SetSessions(sessions []*component .Session) {
87+ func (evt *Event) SetSessions(sessions []*eve .Session) {
8988 evt.Sessions = sessions
9089}
9190
92- func (evt *Event) AddSpeaker(s *component .Speaker) {
91+ func (evt *Event) AddSpeaker(s *eve .Speaker) {
9392 if evt.storage == nil {
9493 evt.storage = &Storage{}
9594 }
9695 if evt.storage.Speakers == nil {
9796 evt.storage.Speakers = &avl.Tree{}
9897 }
99- id := component .Pad3(strconv.Itoa( evt.storage.Speakers.Size() ))
100- evt.storage.Speakers.Set(component .Pad3(id), s)
98+ id := eve .Pad3(evt.storage.Speakers.Size())
99+ evt.storage.Speakers.Set(eve .Pad3(id), s)
101100}
102101
103- func (evt *Event) AddLocation(loc *component .Location) {
102+ func (evt *Event) AddLocation(loc *eve .Location) {
104103 if evt.storage == nil {
105104 evt.storage = &Storage{}
106105 }
107106 if evt.storage.Locations == nil {
108107 evt.storage.Locations = &avl.Tree{}
109108 }
110- id := component .Pad3(strconv.Itoa( evt.storage.Locations.Size() ))
111- evt.storage.Locations.Set(component .Pad3(id), loc)
109+ id := eve .Pad3(evt.storage.Locations.Size())
110+ evt.storage.Locations.Set(eve .Pad3(id), loc)
112111}
113112
114- func (evt *Event) AddSession(sess *component .Session) {
113+ func (evt *Event) AddSession(sess *eve .Session) {
115114 if evt.storage == nil {
116115 evt.storage = &Storage{}
117116 }
118117 if evt.storage.Sessions == nil {
119118 evt.storage.Sessions = &avl.Tree{}
120119 }
121- // TODO: maybe Pad3 can accept interface so extras stringconv isn't needed here
122- id := component.Pad3(strconv.Itoa(evt.storage.Sessions.Size()))
123- evt.storage.Sessions.Set(component.Pad3(id), sess)
120+ id := eve.Pad3(strconv.Itoa(evt.storage.Sessions.Size()))
121+ evt.storage.Sessions.Set(eve.Pad3(id), sess)
124122}
125123
126- func (evt *Event) GetSpeaker(id string) *component .Speaker {
127- s, ok := evt.storage.Speakers.Get(component .Pad3(id))
124+ func (evt *Event) GetSpeaker(id string) *eve .Speaker {
125+ s, ok := evt.storage.Speakers.Get(eve .Pad3(id))
128126 if !ok {
129127 panic("speaker not found: id=" + id)
130128 }
131- return s.(*component .Speaker)
129+ return s.(*eve .Speaker)
132130}
133131
134- func (evt *Event) GetLocation(id string) *component .Location {
135- l, ok := evt.storage.Locations.Get(component .Pad3(id))
132+ func (evt *Event) GetLocation(id string) *eve .Location {
133+ l, ok := evt.storage.Locations.Get(eve .Pad3(id))
136134 if !ok {
137135 panic("location not found: id=" + id)
138136 }
139- return l.(*component .Location)
137+ return l.(*eve .Location)
140138}
141139
142- func (evt *Event) GetSession(id string) *component .Session {
143- s, ok := evt.storage.Sessions.Get(component .Pad3(id))
140+ func (evt *Event) GetSession(id string) *eve .Session {
141+ s, ok := evt.storage.Sessions.Get(eve .Pad3(id))
144142 if !ok {
145143 panic("session not found: id=" + id)
146144 }
147- return s.(*component .Session)
145+ return s.(*eve .Session)
148146}
149147
150- func (evt *Event) Flyer() *component .Flyer {
151- flyer := &component .Flyer{
148+ func (evt *Event) Flyer() *eve .Flyer {
149+ flyer := &eve .Flyer{
152150 Name: evt.Name,
153151 Location: nil,
154152 StartDate: evt.StartDate,
@@ -163,7 +161,7 @@ func (evt *Event) Flyer() *component.Flyer {
163161 flyer.Location = &loc
164162 }
165163 if evt.Sessions != nil {
166- flyer.Sessions = make([]*component .Session, len(evt.Sessions))
164+ flyer.Sessions = make([]*eve .Session, len(evt.Sessions))
167165 for i, s := range evt.Sessions {
168166 if s != nil {
169167 sessionCopy := *s
@@ -175,20 +173,36 @@ func (evt *Event) Flyer() *component.Flyer {
175173 return flyer
176174}
177175
178- // Event may not be a component (yet!) but it is where the render opts are stored.
179176func (evt *Event) RenderOpts() map[string]interface{} {
180177 return evt.renderOpts
181178}
182179
180+ func (evt *Event) initStorage() {
181+ for _, s := range evt.Sessions {
182+ evt.AddSession(s)
183+ evt.AddSpeaker(s.Speaker)
184+ evt.AddLocation(s.Location)
185+ }
186+
187+ }
188+
183189func (evt *Event) SetRenderOpts(opts map[string]interface{}) {
184190 evt.renderOpts = opts
191+ if evt.storage == nil {
192+ evt.initStorage()
193+ }
194+ for _, s := range evt.Sessions {
195+ s.SetRenderOpts(opts)
196+ s.Speaker.SetRenderOpts(opts)
197+ s.Location.SetRenderOpts(opts)
198+ }
185199}
186200
187201func (evt *Event) ToAnchor() string {
188- return component .StringToAnchor(evt.Name)
202+ return eve .StringToAnchor(evt.Name)
189203}
190204
191205// Render provides a syntactic sugar for rendering a Flyer using a template function.
192- func (evt *Event) Render(path string, tpl func(path string, flyer *component .Flyer) string) string {
206+ func (evt *Event) Render(path string, tpl func(path string, flyer *eve .Flyer) string) string {
193207 return tpl(path, evt.Flyer())
194208}
0 commit comments