update_cow_list_ui
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -404,14 +404,30 @@
|
||||
|
||||
/* 테이블 헤더 셀 */
|
||||
.cow-table-header {
|
||||
@apply text-center py-3 px-3 font-semibold;
|
||||
font-size: 0.9375rem; /* 15px */
|
||||
@apply text-center font-bold;
|
||||
padding: 0.5rem 0.5rem; /* py-2 px-2 */
|
||||
font-size: 1.25rem; /* 20px */
|
||||
}
|
||||
|
||||
@media (min-width: 640px) {
|
||||
.cow-table-header {
|
||||
padding: 0.625rem 0.625rem; /* py-2.5 px-2.5 */
|
||||
font-size: 1.375rem; /* 22px */
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.cow-table-header {
|
||||
padding: 0.75rem 0.75rem; /* py-3 px-3 */
|
||||
font-size: 1.5rem; /* 24px */
|
||||
}
|
||||
}
|
||||
|
||||
/* 테이블 바디 셀 */
|
||||
.cow-table-cell {
|
||||
@apply text-center py-3 px-3;
|
||||
font-size: 0.9375rem; /* 15px */
|
||||
@apply text-center;
|
||||
padding: 0.5rem 0.375rem; /* py-2 px-1.5 */
|
||||
font-size: 1.35rem; /* 21.6px */
|
||||
}
|
||||
|
||||
/* 분석불가 행 - 각 td에 오버레이 */
|
||||
|
||||
@@ -31,12 +31,12 @@ const userNavMain = [
|
||||
},
|
||||
{
|
||||
title: "개체 조회",
|
||||
url: "/cow",
|
||||
url: "/cow?reset=true",
|
||||
icon: IconListDetails,
|
||||
items: [
|
||||
{
|
||||
title: "개체 목록",
|
||||
url: "/cow",
|
||||
url: "/cow?reset=true",
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
* 기능:
|
||||
* - 현재 연도부터 5년 전까지 선택 가능 (예: 2025~2020)
|
||||
* - URL 파라미터 ?year=2024 와 동기화
|
||||
* - 농장의 가장 최근 분석 연도를 기본값으로 사용
|
||||
*
|
||||
* 사용처:
|
||||
* - site-header.tsx: 헤더 연도 선택 드롭다운
|
||||
@@ -33,28 +34,59 @@ function AnalysisYearProviderInner({ children }: { children: React.ReactNode })
|
||||
const currentYear = new Date().getFullYear()
|
||||
const availableYears = Array.from({ length: 6 }, (_, i) => currentYear - i)
|
||||
|
||||
// URL 파라미터에서 연도 가져오기, 없으면 현재 연도 사용
|
||||
const yearFromUrl = searchParams.get('year')
|
||||
const initialYear = yearFromUrl && !isNaN(Number(yearFromUrl))
|
||||
? Number(yearFromUrl)
|
||||
: currentYear
|
||||
// 초기 년도는 현재 년도로 설정 (클라이언트에서 useEffect로 업데이트)
|
||||
const [selectedYear, setSelectedYearState] = useState<number>(currentYear)
|
||||
const [isInitialized, setIsInitialized] = useState<boolean>(false)
|
||||
|
||||
const [selectedYear, setSelectedYearState] = useState<number>(initialYear)
|
||||
|
||||
// URL 파라미터와 동기화
|
||||
// 클라이언트 사이드에서만 실행: localStorage와 URL에서 초기 년도 설정
|
||||
useEffect(() => {
|
||||
if (isInitialized || typeof window === 'undefined') return
|
||||
|
||||
const yearFromUrl = searchParams.get('year')
|
||||
if (yearFromUrl && !isNaN(Number(yearFromUrl))) {
|
||||
console.log('[AnalysisYear] Initial year from URL:', yearFromUrl)
|
||||
setSelectedYearState(Number(yearFromUrl))
|
||||
setIsInitialized(true)
|
||||
return
|
||||
}
|
||||
|
||||
const savedYear = localStorage.getItem('defaultAnalysisYear')
|
||||
if (savedYear && !isNaN(Number(savedYear))) {
|
||||
console.log('[AnalysisYear] Initial year from localStorage:', savedYear)
|
||||
const year = Number(savedYear)
|
||||
setSelectedYearState(year)
|
||||
// URL에 year 파라미터 추가
|
||||
const params = new URLSearchParams(searchParams.toString())
|
||||
params.set('year', year.toString())
|
||||
router.replace(`${pathname}?${params.toString()}`)
|
||||
}
|
||||
|
||||
setIsInitialized(true)
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, []) // 의도적으로 빈 배열 사용 (최초 1회만 실행)
|
||||
|
||||
// URL 파라미터와 동기화 (초기화 이후에만 실행)
|
||||
useEffect(() => {
|
||||
if (!isInitialized) return
|
||||
|
||||
const yearParam = searchParams.get('year')
|
||||
if (yearParam && !isNaN(Number(yearParam))) {
|
||||
const year = Number(yearParam)
|
||||
if (availableYears.includes(year)) {
|
||||
if (availableYears.includes(year) && year !== selectedYear) {
|
||||
setSelectedYearState(year)
|
||||
}
|
||||
}
|
||||
}, [searchParams, availableYears])
|
||||
}, [searchParams, availableYears, isInitialized, selectedYear])
|
||||
|
||||
const setSelectedYear = (year: number) => {
|
||||
console.log('[AnalysisYear] setSelectedYear:', year)
|
||||
setSelectedYearState(year)
|
||||
|
||||
// localStorage 업데이트 (사용자가 선택한 년도를 디폴트로 저장)
|
||||
if (typeof window !== 'undefined') {
|
||||
localStorage.setItem('defaultAnalysisYear', year.toString())
|
||||
}
|
||||
|
||||
// URL 파라미터 업데이트
|
||||
const params = new URLSearchParams(searchParams.toString())
|
||||
params.set('year', year.toString())
|
||||
|
||||
Reference in New Issue
Block a user