Compare commits

...

2 Commits

Author SHA1 Message Date
hyung-hwan ed39f289ff switch DeleteIcon to DeleteOutlinedIcon 2026-06-29 10:21:05 +09:00
hyung-hwan 22d0c2903a applied split panel to the admin user groups page 2026-06-29 09:25:38 +09:00
12 changed files with 143 additions and 86 deletions
@@ -10,7 +10,7 @@ import MenuItem from '@mui/material/MenuItem'
import TextField from '@mui/material/TextField' import TextField from '@mui/material/TextField'
import Typography from '@mui/material/Typography' import Typography from '@mui/material/Typography'
import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline' import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'
import DeleteIcon from '@mui/icons-material/Delete' import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'
import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline' import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline'
import { useEffect, useRef, useState } from 'react' import { useEffect, useRef, useState } from 'react'
import Autocomplete from './Autocomplete' import Autocomplete from './Autocomplete'
@@ -197,7 +197,7 @@ export default function AuthProviderFormDialog(props: AuthProviderFormDialogProp
)} )}
/> />
<IconButton size="small" onClick={() => removeGroupMapping(index)}> <IconButton size="small" onClick={() => removeGroupMapping(index)}>
<DeleteIcon fontSize="small" /> <DeleteOutlinedIcon fontSize="small" />
</IconButton> </IconButton>
</Box> </Box>
) )
@@ -1,4 +1,4 @@
import DeleteIcon from '@mui/icons-material/Delete' import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'
import DragIndicatorIcon from '@mui/icons-material/DragIndicator' import DragIndicatorIcon from '@mui/icons-material/DragIndicator'
import EditIcon from '@mui/icons-material/Edit' import EditIcon from '@mui/icons-material/Edit'
import { import {
@@ -185,7 +185,7 @@ function SortableRow({
onClick={() => onDelete(v.id)} onClick={() => onDelete(v.id)}
disabled={deletingId === v.id} disabled={deletingId === v.id}
> >
<DeleteIcon fontSize="small" /> <DeleteOutlinedIcon fontSize="small" />
</IconButton> </IconButton>
</Tooltip> </Tooltip>
</Box> </Box>
@@ -1,6 +1,6 @@
import CheckIcon from '@mui/icons-material/Check' import CheckIcon from '@mui/icons-material/Check'
import CloseIcon from '@mui/icons-material/Close' import CloseIcon from '@mui/icons-material/Close'
import DeleteIcon from '@mui/icons-material/Delete' import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'
import DragIndicatorIcon from '@mui/icons-material/DragIndicator' import DragIndicatorIcon from '@mui/icons-material/DragIndicator'
import { useSortable } from '@dnd-kit/sortable' import { useSortable } from '@dnd-kit/sortable'
import { CSS } from '@dnd-kit/utilities' import { CSS } from '@dnd-kit/utilities'
@@ -96,7 +96,7 @@ export default function CardChecklistItemRow(props: CardChecklistItemRowProps) {
)} )}
{editing ? null : ( {editing ? null : (
<IconButton size="small" onClick={() => onDelete(item.id)}> <IconButton size="small" onClick={() => onDelete(item.id)}>
<DeleteIcon fontSize="small" /> <DeleteOutlinedIcon fontSize="small" />
</IconButton> </IconButton>
)} )}
</Box> </Box>
+2 -2
View File
@@ -2,7 +2,7 @@ import AttachFileIcon from '@mui/icons-material/AttachFile'
import CheckIcon from '@mui/icons-material/Check' import CheckIcon from '@mui/icons-material/Check'
import CheckCircleIcon from '@mui/icons-material/CheckCircle' import CheckCircleIcon from '@mui/icons-material/CheckCircle'
import CloseIcon from '@mui/icons-material/Close' import CloseIcon from '@mui/icons-material/Close'
import DeleteIcon from '@mui/icons-material/Delete' import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'
import DownloadIcon from '@mui/icons-material/Download' import DownloadIcon from '@mui/icons-material/Download'
import ImageIcon from '@mui/icons-material/Image' import ImageIcon from '@mui/icons-material/Image'
import SendIcon from '@mui/icons-material/Send' import SendIcon from '@mui/icons-material/Send'
@@ -756,7 +756,7 @@ export default function CardDetailDialog(props: CardDetailDialogProps) {
<DownloadIcon fontSize="small" /> <DownloadIcon fontSize="small" />
</IconButton> </IconButton>
<IconButton size="small" onClick={() => handleDeleteAttachment(item)}> <IconButton size="small" onClick={() => handleDeleteAttachment(item)}>
<DeleteIcon fontSize="small" /> <DeleteOutlinedIcon fontSize="small" />
</IconButton> </IconButton>
</Box> </Box>
) )
+2 -2
View File
@@ -1,5 +1,5 @@
import AddIcon from '@mui/icons-material/Add' import AddIcon from '@mui/icons-material/Add'
import DeleteIcon from '@mui/icons-material/Delete' import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'
import EditIcon from '@mui/icons-material/Edit' import EditIcon from '@mui/icons-material/Edit'
import ConfirmDeleteDialog from './ConfirmDeleteDialog' import ConfirmDeleteDialog from './ConfirmDeleteDialog'
import { Box, Chip, IconButton, TextField, Tooltip, Typography } from '@mui/material' import { Box, Chip, IconButton, TextField, Tooltip, Typography } from '@mui/material'
@@ -62,7 +62,7 @@ function buildProjectColumns(
{isAdmin ? ( {isAdmin ? (
<Tooltip title="Delete"> <Tooltip title="Delete">
<IconButton size="small" onClick={(e: React.MouseEvent) => { e.stopPropagation(); openDelete(p) }} aria-label="Delete"> <IconButton size="small" onClick={(e: React.MouseEvent) => { e.stopPropagation(); openDelete(p) }} aria-label="Delete">
<DeleteIcon fontSize="small" color="error" /> <DeleteOutlinedIcon fontSize="small" color="error" />
</IconButton> </IconButton>
</Tooltip> </Tooltip>
) : null} ) : null}
+80 -23
View File
@@ -1,5 +1,5 @@
import AddIcon from '@mui/icons-material/Add' import AddIcon from '@mui/icons-material/Add'
import DeleteIcon from '@mui/icons-material/Delete' import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'
import EditIcon from '@mui/icons-material/Edit' import EditIcon from '@mui/icons-material/Edit'
import CompactListItemText from '../components/CompactListItemText' import CompactListItemText from '../components/CompactListItemText'
import ConfirmDeleteDialog from '../components/ConfirmDeleteDialog' import ConfirmDeleteDialog from '../components/ConfirmDeleteDialog'
@@ -13,10 +13,12 @@ import {
List, List,
ListItem, ListItem,
TextField, TextField,
Tooltip,
Typography Typography
} from '@mui/material' } from '@mui/material'
import { useEffect, useMemo, useState } from 'react' import { useEffect, useMemo, useState } from 'react'
import SectionCard from '../components/SectionCard' import SectionCard from '../components/SectionCard'
import SplitPanel from '../components/SplitPanel'
import TintedPanel from '../components/TintedPanel' import TintedPanel from '../components/TintedPanel'
import PageAlert from '../components/PageAlert' import PageAlert from '../components/PageAlert'
import { api, SubjectPermission, User, UserGroup, UserGroupMember, UserGroupUpsertPayload } from '../api' import { api, SubjectPermission, User, UserGroup, UserGroupMember, UserGroupUpsertPayload } from '../api'
@@ -57,6 +59,7 @@ export default function AdminUserGroupsPage() {
const [selectedGroupID, setSelectedGroupID] = useState('') const [selectedGroupID, setSelectedGroupID] = useState('')
const [groupQuery, setGroupQuery] = useState('') const [groupQuery, setGroupQuery] = useState('')
const [newMemberUserID, setNewMemberUserID] = useState('') const [newMemberUserID, setNewMemberUserID] = useState('')
const [addMemberOpen, setAddMemberOpen] = useState(false)
const [loading, setLoading] = useState(false) const [loading, setLoading] = useState(false)
const [busy, setBusy] = useState(false) const [busy, setBusy] = useState(false)
const [error, setError] = useState<string | null>(null) const [error, setError] = useState<string | null>(null)
@@ -146,8 +149,12 @@ export default function AdminUserGroupsPage() {
useEffect(() => { useEffect(() => {
if (selectedGroupID) { if (selectedGroupID) {
setAddMemberOpen(false)
setNewMemberUserID('')
loadMembers(selectedGroupID).catch(() => {}) loadMembers(selectedGroupID).catch(() => {})
} else { } else {
setAddMemberOpen(false)
setNewMemberUserID('')
setMembers([]) setMembers([])
} }
}, [selectedGroupID]) }, [selectedGroupID])
@@ -233,6 +240,7 @@ export default function AdminUserGroupsPage() {
try { try {
await api.addUserGroupMember(selectedGroupID, newMemberUserID) await api.addUserGroupMember(selectedGroupID, newMemberUserID)
setNewMemberUserID('') setNewMemberUserID('')
setAddMemberOpen(false)
await loadMembers(selectedGroupID) await loadMembers(selectedGroupID)
} catch (err) { } catch (err) {
setError(err instanceof Error ? err.message : 'Failed to add member') setError(err instanceof Error ? err.message : 'Failed to add member')
@@ -337,14 +345,17 @@ export default function AdminUserGroupsPage() {
const deleteMemberExpected = memberConfirmText(deleteMemberItem) const deleteMemberExpected = memberConfirmText(deleteMemberItem)
return ( return (
<Box> <Box sx={{ display: 'flex', flexDirection: 'column', height: 'calc(100dvh - 76px)', minHeight: 0 }}>
<Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', mb: 2 }}> <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', mb: 2 }}>
<Typography variant="h5">Admin: User Groups</Typography> <Typography variant="h5">Admin: User Groups</Typography>
<Button variant="outlined" startIcon={<AddIcon />} onClick={openCreate}>New Group</Button> <Button variant="outlined" startIcon={<AddIcon />} onClick={openCreate}>New Group</Button>
</Box> </Box>
<PageAlert message={error} onClose={() => setError(null)} sx={{ mb: 1 }} /> <PageAlert message={error} onClose={() => setError(null)} sx={{ mb: 1 }} />
<Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '40% minmax(0, 1fr)' }, gap: 1, alignItems: 'start' }}> <SplitPanel
<TintedPanel> defaultRatio={0.38}
sx={{ flex: 1, minHeight: 0 }}
left={(
<TintedPanel sx={{ minWidth: 0, minHeight: 0, height: '100%', overflow: 'auto' }}>
<TextField <TextField
size="small" size="small"
label="Search" label="Search"
@@ -352,7 +363,7 @@ export default function AdminUserGroupsPage() {
value={groupQuery} value={groupQuery}
onChange={(event) => setGroupQuery(event.target.value)} onChange={(event) => setGroupQuery(event.target.value)}
fullWidth fullWidth
sx={{ mb: 1, mt: '13px' /* having these mt mb here doesn't look nice */ }} sx={{ mb: 1 }}
/> />
{loading ? <Typography variant="body2" color="text.secondary">Loading groups...</Typography> : null} {loading ? <Typography variant="body2" color="text.secondary">Loading groups...</Typography> : null}
{!loading && groups.length === 0 ? <Typography variant="body2" color="text.secondary">No groups.</Typography> : null} {!loading && groups.length === 0 ? <Typography variant="body2" color="text.secondary">No groups.</Typography> : null}
@@ -383,8 +394,10 @@ export default function AdminUserGroupsPage() {
/> />
{group.scope === 'all_users' ? <Chip size="small" label="All Users" sx={{ mt: 0.25, flexShrink: 0 }} /> : null} {group.scope === 'all_users' ? <Chip size="small" label="All Users" sx={{ mt: 0.25, flexShrink: 0 }} /> : null}
<Box sx={{ display: 'flex', gap: 0.5, mt: 0.25, flexShrink: 0 }}> <Box sx={{ display: 'flex', gap: 0.5, mt: 0.25, flexShrink: 0 }}>
<Tooltip title="Edit group">
<IconButton <IconButton
size="small" size="small"
aria-label={`Edit ${group.name}`}
onClick={(event) => { onClick={(event) => {
event.stopPropagation() event.stopPropagation()
openEdit(group) openEdit(group)
@@ -392,9 +405,13 @@ export default function AdminUserGroupsPage() {
> >
<EditIcon fontSize="small" /> <EditIcon fontSize="small" />
</IconButton> </IconButton>
</Tooltip>
<Tooltip title={group.scope === 'all_users' ? 'The All Users group cannot be deleted' : 'Delete group'}>
<span>
<IconButton <IconButton
size="small" size="small"
color="error" color="error"
aria-label={`Delete ${group.name}`}
onClick={(event) => { onClick={(event) => {
event.stopPropagation() event.stopPropagation()
setDeleteItem(group) setDeleteItem(group)
@@ -402,15 +419,18 @@ export default function AdminUserGroupsPage() {
}} }}
disabled={group.scope === 'all_users'} disabled={group.scope === 'all_users'}
> >
<DeleteIcon fontSize="small" /> <DeleteOutlinedIcon fontSize="small" />
</IconButton> </IconButton>
</span>
</Tooltip>
</Box> </Box>
</ListItem> </ListItem>
))} ))}
</List> </List>
</TintedPanel> </TintedPanel>
)}
<Box sx={{ display: 'grid', gap: 1, minWidth: 0 }}> right={(
<Box sx={{ display: 'grid', gap: 1, minWidth: 0, minHeight: 0, height: '100%', overflow: 'auto', alignContent: 'start' }}>
<SectionCard title="Selected Group"> <SectionCard title="Selected Group">
{selectedGroup ? ( {selectedGroup ? (
<Box sx={{ display: 'grid', gap: 0.75 }}> <Box sx={{ display: 'grid', gap: 0.75 }}>
@@ -457,7 +477,33 @@ export default function AdminUserGroupsPage() {
title="Members" title="Members"
actions={ actions={
selectedGroup && selectedGroup.scope !== 'all_users' ? ( selectedGroup && selectedGroup.scope !== 'all_users' ? (
<Box sx={{ display: 'flex', gap: 1, alignItems: 'center', flexWrap: 'wrap', justifyContent: 'flex-end' }}> <Button
variant="outlined"
size="small"
startIcon={<AddIcon />}
onClick={() => setAddMemberOpen((open: boolean) => !open)}
disabled={busy}
>
Add Member
</Button>
) : undefined
}
>
{selectedGroup ? (
<>
{addMemberOpen && selectedGroup.scope !== 'all_users' ? (
<Box
sx={{
display: 'flex',
gap: 1,
alignItems: 'center',
flexWrap: 'wrap',
mb: 1,
p: 1,
borderRadius: 1,
bgcolor: 'action.hover',
}}
>
<Autocomplete<User, false, false, false> <Autocomplete<User, false, false, false>
size="small" size="small"
options={availableUsers} options={availableUsers}
@@ -466,18 +512,24 @@ export default function AdminUserGroupsPage() {
getOptionLabel={(user: User) => user.display_name ? `${user.display_name} (${user.username})` : user.username} getOptionLabel={(user: User) => user.display_name ? `${user.display_name} (${user.username})` : user.username}
isOptionEqualToValue={(option: User, value: User) => option.id === value.id} isOptionEqualToValue={(option: User, value: User) => option.id === value.id}
noOptionsText="No available users" noOptionsText="No available users"
renderInput={(params) => <TextField {...params} label="User" />} renderInput={(params) => <TextField {...params} label="User" placeholder="Select user" />}
sx={{ minWidth: 260 }} sx={{ minWidth: 240, flex: 1 }}
/> />
<Button variant="outlined" onClick={addMember} disabled={busy || !newMemberUserID}> <Button variant="contained" size="small" onClick={addMember} disabled={busy || !newMemberUserID}>
Add Member {busy ? 'Adding...' : 'Add'}
</Button>
<Button
size="small"
onClick={() => {
setAddMemberOpen(false)
setNewMemberUserID('')
}}
disabled={busy}
>
Cancel
</Button> </Button>
</Box> </Box>
) : undefined ) : null}
}
>
{selectedGroup ? (
<>
<Box sx={{ display: 'grid', gap: 0.75 }}> <Box sx={{ display: 'grid', gap: 0.75 }}>
{members.map((member) => ( {members.map((member) => (
<Box <Box
@@ -485,9 +537,10 @@ export default function AdminUserGroupsPage() {
sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 1 }} sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 1 }}
> >
<Typography variant="body2">{userLabelByID(member.user_id)}</Typography> <Typography variant="body2">{userLabelByID(member.user_id)}</Typography>
<Button <Tooltip title={selectedGroup.scope === 'all_users' ? 'The All Users group has no explicit members to delete' : 'Delete member'}>
<span>
<IconButton
size="small" size="small"
variant="outlined"
color="error" color="error"
onClick={() => { onClick={() => {
setDialogError(null) setDialogError(null)
@@ -495,9 +548,12 @@ export default function AdminUserGroupsPage() {
setDeleteMemberConfirm('') setDeleteMemberConfirm('')
}} }}
disabled={busy || selectedGroup.scope === 'all_users'} disabled={busy || selectedGroup.scope === 'all_users'}
aria-label={`Delete ${userLabelByID(member.user_id)}`}
> >
Delete <DeleteOutlinedIcon fontSize="small" />
</Button> </IconButton>
</span>
</Tooltip>
</Box> </Box>
))} ))}
{selectedGroup.scope === 'all_users' ? ( {selectedGroup.scope === 'all_users' ? (
@@ -548,7 +604,8 @@ export default function AdminUserGroupsPage() {
)} )}
</SectionCard> </SectionCard>
</Box> </Box>
</Box> )}
/>
<UserGroupFormDialog <UserGroupFormDialog
open={editOpen} open={editOpen}
+2 -2
View File
@@ -1,7 +1,7 @@
import AddIcon from '@mui/icons-material/Add' import AddIcon from '@mui/icons-material/Add'
import BlockIcon from '@mui/icons-material/Block' import BlockIcon from '@mui/icons-material/Block'
import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline' import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'
import DeleteIcon from '@mui/icons-material/Delete' import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'
import Alert from '@mui/material/Alert' import Alert from '@mui/material/Alert'
import ConfirmDeleteDialog from '../components/ConfirmDeleteDialog' import ConfirmDeleteDialog from '../components/ConfirmDeleteDialog'
import APIKeyCreateFields from '../components/APIKeyCreateFields' import APIKeyCreateFields from '../components/APIKeyCreateFields'
@@ -247,7 +247,7 @@ export default function ApiKeysPage() {
> >
{key.disabled ? 'Enable' : 'Disable'} {key.disabled ? 'Enable' : 'Disable'}
</ListRowActionButton> </ListRowActionButton>
<ListRowActionButton startIcon={<DeleteIcon />} color="error" onClick={() => setDeleteTarget(key)}> <ListRowActionButton startIcon={<DeleteOutlinedIcon />} color="error" onClick={() => setDeleteTarget(key)}>
Delete Delete
</ListRowActionButton> </ListRowActionButton>
</ListRowActions> </ListRowActions>
+2 -2
View File
@@ -1,5 +1,5 @@
import BarChartIcon from '@mui/icons-material/BarChart' import BarChartIcon from '@mui/icons-material/BarChart'
import DeleteIcon from '@mui/icons-material/Delete' import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'
import EditIcon from '@mui/icons-material/Edit' import EditIcon from '@mui/icons-material/Edit'
import MoreVertIcon from '@mui/icons-material/MoreVert' import MoreVertIcon from '@mui/icons-material/MoreVert'
import SettingsIcon from '@mui/icons-material/Settings' import SettingsIcon from '@mui/icons-material/Settings'
@@ -380,7 +380,7 @@ export default function BoardPage() {
}} }}
> >
<Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}> <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
<DeleteIcon fontSize="small" /> <DeleteOutlinedIcon fontSize="small" />
Delete board Delete board
</Box> </Box>
</MenuItem> </MenuItem>
+2 -2
View File
@@ -1,5 +1,5 @@
import AddIcon from '@mui/icons-material/Add' import AddIcon from '@mui/icons-material/Add'
import DeleteIcon from '@mui/icons-material/Delete' import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'
import EditIcon from '@mui/icons-material/Edit' import EditIcon from '@mui/icons-material/Edit'
import { import {
Box, Box,
@@ -179,7 +179,7 @@ export default function ProjectBoardsPage() {
disabled={!canWrite} disabled={!canWrite}
onClick={() => { setDeleteBoard(board); setDeleteError(null); setDeleteConfirmValue('') }} onClick={() => { setDeleteBoard(board); setDeleteError(null); setDeleteConfirmValue('') }}
> >
<DeleteIcon fontSize="small" /> <DeleteOutlinedIcon fontSize="small" />
</ListRowIconAction> </ListRowIconAction>
</ListRowActions> </ListRowActions>
), ),
+3 -3
View File
@@ -1,6 +1,6 @@
import AddIcon from '@mui/icons-material/Add' import AddIcon from '@mui/icons-material/Add'
import ContentCopyIcon from '@mui/icons-material/ContentCopy' import ContentCopyIcon from '@mui/icons-material/ContentCopy'
import DeleteIcon from '@mui/icons-material/Delete' import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'
import EditIcon from '@mui/icons-material/Edit' import EditIcon from '@mui/icons-material/Edit'
import LinkOffIcon from '@mui/icons-material/LinkOff' import LinkOffIcon from '@mui/icons-material/LinkOff'
import LinkIcon from '@mui/icons-material/Link' import LinkIcon from '@mui/icons-material/Link'
@@ -536,7 +536,7 @@ export default function ProjectReposPage() {
<EditIcon fontSize="small" /> <EditIcon fontSize="small" />
</ListRowIconAction> </ListRowIconAction>
<ListRowIconAction title={canWrite ? 'Delete repository' : 'You do not have permission to delete'} color="error" disabled={!canWrite} onClick={() => openDelete(repo)}> <ListRowIconAction title={canWrite ? 'Delete repository' : 'You do not have permission to delete'} color="error" disabled={!canWrite} onClick={() => openDelete(repo)}>
<DeleteIcon fontSize="small" /> <DeleteOutlinedIcon fontSize="small" />
</ListRowIconAction> </ListRowIconAction>
</ListRowActions> </ListRowActions>
) : ( ) : (
@@ -611,7 +611,7 @@ export default function ProjectReposPage() {
<HeaderActionButton <HeaderActionButton
variant="outlined" variant="outlined"
color="error" color="error"
startIcon={<DeleteIcon />} startIcon={<DeleteOutlinedIcon />}
disabled={!canWrite || selectedRepoIds.length === 0} disabled={!canWrite || selectedRepoIds.length === 0}
onClick={openBulkDelete} onClick={openBulkDelete}
> >
+2 -2
View File
@@ -6,7 +6,7 @@ import ProjectOverviewCard from '../components/ProjectOverviewCard'
import ProjectPageFrame from '../components/ProjectPageFrame' import ProjectPageFrame from '../components/ProjectPageFrame'
import HeaderActionButton from '../components/HeaderActionButton' import HeaderActionButton from '../components/HeaderActionButton'
import EditIcon from '@mui/icons-material/Edit' import EditIcon from '@mui/icons-material/Edit'
import DeleteIcon from '@mui/icons-material/Delete' import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'
import ConfirmDeleteDialog from '../components/ConfirmDeleteDialog' import ConfirmDeleteDialog from '../components/ConfirmDeleteDialog'
import ProjectFormDialog from '../components/ProjectFormDialog' import ProjectFormDialog from '../components/ProjectFormDialog'
import { ProjectDescriptionTab, ProjectHomePageValue } from '../components/ProjectFormDialog' import { ProjectDescriptionTab, ProjectHomePageValue } from '../components/ProjectFormDialog'
@@ -304,7 +304,7 @@ export default function ProjectSettingsPage() {
<HeaderActionButton variant="outlined" startIcon={<EditIcon />} onClick={openEdit} disabled={!project}> <HeaderActionButton variant="outlined" startIcon={<EditIcon />} onClick={openEdit} disabled={!project}>
Edit Project Edit Project
</HeaderActionButton> </HeaderActionButton>
<HeaderActionButton variant="outlined" color="error" startIcon={<DeleteIcon />} onClick={openDelete} disabled={!project}> <HeaderActionButton variant="outlined" color="error" startIcon={<DeleteOutlinedIcon />} onClick={openDelete} disabled={!project}>
Delete Project Delete Project
</HeaderActionButton> </HeaderActionButton>
</Box> </Box>
+2 -2
View File
@@ -10,7 +10,7 @@ import ContextToolbar from '../components/ContextToolbar'
import ProjectPageFrame from '../components/ProjectPageFrame' import ProjectPageFrame from '../components/ProjectPageFrame'
import RepoSubNav from '../components/RepoSubNav' import RepoSubNav from '../components/RepoSubNav'
import EditIcon from '@mui/icons-material/Edit' import EditIcon from '@mui/icons-material/Edit'
import DeleteIcon from '@mui/icons-material/Delete' import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'
import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline' import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'
import ConfirmDeleteDialog from '../components/ConfirmDeleteDialog' import ConfirmDeleteDialog from '../components/ConfirmDeleteDialog'
import FormDialogContent from '../components/FormDialogContent' import FormDialogContent from '../components/FormDialogContent'
@@ -289,7 +289,7 @@ export default function RepoGitBranchesPage() {
</span> </span>
<span title={repoEdit.canWrite ? 'Delete branch' : 'You do not have permission to delete'}> <span title={repoEdit.canWrite ? 'Delete branch' : 'You do not have permission to delete'}>
<IconButton size="small" onClick={() => openDelete(branch.name)} disabled={!repoEdit.canWrite} aria-label="Delete branch"> <IconButton size="small" onClick={() => openDelete(branch.name)} disabled={!repoEdit.canWrite} aria-label="Delete branch">
<DeleteIcon fontSize="small" /> <DeleteOutlinedIcon fontSize="small" />
</IconButton> </IconButton>
</span> </span>
</Box> </Box>