Added final adjusment for demo

This commit is contained in:
Ignacio Gomez 2025-06-27 23:14:49 -06:00
parent 5413f80ee2
commit e654e1cb66
8 changed files with 129 additions and 34 deletions

View File

@ -1,16 +1,34 @@
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UIElements;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Globalization;
class FurnitureFetcher : MonoBehaviour
{
public VisualTreeAsset itemTemplate;
public UIDocument uiDocument;
public static string API_URL = "http://100.123.31.103:5102/api/v1/FurnitureVariant/GetByIds";
public static string API_URL = "https://localhost:7223/api/v1/FurnitureVariant/GetAll";
private static readonly Dictionary<string, string> CurrencySymbols = new()
{
{ "USD", "$" },
{ "EUR", "€" },
{ "GBP", "£" },
{ "JPY", "¥" },
{ "MXN", "$" },
{ "CAD", "$" },
{ "BRL", "R$" },
{ "ARS", "$" },
{ "CLP", "$" },
{ "COP", "$" },
{ "CNY", "¥" },
{ "INR", "₹" }
};
private void Awake()
{
@ -19,38 +37,84 @@ class FurnitureFetcher : MonoBehaviour
IEnumerator GetFurnitureData()
{
Debug.Log($"API URL: {API_URL}");
List<string> variantIds = new()
{
"ab6fd51f-81f0-490d-b713-8d4f3de61a58",
"1f3b348f-b3ee-4985-b76f-7f6d61f2c835"
};
FurnitureIdsRequest data = new() { ids = variantIds };
string json = JsonUtility.ToJson(data);
using UnityWebRequest request = new(API_URL, "POST");
byte[] bodyRaw = Encoding.UTF8.GetBytes(json);
request.uploadHandler = new UploadHandlerRaw(bodyRaw);
using UnityWebRequest request = UnityWebRequest.Get(API_URL);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
string rawResponse = request.downloadHandler.text;
//Debug.Log("📦 RAW RESPONSE:\n" + rawResponse);
if (request.result == UnityWebRequest.Result.Success)
{
string wrappedJson = "{\"items\":" + request.downloadHandler.text + "}";
FurnitureVariantList list = JsonUtility.FromJson<FurnitureVariantList>(wrappedJson);
string wrappedJson = "{\"items\":" + rawResponse + "}";
FurnitureVariantList list;
try
{
list = JsonConvert.DeserializeObject<FurnitureVariantList>(wrappedJson);
}
catch (System.Exception ex)
{
Debug.LogError("❌ Error al deserializar JSON: " + ex.Message);
yield break;
}
var root = uiDocument.rootVisualElement;
var scrollView = root.Q<ScrollView>("furniture-list");
scrollView.Clear();
foreach (var variant in list.items)
{
VisualElement item = itemTemplate.CloneTree();
item.Q<Label>("nameLabel").text = $"Name: {variant.name}";
item.Q<Label>("colorLabel").text = $"Color: {variant.color}";
item.Q<Label>("lineLabel").text = $"Line: {variant.line}";
string currencySymbol = CurrencySymbols.TryGetValue(variant.currency, out string symbol)
? symbol
: variant.currency;
string formattedPrice = $"{currencySymbol}{variant.price.ToString("N2", CultureInfo.InvariantCulture)} {variant.currency}";
item.Q<Label>("priceLabel").text = $"Price: {formattedPrice}";
item.Q<Label>("stockLabel").text = $"Stock: {variant.stock}";
var attributesContainer = item.Q<VisualElement>("attributesContainer");
if (variant.attributes != null)
{
string attributesText = "Attributes:\n";
foreach (var kvp in variant.attributes)
{
attributesText += $"{kvp.Key}: {kvp.Value}\n";
}
//Debug.Log(attributesText);
//Debug.Log($"--- ATRIBUTOS PARA: {variant.name} ---");
//Debug.Log($"Total keys: {variant.attributes.Count}");
int index = 0;
foreach (var kvp in variant.attributes)
{
//Debug.Log($"[{index}] {kvp.Key}: {kvp.Value}");
string formattedKey = FormatKey(kvp.Key);
Label attrLabel = new Label($"{formattedKey}: {kvp.Value}");
attrLabel.AddToClassList("furniture-attribute"); // estilo opcional
attrLabel.style.whiteSpace = WhiteSpace.Normal;
attributesContainer.Add(attrLabel);
index++;
}
if (index == 0)
Debug.Log("⚠️ El diccionario está vacío aunque no es null.");
}
else
{
Debug.Log($"❌ 'attributes' es NULL para {variant.name}");
}
scrollView.Add(item);
}
}
@ -59,4 +123,16 @@ class FurnitureFetcher : MonoBehaviour
Debug.LogError("Error: " + request.error);
}
}
private string FormatKey(string rawKey)
{
if (string.IsNullOrWhiteSpace(rawKey))
return "";
// Inserta espacio antes de mayúsculas
string spaced = System.Text.RegularExpressions.Regex.Replace(rawKey, "([a-z])([A-Z])", "$1 $2");
// Capitaliza primera letra
return char.ToUpper(spaced[0]) + spaced.Substring(1);
}
}

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
[Serializable]
public class FurnitureIdsRequest
@ -14,6 +15,14 @@ public class FurnitureVariant
public string name;
public string color;
public string line;
public int stock;
public float price;
public string currency;
public string categoryId;
public string providerId;
[JsonProperty("attributes")]
public Dictionary<string, string> attributes;
public string _id;
public string id;
public string createdAt;

