@@ -330,18 +330,18 @@ const GroupByTopics = (groupProps: {
330330 const assignedMember = allAssignments . find (
331331 ( e ) => e . topicName === topicLag . topic && e . partitions . includes ( partLag . partitionId )
332332 ) ;
333-
333+ const isUnconsumed = partLag . groupOffset === null ;
334334 return {
335335 topicName : topicLag . topic ,
336336 partitionId : partLag . partitionId ,
337337 groupOffset : partLag . groupOffset ,
338- highWaterMark : partLag . highWaterMark ,
339- lag : partLag . lag ,
340-
338+ highWaterMark : partLag . highWaterMark as number | null ,
339+ lag : isUnconsumed ? null : ( partLag . lag as number | null ) ,
341340 assignedMember : assignedMember ?. member ,
342341 id : assignedMember ?. member . id ,
343342 clientId : assignedMember ?. member . clientId ,
344343 host : assignedMember ?. member . clientHost ,
344+ isUnconsumed,
345345 } ;
346346 } )
347347 ) ;
@@ -356,12 +356,16 @@ const GroupByTopics = (groupProps: {
356356 const totalLagAll = g . partitions . sum ( ( c ) => c . lag ?? 0 ) ;
357357 const partitionsAssigned = g . partitions . filter ( ( c ) => c . assignedMember ) . length ;
358358
359- const partitions = groupProps . onlyShowPartitionsWithLag ? g . partitions . filter ( ( e ) => e . lag !== 0 ) : g . partitions ;
359+ const partitions = groupProps . onlyShowPartitionsWithLag
360+ ? g . partitions . filter ( ( e ) => e . lag !== 0 || e . isUnconsumed )
361+ : g . partitions ;
360362
361363 if ( partitions . length === 0 ) {
362364 return null ;
363365 }
364366
367+ const consumedPartitions = g . partitions . filter ( ( p ) => ! p . isUnconsumed ) ;
368+
365369 return {
366370 heading : (
367371 < Flex flexDirection = "column" gap = { 4 } >
@@ -375,7 +379,7 @@ const GroupByTopics = (groupProps: {
375379 < IconButton
376380 disabledReason = { cannotEditGroupReason ( groupProps . group , featurePatchGroup ) }
377381 onClick = { ( e ) => {
378- groupProps . onEditOffsets ( g . partitions ) ;
382+ groupProps . onEditOffsets ( consumedPartitions ) ;
379383 e . stopPropagation ( ) ;
380384 } }
381385 >
@@ -384,7 +388,7 @@ const GroupByTopics = (groupProps: {
384388 < IconButton
385389 disabledReason = { cannotDeleteGroupOffsetsReason ( groupProps . group , featureDeleteGroupOffsets ) }
386390 onClick = { ( e ) => {
387- groupProps . onDeleteOffsets ( g . partitions , 'topic' ) ;
391+ groupProps . onDeleteOffsets ( consumedPartitions , 'topic' ) ;
388392 e . stopPropagation ( ) ;
389393 } }
390394 >
@@ -409,13 +413,14 @@ const GroupByTopics = (groupProps: {
409413 < DataTable < {
410414 topicName : string ;
411415 partitionId : number ;
412- groupOffset : number ;
413- highWaterMark : number ;
414- lag : number ;
416+ groupOffset : number | null ;
417+ highWaterMark : number | null ;
418+ lag : number | null ;
415419 assignedMember : GroupMemberDescription | undefined ;
416420 id : string | undefined ;
417421 clientId : string | undefined ;
418422 host : string | undefined ;
423+ isUnconsumed : boolean ;
419424 } >
420425 columns = { [
421426 {
@@ -458,19 +463,22 @@ const GroupByTopics = (groupProps: {
458463 size : 120 ,
459464 header : 'Log End Offset' ,
460465 accessorKey : 'highWaterMark' ,
461- cell : ( { row : { original } } ) => numberToThousandsString ( original . highWaterMark ) ,
466+ cell : ( { row : { original } } ) =>
467+ original . highWaterMark !== null ? numberToThousandsString ( original . highWaterMark ) : '—' ,
462468 } ,
463469 {
464470 size : 120 ,
465471 header : 'Group Offset' ,
466472 accessorKey : 'groupOffset' ,
467- cell : ( { row : { original } } ) => numberToThousandsString ( original . groupOffset ) ,
473+ cell : ( { row : { original } } ) =>
474+ original . groupOffset !== null ? numberToThousandsString ( original . groupOffset ) : '—' ,
468475 } ,
469476 {
470477 size : 80 ,
471478 header : 'Lag' ,
472479 accessorKey : 'lag' ,
473- cell : ( { row : { original } } ) => ShortNum ( { value : original . lag , tooltip : true } ) ,
480+ cell : ( { row : { original } } ) =>
481+ original . lag !== null ? ShortNum ( { value : original . lag , tooltip : true } ) : '—' ,
474482 } ,
475483 {
476484 size : 1 ,
@@ -479,13 +487,23 @@ const GroupByTopics = (groupProps: {
479487 cell : ( { row : { original } } ) => (
480488 < Flex gap = { 1 } pr = { 2 } >
481489 < IconButton
482- disabledReason = { cannotEditGroupReason ( groupProps . group , featurePatchGroup ) }
490+ data-testid = { `partition-edit-${ original . partitionId } ` }
491+ disabledReason = {
492+ original . isUnconsumed
493+ ? 'No committed offset'
494+ : cannotEditGroupReason ( groupProps . group , featurePatchGroup )
495+ }
483496 onClick = { ( ) => groupProps . onEditOffsets ( [ original ] ) }
484497 >
485498 < EditIcon />
486499 </ IconButton >
487500 < IconButton
488- disabledReason = { cannotDeleteGroupOffsetsReason ( groupProps . group , featureDeleteGroupOffsets ) }
501+ data-testid = { `partition-delete-${ original . partitionId } ` }
502+ disabledReason = {
503+ original . isUnconsumed
504+ ? 'No committed offset'
505+ : cannotDeleteGroupOffsetsReason ( groupProps . group , featureDeleteGroupOffsets )
506+ }
489507 onClick = { ( ) => groupProps . onDeleteOffsets ( [ original ] , 'partition' ) }
490508 >
491509 < TrashIcon />
0 commit comments