Skip to content

Commit a576cea

Browse files
committed
Network inUse. Hide delete button for inUse items in all types.
1 parent f7606ce commit a576cea

File tree

8 files changed

+57
-22
lines changed

8 files changed

+57
-22
lines changed

pkg/dockerapi/models.go

+1
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ type Network struct {
132132
Name string `json:"name"`
133133
Driver string `json:"driver"`
134134
Scope string `json:"scope"`
135+
InUse bool `json:"inUse"`
135136
}
136137

137138
type DockerNetworkListResponse struct {

pkg/dockerapi/network.go

+16
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,34 @@ func NetworkList(req *DockerNetworkList) (*DockerNetworkListResponse, error) {
1515
return nil, err
1616
}
1717

18+
dcontainers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{All: true})
19+
if err != nil {
20+
return nil, err
21+
}
22+
23+
usedNetworks := make(map[string]interface{}, 0)
24+
for _, c := range dcontainers {
25+
if c.NetworkSettings != nil {
26+
for _, n := range c.NetworkSettings.Networks {
27+
usedNetworks[n.NetworkID] = nil
28+
}
29+
}
30+
}
31+
1832
dnetworks, err := cli.NetworkList(context.Background(), types.NetworkListOptions{})
1933
if err != nil {
2034
return nil, err
2135
}
2236

2337
networks := make([]Network, len(dnetworks))
2438
for i, item := range dnetworks {
39+
_, inUse := usedNetworks[item.ID]
2540
networks[i] = Network{
2641
Id: item.ID,
2742
Name: item.Name,
2843
Driver: item.Driver,
2944
Scope: item.Scope,
45+
InUse: inUse,
3046
}
3147
}
3248

pkg/dockerapi/volume.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ func VolumeList(req *DockerVolumeList) (*DockerVolumeListResponse, error) {
3838

3939
volumes := make([]Volume, len(dvolumes.Volumes))
4040
for i, item := range dvolumes.Volumes {
41-
_, isUse := usedVolumes[item.Name]
41+
_, inUse := usedVolumes[item.Name]
4242
volumes[i] = Volume{
4343
Driver: item.Driver,
4444
Name: item.Name,
45-
InUse: isUse,
45+
InUse: inUse,
4646
}
4747
}
4848

pkg/server/handler/request_docker.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func (r *dockerContainerRemoveRequest) bind(c echo.Context, m *dockerapi.DockerC
7878

7979
type dockerImageRemoveRequest struct {
8080
Id string `json:"id" validate:"required,max=100"`
81-
Force bool `json:"force" validate:"required"`
81+
Force bool `json:"force"`
8282
}
8383

8484
func (r *dockerImageRemoveRequest) bind(c echo.Context, m *dockerapi.DockerImageRemove) error {

web/src/app/images/image-list.tsx

+9-7
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export default function ImageList() {
5252
{
5353
method: "POST",
5454
headers: { "Content-Type": "application/json" },
55-
body: JSON.stringify({ id: image?.id, force: true }),
55+
body: JSON.stringify({ id: image?.id, force: false }),
5656
}
5757
)
5858
if (!response.ok) {
@@ -162,12 +162,14 @@ export default function ImageList() {
162162
<TableCell>{item.inUse ? "In use" : "Unused"}</TableCell>
163163
<TableCell>{convertByteToMb(item.size)}</TableCell>
164164
<TableCell className="text-right">
165-
<TableButtonDelete
166-
onClick={(e) => {
167-
e.stopPropagation()
168-
handleDeleteImageConfirmation(item)
169-
}}
170-
/>
165+
{!item.inUse && (
166+
<TableButtonDelete
167+
onClick={(e) => {
168+
e.stopPropagation()
169+
handleDeleteImageConfirmation(item)
170+
}}
171+
/>
172+
)}
171173
</TableCell>
172174
</TableRow>
173175
))}

web/src/app/networks/network-list.tsx

+19-6
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,15 @@ import { toastFailed, toastSuccess } from "@/lib/utils"
2828
import apiBaseUrl from "@/lib/api-base-url"
2929
import DeleteDialog from "@/components/delete-dialog"
3030

31+
const systemNetwoks = [
32+
"none",
33+
"bridge",
34+
"host",
35+
"ingress",
36+
"docker_gwbridge",
37+
"docker_volumes-backup-extension-desktop-extension_default",
38+
]
39+
3140
export default function NetworkList() {
3241
const { nodeId } = useParams()
3342
const { nodeHead } = useNodeHead(nodeId!)
@@ -137,6 +146,7 @@ export default function NetworkList() {
137146
<TableHead scope="col">Name</TableHead>
138147
<TableHead scope="col">Driver</TableHead>
139148
<TableHead scope="col">Scope</TableHead>
149+
<TableHead scope="col">Status</TableHead>
140150
<TableHead scope="col">
141151
<span className="sr-only">Actions</span>
142152
</TableHead>
@@ -151,13 +161,16 @@ export default function NetworkList() {
151161
<TableCell>{item.name}</TableCell>
152162
<TableCell>{item.driver}</TableCell>
153163
<TableCell>{item.scope}</TableCell>
164+
<TableCell>{item.inUse ? "In use" : "Unused"}</TableCell>
154165
<TableCell className="text-right">
155-
<TableButtonDelete
156-
onClick={(e) => {
157-
e.stopPropagation()
158-
handleDeleteNetworkConfirmation(item)
159-
}}
160-
/>
166+
{!systemNetwoks.includes(item.name) && !item.inUse && (
167+
<TableButtonDelete
168+
onClick={(e) => {
169+
e.stopPropagation()
170+
handleDeleteNetworkConfirmation(item)
171+
}}
172+
/>
173+
)}
161174
</TableCell>
162175
</TableRow>
163176
))}

web/src/app/volumes/volume-list.tsx

+8-6
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,14 @@ export default function VolumeList() {
154154
<TableCell>{item.name}</TableCell>
155155
<TableCell>{item.inUse ? "In use" : "Unused"}</TableCell>
156156
<TableCell className="text-right">
157-
<TableButtonDelete
158-
onClick={(e) => {
159-
e.stopPropagation()
160-
handleDeleteVolumeConfirmation(item)
161-
}}
162-
/>
157+
{!item.inUse && (
158+
<TableButtonDelete
159+
onClick={(e) => {
160+
e.stopPropagation()
161+
handleDeleteVolumeConfirmation(item)
162+
}}
163+
/>
164+
)}
163165
</TableCell>
164166
</TableRow>
165167
))}

web/src/lib/api-models.ts

+1
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ export interface INetwork {
114114
name: string
115115
driver: string
116116
scope: string
117+
inUse: boolean
117118
}
118119

119120
export interface IComposeLibraryItemHead {

0 commit comments

Comments
 (0)