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"); ctx.setWorldMode("service");
}); });
const handleSubmit: SubmitServiceHandler = async (instance, action) => { const handleClose = () => {
console.log("Service submitted", instance, action); console.log("Service closed, navigating back");
navigate(buildClanPath(ctx.clanURI), { replace: true });
ctx.setWorldMode("select");
};
if (action !== "create") { const handleSubmit: SubmitServiceHandler = async (instance, action) => {
console.warn("Updating service instances is not supported yet"); let call;
return; 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; const result = await call.result;
if (result.status === "error") { if (result.status === "error") {
@@ -46,13 +57,7 @@ export const Service = (props: RouteSectionProps) => {
queryKey: clanKey(ctx.clanURI), queryKey: clanKey(ctx.clanURI),
}); });
ctx.setWorldMode("select"); handleClose();
};
const handleClose = () => {
console.log("Service closed, navigating back");
navigate(buildClanPath(ctx.clanURI), { replace: true });
ctx.setWorldMode("select");
}; };
return <ServiceWorkflow handleSubmit={handleSubmit} onClose={handleClose} />; return <ServiceWorkflow handleSubmit={handleSubmit} onClose={handleClose} />;

View File

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