프로젝트

일반

사용자정보

Actions

Cpt 파라미터 저장 예외처리(debounce)

document.addEventListener('DOMContentLoaded', function () {
  const today = new Date();

  // debounce 함수 정의
  function debounce(func, delay) {
    let timeoutId;
    return function (...args) {
      if (timeoutId) {
        clearTimeout(timeoutId);
      }
      timeoutId = setTimeout(() => {
        func.apply(this, args);
      }, delay);
    };
  }

  // widget 처리 공통 로직
  function handleWidget(target) {
    if (target) {
      console.log(`Handling widget: ${target.getAttribute('widgetname')}`);
      let dateFilter = 'Y';
    //   const paramContainer = _g().getParameterContainer();
      if (typeof  _g().getParameterContainer().getWidgetByName('date_filter_YN') !== 'undefined') {
        dateFilter =  _g().getParameterContainer().getWidgetByName('date_filter_YN').getValue();
      }
      if (dateFilter === 'N') {
        if (typeof  _g().getParameterContainer().getWidgetByName('p_to_date') !== 'undefined') {
           _g().getParameterContainer().getWidgetByName('p_to_date').setValue(today);
        }
        if (typeof  _g().getParameterContainer().getWidgetByName('p_from_date') !== 'undefined') {
           _g().getParameterContainer().getWidgetByName('p_from_date').setValue(today);
        }
      }
    }
  }

  // debounce 처리할 공통 로직
  const handleDebouncedEvent = debounce(function (event) {
    console.log('Debounced Event Triggered:', event?.type || 'DOM Mutation');
    if (event?.type === 'click') {
      const target = event.target.closest("[widgetname^=sortable]");
      if (target) {
        handleWidget(target);
      }
    } else {
      // MutationObserver로 감지된 경우 widgetname 조건 만족하는 모든 요소 처리
      const sortableWidgets = document.querySelectorAll("[widgetname^=sortable]");
      sortableWidgets.forEach((widget) => {
        handleWidget(widget);
      });
    }
  }, 100); // 100ms debounce delay

  // 클릭 이벤트 감지
  document.body.addEventListener('click', handleDebouncedEvent);

  // MutationObserver로 DOM 변경 감지
  const observerCallback = function (mutationsList) {
    console.log('1');
    for (const mutation of mutationsList) {
      if (mutation.type === 'childList' || mutation.type === 'attributes') {
        const target = mutation.target;
        if (target.getAttribute && target.getAttribute('widgetname')?.startsWith('sortable')) {
          handleWidget(target);
          console.log('1 sortable');
        } else {
        console.log('all');
        console.log(target);
        console.log(target.getAttribute('widgetname'));
          // 전체 DOM에서 조건 만족하는 widget 처리
          handleDebouncedEvent();
        }
      }
    }
  };

  // MutationObserver 설정
  const observer = new MutationObserver(observerCallback);
  observer.observe(document.body, {
    // childList: true,      // 자식 노드 변경 감지
    attributes: true,     // 속성 변경 감지
    // subtree: true,        // 하위 모든 노드 감지
  });
  console.log('Observer and click listener initialized.');
});

김 미진이(가) 18일 전에 변경 · 1 revisions