@@ -41,6 +41,7 @@ import { GET_WORK_ITEMS } from '../lib/queries';
4141import { EditNodeModal } from './EditNodeModal' ;
4242import { DeleteNodeModal } from './DeleteNodeModal' ;
4343import { TagDisplay } from './TagDisplay' ;
44+ import { AnimatedPriority } from './AnimatedPriority' ;
4445
4546// WorkItem interface matching GraphQL schema
4647interface WorkItem {
@@ -110,12 +111,13 @@ export function ListView() {
110111 teamId : currentTeam ?. id || 'team-1'
111112 }
112113 } ,
113- fetchPolicy : 'cache-and-network' // Use cache first, then update from network
114+ fetchPolicy : 'cache-and-network' , // Use cache first, then update from network
115+ pollInterval : 5000 , // Poll every 5 seconds to catch external changes
116+ errorPolicy : 'all'
114117 } ) ;
115118
116119 const workItems : WorkItem [ ] = data ?. workItems || [ ] ;
117120
118-
119121 const [ currentView , setCurrentView ] = useState < ViewType > ( 'dashboard' ) ;
120122 const [ isViewDropdownOpen , setIsViewDropdownOpen ] = useState ( false ) ;
121123 const [ searchTerm , setSearchTerm ] = useState ( '' ) ;
@@ -126,6 +128,21 @@ export function ListView() {
126128 const [ showEditModal , setShowEditModal ] = useState ( false ) ;
127129 const [ showDeleteModal , setShowDeleteModal ] = useState ( false ) ;
128130 const [ selectedNode , setSelectedNode ] = useState < WorkItem | null > ( null ) ;
131+
132+ // Update selectedNode when workItems data changes and modal is open
133+ useEffect ( ( ) => {
134+ if ( showEditModal && selectedNode ) {
135+ const updatedNode = workItems . find ( item => item . id === selectedNode . id ) ;
136+ if ( updatedNode ) {
137+ setSelectedNode ( updatedNode ) ;
138+ }
139+ }
140+ } , [ workItems , showEditModal , selectedNode ?. id ] ) ;
141+
142+ // Add manual refresh function for debugging
143+ const handleRefresh = ( ) => {
144+ refetch ( ) ;
145+ } ;
129146 const [ isTypeDropdownOpen , setIsTypeDropdownOpen ] = useState ( false ) ;
130147 const [ isStatusDropdownOpen , setIsStatusDropdownOpen ] = useState ( false ) ;
131148 const [ isPriorityDropdownOpen , setIsPriorityDropdownOpen ] = useState ( false ) ;
@@ -342,7 +359,7 @@ export function ListView() {
342359
343360 // Helper functions
344361 const getNodePriority = ( node : WorkItem ) => {
345- return node . priorityComp || node . priorityExec || 0 ;
362+ return node . priorityExec || 0 ;
346363 } ;
347364
348365 const formatLabel = ( label : string ) => {
@@ -449,32 +466,26 @@ export function ListView() {
449466 < div className = "flex items-center justify-between" >
450467 { /* Priority - Left Side */ }
451468 < div className = "flex items-center space-x-3" >
452- < div className = "flex items-center relative" >
453- < div className = "w-3 h-12 bg-gray-300 dark:bg-gray-600 rounded overflow-hidden flex flex-col justify-end relative" >
454- < div className = { `w-full transition-all duration-300 ${
455- getNodePriority ( node ) >= 0.8 ? 'bg-red-500' :
456- getNodePriority ( node ) >= 0.6 ? 'bg-orange-500' :
457- getNodePriority ( node ) >= 0.4 ? 'bg-yellow-500' :
458- getNodePriority ( node ) >= 0.2 ? 'bg-blue-500' : 'bg-green-500'
459- } `} style = { { height : `${ Math . max ( getNodePriority ( node ) * 100 , 8 ) } %` } } > </ div >
460- </ div >
461- </ div >
469+ < AnimatedPriority
470+ value = { getNodePriority ( node ) }
471+ className = "text-sm font-semibold"
472+ renderBar = { ( animatedValue , animatedColor ) => (
473+ < div className = "flex items-center relative" >
474+ < div className = "w-3 h-12 bg-gray-300 dark:bg-gray-600 rounded overflow-hidden flex flex-col justify-end relative" >
475+ < div
476+ className = "w-full transition-colors duration-300"
477+ style = { {
478+ height : `${ Math . max ( animatedValue * 100 , 8 ) } %` ,
479+ backgroundColor : animatedColor
480+ } }
481+ > </ div >
482+ </ div >
483+ </ div >
484+ ) }
485+ />
486+
462487 < div className = "flex flex-col" >
463- < span className = { `text-sm font-semibold ${
464- getNodePriority ( node ) >= 0.8 ? 'text-red-500' :
465- getNodePriority ( node ) >= 0.6 ? 'text-orange-500' :
466- getNodePriority ( node ) >= 0.4 ? 'text-yellow-500' :
467- getNodePriority ( node ) >= 0.2 ? 'text-blue-500' : 'text-green-500'
468- } `} >
469- { Math . round ( getNodePriority ( node ) * 100 ) } %
470- </ span >
471- < span className = { `text-xs font-medium ${
472- getNodePriority ( node ) >= 0.8 ? 'text-red-500' :
473- getNodePriority ( node ) >= 0.6 ? 'text-orange-500' :
474- getNodePriority ( node ) >= 0.4 ? 'text-yellow-500' :
475- getNodePriority ( node ) >= 0.2 ? 'text-blue-500' :
476- 'text-green-500'
477- } `} >
488+ < span className = "text-xs font-medium text-gray-600 dark:text-gray-400" >
478489 { getNodePriority ( node ) >= 0.8 ? 'Critical' :
479490 getNodePriority ( node ) >= 0.6 ? 'High' :
480491 getNodePriority ( node ) >= 0.4 ? 'Medium' :
@@ -726,25 +737,21 @@ export function ListView() {
726737 < div className = "mb-3 flex items-start justify-between" >
727738 { /* Priority - Left Side */ }
728739 < div className = "flex items-center relative" >
729- < div className = "w-4 h-12 bg-gray-600 rounded overflow-hidden flex flex-col justify-end relative" >
730- < div className = { `w-full transition-all duration-300 ${
731- getNodePriority ( node ) >= 0.8 ? 'bg-red-500' :
732- getNodePriority ( node ) >= 0.6 ? 'bg-orange-500' :
733- getNodePriority ( node ) >= 0.4 ? 'bg-yellow-500' :
734- getNodePriority ( node ) >= 0.2 ? 'bg-blue-500' : 'bg-green-500'
735- } `} style = { { height : `${ Math . max ( getNodePriority ( node ) * 100 , 5 ) } %` } } > </ div >
736- </ div >
737- < span className = { `absolute text-xs font-bold left-6 ml-1 ${
738- getNodePriority ( node ) >= 0.8 ? 'text-red-500' :
739- getNodePriority ( node ) >= 0.6 ? 'text-orange-500' :
740- getNodePriority ( node ) >= 0.4 ? 'text-yellow-500' :
741- getNodePriority ( node ) >= 0.2 ? 'text-blue-500' : 'text-green-500'
742- } `} style = { {
743- bottom : `${ Math . max ( getNodePriority ( node ) * 100 , 5 ) } %` ,
744- transform : 'translateY(50%)'
745- } } >
746- { Math . round ( getNodePriority ( node ) * 100 ) } %
747- </ span >
740+ < AnimatedPriority
741+ value = { getNodePriority ( node ) }
742+ className = "text-xs font-bold"
743+ renderBar = { ( animatedValue , animatedColor ) => (
744+ < div className = "w-4 h-12 bg-gray-600 rounded overflow-hidden flex flex-col justify-end relative" >
745+ < div
746+ className = "w-full transition-colors duration-300"
747+ style = { {
748+ height : `${ Math . max ( animatedValue * 100 , 5 ) } %` ,
749+ backgroundColor : animatedColor
750+ } }
751+ > </ div >
752+ </ div >
753+ ) }
754+ />
748755 </ div >
749756
750757 { /* Due Date - Right Side */ }
@@ -979,35 +986,21 @@ export function ListView() {
979986 </ td >
980987 < td className = "pl-6 pr-6 py-10 dynamic-table-cell" >
981988 < div className = "flex items-center w-full relative" >
982- < div className = "w-4 h-16 bg-gray-600 rounded overflow-hidden flex flex-col justify-end relative" >
983- < div
984- className = { `w-full transition-all duration-300 ${
985- getNodePriority ( node ) >= 0.8 ? 'bg-red-500' :
986- getNodePriority ( node ) >= 0.6 ? 'bg-orange-500' :
987- getNodePriority ( node ) >= 0.4 ? 'bg-yellow-500' :
988- getNodePriority ( node ) >= 0.2 ? 'bg-blue-500' :
989- 'bg-green-500'
990- } `}
991- style = { {
992- height : `${ Math . max ( getNodePriority ( node ) * 100 , 5 ) } %`
993- } }
994- > </ div >
995- </ div >
996- < span
997- className = { `absolute text-xs font-bold left-6 ml-1 ${
998- getNodePriority ( node ) >= 0.8 ? 'text-red-500' :
999- getNodePriority ( node ) >= 0.6 ? 'text-orange-500' :
1000- getNodePriority ( node ) >= 0.4 ? 'text-yellow-500' :
1001- getNodePriority ( node ) >= 0.2 ? 'text-blue-500' :
1002- 'text-green-500'
1003- } `}
1004- style = { {
1005- bottom : `${ Math . max ( getNodePriority ( node ) * 100 , 5 ) } %` ,
1006- transform : 'translateY(50%)'
1007- } }
1008- >
1009- { Math . round ( getNodePriority ( node ) * 100 ) } %
1010- </ span >
989+ < AnimatedPriority
990+ value = { getNodePriority ( node ) }
991+ className = "text-xs font-bold"
992+ renderBar = { ( animatedValue , animatedColor ) => (
993+ < div className = "w-4 h-16 bg-gray-600 rounded overflow-hidden flex flex-col justify-end relative" >
994+ < div
995+ className = "w-full transition-colors duration-300"
996+ style = { {
997+ height : `${ Math . max ( animatedValue * 100 , 5 ) } %` ,
998+ backgroundColor : animatedColor
999+ } }
1000+ > </ div >
1001+ </ div >
1002+ ) }
1003+ />
10111004 </ div >
10121005 </ td >
10131006 < td className = "pl-6 pr-6 py-10 dynamic-table-cell" >
0 commit comments