Skip to content

Commit 3771eaa

Browse files
authored
Feature/admin users clouds and projects (#604)
* update @bimdata/typescript-fetch-api-client version * add project/space role distinction (spaceAdmin, projectAdmin, spaceUser, projectUser) * fix invitations & cloud admin * add computed for roleClass * add comment for redirect_uri & delete unused code
1 parent 1d0a7fe commit 3771eaa

7 files changed

Lines changed: 57 additions & 56 deletions

File tree

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"@bimdata/bcf-components": "6.7.5",
1717
"@bimdata/components": "1.9.2",
1818
"@bimdata/design-system": "2.3.0",
19-
"@bimdata/typescript-fetch-api-client": "10.30.4",
19+
"@bimdata/typescript-fetch-api-client": "10.31.0",
2020
"@bimdata/viewer": "2.15.0-beta.5",
2121
"@paddle/paddle-js": "^1.5.1",
2222
"async": "^3.2.6",

src/components/specific/users/space-users-manager/SpaceUsersManager.vue

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@
3636
<div class="list-container">
3737
<transition-group name="list">
3838
<template v-for="user in displayedUsers">
39+
<!-- Render only pending invitations (those with redirect_uri because only not-yet-accepted invitations have this field) -->
3940
<InvitationCard
40-
v-if="user.from === 'invitation'"
41+
v-if="user.redirect_uri"
4142
:key="`invitation-${user.id}`"
4243
:space="space"
4344
:invitation="user"
@@ -114,20 +115,11 @@ export default {
114115
);
115116
116117
const list = computed(() => {
117-
props.invitations.forEach((invitation) => {
118-
invitation.from = "invitation";
119-
});
120118
if (currentTab.value === "admins") {
121-
admins.value.forEach((invitation) => {
122-
invitation.from = "user";
123-
});
124119
return props.invitations
125120
.filter((invitation) => invitation.role === 100)
126121
.concat(admins.value);
127122
} else {
128-
users.value.forEach((invitation) => {
129-
invitation.from = "user";
130-
});
131123
return props.invitations.filter((invitation) => invitation.role === 50).concat(users.value);
132124
}
133125
});

src/components/specific/users/user-card/UserCard.vue

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,9 @@
3333
<BIMDataTextbox
3434
width="auto"
3535
maxWidth="220px"
36-
:text="
37-
fullName(user) + (isSelf(user) ? ` (${$t('UserCard.self')})` : '')
38-
"
36+
:text="fullName(user) + (isSelf(user) ? ` (${$t('UserCard.self')})` : '')"
3937
/>
40-
<UserRoleBadge :role="role" />
38+
<UserRoleBadge :role="role" :isSpaceRole="user.in_all_projects" />
4139
</div>
4240
<div class="user-card__content__info__email">
4341
{{ user.email }}
@@ -72,47 +70,35 @@ export default {
7270
UserRoleBadge,
7371
UserCardActionMenu,
7472
UserCardDeleteGuard,
75-
UserCardUpdateForm
73+
UserCardUpdateForm,
7674
},
7775
props: {
7876
user: {
7977
type: Object,
80-
required: true
78+
required: true,
8179
},
8280
space: {
8381
type: Object,
84-
default: null
82+
default: null,
8583
},
8684
project: {
8785
type: Object,
88-
default: null
89-
}
86+
default: null,
87+
},
9088
},
9189
setup(props) {
9290
const { isSelf, isSpaceAdmin, isProjectAdmin } = useUser();
9391
9492
const showActionMenu = computed(
95-
() =>
96-
!isSelf(props.user) &&
97-
(isSpaceAdmin(props.space) || isProjectAdmin(props.project))
98-
);
99-
const role = computed(() =>
100-
props.project ? props.user.role : props.user.cloud_role
93+
() => !isSelf(props.user) && (isSpaceAdmin(props.space) || isProjectAdmin(props.project))
10194
);
95+
const role = computed(() => (props.project ? props.user.role : props.user.cloud_role));
10296
10397
const loading = ref(false);
10498
provide("loading", loading);
10599
106-
const {
107-
isOpen: showUpdateForm,
108-
open: openUpdateForm,
109-
close: closeUpdateForm
110-
} = useToggle();
111-
const {
112-
isOpen: showDeleteGuard,
113-
open: openDeleteGuard,
114-
close: closeDeleteGuard
115-
} = useToggle();
100+
const { isOpen: showUpdateForm, open: openUpdateForm, close: closeUpdateForm } = useToggle();
101+
const { isOpen: showDeleteGuard, open: openDeleteGuard, close: closeDeleteGuard } = useToggle();
116102
117103
const resetCard = () => {
118104
loading.value = false;
@@ -134,9 +120,9 @@ export default {
134120
isSelf,
135121
openDeleteGuard,
136122
openUpdateForm,
137-
resetCard
123+
resetCard,
138124
};
139-
}
125+
},
140126
};
141127
</script>
142128

