Ajout gitignore pour les opencode stuff

This commit is contained in:
2026-05-24 21:05:03 +02:00
parent 2ee7decbfd
commit 24afa9a8e8
10 changed files with 389 additions and 0 deletions
+68
View File
@@ -0,0 +1,68 @@
import { useEffect, useState, useCallback, useRef } from 'react'
import { supabase } from '@/lib/supabase'
const PAGE_SIZE = 50
export function useHistory() {
const [history, setHistory] = useState([])
const [loading, setLoading] = useState(true)
const [count, setCount] = useState(0)
const [page, setPage] = useState(0)
const [filters, setFilters] = useState({ memberId: 'all', skillId: 'all' })
const channelRef = useRef(null)
const totalPages = Math.ceil(count / PAGE_SIZE)
const fetch = useCallback(async () => {
setLoading(true)
let query = supabase
.from('skill_history')
.select('*, member:member_id(full_name), skill:skill_id(name), changer:changed_by(full_name)', { count: 'exact' })
.order('created_at', { ascending: false })
.range(page * PAGE_SIZE, (page + 1) * PAGE_SIZE - 1)
if (filters.memberId !== 'all') query = query.eq('member_id', filters.memberId)
if (filters.skillId !== 'all') query = query.eq('skill_id', filters.skillId)
const { data, count: total } = await query
if (data) setHistory(data)
if (total !== null) setCount(total)
setLoading(false)
}, [page, filters])
/* eslint-disable react-hooks/set-state-in-effect */
useEffect(() => {
fetch()
channelRef.current = supabase
.channel('skill_history_changes')
.on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'skill_history' }, () => {
if (page === 0) fetch()
})
.subscribe()
return () => {
channelRef.current?.unsubscribe()
}
}, [fetch, page])
/* eslint-enable react-hooks/set-state-in-effect */
function setFilter(key, value) {
setFilters((f) => ({ ...f, [key]: value }))
setPage(0)
}
function nextPage() {
if (page < totalPages - 1) setPage((p) => p + 1)
}
function prevPage() {
if (page > 0) setPage((p) => p - 1)
}
return {
history, loading, count, page, totalPages, filters,
setFilter, nextPage, prevPage, refetch: fetch,
}
}