Passio Nutrition-AI
  • Nutrition-AI SDK Overview
  • Guides
    • Nutrition AI SDK
      • SDK Key and minimum requirements
      • Installation
      • Configure the SDK
      • Use Cases
        • Food recognition
        • Nutrition data
        • Barcode scanning
        • Nutrition Facts scanning
        • Search, Food Icons, RefCode
        • Speech recognition
        • Nutrition Advisor
        • Suggestions and Meal Plans
        • User created foods and reports
    • iOS SDK Docs
      • Before getting started
      • Getting the ml models to the device
      • Run the demos first
      • Adding Passio SDK into your project
      • Initialize and configure the SDK
      • Start/Stop food detection
      • Food Recognition Delegate
      • Migration from SDK 1.4.X to 2.x
      • SDK API
      • Quick Start Guide
        • Installation
        • Configure the SDK (UIKit)
        • Recognise food using image
        • Food Details
    • Android SDK Docs
      • Getting started
        • Include the library
        • Camera
        • SDK Initialization and Configuration
        • Food detection session
        • Visual, Barcode and Packaged Food detection
        • Nutritional Database
        • Sandbox app
      • Troubleshooting on Android
      • Migration from SDK version 1.4.x to 2.x
      • Quick Start Guide
        • Importing the Android SDK to a project
        • Configure SDK and handle the result
        • RecognizeImageRemote
        • Food Details
    • React Native SDK Docs
      • Getting Started
        • Installation
        • SDK Initialization and Configuration
      • API Reference
        • configure & requestCameraAuthorization
        • recognizeImageRemote
        • searchForFood & searchForFoodSemantic
        • startFoodDetection
          • FoodDetectionEvent
        • fetchFoodItemForProductCode
        • fetchFoodItemForRefCode
        • fetchFoodItemForDataInfo
        • startNutritionFactsDetection
        • fetchFoodItemForPassioID
        • recognizeSpeechRemote
        • Fetch Nutrients
        • onDowloadingPassioModelCallBacks
        • detectFoodFromImageURI
        • addToPersonalization
        • updateLanguage
        • fetchHiddenIngredients
        • fetchVisualAlternatives
        • fetchPossibleIngredients
      • Properties
        • PassioFoodItem
        • PassioFoodDataInfo
        • PassioFoodAmount
        • PassioIngredient
        • PassioNutrients
        • UnitMass
        • ServingUnit
        • ServingSize
        • PassioSearchResult
        • NutritionFacts
        • PassioNutritionPreview
        • PassioSpeechRecognitionModel
        • PassioLogAction
        • PassioAdvisorFoodInfo
        • FoodCandidates
        • FoodDetectionEvent
        • NutritionDetectionEvent
        • DetectedCandidate
        • BarcodeCandidate
        • PackagedFoodCode
        • AmountEstimate
        • ImagesInfo
        • PassioStatus
        • FoodDetectionEvent
        • NutritionFacts
        • PassioMealPlan
        • PassioMealPlanItem
      • Nutriton Advisor
        • initConversation
        • sendMessage
        • sendImage
        • Guide
          • useNutritionAdvisor
        • Properties
          • PassioAdvisorResponse
          • PassioAdvisorMessageResultStatus
          • PassioAdvisorResultStatus
      • Quick Start Guide
        • Installation
        • Configure the SDK
        • RecognizeImageRemote
        • Food Detail
      • Guide
        • Integrate SDK Setup
        • Integrate Quick Scan
        • Integrate Food Search
        • Integrate Food Editor with Recipe
        • Integrate MealPlan
        • Integrate Suggestions
        • Integrate recognizeImageRemote
      • Components
        • DetectionCameraView
        • PassioIconView
      • Changelog
      • More
        • Display Macro Chart
          • MockFood
          • Utils PassioNutrient
        • Display Micro Progress
        • Getting nutrition value for a FoodItem
        • Getting nutrition value for a Recipe
        • Recalculate the nutrition value based on serving size options.
      • Migrations
        • Migrating from SDK 2.X to version 3.X
        • Structure Migrations From SDK 3.X to SDK 2.X
        • [Deprecated] Migrating from SDK 1.X to version 2.X
        • [Deprecated] Getting Started (v1)
          • Installation
          • SDK Initialization and Configuration
          • Start food detection
          • FoodDetectionEvent
          • Nutritional Database
      • Troubleshooting on RN
      • V2
        • Getting Started
          • Installation
          • SDK Initialization and Configuration
          • Start food detection
          • FoodDetectionEvent
        • RN SDK API
          • Properties
            • PersonalizedAlternative
            • FoodSearchResult
            • PassioNutrient
            • FoodDetectionEvent
            • DownloadModelCallBack
            • UPCProduct
            • ServingUnit
            • PassioStatus
            • PassioIDAttributes
            • PassioIDEntityType
            • PassioFoodItem
            • PassioRecipe
            • ServingSize
            • Measurement
            • UnitMass
            • NutritionFacts
        • Food Image
        • Search Food Item
        • Quick Scan
        • Multi Scan
        • MealPlan
        • Recipe
      • How do I Integrate a Passio SDK in EXPO?
    • Flutter SDK Docs
      • Getting Started
    • Before You Continue
    • Setup For Android
    • Initialize and configure the SDK
  • Fundamentals
    • Nutrition-AI Developer FAQ
      • Nutrition Data
      • Supported Phones
      • Security
      • Testing Volume Estimation
      • Testing Nutrition-AI SDK
      • Nutrition-AI Test Methodology
    • Nutrition API - Mobile SDK interoperability
      • JSON Response parsing
  • Versions
    • 3.2.4
      • SDK Key and minimum requirements
      • Installation
      • Configure the SDK
      • Use Cases
        • Food recognition
        • Nutrition data
        • Barcode scanning
        • Nutrition Facts scanning
        • Search, Food Icons, RefCode
        • Speech recognition
        • Nutrition Advisor
        • Suggestions and Meal Plans
        • User created foods and reports
    • 3.2.2
      • SDK Key and minimum requirements
      • Installation
      • Configure the SDK
      • Use Cases
        • Food recognition
        • Nutrition data
        • Barcode scanning
        • Nutrition Facts scanning
        • Search, Food Icons, RefCode
        • Speech recognition
        • Nutrition Advisor
        • Suggestions and Meal Plans
        • User created foods and reports
    • 3.2.0
      • SDK Key and minimum requirements
      • Installation
      • Configure the SDK
      • Use Cases
        • Food recognition
        • Nutrition data
        • Barcode scanning
        • Nutrition Facts scanning
        • Search, Food Icons, RefCode
        • Speech recognition
        • Nutrition Advisor
        • Suggestions and Meal Plans
    • 3.1.4
      • SDK Key and minimum requirements
      • Installation
      • Configure the SDK
      • Use Cases
        • Food recognition
        • Nutrition data
        • Barcode scanning
        • Search, Food Icons, RefCode
        • Speech recognition
        • Nutrition Advisor
        • Suggestions and Meal Plans
