Merge pull request 'UI: add update service' (#5216) from update-service into main

Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5216
This commit is contained in:
hsjobeki
2025-09-19 13:44:12 +00:00
2 changed files with 41 additions and 31 deletions

View File

@@ -21,21 +21,32 @@ export const Service = (props: RouteSectionProps) => {
ctx.setWorldMode("service");
});
const handleSubmit: SubmitServiceHandler = async (instance, action) => {
console.log("Service submitted", instance, action);
const handleClose = () => {
console.log("Service closed, navigating back");
navigate(buildClanPath(ctx.clanURI), { replace: true });
ctx.setWorldMode("select");
};
if (action !== "create") {
console.warn("Updating service instances is not supported yet");
return;
const handleSubmit: SubmitServiceHandler = async (instance, action) => {
let call;
if (action === "update") {
call = client.fetch("set_service_instance", {
flake: {
identifier: ctx.clanURI,
},
instance_ref: instance.name,
roles: instance.roles,
});
} else {
call = client.fetch("create_service_instance", {
flake: {
identifier: ctx.clanURI,
},
module_ref: instance.module,
roles: instance.roles,
});
}
const call = client.fetch("create_service_instance", {
flake: {
identifier: ctx.clanURI,
},
module_ref: instance.module,
roles: instance.roles,
});
const result = await call.result;
if (result.status === "error") {
@@ -46,13 +57,7 @@ export const Service = (props: RouteSectionProps) => {
queryKey: clanKey(ctx.clanURI),
});
ctx.setWorldMode("select");
};
const handleClose = () => {
console.log("Service closed, navigating back");
navigate(buildClanPath(ctx.clanURI), { replace: true });
ctx.setWorldMode("select");
handleClose();
};
return <ServiceWorkflow handleSubmit={handleSubmit} onClose={handleClose} />;

View File

@@ -129,19 +129,21 @@ const ConfigureService = () => {
// Wait for all queries to be ready
if (!instances || !machines) return;
const instance = instances[routerProps.id || routerProps.name];
// Init once
if (!store.roles) {
set("roles", {});
if (!instance) {
set("action", "create");
return;
}
set("roles", {});
if (!instance) {
set("action", "create");
return;
for (const role of Object.keys(instance.roles || {})) {
// Get Role members
const roleMembers = getRoleMembers(instance, machines, role);
set("roles", role, roleMembers);
}
set("action", "update");
}
for (const role of Object.keys(instance.roles || {})) {
// Get Role members
const roleMembers = getRoleMembers(instance, machines, role);
set("roles", role, roleMembers);
}
set("action", "update");
},
),
);
@@ -360,7 +362,10 @@ const ConfigureRole = () => {
if (!store.roles) {
set("roles", {});
}
set("roles", (r) => ({ ...r, [store.currentRole as string]: members() }));
set("roles", (r) => ({
...r,
[store.currentRole as string]: members(),
}));
stepper.setActiveStep("view:members");
};