@@ -3,7 +3,7 @@ import CreateEvaluationGroupModal from "./CreateEvaluationGroupModal";
33import { ModalEnum } from "@/src/types/shared/modal" ;
44import { useDispatch , useSelector } from "react-redux" ;
55import { selectProjectId } from "@/src/reduxStore/states/project" ;
6- import { useEffect , useState , useRef , useLayoutEffect , useCallback , useMemo } from "react" ;
6+ import { useEffect , useState , useRef , useCallback , useMemo } from "react" ;
77import { getEvaluationGroups , getEvaluationSetsByGroupId } from "@/src/services/base/playground" ;
88import ViewEvaluationGroupModal from "./ViewEvaluationGroupModal" ;
99import KernTable from "@/submodules/react-components/components/kern-table/KernTable" ;
@@ -20,72 +20,57 @@ export function EvaluationGroups() {
2020 const users = useSelector ( selectAllUsers ) ;
2121
2222 const [ evaluationGroups , setEvaluationGroups ] = useState ( null ) ;
23- const [ preparedValues , setPreparedValues ] = useState ( null ) ;
24- const [ preparedHeaders , setPreparedHeaders ] = useState ( EVALUATION_GROUPS_TABLE_HEADER ) ;
2523 const [ selectedEvaluationGroups , setSelectedEvaluationGroups ] = useState ( new Set < string > ( ) ) ;
2624 const isFetchingEvalGroups = useRef ( false ) ;
2725 const [ checked , setChecked ] = useState ( false ) ;
28- const [ indeterminate , setIndeterminate ] = useState ( false ) ;
29- const checkbox = useRef < any > ( null ) ;
3026
3127 const usersDict = useMemo ( ( ) => arrayToDict ( users , 'id' ) , [ users ] ) ;
3228
29+ const projectIdRef = useRef ( projectId ) ;
3330 useEffect ( ( ) => {
34- if ( ! projectId ) return ;
31+ if ( ! projectIdRef . current ) return ;
3532 if ( isFetchingEvalGroups . current ) return ;
3633 isFetchingEvalGroups . current = true
37- getEvaluationGroups ( projectId , ( res ) => {
34+ getEvaluationGroups ( projectIdRef . current , ( res ) => {
3835 setEvaluationGroups ( res ) ;
3936 isFetchingEvalGroups . current = false
4037 } ) ;
41- } , [ projectId ] ) ;
38+ } , [ ] ) ;
4239
43- useLayoutEffect ( ( ) => {
44- if ( ! selectedEvaluationGroups || ! evaluationGroups ) return ;
45- const isIndeterminate = selectedEvaluationGroups . size > 0 && selectedEvaluationGroups . size < evaluationGroups . length ;
46- setChecked ( selectedEvaluationGroups . size > 0 && selectedEvaluationGroups . size === evaluationGroups . length ) ;
47- setIndeterminate ( isIndeterminate ) ;
48-
49- if ( checkbox . current !== null ) {
50- checkbox . current . indeterminate = isIndeterminate ;
51- }
52- } , [ selectedEvaluationGroups , evaluationGroups ] ) ;
40+ const refetchEvaluationGroups = useCallback ( ( ) => {
41+ getEvaluationGroups ( projectIdRef . current , ( res ) => {
42+ setEvaluationGroups ( res ) ;
43+ setSelectedEvaluationGroups ( new Set < string > ( ) ) ;
44+ } ) ;
45+ } , [ ] ) ;
5346
54- useEffect ( ( ) => {
55- if ( ! evaluationGroups ) return ;
56- setPreparedValues ( prepareTableBodyEvaluationGroups ( evaluationGroups , selectedEvaluationGroups , setSelectedEvaluationGroups , usersDict , viewSetsModal ) ) ;
57- } , [ evaluationGroups , selectedEvaluationGroups , setSelectedEvaluationGroups ] ) ;
47+ const toggleAll = useCallback ( ( ) => {
48+ if ( ! evaluationGroups || evaluationGroups . length === 0 ) return ;
49+ if ( checked ) setSelectedEvaluationGroups ( new Set < string > ( ) ) ;
50+ else setSelectedEvaluationGroups ( new Set < string > ( evaluationGroups . map ( x => x . id ) ) ) ;
51+ setChecked ( ! checked ) ;
52+ } , [ checked , evaluationGroups ] ) ;
5853
59- function viewSetsModal ( groupId : string ) {
54+ const viewSetsModal = useCallback ( ( groupId : string ) => {
6055 let setsArr = [ ] ;
61- getEvaluationSetsByGroupId ( projectId , groupId , ( res ) => {
56+ getEvaluationSetsByGroupId ( projectIdRef . current , groupId , ( res ) => {
6257 setsArr = res ;
63- dispatch ( setModalStates ( ModalEnum . VIEW_EVALUATION_GROUP , { open : true , sets : setsArr } ) ) ;
58+ dispatch ( setModalStates ( ModalEnum . VIEW_EVALUATION_GROUP , { open : true , sets : res } ) ) ;
6459 } ) ;
65- }
60+ } , [ ] ) ;
6661
67- useEffect ( ( ) => {
68- setPreparedHeaders ( preparedHeaders . map ( ( header ) => {
69- if ( header . id === "checkboxes" ) {
70- return { ...header , hasCheckboxes : true , checked : checked , onChange : toggleAll } ;
71- }
72- return header ;
73- } ) )
74- } , [ checked , evaluationGroups , selectedEvaluationGroups ] )
62+ const preparedValues = useMemo ( ( ) => {
63+ if ( ! evaluationGroups ) return null ;
64+ return prepareTableBodyEvaluationGroups ( evaluationGroups , selectedEvaluationGroups , setSelectedEvaluationGroups , usersDict , viewSetsModal ) ;
65+ } , [ evaluationGroups , selectedEvaluationGroups , setSelectedEvaluationGroups , usersDict , viewSetsModal ] ) ;
7566
76- const refetchEvaluationGroups = useCallback ( ( ) => {
77- getEvaluationGroups ( projectId , ( res ) => {
78- setEvaluationGroups ( res ) ;
79- setSelectedEvaluationGroups ( new Set < string > ( ) ) ;
67+ const finalHeaders = useMemo ( ( ) => {
68+ if ( ! evaluationGroups || ! selectedEvaluationGroups ) return null ;
69+ return EVALUATION_GROUPS_TABLE_HEADER . map ( ( group ) => {
70+ if ( group . id === "checkboxes" ) return { ...group , checked : selectedEvaluationGroups . size === evaluationGroups . length , onChange : toggleAll } ;
71+ return group ;
8072 } ) ;
81- } , [ projectId ] ) ;
82-
83- function toggleAll ( ) {
84- if ( checked || indeterminate ) setSelectedEvaluationGroups ( new Set < string > ( ) ) ;
85- else setSelectedEvaluationGroups ( new Set < string > ( evaluationGroups . map ( x => x . id ) ) ) ;
86- setChecked ( ! checked && ! indeterminate )
87- setIndeterminate ( false )
88- }
73+ } , [ evaluationGroups , selectedEvaluationGroups , toggleAll ] ) ;
8974
9075 return < >
9176 { projectId != null && < div className = "p-4 bg-gray-100 h-full flex-1 flex flex-col overflow-y-auto" >
@@ -114,9 +99,9 @@ export function EvaluationGroups() {
11499 </ div >
115100 }
116101 </ div >
117- { preparedHeaders && preparedValues && ( evaluationGroups . length > 0 ?
102+ { finalHeaders && preparedValues && ( evaluationGroups . length > 0 ?
118103 < KernTable
119- headers = { preparedHeaders }
104+ headers = { finalHeaders }
120105 values = { preparedValues }
121106 config = { EVALUATION_GROUPS_TABLE_CONFIG }
122107 />
0 commit comments