Powered by GitBook
On this page
  • Using SDK Migrations
  • Manually Migrations
  • Convert V3 New PassioFoodItem to V2 Old PassioIDAttributes
Export as PDF
  1. Guides
  2. React Native SDK Docs
  3. Migrations

Structure Migrations From SDK 3.X to SDK 2.X

Using SDK Migrations

To get the old API structure with V3 API then you have to just change import like @passiolife/nutritionai-react-native-sdk-v3/src/sdk/v2

Manually Migrations

Convert V3 New PassioFoodItem to V2 Old PassioIDAttributes

export interface PassioIDAttributes {
  passioID: PassioID
  name: string
  imageName: string
  entityType: PassioIDEntityType
  foodItem?: PassioFoodItem
  recipe?: PassioRecipe
  parents: PassioAlternative[]
  children: PassioAlternative[]
  siblings: PassioAlternative[]
  isOpenFood: boolean
}
export interface PassioFoodItem {
  passioID: PassioID
  name: string
  imageName: string
  selectedQuantity: number
  selectedUnit: string
  entityType: PassioIDEntityType
  servingUnits: ServingUnit[]
  servingSizes: ServingSize[]
  computedWeight: Measurement
  parents?: PassioAlternative[]
  children?: PassioAlternative[]
  siblings?: PassioAlternative[]
  calories?: UnitMass
  carbs?: UnitMass
  fat?: UnitMass
  protein?: UnitMass
  saturatedFat?: UnitMass
  transFat?: UnitMass
  monounsaturatedFat?: ServingUnit
  polyunsaturatedFat?: UnitMass
  cholesterol?: UnitMass
  sodium?: UnitMass
  fiber?: UnitMass
  sugar?: UnitMass
  sugarAdded?: UnitMass
  vitaminD?: UnitMass
  calcium?: UnitMass
  iron?: UnitMass
  potassium?: UnitMass
  vitaminA?: UnitMass
  vitaminC?: UnitMass
  alcohol?: UnitMass
  sugarAlcohol?: UnitMass
  vitaminB12?: UnitMass
  vitaminB12Added?: UnitMass
  vitaminB6?: UnitMass
  vitaminE?: UnitMass
  vitaminEAdded?: UnitMass
  magnesium?: ServingUnit
  phosphorus?: UnitMass
  iodine?: UnitMass
  ingredientsDescription?: string
  barcode?: string
  tags?: string[]
}
export interface Measurement {
  value: number
  unit: string
}
export interface PassioAlternative {
  passioID: PassioID
  name: string
  quantity?: number
  unitName?: string
}
export interface PassioRecipe {
  passioID: PassioID
  name: string
  imageName: string
  servingSizes: ServingSize[]
  servingUnits: ServingUnit[]
  selectedUnit: string
  selectedQuantity: number
  foodItems: PassioFoodItem[]
}


