사용자 정보 모달, 드래그 리스트 개발
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
#nullable enable
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor.Rendering.LookDev;
|
||||
using UnityEngine;
|
||||
using UVC.Data.Core;
|
||||
using UVC.UI.List.Draggable;
|
||||
using UVC.UI.Tab;
|
||||
|
||||
namespace UVC.Factory.Modal.Config
|
||||
{
|
||||
public class ConfigDataOrderTabContent : MonoBehaviour, ITabContent
|
||||
{
|
||||
|
||||
[SerializeField]
|
||||
private DraggableList? draggableList;
|
||||
|
||||
private string key = string.Empty;
|
||||
private string configKey = string.Empty;
|
||||
|
||||
private DataMask? totalData = null;
|
||||
private DataMask? 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;
|
||||
configKey = $"Config{key}";
|
||||
DataMask? mask = DataMask.Get(key);
|
||||
if (mask != null) totalData = mask;
|
||||
|
||||
viewData = DataMask.Get(configKey);
|
||||
if (totalData != null)
|
||||
{
|
||||
//저장 되 있는 데이터가 없으면 전체 아이템을 체크된 상태로 추가
|
||||
if (viewData == null)
|
||||
{
|
||||
viewData = totalData.DeepClone();
|
||||
DataMask.AddMask(configKey, viewData);
|
||||
}
|
||||
List<ConfigDataOrderListItemData> dataList = new List<ConfigDataOrderListItemData>();
|
||||
|
||||
//저장된 데이터가 있으면 체크된 상태로 추가
|
||||
foreach (var item in totalData)
|
||||
{
|
||||
bool isChecked = viewData!.ContainsKey(item.Key);
|
||||
dataList.Add(new ConfigDataOrderListItemData(item.Key, 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:{configKey}");
|
||||
if (draggableList != null && viewData != null && configKey.Length > 0)
|
||||
{
|
||||
foreach (var item in draggableList.DataList)
|
||||
{
|
||||
if (item is ConfigDataOrderListItemData listItemData)
|
||||
{
|
||||
if (listItemData.isChecked)
|
||||
{
|
||||
viewData[listItemData.Id] = listItemData.DisplayName;
|
||||
}
|
||||
else
|
||||
{
|
||||
viewData.Remove(listItemData.Id);
|
||||
}
|
||||
}
|
||||
}
|
||||
Debug.Log($"UpdateData: {configKey} - {viewData.ToJsonString()} items");
|
||||
DataMask.AddMask(configKey, viewData);
|
||||
}
|
||||
}
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
if (draggableList != null)
|
||||
{
|
||||
draggableList.OnOrderChanged -= OnOrderChanged;
|
||||
draggableList.OnChangedItemData -= OnChangedItemData;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public class ConfigDataOrderListItemData : ListItemData
|
||||
{
|
||||
public bool isChecked = true;
|
||||
public ConfigDataOrderListItemData(string id, string displayName, bool isChecked) : base(id, displayName)
|
||||
{
|
||||
this.isChecked = isChecked;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user