using System.Collections; using System.Collections.Generic; using UnityEngine; using WI; using UnityEngine.UI; using static MQTT; using System; using System.Linq; namespace CHN { public class Panel_CompleteAlramHistory : PanelBase, ISingle { public UI_CompleteTimeAlarmInfo prefab_completeTimeAlarmInfo; public ScrollRect ScrollView_CompleteAlramHistory; public Button Button_Close; public Image Image_Loading; public Dictionary completeInfoList = new(); public List notCheckAlramList = new(); public Action onClickAlram; public Action onCheckAlarm; public Action onCheckAlarmData; public Action onOpen; public Action onDashobardOpen; public Action onDashobardClose; public override void AfterAwake() { prefab_completeTimeAlarmInfo = Resources.Load("Prefabs/UI/PRF_UI_CompleteTimeAlramInfo"); Button_Close.onClick.AddListener(Close); notCheckAlramList.Clear(); completeInfoList.Clear(); SetActive(false); } public void Open() { onDashobardOpen?.Invoke("¿Ï·á ½Ã°£ ¾Ë¶÷"); onOpen?.Invoke(); } public void Close() { if (!gameObject.activeSelf) return; onDashobardClose?.Invoke("¿Ï·á ½Ã°£ ¾Ë¶÷"); } public void ActiveLoadingImage(bool isActive) { var active = isActive ? false : true; Image_Loading.gameObject.SetActive(active); } public void SetAlarmInfoItems(List infos) { ActiveLoadingImage(true); var sortedInfos = SetSortInfoData(infos); for (int i = 0; i < sortedInfos.Count; i++) { if (completeInfoList.ContainsKey(sortedInfos[i].completeInfo.worknm)) { completeInfoList[sortedInfos[i].completeInfo.worknm].SetInfo(sortedInfos[i].completeInfo); } else { var infoItem = Instantiate(prefab_completeTimeAlarmInfo, ScrollView_CompleteAlramHistory.content); infoItem.SetInfo(sortedInfos[i].completeInfo); infoItem.onCheck += CheckAlram; infoItem.isCheck = sortedInfos[i].isCheck; completeInfoList.Add(sortedInfos[i].completeInfo.worknm, infoItem); if (!infoItem.isCheck) { notCheckAlramList.Add(infoItem); } } } BlinkAlarmItems(); } private List SetSortInfoData(List infos) { var sortedInfos = infos.Select(data => { DateTime parsedDate; bool isValid = DateTime.TryParse(data.completeInfo.ptotm, out parsedDate); return new { AlarmData = data, IsValid = isValid, Date = parsedDate }; }) .Where(item => item.IsValid) .OrderByDescending(item => item.Date) .Select(item => item.AlarmData) .ToList(); return sortedInfos; } private void BlinkAlarmItems() { onCheckAlarm?.Invoke(notCheckAlramList.Count); } private void CheckAlram(UI_CompleteTimeAlarmInfo completeTimeAlarmInfo) { onClickAlram?.Invoke(completeTimeAlarmInfo.completeInfo.workcd); onCheckAlarmData?.Invoke(completeTimeAlarmInfo.completeInfo, completeTimeAlarmInfo.isCheck); notCheckAlramList.Remove(completeTimeAlarmInfo); onCheckAlarm?.Invoke(notCheckAlramList.Count); } } }