View File

@ -1,8 +1,11 @@
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ui:Style src="Styles/FurnitureItem.uss" />
<ui:VisualElement class="furniture-item">
<ui:Label name="nameLabel" class="furniture-title"/>
<ui:Label name="colorLabel" class="furniture-subtitle"/>
<ui:Label name="lineLabel" class="furniture-subtitle"/>
<ui:Label name="nameLabel" class="furniture-title" />
<ui:Label name="colorLabel" class="furniture-subtitle" />
<ui:Label name="lineLabel" class="furniture-subtitle" />
<ui:Label name="priceLabel" class="furniture-subtitle" />
<ui:Label name="stockLabel" class="furniture-subtitle" />
<ui:VisualElement name="attributesContainer" class="attributes-container" />
</ui:VisualElement>
</ui:UXML>

View File

@ -1,7 +1,7 @@
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ui:Style src="Styles/MainScreen.uss" />
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" editor-extension-mode="False">
<Style src="project://database/Assets/UI%20Toolkit/Styles/MainScreen.uss?fileID=7433441132597879392&amp;guid=1993886af6eb1494f9f4a4f3c968807a&amp;type=3#MainScreen" />
<ui:VisualElement class="main-screen">
<ui:Label text="Furniture List" class="title-label" />
<ui:ScrollView name="furniture-list" style="flex-grow: 1" />
<ui:ScrollView name="furniture-list" vertical-scroller-visibility="Hidden" horizontal-scroller-visibility="Hidden" style="flex-grow: 1;" />
</ui:VisualElement>
</ui:UXML>

View File

@ -31,3 +31,17 @@
#FurnitureItemDocumentUI-container{
display:none;
}
.attributes-container {
margin-top: 8px;
}
.attribute-line {
font-size: 12px;
color: #aaaaaa;
}
.furniture-attribute {
font-size: 12px;
color: #bbbbbb;
margin-left: 10px;
}

View File

@ -6,6 +6,7 @@
"com.unity.device-simulator.devices": "1.0.0",
"com.unity.feature.development": "1.0.1",
"com.unity.mobile.android-logcat": "1.4.5",
"com.unity.nuget.newtonsoft-json": "3.2.1",
"com.unity.textmeshpro": "3.0.9",
"com.unity.timeline": "1.7.6",
"com.unity.ugui": "1.0.0",

View File

@ -153,7 +153,7 @@
},
"com.unity.nuget.newtonsoft-json": {
"version": "3.2.1",
"depth": 1,
"depth": 0,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"

View File

@ -149,14 +149,6 @@ PlayerSettings:
- {fileID: 4800000, guid: b02d09082cbc14569ae46c12d9836abc, type: 3}
- {fileID: 4800000, guid: f40a6c94c8e1b494d93d434ae522a14f, type: 3}
- {fileID: 4800000, guid: 0f45334fa661448c886e4f99ba812a7e, type: 3}
- {fileID: 479186601668263405, guid: e04dc9557a6bcec40b5d8576988f74a3, type: 2}
- {fileID: 11400000, guid: 6bfaaf31cb485f64fb956f1d691a0e1d, type: 2}
- {fileID: -7180841881952691092, guid: 228964b93c232624fac8c242b79176e5, type: 2}
- {fileID: 11400000, guid: 911becadf2ac07e4da62b8afa0b9ea7f, type: 2}
- {fileID: 4800000, guid: b1d4c517492046e1a4e4cc49b0b73b42, type: 3}
- {fileID: 4800000, guid: 2b7e3540272684e0b8e12fed2c4609de, type: 3}
- {fileID: 4800000, guid: c9f956787b1d945e7b36e0516201fc76, type: 3}
- {fileID: 4800000, guid: 0945859e5a1034c2cb6dce53cb4fb899, type: 3}
metroInputSource: 0
wsaTransparentSwapchain: 0
m_HolographicPauseOnTrackingLoss: 1