mirror of https://github.com/portainer/portainer
				
				
				
			refactor(ui): use external/system badge where applicable [EE-6952] (#11475)
							parent
							
								
									0b62456236
								
							
						
					
					
						commit
						3cad13388c
					
				| 
						 | 
				
			
			@ -6,6 +6,7 @@ import { getValueAsArrayOfStrings } from '@/portainer/helpers/array';
 | 
			
		|||
import { ImagesListResponse } from '@/react/docker/images/queries/useImages';
 | 
			
		||||
 | 
			
		||||
import { MultipleSelectionFilter } from '@@/datatables/Filter';
 | 
			
		||||
import { UnusedBadge } from '@@/Badge/UnusedBadge';
 | 
			
		||||
 | 
			
		||||
import { columnHelper } from './helper';
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -76,9 +77,7 @@ function Cell({
 | 
			
		|||
      <a href={linkProps.href} onClick={linkProps.onClick} title={name}>
 | 
			
		||||
        {truncate(name, 40)}
 | 
			
		||||
      </a>
 | 
			
		||||
      {!image.used && (
 | 
			
		||||
        <span className="label label-warning image-tag ml-2">Unused</span>
 | 
			
		||||
      )}
 | 
			
		||||
      {!image.used && <UnusedBadge />}
 | 
			
		||||
    </>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ import { Authorized } from '@/react/hooks/useUser';
 | 
			
		|||
import { Button } from '@@/buttons';
 | 
			
		||||
import { Link } from '@@/Link';
 | 
			
		||||
import { MultipleSelectionFilter } from '@@/datatables/Filter';
 | 
			
		||||
import { UnusedBadge } from '@@/Badge/UnusedBadge';
 | 
			
		||||
 | 
			
		||||
import { DecoratedVolume } from '../../types';
 | 
			
		||||
import { getTableMeta } from '../tableMeta';
 | 
			
		||||
| 
						 | 
				
			
			@ -76,7 +77,7 @@ function Cell({
 | 
			
		|||
  const name = getValue();
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <>
 | 
			
		||||
    <div className="flex gap-2">
 | 
			
		||||
      <Link
 | 
			
		||||
        to=".volume"
 | 
			
		||||
        params={{
 | 
			
		||||
| 
						 | 
				
			
			@ -107,11 +108,7 @@ function Cell({
 | 
			
		|||
          </Button>
 | 
			
		||||
        </Authorized>
 | 
			
		||||
      )}
 | 
			
		||||
      {item.dangling && (
 | 
			
		||||
        <span className="label label-warning image-tag ml-2" role="status">
 | 
			
		||||
          Unused
 | 
			
		||||
        </span>
 | 
			
		||||
      )}
 | 
			
		||||
    </>
 | 
			
		||||
      {item.dangling && <UnusedBadge />}
 | 
			
		||||
    </div>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,13 +10,14 @@ import { usePublicSettings } from '@/react/portainer/settings/queries';
 | 
			
		|||
import { GlobalDeploymentOptions } from '@/react/portainer/settings/types';
 | 
			
		||||
 | 
			
		||||
import { DetailsTable } from '@@/DetailsTable';
 | 
			
		||||
import { Badge } from '@@/Badge';
 | 
			
		||||
import { Link } from '@@/Link';
 | 
			
		||||
import { LoadingButton } from '@@/buttons';
 | 
			
		||||
import { WidgetBody, Widget } from '@@/Widget';
 | 
			
		||||
import { InlineLoader } from '@@/InlineLoader';
 | 
			
		||||
import { Icon } from '@@/Icon';
 | 
			
		||||
import { Note } from '@@/Note';
 | 
			
		||||
import { ExternalBadge } from '@@/Badge/ExternalBadge';
 | 
			
		||||
import { SystemBadge } from '@@/Badge/SystemBadge';
 | 
			
		||||
 | 
			
		||||
import {
 | 
			
		||||
  appStackNameLabel,
 | 
			
		||||
| 
						 | 
				
			
			@ -127,7 +128,7 @@ export function ApplicationSummaryWidget() {
 | 
			
		|||
                      >
 | 
			
		||||
                        {name}
 | 
			
		||||
                        {externalApplication && !isSystemNamespace && (
 | 
			
		||||
                          <Badge type="info">external</Badge>
 | 
			
		||||
                          <ExternalBadge />
 | 
			
		||||
                        )}
 | 
			
		||||
                      </div>
 | 
			
		||||
                    </td>
 | 
			
		||||
| 
						 | 
				
			
			@ -156,7 +157,7 @@ export function ApplicationSummaryWidget() {
 | 
			
		|||
                        >
 | 
			
		||||
                          {namespace}
 | 
			
		||||
                        </Link>
 | 
			
		||||
                        {isSystemNamespace && <Badge type="info">system</Badge>}
 | 
			
		||||
                        {isSystemNamespace && <SystemBadge />}
 | 
			
		||||
                      </div>
 | 
			
		||||
                    </td>
 | 
			
		||||
                  </tr>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ import KubernetesApplicationHelper from '@/kubernetes/helpers/application';
 | 
			
		|||
import KubernetesNamespaceHelper from '@/kubernetes/helpers/namespaceHelper';
 | 
			
		||||
 | 
			
		||||
import { Link } from '@@/Link';
 | 
			
		||||
import { ExternalBadge } from '@@/Badge/ExternalBadge';
 | 
			
		||||
 | 
			
		||||
import { KubernetesStack } from '../../types';
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -26,18 +27,18 @@ export function SubRows({
 | 
			
		|||
        >
 | 
			
		||||
          <td />
 | 
			
		||||
          <td colSpan={span - 1}>
 | 
			
		||||
            <Link
 | 
			
		||||
              to="kubernetes.applications.application"
 | 
			
		||||
              params={{ name: app.Name, namespace: app.ResourcePool }}
 | 
			
		||||
            >
 | 
			
		||||
              {app.Name}
 | 
			
		||||
            </Link>
 | 
			
		||||
            {KubernetesNamespaceHelper.isSystemNamespace(app.ResourcePool) &&
 | 
			
		||||
              KubernetesApplicationHelper.isExternalApplication(app) && (
 | 
			
		||||
                <span className="space-left label label-primary image-tag">
 | 
			
		||||
                  external
 | 
			
		||||
                </span>
 | 
			
		||||
              )}
 | 
			
		||||
            <div className="flex gap-2">
 | 
			
		||||
              <Link
 | 
			
		||||
                to="kubernetes.applications.application"
 | 
			
		||||
                params={{ name: app.Name, namespace: app.ResourcePool }}
 | 
			
		||||
              >
 | 
			
		||||
                {app.Name}
 | 
			
		||||
              </Link>
 | 
			
		||||
              {KubernetesNamespaceHelper.isSystemNamespace(app.ResourcePool) &&
 | 
			
		||||
                KubernetesApplicationHelper.isExternalApplication(app) && (
 | 
			
		||||
                  <ExternalBadge />
 | 
			
		||||
                )}
 | 
			
		||||
            </div>
 | 
			
		||||
          </td>
 | 
			
		||||
        </tr>
 | 
			
		||||
      ))}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ import KubernetesNamespaceHelper from '@/kubernetes/helpers/namespaceHelper';
 | 
			
		|||
import { buildExpandColumn } from '@@/datatables/expand-column';
 | 
			
		||||
import { Link } from '@@/Link';
 | 
			
		||||
import { Icon } from '@@/Icon';
 | 
			
		||||
import { SystemBadge } from '@@/Badge/SystemBadge';
 | 
			
		||||
 | 
			
		||||
import { KubernetesStack } from '../../types';
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +24,7 @@ export const columns = [
 | 
			
		|||
    cell: ({ getValue }) => {
 | 
			
		||||
      const value = getValue();
 | 
			
		||||
      return (
 | 
			
		||||
        <>
 | 
			
		||||
        <div className="flex gap-2">
 | 
			
		||||
          <Link
 | 
			
		||||
            to="kubernetes.resourcePools.resourcePool"
 | 
			
		||||
            params={{ id: value }}
 | 
			
		||||
| 
						 | 
				
			
			@ -31,11 +32,9 @@ export const columns = [
 | 
			
		|||
            {value}
 | 
			
		||||
          </Link>
 | 
			
		||||
          {KubernetesNamespaceHelper.isSystemNamespace(value) && (
 | 
			
		||||
            <span className="label label-info image-tag label-margins">
 | 
			
		||||
              system
 | 
			
		||||
            </span>
 | 
			
		||||
            <SystemBadge />
 | 
			
		||||
          )}
 | 
			
		||||
        </>
 | 
			
		||||
        </div>
 | 
			
		||||
      );
 | 
			
		||||
    },
 | 
			
		||||
  }),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,8 +3,10 @@ import { CellContext } from '@tanstack/react-table';
 | 
			
		|||
import { Authorized } from '@/react/hooks/useUser';
 | 
			
		||||
import { appOwnerLabel } from '@/react/kubernetes/applications/constants';
 | 
			
		||||
 | 
			
		||||
import { ExternalBadge } from '@@/Badge/ExternalBadge';
 | 
			
		||||
import { SystemBadge } from '@@/Badge/SystemBadge';
 | 
			
		||||
import { UnusedBadge } from '@@/Badge/UnusedBadge';
 | 
			
		||||
import { Link } from '@@/Link';
 | 
			
		||||
import { Badge } from '@@/Badge';
 | 
			
		||||
 | 
			
		||||
import { ConfigMapRowData } from '../types';
 | 
			
		||||
import { configurationOwnerUsernameLabel } from '../../../constants';
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +49,7 @@ function Cell({ row }: CellContext<ConfigMapRowData, string>) {
 | 
			
		|||
 | 
			
		||||
  return (
 | 
			
		||||
    <Authorized authorizations="K8sConfigMapsR" childrenUnauthorized={name}>
 | 
			
		||||
      <div className="flex">
 | 
			
		||||
      <div className="flex gap-2">
 | 
			
		||||
        <Link
 | 
			
		||||
          to="kubernetes.configmaps.configmap"
 | 
			
		||||
          params={{
 | 
			
		||||
| 
						 | 
				
			
			@ -59,19 +61,9 @@ function Cell({ row }: CellContext<ConfigMapRowData, string>) {
 | 
			
		|||
        >
 | 
			
		||||
          {name}
 | 
			
		||||
        </Link>
 | 
			
		||||
        {isSystemConfigMap && (
 | 
			
		||||
          <Badge type="success" className="ml-2">
 | 
			
		||||
            System
 | 
			
		||||
          </Badge>
 | 
			
		||||
        )}
 | 
			
		||||
        {!isSystemToken && !hasConfigurationOwner && (
 | 
			
		||||
          <Badge className="ml-2">External</Badge>
 | 
			
		||||
        )}
 | 
			
		||||
        {!row.original.inUse && !isSystemConfigMap && (
 | 
			
		||||
          <Badge type="warn" className="ml-2">
 | 
			
		||||
            Unused
 | 
			
		||||
          </Badge>
 | 
			
		||||
        )}
 | 
			
		||||
        {isSystemConfigMap && <SystemBadge />}
 | 
			
		||||
        {!isSystemToken && !hasConfigurationOwner && <ExternalBadge />}
 | 
			
		||||
        {!row.original.inUse && !isSystemConfigMap && <UnusedBadge />}
 | 
			
		||||
      </div>
 | 
			
		||||
    </Authorized>
 | 
			
		||||
  );
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,8 +3,10 @@ import { CellContext } from '@tanstack/react-table';
 | 
			
		|||
import { Authorized } from '@/react/hooks/useUser';
 | 
			
		||||
import { appOwnerLabel } from '@/react/kubernetes/applications/constants';
 | 
			
		||||
 | 
			
		||||
import { SystemBadge } from '@@/Badge/SystemBadge';
 | 
			
		||||
import { ExternalBadge } from '@@/Badge/ExternalBadge';
 | 
			
		||||
import { UnusedBadge } from '@@/Badge/UnusedBadge';
 | 
			
		||||
import { Link } from '@@/Link';
 | 
			
		||||
import { Badge } from '@@/Badge';
 | 
			
		||||
 | 
			
		||||
import { SecretRowData } from '../types';
 | 
			
		||||
import { configurationOwnerUsernameLabel } from '../../../constants';
 | 
			
		||||
| 
						 | 
				
			
			@ -60,19 +62,10 @@ function Cell({ row }: CellContext<SecretRowData, string>) {
 | 
			
		|||
        >
 | 
			
		||||
          {name}
 | 
			
		||||
        </Link>
 | 
			
		||||
        {isSystemSecret && (
 | 
			
		||||
          <Badge type="success" className="ml-2">
 | 
			
		||||
            System
 | 
			
		||||
          </Badge>
 | 
			
		||||
        )}
 | 
			
		||||
        {!isSystemToken && !hasConfigurationOwner && (
 | 
			
		||||
          <Badge className="ml-2">External</Badge>
 | 
			
		||||
        )}
 | 
			
		||||
        {!row.original.inUse && !isSystemSecret && (
 | 
			
		||||
          <Badge type="warn" className="ml-2">
 | 
			
		||||
            Unused
 | 
			
		||||
          </Badge>
 | 
			
		||||
        )}
 | 
			
		||||
 | 
			
		||||
        {isSystemSecret && <SystemBadge />}
 | 
			
		||||
        {!isSystemToken && !hasConfigurationOwner && <ExternalBadge />}
 | 
			
		||||
        {!row.original.inUse && !isSystemSecret && <UnusedBadge />}
 | 
			
		||||
      </div>
 | 
			
		||||
    </Authorized>
 | 
			
		||||
  );
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,8 +2,8 @@ import { CellContext } from '@tanstack/react-table';
 | 
			
		|||
 | 
			
		||||
import { Authorized } from '@/react/hooks/useUser';
 | 
			
		||||
 | 
			
		||||
import { SystemBadge } from '@@/Badge/SystemBadge';
 | 
			
		||||
import { Link } from '@@/Link';
 | 
			
		||||
import { Badge } from '@@/Badge';
 | 
			
		||||
 | 
			
		||||
import { Ingress } from '../../types';
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -20,7 +20,7 @@ function Cell({ row, getValue }: CellContext<Ingress, string>) {
 | 
			
		|||
  const namespace = row.original.Namespace;
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div className="flex flex-nowrap whitespace-nowrap">
 | 
			
		||||
    <div className="flex flex-nowrap whitespace-nowrap gap-2">
 | 
			
		||||
      <Authorized authorizations="K8sIngressesW" childrenUnauthorized={name}>
 | 
			
		||||
        <Link
 | 
			
		||||
          to="kubernetes.ingresses.edit"
 | 
			
		||||
| 
						 | 
				
			
			@ -34,11 +34,7 @@ function Cell({ row, getValue }: CellContext<Ingress, string>) {
 | 
			
		|||
          {name}
 | 
			
		||||
        </Link>
 | 
			
		||||
      </Authorized>
 | 
			
		||||
      {row.original.IsSystem && (
 | 
			
		||||
        <Badge type="success" className="ml-2">
 | 
			
		||||
          System
 | 
			
		||||
        </Badge>
 | 
			
		||||
      )}
 | 
			
		||||
      {row.original.IsSystem && <SystemBadge />}
 | 
			
		||||
    </div>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
import { Authorized } from '@/react/hooks/useUser';
 | 
			
		||||
 | 
			
		||||
import { Badge } from '@@/Badge';
 | 
			
		||||
import { SystemBadge } from '@@/Badge/SystemBadge';
 | 
			
		||||
import { ExternalBadge } from '@@/Badge/ExternalBadge';
 | 
			
		||||
 | 
			
		||||
import { columnHelper } from './helper';
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -31,19 +32,13 @@ export const name = columnHelper.accessor(
 | 
			
		|||
        !row.original.Labels['io.portainer.kubernetes.application.owner'];
 | 
			
		||||
 | 
			
		||||
      return (
 | 
			
		||||
        <div className="flex">
 | 
			
		||||
        <div className="flex gap-2">
 | 
			
		||||
          <Authorized authorizations="K8sServiceW" childrenUnauthorized={name}>
 | 
			
		||||
            {name}
 | 
			
		||||
 | 
			
		||||
            {row.original.IsSystem && (
 | 
			
		||||
              <Badge type="success" className="ml-2">
 | 
			
		||||
                System
 | 
			
		||||
              </Badge>
 | 
			
		||||
            )}
 | 
			
		||||
            {row.original.IsSystem && <SystemBadge />}
 | 
			
		||||
 | 
			
		||||
            {isExternal && !row.original.IsSystem && (
 | 
			
		||||
              <Badge className="ml-2">External</Badge>
 | 
			
		||||
            )}
 | 
			
		||||
            {isExternal && !row.original.IsSystem && <ExternalBadge />}
 | 
			
		||||
          </Authorized>
 | 
			
		||||
        </div>
 | 
			
		||||
      );
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue