Standardize modal buttons and delete confirmations

This commit is contained in:
DCCONSTRUCTIONS
2026-05-02 12:57:54 +03:00
parent adad0bd344
commit 17e007f49d
21 changed files with 869 additions and 73 deletions
+68
View File
@@ -204,6 +204,13 @@ export function LauncherApp() {
}));
}
function handleDeleteInvite(inviteId: string) {
setData((current) => ({
...current,
invites: current.invites.filter((invite) => invite.id !== inviteId),
}));
}
function handleRetrySync(syncId: string) {
setData((current) => ({
...current,
@@ -275,6 +282,34 @@ export function LauncherApp() {
}));
}
function handleDeleteClient(clientId: string) {
const nextClientId = data.clients.find((client) => client.id !== clientId)?.id ?? activeClientId;
setData((current) => {
if (current.clients.length <= 1) return current;
const deletedGroupIds = new Set(current.groups.filter((group) => group.clientId === clientId).map((group) => group.id));
return {
...current,
clients: current.clients.filter((client) => client.id !== clientId),
memberships: current.memberships.filter((membership) => membership.clientId !== clientId),
groups: current.groups.filter((group) => group.clientId !== clientId),
grants: current.grants.filter(
(grant) =>
!(grant.targetType === "client" && grant.targetId === clientId) &&
!(grant.targetType === "group" && deletedGroupIds.has(grant.targetId))
),
invites: current.invites.filter((invite) => invite.clientId !== clientId),
syncStatuses: current.syncStatuses.filter((sync) => sync.objectId !== clientId),
};
});
if (activeClientId === clientId) {
setActiveClientId(nextClientId);
}
}
function handleUpdateUser(userId: string, patch: Partial<LauncherUser>) {
setData((current) => ({
...current,
@@ -305,6 +340,27 @@ export function LauncherApp() {
}));
}
function handleDeleteMembership(membershipId: string) {
setData((current) => {
const membership = current.memberships.find((item) => item.id === membershipId);
if (!membership) return current;
return {
...current,
memberships: current.memberships.filter((item) => item.id !== membershipId),
groups: current.groups.map((group) =>
group.clientId === membership.clientId
? {
...group,
memberIds: group.memberIds.filter((userId) => userId !== membership.userId),
updatedAt: new Date().toISOString(),
}
: group
),
};
});
}
function handleCreateGroup(clientId: string) {
const createdAt = new Date().toISOString();
@@ -340,6 +396,14 @@ export function LauncherApp() {
}));
}
function handleDeleteGroup(groupId: string) {
setData((current) => ({
...current,
groups: current.groups.filter((group) => group.id !== groupId),
grants: current.grants.filter((grant) => !(grant.targetType === "group" && grant.targetId === groupId)),
}));
}
function handleReorderServices(orderedServiceIds: string[]) {
setData((current) => {
const orderById = new Map(orderedServiceIds.map((serviceId, index) => [serviceId, (index + 1) * 10]));
@@ -443,13 +507,17 @@ export function LauncherApp() {
onSetUserServiceAccess={handleSetUserServiceAccess}
onCreateInvite={handleCreateInvite}
onUpdateInvite={handleUpdateInvite}
onDeleteInvite={handleDeleteInvite}
onRetrySync={handleRetrySync}
onCreateClient={handleCreateClient}
onUpdateClient={handleUpdateClient}
onDeleteClient={handleDeleteClient}
onUpdateUser={handleUpdateUser}
onUpdateMembership={handleUpdateMembership}
onDeleteMembership={handleDeleteMembership}
onCreateGroup={handleCreateGroup}
onUpdateGroup={handleUpdateGroup}
onDeleteGroup={handleDeleteGroup}
onUpdateService={handleUpdateService}
onReorderServices={handleReorderServices}
onCreateService={handleCreateService}