export const convertPassioFoodItemV3ToPassioIdAttributes = (
  foodItem: PassioFoodItem | null
): PassioIDAttributes | null => {
  if (foodItem) {
    const item: PassioIDAttributes = {
      passioID: foodItem.id,
      name: foodItem.name,
      imageName: foodItem.iconId ?? '',
      entityType: PassioIDEntityType.item,
      parents: [],
      children: [],
      siblings: [],
     isOpenFood: foodItem.isOpenFood ?? false,
      foodItem: convertPassioFoodItemV3ToPassioFoodItemV2(foodItem),
      recipe: convertPassioFoodItemV3ToPassioRecipeV2(foodItem),
    }
    return item
  }
  return null
}

export const convertPassioFoodItemV3ToPassioFoodItemV2 = (
  foodItem: PassioFoodItem | undefined
): PassioFoodItemV2 | undefined => {
  if (foodItem) {
    const nutrients = PassioSDK.fetchNutrientsSelectedSizeForPassioFoodItem(
      foodItem
    )
   const item: PassioFoodItemV2 = {
      passioID: foodItem.id,
      name: foodItem.name,
      imageName: foodItem.iconId ?? '',
      selectedQuantity: foodItem.amount?.selectedQuantity ?? 0,
      selectedUnit: foodItem.amount?.selectedUnit ?? 'g',
      entityType: PassioIDEntityType.item,
      servingUnits: foodItem.amount?.servingUnits ?? [],
      servingSizes: foodItem.amount?.servingSizes ?? [],
      computedWeight: {
        value: foodItem.weight?.value,
        unit: foodItem.weight?.unit,
      } as Measurement,
      ...nutrients,
      magnesium: {
        unitName: nutrients?.magnesium?.unit ?? 'g',
        unit: nutrients?.magnesium?.unit ?? 'g',
        value: nutrients?.magnesium?.value ?? 0,
      },
      monounsaturatedFat: {
        unit: nutrients?.magnesium?.unit ?? 'g',
        unitName: nutrients?.monounsaturatedFat?.unit ?? 'g',
        value: nutrients?.monounsaturatedFat?.value ?? 0,
      },
    }
    return item
  }
  return undefined
}

export const convertPassioFoodItemV3ToPassioRecipeV2 = (
  foodItem: PassioFoodItem | undefined
): PassioRecipe | undefined => {
  if (foodItem) {
    const item: PassioRecipe = {
      passioID: foodItem.id,
      name: foodItem.name,
      imageName: foodItem.iconId ?? '',
      selectedQuantity: foodItem.amount?.selectedQuantity ?? 0,
      selectedUnit: foodItem.amount?.selectedUnit ?? 'g',
      servingUnits: foodItem.amount?.servingUnits ?? [],
      servingSizes: foodItem.amount?.servingSizes ?? [],
      foodItems:
        foodItem.ingredients
          ?.map(convertPassioIngredientV3ToPassioFoodItemV2)
          .filter(
            (filterItem): filterItem is PassioFoodItemV2 => !!filterItem
          ) ?? [],
    }
    return item
  }
  return undefined
}


export const convertPassioIngredientV3ToPassioFoodItemV2 = (
  foodItem: PassioIngredient | undefined
): PassioFoodItemV2 | undefined => {
  if (foodItem) {
    const nutrients = PassioSDK.fetchNutrientsSelectedSizeForPassioFoodItem({
      ingredients: [foodItem],
    })

    const item: PassioFoodItemV2 = {
      passioID: foodItem.id,
      name: foodItem.name,
      imageName: foodItem.iconId ?? '',
      selectedQuantity: foodItem.amount?.selectedQuantity ?? 0,
      selectedUnit: foodItem.amount?.selectedUnit ?? 'g',
      entityType: PassioIDEntityType.item,
      servingUnits: foodItem.amount?.servingUnits ?? [],
      servingSizes: foodItem.amount?.servingSizes ?? [],
      computedWeight: {
        value: foodItem.weight?.value,
        unit: foodItem.weight?.unit,
      } as Measurement,
      ...nutrients,
      magnesium: {
        unitName: nutrients?.magnesium?.unit ?? 'g',
        unit: nutrients?.magnesium?.unit ?? 'g',
        value: nutrients?.magnesium?.value ?? 0,
      },
      monounsaturatedFat: {
        unit: nutrients?.magnesium?.unit ?? 'g',
        unitName: nutrients?.monounsaturatedFat?.unit ?? 'g',
        value: nutrients?.monounsaturatedFat?.value ?? 0,
      },
    }
    return item
  }
  return undefined
}

Note: By utilizing the aforementioned method, alternatives such as parents, children, and siblings consistently remain unspecified.

PreviousMigrating from SDK 2.X to version 3.XNext[Deprecated] Migrating from SDK 1.X to version 2.X

Last updated 1 year ago