github.com/vugu/vugu@v0.3.6-0.20240430171613-3f6f402e014b/vugufmt/testdata/bad/badgo.vugu (about)

     1  <div class="demo-comp">
     2      <div vg-if='data.isLoading'>Loading...</div>
     3      <div vg-if='len(data.bpi.BPI) > 0'>
     4          <div>Updated: <span vg-html='data.bpi.Time.Updated'></span></div>
     5          <ul>
     6              <li vg-for='data.bpi.BPI'>
     7                  <span vg-html='key'></span> <span vg-html='fmt.Sprint(value.Symbol, value.RateFloat)'></span>
     8              </li>
     9          </ul>
    10      </div>
    11      <button @click="data.HandleClick(event)">Fetch Bitcoin Price Index</button>
    12  </div>
    13  
    14  <script type="application/x-go">
    15  import "encoding/json"
    16  import "net/http"
    17  import "log"
    18  
    19  type RootData struct {
    20      bpi bpi
    21      isLoading bool
    22  }
    23  
    24  type bpi struct {
    25      Time struct { Updated string `json:"updated"` } `json:"time"`
    26      BPI map[string]struct { Code string `json:"code"`; Symbol string  `json:"symbol"`; RateFloat float64 `json:"rate_float"` } `json:"bpi"`
    27  }
    28  
    29  func (data *RootData) HandleClick(event vugu.DOMEvent) {
    30  
    31      data.bpi = bpi{}
    32  
    33      go func(ee vugu.EventEnv) {
    34  
    35          ee.Lock()
    36          data.isLoading = true
    37          ee.UnlockRender()
    38  
    39          res, err := http.Get("https://api.coindesk.com/v1/bpi/currentprice.json")
    40          if err != nil {
    41              log.Printf("Error fetch()ing: %v", err)
    42              return
    43          }
    44          defer res.Body.Close()
    45  
    46          var newb bpi broken!
    47          err = json.NewDecoder(res.Body).Decode(&newb)
    48          if err != nil {
    49              log.Printf("Error JSON decoding: %v", err)
    50              return
    51          }
    52  
    53          ee.Lock()
    54          defer ee.UnlockRender()
    55          data.bpi = newb
    56          data.isLoading = false
    57  
    58      }(event.EventEnv())
    59  }
    60  
    61  </script>