/****************************************************************************** * Copyright (c) 2026 Contributors to the Eclipse Foundation. * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * https://www.eclipse.org/legal/epl-2.0. * * SPDX-License-Identifier: EPL-2.0 *****************************************************************************/ import { FunctionComponent } from 'react'; import { Chip, IconButton, Paper, Stack, Table, TableBody, TableCell, TableContainer, TableFooter, TableHead, TablePagination, TableRow } from '@mui/material'; import DeleteIcon from '@mui/icons-material/Delete'; import DeleteForeverIcon from '@mui/icons-material/DeleteForever'; import { VersionTargetPlatforms } from '../../extension-registry-types'; import { getTargetPlatformDisplayName } from '../../utils'; const PAGE_SIZE = 20; export const ExtensionVersionTable: FunctionComponent = ({ versions, page, onPageChange, onDeleteVersion, onPurgeVersion }) => { const pagedVersions = versions.slice(page * PAGE_SIZE, page * PAGE_SIZE + PAGE_SIZE); const columnCount = onPurgeVersion ? 4 : 3; return ( Version Target Platforms {onPurgeVersion && } {pagedVersions.map(v => { const allRemoved = v.targetPlatforms.length > 0 && v.targetPlatforms.every(tp => tp.removed); // canDelete is only populated in the user settings view; undefined means unrestricted. const notPublisher = v.canDelete === false; const deleteDisabled = allRemoved || notPublisher; const deleteTitle = notPublisher ? 'Only the publisher or a namespace owner can delete this version' : allRemoved ? 'Version already removed' : 'Delete version'; return ( {v.version} {allRemoved && ( )} {v.targetPlatforms.map(tp => ( ))} onDeleteVersion(v)}> {onPurgeVersion && ( onPurgeVersion(v)}> )} ); })} {versions.length === 0 && ( No version information available. )} onPageChange(newPage)} />
); }; export interface ExtensionVersionTableProps { versions: VersionTargetPlatforms[]; page: number; onPageChange: (page: number) => void; onDeleteVersion: (version: VersionTargetPlatforms) => void; // When provided (admin only), each row shows a permanent-purge action. onPurgeVersion?: (version: VersionTargetPlatforms) => void; }