src/components/specific/users/user-role-badge/UserRoleBadge.scss

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,16 @@
44
font-size: 12px;
55
font-weight: normal;
66

7-
&--admin {
7+
&--space-admin {
88
background-color: var(--color-primary);
99
color: var(--color-white);
1010
}
1111

12-
&--user {
12+
&--space-user {
13+
background-color: #a375ff;
14+
color: var(--color-white);
15+
}
16+
&--project-user {
1317
background-color: var(--color-success);
1418
color: var(--color-white);
1519
}

src/components/specific/users/user-role-badge/UserRoleBadge.vue

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
<template>
2-
<span class="user-role-badge" :class="`user-role-badge--${roleName}`">
3-
{{ $t(`UserRoleBadge.${roleName}`) }}
2+
<span class="user-role-badge" :class="`user-role-badge--${roleClass}`">
3+
<template v-if="roleName === 'guest'">
4+
{{ $t("UserRoleBadge.guest") }}
5+
</template>
6+
<template v-if="role === 100">
7+
{{ $t(`UserRoleBadge.spaceAdmin`) }}
8+
</template>
9+
<template v-if="isSpaceRole && roleName === 'spaceUser'">
10+
{{ $t(`UserRoleBadge.spaceUser`) }}
11+
</template>
12+
<template v-if="!isSpaceRole && roleName === 'projectUser'">
13+
{{ $t(`UserRoleBadge.projectUser`) }}
14+
</template>
415
</span>
516
</template>
617

@@ -13,28 +24,35 @@ export default {
1324
props: {
1425
role: {
1526
type: Number,
16-
required: true
17-
}
27+
required: true,
28+
},
29+
isSpaceRole: {
30+
type: Boolean,
31+
default: false,
32+
},
1833
},
1934
setup(props) {
2035
const roleName = computed(() => {
2136
switch (props.role) {
2237
case SPACE_ROLE.ADMIN:
23-
case PROJECT_ROLE.ADMIN:
24-
return "admin";
38+
return "spaceAdmin";
2539
case SPACE_ROLE.USER:
26-
case PROJECT_ROLE.USER:
27-
return "user";
40+
return props.isSpaceRole ? "spaceUser" : "projectUser";
2841
case PROJECT_ROLE.GUEST:
2942
default:
3043
return "guest";
3144
}
3245
});
3346
47+
const roleClass = computed(() => {
48+
return roleName.value.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
49+
});
50+
3451
return {
35-
roleName
52+
roleName,
53+
roleClass,
3654
};
37-
}
55+
},
3856
};
3957
</script>
4058

src/i18n/lang/fr.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,8 +421,9 @@
421421
}
422422
},
423423
"UserRoleBadge": {
424-
"admin": "Admin",
425-
"user": "Utilisateur",
424+
"spaceAdmin": "Admin espace",
425+
"spaceUser": "Utilisateur espace",
426+
"projectUser": "Utilisateur projet",
426427
"guest": "Invité"
427428
},
428429
"UsersManagerOnboarding": {

0 commit comments

Comments
 (0)