清理前端Hook依赖告警
This commit is contained in:
parent
bad838fe8b
commit
09cab536a3
@ -337,7 +337,7 @@ export default function UsersTab({
|
||||
.filter(Boolean) as string[]
|
||||
}, [editingUserDepartment, users])
|
||||
|
||||
const renderStatusBadges = (user: User) => (
|
||||
const renderStatusBadges = useCallback((user: User) => (
|
||||
<>
|
||||
<span
|
||||
className={cn(
|
||||
@ -360,7 +360,7 @@ export default function UsersTab({
|
||||
{user.canDownload ? '可下载' : '禁止下载'}
|
||||
</span>
|
||||
</>
|
||||
)
|
||||
), [badgeActive, badgeInactive, badgeNoRole, badgeRole])
|
||||
|
||||
const renderActionButtons = useCallback((user: User, options?: { showRoleToggle?: boolean }) => {
|
||||
const allowed = canManageUser(user)
|
||||
@ -419,7 +419,20 @@ export default function UsersTab({
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}, [canManageUser, currentIsSuperAdmin, currentUserId, handleEditUser, onToggleActive, onToggleDownload, onSetRole])
|
||||
}, [
|
||||
canManageUser,
|
||||
currentIsSuperAdmin,
|
||||
currentUserId,
|
||||
handleEditUser,
|
||||
onToggleActive,
|
||||
onToggleDownload,
|
||||
onSetRole,
|
||||
styles.buttonModifiers.compactXs,
|
||||
styles.buttonStyles.danger,
|
||||
styles.buttonStyles.secondary,
|
||||
styles.buttonStyles.success,
|
||||
textDesc,
|
||||
])
|
||||
|
||||
const renderUserRow = useCallback(
|
||||
(user: User, isManager = false) => (
|
||||
@ -453,7 +466,7 @@ export default function UsersTab({
|
||||
{renderActionButtons(user)}
|
||||
</div>
|
||||
),
|
||||
[renderActionButtons],
|
||||
[renderActionButtons, renderStatusBadges, styles.cardStyles.hover, textDesc, textNormal, textSuperAdmin],
|
||||
)
|
||||
|
||||
const showSearchResults = Boolean(searchTerm.trim())
|
||||
|
||||
@ -79,7 +79,7 @@ const departmentCollator = useMemo(() => getDepartmentCollator(), [])
|
||||
router.push('/')
|
||||
return
|
||||
}
|
||||
}, [status, session, router])
|
||||
}, [status, router, sessionUser?.isSuperAdmin, sessionUser?.role])
|
||||
|
||||
const fetchData = useCallback(async () => {
|
||||
const blockUI = !hasLoadedOnceRef.current
|
||||
|
||||
71
app/page.tsx
71
app/page.tsx
@ -598,41 +598,6 @@ export default function Home() {
|
||||
}
|
||||
}, [])
|
||||
|
||||
const fetchMaterialTypes = useCallback(async () => {
|
||||
try {
|
||||
const response = await fetch('/api/material-types', {
|
||||
cache: 'no-store',
|
||||
})
|
||||
if (response.ok) {
|
||||
const data = await response.json()
|
||||
console.log('[Home] Fetched material types from API:', data)
|
||||
console.log('[Home] Data type:', typeof data, 'Is array:', Array.isArray(data), 'Length:', Array.isArray(data) ? data.length : 'N/A')
|
||||
if (Array.isArray(data) && data.length > 0) {
|
||||
console.log('[Home] Applying material type list:', data)
|
||||
console.log('[Home] Custom types in list:', data.filter(t => t.startsWith('template:')))
|
||||
applyMaterialTypeList(data)
|
||||
// 获取每个类型的素材数量
|
||||
fetchMaterialTypesCount(data)
|
||||
return
|
||||
}
|
||||
if (Array.isArray(data?.types) && data.types.length > 0) {
|
||||
console.log('[Home] Applying material type list (nested):', data.types)
|
||||
applyMaterialTypeList(data.types)
|
||||
fetchMaterialTypesCount(data.types)
|
||||
return
|
||||
}
|
||||
}
|
||||
// 接口返回异常或为空时使用兜底
|
||||
console.warn('[Home] Material types API returned empty or invalid data, using fallback')
|
||||
applyMaterialTypeList(FALLBACK_MATERIAL_TYPES)
|
||||
fetchMaterialTypesCount(FALLBACK_MATERIAL_TYPES)
|
||||
} catch (error) {
|
||||
console.error('[Home] Error fetching material types:', error)
|
||||
applyMaterialTypeList(FALLBACK_MATERIAL_TYPES)
|
||||
fetchMaterialTypesCount(FALLBACK_MATERIAL_TYPES)
|
||||
}
|
||||
}, [applyMaterialTypeList])
|
||||
|
||||
const fetchMaterialTypesCount = useCallback(async (types: string[]) => {
|
||||
try {
|
||||
const counts: Record<string, number> = {}
|
||||
@ -667,6 +632,41 @@ export default function Home() {
|
||||
}
|
||||
}, [])
|
||||
|
||||
const fetchMaterialTypes = useCallback(async () => {
|
||||
try {
|
||||
const response = await fetch('/api/material-types', {
|
||||
cache: 'no-store',
|
||||
})
|
||||
if (response.ok) {
|
||||
const data = await response.json()
|
||||
console.log('[Home] Fetched material types from API:', data)
|
||||
console.log('[Home] Data type:', typeof data, 'Is array:', Array.isArray(data), 'Length:', Array.isArray(data) ? data.length : 'N/A')
|
||||
if (Array.isArray(data) && data.length > 0) {
|
||||
console.log('[Home] Applying material type list:', data)
|
||||
console.log('[Home] Custom types in list:', data.filter(t => t.startsWith('template:')))
|
||||
applyMaterialTypeList(data)
|
||||
// 获取每个类型的素材数量
|
||||
fetchMaterialTypesCount(data)
|
||||
return
|
||||
}
|
||||
if (Array.isArray(data?.types) && data.types.length > 0) {
|
||||
console.log('[Home] Applying material type list (nested):', data.types)
|
||||
applyMaterialTypeList(data.types)
|
||||
fetchMaterialTypesCount(data.types)
|
||||
return
|
||||
}
|
||||
}
|
||||
// 接口返回异常或为空时使用兜底
|
||||
console.warn('[Home] Material types API returned empty or invalid data, using fallback')
|
||||
applyMaterialTypeList(FALLBACK_MATERIAL_TYPES)
|
||||
fetchMaterialTypesCount(FALLBACK_MATERIAL_TYPES)
|
||||
} catch (error) {
|
||||
console.error('[Home] Error fetching material types:', error)
|
||||
applyMaterialTypeList(FALLBACK_MATERIAL_TYPES)
|
||||
fetchMaterialTypesCount(FALLBACK_MATERIAL_TYPES)
|
||||
}
|
||||
}, [applyMaterialTypeList, fetchMaterialTypesCount])
|
||||
|
||||
const fetchHomeFilterFields = useCallback(async () => {
|
||||
try {
|
||||
const response = await fetch('/api/home-filter-fields', {
|
||||
@ -830,7 +830,6 @@ export default function Home() {
|
||||
selectedTemplateId,
|
||||
selectedPlatform,
|
||||
selectedYear,
|
||||
selectedMonth,
|
||||
selectedYearMonth,
|
||||
sortBy,
|
||||
]
|
||||
|
||||
@ -262,7 +262,7 @@ export default function MaterialPreviewModal({
|
||||
}
|
||||
setIsPolling(false)
|
||||
}
|
||||
}, [isOpen, isVideoMaterial, material?.id])
|
||||
}, [isOpen, isVideoMaterial, material?.id, videoStatus])
|
||||
|
||||
const modalTitle = material?.productModel || title || '素材预览'
|
||||
const isLongForm =
|
||||
|
||||
@ -238,6 +238,7 @@ const isVideoFile = (file: File) => {
|
||||
previewImages,
|
||||
displayImage,
|
||||
zipFile,
|
||||
uploadComplete,
|
||||
])
|
||||
|
||||
// 清除保存的上传状态
|
||||
@ -293,7 +294,7 @@ const isVideoFile = (file: File) => {
|
||||
setShowNewSceneInput(false)
|
||||
setNewCategoryName('')
|
||||
setNewSceneName('')
|
||||
}, [])
|
||||
}, [previewUrls])
|
||||
|
||||
// 检查是否有未完成的上传
|
||||
useEffect(() => {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user