@@ -3,10 +3,6 @@ import { useNavigate } from "react-router-dom";
33import "./Community.css" ;
44import config from "../../config" ;
55
6- const ALLOWED_TAGS = [
7- "JAVA" , "C" , "CPP" , "JPA" , "JAVASCRIPT" , "PYTHON" , "OOP" , "BIGDATA" , "SPRING" , "TYPESCRIPT" , "ML"
8- ] ;
9-
106const SEARCH_SCOPE_OPTIONS = [
117 { value : "all" , label : "전체" } ,
128 { value : "author" , label : "작성자" } ,
@@ -55,8 +51,6 @@ export default function Community() {
5551 const [ searchOperator , setSearchOperator ] = useState ( DEFAULT_OPERATOR ) ;
5652
5753 const PAGE_SIZE = 10 ;
58- const selectedTagCount = selectedTagFilters . length ;
59- const reachedTagFilterLimit = selectedTagCount >= 10 ;
6054
6155 useEffect ( ( ) => {
6256 let ignore = false ;
@@ -264,39 +258,6 @@ export default function Community() {
264258 setLastKnownPage ( 1 ) ;
265259 } ;
266260
267- const handleReset = ( ) => {
268- setSearchInput ( "" ) ;
269- setKeyword ( "" ) ;
270- setSelectedTagFilters ( [ ] ) ;
271- setTagKeyword ( [ ] ) ;
272- setSearchScope ( DEFAULT_SCOPE ) ;
273- setSearchOperator ( DEFAULT_OPERATOR ) ;
274- setCurrentPage ( 1 ) ;
275- setLastKnownPage ( 1 ) ;
276- } ;
277-
278- const toggleTagFilter = ( tag , { resetSearch = false } = { } ) => {
279- setSelectedTagFilters ( ( prev ) => {
280- if ( prev . includes ( tag ) ) {
281- const next = prev . filter ( ( item ) => item !== tag ) ;
282- setTagKeyword ( next . map ( ( item ) => item . toLowerCase ( ) ) ) ;
283- return next ;
284- }
285- if ( prev . length >= 10 ) {
286- return prev ;
287- }
288- const next = [ ...prev , tag ] ;
289- setTagKeyword ( next . map ( ( item ) => item . toLowerCase ( ) ) ) ;
290- return next ;
291- } ) ;
292- if ( resetSearch ) {
293- setSearchInput ( "" ) ;
294- setKeyword ( "" ) ;
295- }
296- setCurrentPage ( 1 ) ;
297- setLastKnownPage ( 1 ) ;
298- } ;
299-
300261 const handleTopWriterSelect = useCallback ( ( writerName ) => {
301262 const trimmed = ( writerName || "" ) . trim ( ) ;
302263 if ( ! trimmed ) return ;
@@ -555,16 +516,6 @@ export default function Community() {
555516 </ div >
556517
557518 < div className = "search-bar" >
558- < form className = "search-row" onSubmit = { handleSearchSubmit } >
559- < input
560- type = "search"
561- placeholder = "궁금한 질문을 검색해보세요!"
562- value = { searchInput }
563- onChange = { ( event ) => setSearchInput ( event . target . value ) }
564- aria-label = "게시글 검색"
565- />
566- < button type = "submit" className = "search-btn" > 검색</ button >
567- </ form >
568519 < div className = "search-options" >
569520 < div className = "search-option" >
570521 < label htmlFor = "community-search-scope" > 검색 대상</ label >
@@ -603,42 +554,16 @@ export default function Community() {
603554 </ select >
604555 </ div >
605556 </ div >
606- < div className = "search-row tag-search-row" role = "presentation" >
607- < div
608- className = "tag-search-selector"
609- role = "group"
610- aria-label = "태그 검색"
611- >
612- { ALLOWED_TAGS . map ( ( tag ) => {
613- const isActive = selectedTagFilters . includes ( tag ) ;
614- const isDisabled = ! isActive && reachedTagFilterLimit ;
615- const printable = `#${ tag . toLowerCase ( ) } ` ;
616- const buttonLabel = isActive
617- ? `${ printable } 태그 필터 제거`
618- : isDisabled
619- ? "태그 필터는 최대 10개까지 선택할 수 있어요"
620- : `${ printable } 태그 필터 추가` ;
621- return (
622- < button
623- key = { tag }
624- type = "button"
625- className = { `tag-search-option ${ isActive ? "is-active" : "" } ` . trim ( ) }
626- onClick = { ( ) => toggleTagFilter ( tag ) }
627- aria-pressed = { isActive }
628- disabled = { isDisabled }
629- title = { buttonLabel }
630- >
631- { printable }
632- </ button >
633- ) ;
634- } ) }
635- </ div >
636- < button type = "button" className = "reset-btn" onClick = { handleReset } > 초기화</ button >
637- </ div >
638- < p className = "tag-search-helper" aria-live = "polite" >
639- 태그는 클릭해서 추가하거나 제거할 수 있어요. 선택 { selectedTagCount } 개
640- { reachedTagFilterLimit ? " (최대 10개 선택됨)" : "" }
641- </ p >
557+ < form className = "search-row" onSubmit = { handleSearchSubmit } >
558+ < input
559+ type = "search"
560+ placeholder = "궁금한 질문을 검색해보세요!"
561+ value = { searchInput }
562+ onChange = { ( event ) => setSearchInput ( event . target . value ) }
563+ aria-label = "게시글 검색"
564+ />
565+ < button type = "submit" className = "search-btn" > 검색</ button >
566+ </ form >
642567 </ div >
643568
644569 < div className = "filter-area" >
0 commit comments