📁 Showcase
FoodItemMaster

FoodItemMaster

Backend

1. Variables

// food item unit
ensure var VarFoodItemUnit kind: setOfText 
  modules: ["Fitness"] 
  deploy: fixedOnDeploy 
  value: "<root>
      <node key='keyGm'>gm</node>
      <node key='keyMl'>ml</node>
    </root>"

2. FoodItemMaster

// fields ending with "*" suffix are required
ensure spreadsheet: FoodItemMaster
withFields: [
    "FoodName*",
    "ServingSize*",
    "Unit*",
    "Calories*",
    "Protein",
    "Carbohydrate",
    "Fat"
  ]
ofTypes: [text, number, pickText, number, decimal, decimal, decimal]
label: "Food Item Master" 
modules: ["Fitness"] 
readRoleSet: [Member] 
insertRoleSet: [Member] 
updateRoleSet: [Member] 
removeRoleSet: [Member]

ensure form EntityFoodItem
  label: "Food Item" 
  modules: ["Fitness"]

ensure section: Details
ensure field ServingSize min: 0
ensure field Unit sourceVar: VarFoodItemUnit
ensure field Calories suffix: " cal" min: 0
ensure field Protein min: 0.0 numberOfDigitsAfterPeriod: 2
ensure field Carbohydrate min: 0.0 numberOfDigitsAfterPeriod: 2
ensure field Fat min: 0.0 numberOfDigitsAfterPeriod: 2

ensure formula FormulaCalcProtein 
  assignToField: Details.Protein 
  formula: "(${f:Details.Calories})/4"
ensure formula FormulaCalcCarbs
  assignToField: Details.Carbohydrate 
  formula: "(${f:Details.Calories})/4"
ensure formula FormulaCalcFat 
  assignToField: Details.Fat 
  formula: "(${f:Details.Calories})/9"

ensure layoutSpreadsheet List kind: list 
  firstLine.first.lineFields: [Details.FoodName] 
  firstLine.caption.lineFields: [Details.Calories] 
  secondLine.first.lineFields: [Details.ServingSize] 
  secondLine.first.showLabels: true 
  thirdLine.first.lineFields: [Details.Unit] 
  thirdLine.first.showLabels: true 
  fourthLine.first.showLabels: true 
  fifthLine.first.showLabels: true

Frontend

1. Actions

a. AddFoodItem

ensure action AddFoodItem kind: rowInsert 
  label: "Add Food Item" 
  modules: ["Fitness"] 
  icon: "AddCircleOutlineRounded" 
  spreadsheet: FoodItemMaster 
  sendMessageToInbox: true

b. EditFoodItemSheet

ensure action EditFoodItemSheet kind: spreadsheetEditor 
  label: "Food Item Master" 
  modules: ["Fitness"] 
  icon: "DescriptionRounded" 
  spreadsheet: FoodItemMaster 
  layoutSpreadsheet: List

2. Group actions

ensure group MyFitnessPal 
  modules: ["Fitness"] 
  allowPromptAssistant: true
  actionPermission: {
      'FoodItemSheet': {
        'menuGroup': '3',
        'roles': [
          'Member'
        ]
      }
    }