Allow deletion of named servers

This commit is contained in:
Diogo Castro
2023-05-14 12:36:05 +02:00
parent c359221ef3
commit ad61c23873
2 changed files with 68 additions and 12 deletions

View File

@@ -45,11 +45,11 @@ const ServerDashboard = (props) => {
adminAsc = (e) => e.sort((a) => (a.admin ? 1 : -1)), adminAsc = (e) => e.sort((a) => (a.admin ? 1 : -1)),
dateDesc = (e) => dateDesc = (e) =>
e.sort((a, b) => e.sort((a, b) =>
new Date(a.last_activity) - new Date(b.last_activity) > 0 ? -1 : 1, new Date(a.last_activity) - new Date(b.last_activity) > 0 ? -1 : 1
), ),
dateAsc = (e) => dateAsc = (e) =>
e.sort((a, b) => e.sort((a, b) =>
new Date(a.last_activity) - new Date(b.last_activity) > 0 ? 1 : -1, new Date(a.last_activity) - new Date(b.last_activity) > 0 ? 1 : -1
), ),
runningAsc = (e) => e.sort((a) => (a.server == null ? -1 : 1)), runningAsc = (e) => e.sort((a) => (a.server == null ? -1 : 1)),
runningDesc = (e) => e.sort((a) => (a.server == null ? 1 : -1)); runningDesc = (e) => e.sort((a) => (a.server == null ? 1 : -1));
@@ -74,6 +74,7 @@ const ServerDashboard = (props) => {
shutdownHub, shutdownHub,
startServer, startServer,
stopServer, stopServer,
deleteServer,
startAll, startAll,
stopAll, stopAll,
history, history,
@@ -143,7 +144,7 @@ const ServerDashboard = (props) => {
dispatchPageUpdate( dispatchPageUpdate(
data.items, data.items,
data._pagination, data._pagination,
name_filter, name_filter
); );
}) })
.catch(() => { .catch(() => {
@@ -167,6 +168,50 @@ const ServerDashboard = (props) => {
); );
}; };
const DeleteServerButton = ({ serverName, userName }) => {
if (serverName === "") {
return null;
}
var [isDisabled, setIsDisabled] = useState(false);
return (
<button
className="btn btn-danger btn-xs stop-button"
// It's not possible to delete unnamed servers
disabled={isDisabled}
onClick={() => {
setIsDisabled(true);
deleteServer(userName, serverName)
.then((res) => {
if (res.status < 300) {
updateUsers(...slice)
.then((data) => {
dispatchPageUpdate(
data.items,
data._pagination,
name_filter
);
})
.catch(() => {
setIsDisabled(false);
setErrorAlert(`Failed to update users list.`);
});
} else {
setErrorAlert(`Failed to delete server.`);
setIsDisabled(false);
}
return res;
})
.catch(() => {
setErrorAlert(`Failed to delete server.`);
setIsDisabled(false);
});
}}
>
Delete Server
</button>
);
};
const StartServerButton = ({ serverName, userName }) => { const StartServerButton = ({ serverName, userName }) => {
var [isDisabled, setIsDisabled] = useState(false); var [isDisabled, setIsDisabled] = useState(false);
return ( return (
@@ -183,7 +228,7 @@ const ServerDashboard = (props) => {
dispatchPageUpdate( dispatchPageUpdate(
data.items, data.items,
data._pagination, data._pagination,
name_filter, name_filter
); );
}) })
.catch(() => { .catch(() => {
@@ -324,6 +369,10 @@ const ServerDashboard = (props) => {
userName={user.name} userName={user.name}
style={{ marginRight: 20 }} style={{ marginRight: 20 }}
/> />
<DeleteServerButton
serverName={server.name}
userName={user.name}
/>
<a <a
href={`${base_url}spawn/${user.name}${ href={`${base_url}spawn/${user.name}${
server.name ? "/" + server.name : "" server.name ? "/" + server.name : ""
@@ -483,7 +532,7 @@ const ServerDashboard = (props) => {
failedServers.length > 1 ? "servers" : "server" failedServers.length > 1 ? "servers" : "server"
}. ${ }. ${
failedServers.length > 1 ? "Are they " : "Is it " failedServers.length > 1 ? "Are they " : "Is it "
} already running?`, } already running?`
); );
} }
return res; return res;
@@ -494,11 +543,11 @@ const ServerDashboard = (props) => {
dispatchPageUpdate( dispatchPageUpdate(
data.items, data.items,
data._pagination, data._pagination,
name_filter, name_filter
); );
}) })
.catch(() => .catch(() =>
setErrorAlert(`Failed to update users list.`), setErrorAlert(`Failed to update users list.`)
); );
return res; return res;
}) })
@@ -523,7 +572,7 @@ const ServerDashboard = (props) => {
failedServers.length > 1 ? "servers" : "server" failedServers.length > 1 ? "servers" : "server"
}. ${ }. ${
failedServers.length > 1 ? "Are they " : "Is it " failedServers.length > 1 ? "Are they " : "Is it "
} already stopped?`, } already stopped?`
); );
} }
return res; return res;
@@ -534,11 +583,11 @@ const ServerDashboard = (props) => {
dispatchPageUpdate( dispatchPageUpdate(
data.items, data.items,
data._pagination, data._pagination,
name_filter, name_filter
); );
}) })
.catch(() => .catch(() =>
setErrorAlert(`Failed to update users list.`), setErrorAlert(`Failed to update users list.`)
); );
return res; return res;
}) })
@@ -582,6 +631,7 @@ ServerDashboard.propTypes = {
shutdownHub: PropTypes.func, shutdownHub: PropTypes.func,
startServer: PropTypes.func, startServer: PropTypes.func,
stopServer: PropTypes.func, stopServer: PropTypes.func,
deleteServer: PropTypes.func,
startAll: PropTypes.func, startAll: PropTypes.func,
stopAll: PropTypes.func, stopAll: PropTypes.func,
dispatch: PropTypes.func, dispatch: PropTypes.func,

View File

@@ -7,17 +7,23 @@ const withAPI = withProps(() => ({
`/users?include_stopped_servers&offset=${offset}&limit=${limit}&name_filter=${ `/users?include_stopped_servers&offset=${offset}&limit=${limit}&name_filter=${
name_filter || "" name_filter || ""
}`, }`,
"GET", "GET"
).then((data) => data.json()), ).then((data) => data.json()),
updateGroups: (offset, limit) => updateGroups: (offset, limit) =>
jhapiRequest(`/groups?offset=${offset}&limit=${limit}`, "GET").then( jhapiRequest(`/groups?offset=${offset}&limit=${limit}`, "GET").then(
(data) => data.json(), (data) => data.json()
), ),
shutdownHub: () => jhapiRequest("/shutdown", "POST"), shutdownHub: () => jhapiRequest("/shutdown", "POST"),
startServer: (name, serverName = "") => startServer: (name, serverName = "") =>
jhapiRequest("/users/" + name + "/servers/" + (serverName || ""), "POST"), jhapiRequest("/users/" + name + "/servers/" + (serverName || ""), "POST"),
stopServer: (name, serverName = "") => stopServer: (name, serverName = "") =>
jhapiRequest("/users/" + name + "/servers/" + (serverName || ""), "DELETE"), jhapiRequest("/users/" + name + "/servers/" + (serverName || ""), "DELETE"),
deleteServer: (name, serverName = "") =>
jhapiRequest(
"/users/" + name + "/servers/" + (serverName || ""),
"DELETE",
{ remove: true }
),
startAll: (names) => startAll: (names) =>
names.map((e) => jhapiRequest("/users/" + e + "/server", "POST")), names.map((e) => jhapiRequest("/users/" + e + "/server", "POST")),
stopAll: (names) => stopAll: (names) =>