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

FlexGridFilter 선택된 필터 항목 유지 > Q&A | 토론

본문 바로가기

Wijmo

Q&A | 토론

ReactJS FlexGridFilter 선택된 필터 항목 유지

페이지 정보

작성자 솔루션 작성일 2022-05-26 16:50 조회 2,522회 댓글 0건
제품 버전 : 5.20201.680
컨트롤 이름 : FlexGrid, FlexGridFilter

본문


FlexGrid를 사용하였고 특정 컬럼에 필터를 설정했습니다.

해당 필터는 API문서의 생성자를 이용한 것이 아닌 <FlexGridFilter/>를 <FlexGrid/>밑에 적용하여 구현했습니다.

[아래 코드와 같이..]

						<FlexGrid
							initialized={gridInitial}
							// attributes
							id={gridSchema.id}
							ref={ref}
							selectionMode={gridSchema.selectionMode}
							currentItem={null}
							imeEnabled={true}
							itemsSource={gridSchema.itemsSource}
							showMarquee={showMarquee} 이하 속성들 생략...
							>
							{gridSchema.columns.map((item, idx) => {
								return (
									<FlexGridColumn
										// cellTemplate={
										// 	CellMaker.makeButton({
										// 		click: (e, ctx) => alert('Clicked Button ** ' + ctx.item.country + ' **')})
										// 	}
										cssClassAll={item.cssClassAll}
										width={item.width}
										align={item.align}
										isReadOnly={item.isReadOnly}
										header={item.header}
										binding={item.binding}
										dataMap={item.dataMap}
										key={idx}
									/>
								);
							})}
							{hasFilter && <FlexGridFilter filterApplied={editingFilter} initialized={filterInit} />}
						</FlexGrid>


그리고 input박스에 글자를 입력 받아 해당 컬럼을 필터링했습니다.

[아래 코드와 같이...]

const gridRef = useRef();  // gridRef는 forwardRef로 감싸 자식까지 내려 flexGrid에 설정
gridRef.current.control.collectionView.filter = item => {
    필터링 블라블라~
}



모든 것이 동작되는 것처럼 보입니다. 동작은 됩니다. 


문제는 FlexGridFilter컴포넌트를 이용한 필터에서 조건을 설정한 후 적용하면

정상적으로 필터링이 됩니다만,

위의 코드를 이용한 사용자 입력에 의한 글자로 또 한번 필터를 작동시키면

FlexGridFilter의 필터 적용값이 풀려버립니다.(정확히는 UI상에 필터 적용값은 체크된 상태)


문서를 보니 apply()를 이용하면 되지 않을까 하는데, 이것을 어떻게 끄집어 낼 수 있는지 모르겠네요..

이미 공통화가 된 grid라서 큰 구조를 바꿀순없을것같습니다..








  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

2 답변

ReactJS Re: FlexGridFilter 선택된 필터 항목 유지

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

페이지 정보

작성자 GCK루시 작성일 2022-05-27 11:46 댓글 2건

본문

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


문의 주신 FlexGridFilter와 함께 CollectionView의 필터를 같이 적용하고 싶으신 경우, filters 속성을 사용하시면 됩니다. 아래 저희 다중 필터 데모를 공유 드리며 데모에서 FlexGridFilter를 적용 후, input에 값을 입력하여 추가적으로 필터 적용 시에도 FlexGridFilter에 적용된 기존의 필터가 유지되는 것을 확인하실 수 있습니다.


- 다중 필터 기능 : https://demo.grapecity.co.kr/wijmo/learn-wijmo/Core/CollectionView/CreatingViews/Filtering/MultipleFilters/react

- filters : https://demo.grapecity.co.kr/wijmo/api/classes/wijmo.collectionview.html#filters


다른 궁금한 점이 생기면, 문의 주시기 바랍니다. 


감사합니다. 

그레이프시티 드림 

댓글목록

솔루션님의 댓글

솔루션 작성일

예제 : https://demo.grapecity.co.kr/wijmo/learn-wijmo/Core/CollectionView/CreatingViews/Filtering/MultipleFilters/react

를 functional로 바꾸어 보았습니다.
const App = () => {
    const [text, setText] = useState('');
    const [view, setView] = useState();

    useEffect(()=>{
        const views = new CollectionView(getData());
        views.filters.push(item => {
            return !text || item.country.toLowerCase().indexOf(text) > -1;
        })
        setView(views);
    },[])

    function setCountryFilter(text) {
        setText(text);
        view.refresh();
    }
  
    return <div className="container-fluid">
        <input className="form-control" placeholder="country filter" onInput={e => setCountryFilter(e.target.value)}/>
        <FlexGrid alternatingRowStep={0} headersVisibility="Column" itemsSource={view}>
            <FlexGridFilter />
        </FlexGrid>
    </div>;
    
}



동작되지 않네요...

우선, 개념적으로 제가 맞게 이해한건지 궁금합니다. 

flexgridfilter와 collectionView의 filter와는 전혀 다른것이고 제가 원하는 것을 하려면 이 둘을 연결시켜야 한다는게 맞는건가요?  filter를 쓰면 제대로 filtering이 되는데 연결하면 안되고, push방식을 쓰면 필터링과 위의 필터 적용이 풀리는 문제가 해결은 되지만 ""공백의 경우 새로이 데이터를 그려줘야하는데도 못그리더라고요. itemsSource를 보니 필터 후 아예 데이터를 날려버리는것같습니다.
아무튼,,  예제를 functional 방식으로 바꾸니 원하는 동작이 되지 않습니다. 단순히 구문을 나열하니 이런것같은데 도대체 어떤 방식인지 도통 알수가 없으니 해결을 못하겠네요.

GCK루시님의 댓글의 댓글

GCK루시 작성일

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

문의 주신 현상이 저희 쪽에서도 재현이 되어 확인 중에 있습니다. 관련하여 확인이 끝나는 대로 안내 드릴 수 있도록 하겠습니다.

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

ReactJS Re: FlexGridFilter 선택된 필터 항목 유지

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

페이지 정보

작성자 GCK루시 작성일 2022-06-02 10:49 댓글 0건

본문

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


먼저, wijmo.grid.filter 모듈은 Excel 스타일의 필터링 UI를 제공하며 FlexGridFilter를 이용하여 구현하실 수 있습니다.

filters 속성을 통해서 FlexGridFilter와 독립적으로 필터링을 설정이 가능하며 해당 이슈의 경우 useState를 이용할 시 값에 대해서 올바르게 업데이트가 되지 않아 발생된 것으로 추측됩니다. 따라서 input에 텍스트 입력 시, 값을 useState가 아닌 createRef를 이용하여 가져오는 형식으로 구현해보시기 바랍니다.


아래 간단한 샘플을 공유 드리오니 참고 부탁 드립니다.


 


다른 궁금한 점이 생기면, 문의 주시기 바랍니다. 


감사합니다. 

그레이프시티 드림 

댓글목록

등록된 댓글이 없습니다.

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