mirror of https://github.com/portainer/portainer
				
				
				
			
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
import { CellContext } from '@tanstack/react-table';
 | 
						|
 | 
						|
import { StatusBadge } from '@@/StatusBadge';
 | 
						|
 | 
						|
import { NodeRowData } from '../types';
 | 
						|
 | 
						|
import { columnHelper } from './helper';
 | 
						|
 | 
						|
export const status = columnHelper.accessor((row) => getStatus(row), {
 | 
						|
  header: 'Status',
 | 
						|
  cell: StatusCell,
 | 
						|
});
 | 
						|
 | 
						|
function StatusCell({
 | 
						|
  row: { original: node },
 | 
						|
}: CellContext<NodeRowData, string>) {
 | 
						|
  const status = getStatus(node);
 | 
						|
 | 
						|
  const isDeleting =
 | 
						|
    node.metadata?.annotations?.['portainer.io/removing-node'] === 'true';
 | 
						|
  if (isDeleting) {
 | 
						|
    return <StatusBadge color="warning">Removing</StatusBadge>;
 | 
						|
  }
 | 
						|
 | 
						|
  return (
 | 
						|
    <div className="whitespace-nowrap">
 | 
						|
      <StatusBadge color={status === 'Ready' ? 'success' : 'warning'}>
 | 
						|
        {status}
 | 
						|
      </StatusBadge>
 | 
						|
      {node.spec?.unschedulable && (
 | 
						|
        <StatusBadge color="warning" className="mt-2">
 | 
						|
          SchedulingDisabled
 | 
						|
        </StatusBadge>
 | 
						|
      )}
 | 
						|
    </div>
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
function getStatus(node: NodeRowData) {
 | 
						|
  return (
 | 
						|
    node.status?.conditions?.find((condition) => condition.status === 'True')
 | 
						|
      ?.type ?? 'Not ready'
 | 
						|
  );
 | 
						|
}
 |