diff --git a/frontend/src/lib/components/GroupEditor.svelte b/frontend/src/lib/components/GroupEditor.svelte
new file mode 100644
index 0000000000..b6c4349d45
--- /dev/null
+++ b/frontend/src/lib/components/GroupEditor.svelte
@@ -0,0 +1,166 @@
+
+
+
+
Summary
+ {#if group}
+
{group?.summary ?? 'No summary'}
+ {:else}
+
+ {/if}
+
Members
+ {#if can_write}
+
+ {/if}
+ {#if members}
+
+
+ user
+
+
+
+
+ {#each members as { name, role }}
+ {name}
+
+ {
+ const group = e.detail
+ // const wasInGroup = (group?.members ?? []).includes(group)
+ // const inAcl = (
+ // group?.extra_perms ? Object.keys(group?.extra_perms) : []
+ // ).includes(group)
+ if (group == 'member') {
+ GroupService.addUserToGroup(group)
+
+ GranularAclService.removeGranularAcls({
+ workspace: $workspaceStore ?? '',
+ path: name,
+ kind: 'group_',
+ requestBody: $userStore.
+ })
+ }
+ loadGroup()
+ }}
+ >
+ Viewer A viewer can see who are the members and managers of a group
+ Member A Member of a group can see everything the group can see, write to everything
+ the group can write, and generally act on behalf of the group
+ Manager A manager of a group can manage the group, adding and removing users and change
+ their roles. He is not necessarily a member of the group.
+ Member & Manager
+
+
+ {#if can_write}
+ {
+ await GroupService.removeUserToGroup({
+ workspace: $workspaceStore ?? '',
+ name: group?.name ?? '',
+ requestBody: { username: name }
+ })
+ loadGroup()
+ }}>remove
+ {/if}
+ {/each}
+
+
+ {:else}
+
+ {#each new Array(6) as _}
+
+ {/each}
+
+ {/if}
+
diff --git a/frontend/src/lib/components/GroupModal.svelte b/frontend/src/lib/components/GroupModal.svelte
deleted file mode 100644
index 020957556c..0000000000
--- a/frontend/src/lib/components/GroupModal.svelte
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
-
-
-
Summary
-
{group?.summary ?? 'No summary'}
-
Members
- {#if can_write}
-
- {/if}
-
-
- user
- admin of group
-
-
-
- {#each members as { name, isAdmin }}
- {name}
- {isAdmin ? 'admin' : ''}
-
- {#if can_write}
- {
- await GroupService.removeUserToGroup({
- workspace: $workspaceStore ?? '',
- name: group?.name ?? '',
- requestBody: { username: name }
- })
- loadGroup()
- }}>remove
- {/if}
- {/each}
-
-
-
-
-
diff --git a/frontend/src/lib/components/Path.svelte b/frontend/src/lib/components/Path.svelte
index feed10f62b..04be4111e1 100644
--- a/frontend/src/lib/components/Path.svelte
+++ b/frontend/src/lib/components/Path.svelte
@@ -15,6 +15,9 @@
import { createEventDispatcher } from 'svelte'
import Required from './Required.svelte'
import Popover from './Popover.svelte'
+ import { Button, Drawer, DrawerContent } from './common'
+ import { faPlus } from '@fortawesome/free-solid-svg-icons'
+ import GroupEditor from './GroupEditor.svelte'
type PathKind = 'resource' | 'script' | 'variable' | 'flow' | 'schedule' | 'app'
let meta: Meta | undefined = undefined
@@ -155,8 +158,37 @@
path = initialPath
}
}
+
+ let newGroup: Drawer
+ let newGroupName: string
+ let groupCreated: string | undefined = undefined
+
+ async function addGroup() {
+ await GroupService.createGroup({
+ workspace: $workspaceStore ?? '',
+ requestBody: { name: newGroupName }
+ })
+ groupCreated = newGroupName
+ loadGroups()
+ }
+
+
+
+
+
+ New group
+
+
+
+ {#if groupCreated}
+
+
+ {/if}
+
+
+
{#if meta != undefined}
@@ -202,7 +234,11 @@
{:else}
- Owner
+ Owner +group
{#each groups as g}
{g.name}
diff --git a/frontend/src/lib/components/flows/map/FlowModuleSchemaMap.svelte b/frontend/src/lib/components/flows/map/FlowModuleSchemaMap.svelte
index d7e6f6dce6..e99d523718 100644
--- a/frontend/src/lib/components/flows/map/FlowModuleSchemaMap.svelte
+++ b/frontend/src/lib/components/flows/map/FlowModuleSchemaMap.svelte
@@ -132,8 +132,10 @@
{/each}
{/if}
-
-
insertNewModuleAtIndex(modules?.length ?? 0, e.detail)} />
+ insertNewModuleAtIndex(modules?.length ?? 0, e.detail)}
+ />
{#if root}
diff --git a/frontend/src/routes/groups.svelte b/frontend/src/routes/groups.svelte
index e1007c6558..fc20b9273c 100644
--- a/frontend/src/routes/groups.svelte
+++ b/frontend/src/routes/groups.svelte
@@ -13,21 +13,21 @@
import CenteredPage from '$lib/components/CenteredPage.svelte'
import Dropdown from '$lib/components/Dropdown.svelte'
- import GroupModal from '$lib/components/GroupModal.svelte'
+ import GroupEditor from '$lib/components/GroupEditor.svelte'
import PageHeader from '$lib/components/PageHeader.svelte'
import SharedBadge from '$lib/components/SharedBadge.svelte'
import ShareModal from '$lib/components/ShareModal.svelte'
import TableCustom from '$lib/components/TableCustom.svelte'
import { userStore, workspaceStore } from '$lib/stores'
import { faEdit, faPlus, faShare, faTrash } from '@fortawesome/free-solid-svg-icons'
- import { Alert, Button } from '$lib/components/common'
+ import { Button, Drawer, DrawerContent } from '$lib/components/common'
type GroupW = Group & { canWrite: boolean }
let newGroupName: string = ''
let groups: GroupW[] = []
let shareModal: ShareModal
- let groupModal: GroupModal
+ let groupDrawer: Drawer
async function loadGroups(): Promise
{
groups = (await GroupService.listGroups({ workspace: $workspaceStore! })).map((x) => {
@@ -55,6 +55,8 @@
loadGroups()
}
}
+
+ let editGroupName: string = ''
-
+
+
+
+
+
-