|
@@ -52,12 +52,13 @@ case class USDAEditor(
|
|
|
private val _calorieIn = floatInput("calories", Some(usda.calories))
|
|
private val _calorieIn = floatInput("calories", Some(usda.calories))
|
|
|
private val _calorie = _calorieIn.value
|
|
private val _calorie = _calorieIn.value
|
|
|
|
|
|
|
|
- val noneValue = "none"
|
|
|
|
|
|
|
+ val noneValue = ""
|
|
|
val customValue = "custom"
|
|
val customValue = "custom"
|
|
|
|
|
|
|
|
val defaultVolPort = _measures.map(getDefaultPortion(_, VOLUME, usda.density))
|
|
val defaultVolPort = _measures.map(getDefaultPortion(_, VOLUME, usda.density))
|
|
|
|
|
|
|
|
- private val _volume = Var[String](noneValue)
|
|
|
|
|
|
|
+ private val _volume = Var[String](usda.density.fold(noneValue)(_.toString))
|
|
|
|
|
+ private val _volumeIsCustom = Var(usda.density.isDefined)
|
|
|
private val _volumeIn = select(cls := "custom-select",
|
|
private val _volumeIn = select(cls := "custom-select",
|
|
|
option(selected <-- defaultVolPort.map(_ == None && usda.density == None),
|
|
option(selected <-- defaultVolPort.map(_ == None && usda.density == None),
|
|
|
value := noneValue,
|
|
value := noneValue,
|
|
@@ -80,12 +81,16 @@ case class USDAEditor(
|
|
|
)
|
|
)
|
|
|
})
|
|
})
|
|
|
),
|
|
),
|
|
|
- onChange.mapToValue --> _volume
|
|
|
|
|
|
|
+ onChange.mapToValue --> _volume.updater({ (prev: String, value: String) =>
|
|
|
|
|
+ if (value == customValue) prev else value
|
|
|
|
|
+ }),
|
|
|
|
|
+ onChange.mapToValue.map(_ == customValue) --> _volumeIsCustom
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
val defaultNumPort = _measures.map(getDefaultPortion(_, NUMBER, usda.massPerUnit))
|
|
val defaultNumPort = _measures.map(getDefaultPortion(_, NUMBER, usda.massPerUnit))
|
|
|
|
|
|
|
|
- private val _count = Var[String](noneValue)
|
|
|
|
|
|
|
+ private val _count = Var[String](usda.massPerUnit.fold(noneValue)(_.toString))
|
|
|
|
|
+ private val _countIsCustom = Var(usda.density.isDefined)
|
|
|
private val _countIn = select(cls := "custom-select",
|
|
private val _countIn = select(cls := "custom-select",
|
|
|
option(selected <-- defaultNumPort.map(_ == None && usda.massPerUnit == None),
|
|
option(selected <-- defaultNumPort.map(_ == None && usda.massPerUnit == None),
|
|
|
value := noneValue,
|
|
value := noneValue,
|
|
@@ -108,14 +113,17 @@ case class USDAEditor(
|
|
|
)
|
|
)
|
|
|
})
|
|
})
|
|
|
),
|
|
),
|
|
|
- onChange.mapToValue --> _count
|
|
|
|
|
|
|
+ onChange.mapToValue --> _count.updater({ (prev: String, value: String) =>
|
|
|
|
|
+ if (value == customValue) prev else value
|
|
|
|
|
+ }),
|
|
|
|
|
+ onChange.mapToValue.map(_ == customValue) --> _countIsCustom
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
private val _densityIn = input(cls := "form-control",
|
|
private val _densityIn = input(cls := "form-control",
|
|
|
typ := "number",
|
|
typ := "number",
|
|
|
stepAttr := "any",
|
|
stepAttr := "any",
|
|
|
minAttr := "0",
|
|
minAttr := "0",
|
|
|
- disabled <-- !_volume.signal.valueIs(customValue),
|
|
|
|
|
|
|
+ disabled <-- !_volumeIsCustom.signal,
|
|
|
value <-- _volume.signal.composeChanges(
|
|
value <-- _volume.signal.composeChanges(
|
|
|
_.map(_.toFloatOption).filter(_.nonEmpty).map(_.get.toString)
|
|
_.map(_.toFloatOption).filter(_.nonEmpty).map(_.get.toString)
|
|
|
)
|
|
)
|
|
@@ -126,7 +134,7 @@ case class USDAEditor(
|
|
|
typ := "number",
|
|
typ := "number",
|
|
|
stepAttr := "any",
|
|
stepAttr := "any",
|
|
|
minAttr := "0",
|
|
minAttr := "0",
|
|
|
- disabled <-- !_count.signal.valueIs(customValue),
|
|
|
|
|
|
|
+ disabled <-- !_countIsCustom.signal,
|
|
|
value <-- _count.signal.composeChanges(
|
|
value <-- _count.signal.composeChanges(
|
|
|
_.map(_.toFloatOption).filter(_.nonEmpty).map(_.get.toString)
|
|
_.map(_.toFloatOption).filter(_.nonEmpty).map(_.get.toString)
|
|
|
)
|
|
)
|
|
@@ -159,30 +167,18 @@ case class USDAEditor(
|
|
|
implicit val owner = new ManualOwner()
|
|
implicit val owner = new ManualOwner()
|
|
|
|
|
|
|
|
(usda match {
|
|
(usda match {
|
|
|
- case node: USDANodeId =>
|
|
|
|
|
- Function.uncurried((USDANodeId.apply _).curried(node._id))
|
|
|
|
|
- .asInstanceOf[(
|
|
|
|
|
- String,
|
|
|
|
|
- Long,
|
|
|
|
|
- Option[Float],
|
|
|
|
|
- Option[Float],
|
|
|
|
|
- Float,
|
|
|
|
|
- Map[String, Float]
|
|
|
|
|
- ) => USDANodeId]
|
|
|
|
|
- case _ =>
|
|
|
|
|
- USDANodeNoId.apply _
|
|
|
|
|
|
|
+ case node: USDANodeId => USDANodeId.withId(node._id, node.uid) _
|
|
|
|
|
+ case _ => USDANodeNoId.apply _
|
|
|
})(
|
|
})(
|
|
|
_name.observe.now(),
|
|
_name.observe.now(),
|
|
|
_fdcId,
|
|
_fdcId,
|
|
|
_volume.signal.flatMap({
|
|
_volume.signal.flatMap({
|
|
|
case `noneValue` => Val(None)
|
|
case `noneValue` => Val(None)
|
|
|
- case `customValue` => _density.map(str => Some(str.toFloat))
|
|
|
|
|
- case value => Val(Some(value.toFloat))
|
|
|
|
|
|
|
+ case _ => _density.map((str) => Some(str.toFloat))
|
|
|
}).observe.now(),
|
|
}).observe.now(),
|
|
|
_count.signal.flatMap({
|
|
_count.signal.flatMap({
|
|
|
case `noneValue` => Val(None)
|
|
case `noneValue` => Val(None)
|
|
|
- case `customValue` => _mass.map(str => Some(str.toFloat))
|
|
|
|
|
- case value => Val(Some(value.toFloat))
|
|
|
|
|
|
|
+ case _ => _mass.map({(str) => println(str);Some(str.toFloat)})
|
|
|
}).observe.now(),
|
|
}).observe.now(),
|
|
|
//_typ,
|
|
//_typ,
|
|
|
_calorie.observe.now().toFloat,
|
|
_calorie.observe.now().toFloat,
|