Files
XRLib/Assets/Scripts/UVC/Factory/Modal/Settings/DisplayDataOrderTabContent.cs

134 lines
4.5 KiB
C#
Raw Normal View History

#nullable enable
2025-08-07 21:12:44 +09:00
using Cysharp.Threading.Tasks;
using System.Collections.Generic;
using UnityEngine;
2025-08-04 20:15:20 +09:00
using UVC.Data;
using UVC.Data.Core;
using UVC.UI.List.Draggable;
using UVC.UI.Tab;
2025-08-07 21:12:44 +09:00
namespace UVC.Factory.Modal.Settings
{
2025-08-07 21:12:44 +09:00
public class DisplayDataOrderTabContent : MonoBehaviour, ITabContent
{
[SerializeField]
private DraggableList? draggableList;
private string key = string.Empty;
2025-08-04 20:15:20 +09:00
private DataObject? totalData = null;
private UserSetting? viewData = null;
public void Start()
{
if (draggableList == null)
{
Debug.LogError("DraggableList 컴포넌트가 설정되지 않았습니다.");
return;
}
draggableList.OnOrderChanged += OnOrderChanged;
draggableList.OnChangedItemData += OnChangedItemData;
}
public void SetContentData(object? data)
{
if (data is string key)
{
this.key = key;
2025-08-04 20:15:20 +09:00
IDataObject? dataObject = DataRepository.Instance.GetData(key);
if (dataObject != null)
{
if (dataObject is DataArray dataArray)
{
if (dataArray.Count > 0) totalData = dataArray[0];
}
else if (dataObject is DataObject dataObject1)
{
totalData = dataObject1;
}
}
2025-08-07 21:12:44 +09:00
if (totalData != null)
{
2025-08-04 20:15:20 +09:00
viewData = UserSetting.Get(key);
//저장 되 있는 데이터가 없으면 전체 아이템을 체크된 상태로 추가
if (viewData == null)
{
2025-08-04 20:15:20 +09:00
viewData = UserSetting.FromDataObject(totalData);
UserSetting.AddSetting(key, viewData!);
}
List<ConfigDataOrderListItemData> dataList = new List<ConfigDataOrderListItemData>();
//저장된 데이터가 있으면 체크된 상태로 추가
foreach (var item in totalData)
{
bool isChecked = viewData!.ContainsKey(item.Key);
dataList.Add(new ConfigDataOrderListItemData(item.Key, (isChecked ? viewData[item.Key].ToString() : item.Key), isChecked));
}
//드래그 가능한 리스트에 데이터 설정
draggableList?.SetData<ConfigDataOrderListItemData>(dataList);
}
}
}
private void OnOrderChanged(ListItemData data, int oldIndex, int newIndex)
{
Debug.Log($"OnOrderChanged: {data.Id} from {oldIndex} to {newIndex}");
UpdateData();
}
private void OnChangedItemData(ListItemData data)
{
Debug.Log($"OnChangedItemData: {data.Id} - {data.DisplayName}");
UpdateData();
}
private void UpdateData()
{
Debug.Log($"UpdateData: draggableList != null:{draggableList != null}, viewData != null:{viewData != null}, configKey:{key}");
if (draggableList != null && viewData != null && key.Length > 0)
{
viewData.Clear();
foreach (var item in draggableList.DataList)
{
if (item is ConfigDataOrderListItemData listItemData)
{
if (listItemData.isChecked)
{
viewData[listItemData.Id] = listItemData.DisplayName;
}
}
}
Debug.Log($"UpdateData: {key} - {viewData.ToJsonString()} items");
2025-08-04 20:15:20 +09:00
UserSetting.AddSetting(key, viewData);
}
}
void OnDestroy()
{
if (draggableList != null)
{
draggableList.OnOrderChanged -= OnOrderChanged;
draggableList.OnChangedItemData -= OnChangedItemData;
}
}
2025-08-07 21:12:44 +09:00
public UniTask OnCloseAsync()
{
return UniTask.CompletedTask;
}
}
public class ConfigDataOrderListItemData : ListItemData
{
public bool isChecked = true;
public ConfigDataOrderListItemData(string id, string displayName, bool isChecked) : base(id, displayName)
{
this.isChecked = isChecked;
}
}
}