! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

MultiSelectListBox 다중 검색어 입력 문의 > Q&A | 토론

본문 바로가기

ReactJS MultiSelectListBox 다중 검색어 입력 문의

페이지 정보

작성자 brav 작성일 2022-08-22 10:59 조회 1,114회 댓글 1건
제품 버전 : Wijmo 2020 v2
컨트롤 이름 : MultiSelectListBox

본문

현재 조회 조건의 일부 항목이 다중 선택 기능을 Wijimo MultiSelectListBox로 구현하고 있는데,
필터 기능이 한 가지 조건만 입력 가능한 상태입니다.
여러 검색어로 검색하여 선택할 수 있도록 할수 있는 방법이 있을지 문의드립니다.

여러 검색 조건으로 검색하기 위해서 특정 구분자로 검색어를 구분 입력하여 검색한다거나,
(예를 들면 BCM, BHN 과 같이 2개 검색 조건 입력하여 해당 2개 조건 중 하나라도 만족하면 표시.) 아니면 한가지씩 검색하여 체크하여 여러건을 선택하는 방식이 가능할거 같은데...
현재는 검색어를 수정하면 기존 검색어로 검색하여 선택한 항목이 Clear 되어서 불가능한 상태입니다.
해당 기능에 적합한 기본으로 제공하는 다른 Component가 있는지, 안된다면 Customizing 할 수 있는지 문의 드립니다.
  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

GCK다이애나님의 댓글

GCK다이애나 작성일

안녕하세요 그레이프시티입니다.

문의 주신 내용에 대해 현재 확인 중에 있으며, 확인이 완료되는 대로 답변 드리도록 하겠습니다.
답변이 지연되는 점 죄송합니다.

감사합니다.
그레이프시티 드림

1 답변

ReactJS Re: MultiSelectListBox 다중 검색어 입력 문의

추천0 이 글을 추천하셨습니다 비추천0 채택채택

페이지 정보

작성자 GCK다이애나 작성일 2022-08-30 17:10 댓글 0건

본문

안녕하세요 그레이프시티입니다.


먼저 답변이 지연된 점 죄송합니다.

문의 주신 내용에 대해 다음과 같이 답변 드립니다.

1. 특정 구분자를 이용하여 여러 검색어로 검색하는 방법에 대한 문의

 : 다음과 같은 방법으로 MultiSelectListBox 컨트롤의 항목을 특정 구분자로 구분해 여러 검색어로 검색하는 기능을 구현 할 수 있습니다.

  1. MultiSelectListBox 컨트롤의 initialized 이벤트 호출 시, 전달되는 MultiSelectListBox 컨트롤의 인스턴스 값 sender를 이용하여 필터에 검색어를 입력하면 호출되는 input 이벤트를 설정합니다.
  2. input 이벤트 호출 시, 필터에 입력된 검색어를 split() 메서드를 이용하여 ','를 기준으로 분리한 뒤 해당 배열을 변수 arr 에 저장합니다.
  3. split() 메서드로 인해 생긴 공백을 filter() 메서드를 이용하여 제거한 뒤 해당 배열을 textArr 변수에 저장합니다.
  4. join() 메서드를 이용하여 textArr 변수에 저장된 배열의 모든 요소를 하나로 연결합니다. 이때, join() 메서드의 매개변수를 OR 연산자인 '|'로 지정합니다.
  5. 하나로 연결된 배열의 요소들을 RegExp() 생성자를 이용하여 정규표현식으로 변환한 뒤, test() 메서드를 이용하여 MultiSelectListBox 컨트롤의 항목들 중 정규표현식과 일치하는 항목을 검색합니다.
  6. 필터에 검색어가 입력되는 시간을 주기 위해 setTimeout() 메서드를 이용하여 위의 단계들이 일정 시간을 가진 후 실행 되도록 구현합니다.

 위의 방법으로 작성된 아래의 코드를 참고해 보시기 바랍니다. 

const initialized = (sender, e) => {
    sender._filter.addEventListener("input", (e) => {
      setTimeout(() => {
        // ',' 로 구분하여 여러 검색어들로 항목들을 검색합니다.
        sender.listBox.collectionView.filter = (item, e) => {
          // ',' 를 기준으로 검색어를 분리하여 배열로 저장합니다.
          let arr = sender._filterText.split(",");
          // arr 배열에서 공백을 제거한 후 변수 textArr 에 저장합니다.
          const textArr = arr.filter((element) => {
            return element !== "";
          });

          // 변수 textArr에 저장된 배열 요소들로 정규표현식을 만들어 항목들을 검색합니다.
          if (
            new RegExp(textArr.join("|")).test(
              item[sender.displayMemberPath].toLowerCase()
            )
          ) {
            return true;
          }
          return false;
        };
      }, 500); //검색어 입력을 위해 약간의 시간을 줍니다.
    });
  };


2. 필터의 검색어 수정 시, 기존의 체크 되어 있던 항목의 체크가 해제되는 현상에 대한 문의

 : 문의 주신 현상의 경우 Wijmo 2020v2 버전에 존재하였던 버그로, Wijmo 2020v3 버전에서 해당 버그가 픽스되었습니다.

 2020v3 버전을 포함한 상위 버전의 WIjmo에서 checkOnFilter 속성을 false 로 설정한 MultiSelectListBox 컨트롤을 생성하여 테스트해 보시길 바랍니다.


 만약 Wijmo 2020v2 버전에서 문의 주신 내용을 구현하시길 원하신다면 아래의 샘플을 참고해 보시기 바랍니다.

 샘플은 다음과 같은 단계로 구현되었습니다.

  1. 변수 checkedItemArr를 선언하고, checkedItemArr의 current 값에 Set() 생성자를 생성합니다.
  2. MultiSelectListBox 컨트롤의 onCheckedItemsChanged 이벤트 호출 시, 현재 체크 된 항목들을 add() 메서드를 이용하여 checkedItemArr 의 current 에 저장합니다.
  3. 필터의 검색어가 수정 혹은 삭제 된 후, checkedItemArr의 current에 저장된 항목들과 MultiSelectListBox 컨트롤의 항목들을 비교하여 기존에 체크 되어 있던 항목들을 다시 체크하는 함수 restoreChecked를 선언합니다.
  4. 1번 문의 답변의 코드를 이용하여 MultiSelectListBox 컨트롤의 initialized 이벤트를 설정합니다.
  5. MultiSelectListBox 컨트롤의 input 이벤트에서 검색이 모두 끝난 후, 기존의 체크 되어 있던 항목들이 체크 된 채로 유지되도록 restoreChecked 함수를 호출합니다.


- checkOnFilter API 문서


API 문서를 공유 드리며 다른 궁금한 점이 생기면, 문의 주시기 바랍니다.


감사합니다


그레이프시티 드림

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.