| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package com.weEat.view
- import com.weEat.controllers.{FoodController,USDAController}
- import com.weEat.modules._
- import com.weEat.shared.models.UnitType._
- import com.weEat.shared.models.USDANodeNoId
- import com.weEat.util.MHtmlHelpers._
- import gov.usda.nal.fdc.models._
- import gov.usda.nal.fdc.models.DataType._
- import mhtml.Rx
- import mhtml.future.syntax._
- import org.scalajs.dom.raw.Event
- import scala.util.Success
- object UsdaImporter extends View {
- import com.weEat.Main.headers
- implicit val ctx = scala.concurrent.ExecutionContext.global
- val tag = "importer"
- val title = "USDA Import"
- override val permissions = Set("admin")
- def content = {
- val searchBar = SearchBar(term => USDAController.getFoodsSearch(term, Seq(
- Foundation, Survey, SRLegacy
- ).map(_.toString))().map({
- // TODO: Save on network calls by waiting until we're near the end of each
- // page before loading the next one.
- // Represent this as a Seq[Rx[(Boolean, Criteria)]] where each node depends
- // on the one before it in the sequence.
- case SearchResult(criteria, n, cur, tot, baseList) => (cur + 1 to tot).map({
- c => USDAController.postFoodsSearch()(criteria.copy(pageNumber = Some(c)))
- .map(_.foods).toRx.map({
- case Some(Success(l)) => l
- case _ => Nil
- })
- }).foldLeft(Rx(baseList))({ (soFar, cur) => soFar.zip(cur).map({
- case (soFarList, curList) => soFarList :++ curList
- }) })
- }))
- val searchResults = searchBar.result.flatMap({
- case Some(Success(inner)) => inner
- case _ => Rx(Nil)
- })
- val pageSizeSel = Select(Rx((10 to 40 by 10)))
- val numPages = pageSizeSel.value.zip(searchResults).map({
- case (size, results) => (results.length + size - 1) / size
- })
- val pageSel = PageSelect(numPages)
- <div>
- <h2>USDA Importer</h2>
- <div class="form-group">
- <label for="search">Search: </label>
- { searchBar.render }
- </div>
- {
- PaginatedTable[SearchResultFood](Seq(
- ("", 1, {x => Rx(<button class="btn btn-light" onclick={e: Event =>
- // defaultUnit = if (num().nonEmpty) NUMBER else MASS
- val editor = USDAEditor(USDANodeNoId.fromSearchResult(x), true)
- Overlay.confirm(Rx(editor.render)) { () =>
- import com.weEat.Main.headers
- FoodController.add()(editor.getUSDANode())
- }
- ()
- }>Add</button>)}),
- ("ID", 1, {x => Rx(<span>{x.fdcId.toString}</span>)}),
- ("Name", 3, {x => Rx(<span>{x.description}</span>)}),
- ("Desc", 4, {x => Rx(<span>
- {x.additionalDescriptions.getOrElse("")}
- </span>)}),
- ("Brand", 3, {x => Rx(<span>{x.brandOwner.getOrElse("")}</span>)})
- ),
- searchResults,
- pageSel.page,
- pageSizeSel.value).render
- }
- { (pageSel.render).addClass("col-3 float-left") }
- { (pageSizeSel.render).addClass("col-1 float-right") }
- </div>
- }
- }
|