File tree Expand file tree Collapse file tree 7 files changed +36
-24
lines changed
Expand file tree Collapse file tree 7 files changed +36
-24
lines changed Original file line number Diff line number Diff line change @@ -71,8 +71,9 @@ interface UseNoteSettingsComposableState {
7171 * Delete team member by user id
7272 * @param id - Note id
7373 * @param userId - User id
74+ * @returns true if user was removed
7475 */
75- removeMemberByUserId : ( id : NoteId , userId : UserId ) => Promise < void > ;
76+ removeMemberByUserId : ( id : NoteId , userId : UserId ) => Promise < boolean > ;
7677}
7778
7879/**
@@ -199,9 +200,10 @@ export default function (): UseNoteSettingsComposableState {
199200 * Delete team member by user id
200201 * @param id - Note id
201202 * @param userId - User id
203+ * @returns true if user was removed
202204 */
203- const removeMemberByUserId = async ( id : NoteId , userId : UserId ) : Promise < void > => {
204- await noteSettingsService . removeMemberByUserId ( id , userId ) ;
205+ const removeMemberByUserId = async ( id : NoteId , userId : UserId ) : Promise < boolean > => {
206+ return await noteSettingsService . removeMemberByUserId ( id , userId ) ;
205207 } ;
206208
207209 return {
Original file line number Diff line number Diff line change @@ -48,6 +48,7 @@ export default interface NoteSettingsRepositoryInterface {
4848 * Delete team member by user id
4949 * @param id - Note id
5050 * @param userId - User id
51+ * @returns true if user was removed
5152 */
52- removeMemberByUserId ( id : NoteId , userId : UserId ) : Promise < void > ;
53+ removeMemberByUserId ( id : NoteId , userId : UserId ) : Promise < boolean > ;
5354}
Original file line number Diff line number Diff line change @@ -123,8 +123,9 @@ export default class NoteSettingsService {
123123 * Delete team member by user id
124124 * @param id - Note id
125125 * @param userId - User id
126+ * @returns true if user was removed
126127 */
127- public async removeMemberByUserId ( id : NoteId , userId : UserId ) : Promise < void > {
128+ public async removeMemberByUserId ( id : NoteId , userId : UserId ) : Promise < boolean > {
128129 return await this . noteSettingsRepository . removeMemberByUserId ( id , userId ) ;
129130 }
130131}
Original file line number Diff line number Diff line change @@ -74,10 +74,12 @@ export default class NoteSettingsRepository implements NoteSettingsRepositoryInt
7474 * Delete team member by user id
7575 * @param id - Note id
7676 * @param userId - User id
77+ * @returns true if user was removed
7778 */
78- public async removeMemberByUserId ( id : NoteId , userId : UserId ) : Promise < void > {
79+ public async removeMemberByUserId ( id : NoteId , userId : UserId ) : Promise < boolean > {
7980 const data = { userId } ;
81+ const response = await this . transport . delete < number > ( `/note-settings/${ id } /team` , data ) ;
8082
81- await this . transport . delete < boolean > ( `/note-settings/ ${ id } /team` , data ) ;
83+ return response === userId ;
8284 }
8385}
Original file line number Diff line number Diff line change 11<template >
22 <button
33 ref =" triggerButton"
4+ :title =" t('noteSettings.team.contextMenu.title')"
45 class =" more-actions-button"
56 @click =" handleButtonClick"
6- :title =" t('noteSettings.team.contextMenu.title')"
77 >
88 <Icon
99 name =" EtcVertical"
@@ -43,17 +43,13 @@ const menuItems: ContextMenuItem[] = [
4343 title: t (' noteSettings.team.contextMenu.remove' ),
4444 onActivate : async () => {
4545 hide ();
46- try {
47- await handleRemove (props .teamMember );
48- } catch (error ) {
49- console .error (' Failed to remove team member' , error );
50- }
46+ await handleRemove (props .teamMember );
5147 },
5248 },
5349];
5450
5551const emit = defineEmits <{
56- teamMemberRemoved: [];
52+ teamMemberRemoved: [userId : TeamMember [ ' user ' ][ ' id ' ] ];
5753}>();
5854
5955const handleButtonClick = (): void => {
@@ -87,8 +83,11 @@ const handleRemove = async (member: TeamMember): Promise<void> => {
8783 );
8884
8985 if (shouldRemove ) {
90- await removeMemberByUserId (props .noteId , member .user .id );
91- emit (' teamMemberRemoved' );
86+ const isDeleted = await removeMemberByUserId (props .noteId , member .user .id );
87+
88+ if (isDeleted ) {
89+ emit (' teamMemberRemoved' , member .user .id );
90+ }
9291 }
9392};
9493 </script >
Original file line number Diff line number Diff line change 3939
4040<script setup lang="ts">
4141import { computed } from ' vue' ;
42- import { Team , MemberRole } from ' @/domain/entities/Team' ;
42+ import { Team , MemberRole , TeamMember } from ' @/domain/entities/Team' ;
4343import { Note , NoteId } from ' @/domain/entities/Note' ;
4444import { Section , Row , Avatar } from ' @codexteam/ui/vue' ;
4545import RoleSelect from ' ./RoleSelect.vue' ;
@@ -59,7 +59,7 @@ const props = defineProps<{
5959}>();
6060
6161const emit = defineEmits <{
62- teamMemberRemoved: [];
62+ teamMemberRemoved: [id : TeamMember [ ' user ' ][ ' id ' ] ];
6363}>();
6464
6565const { t } = useI18n ();
@@ -91,8 +91,8 @@ const sortedTeam = computed(() => {
9191});
9292
9393// Listen for teamMemberRemoved event from child component and bubble them up
94- const handleMemberRemoved = () => {
95- emit (' teamMemberRemoved' );
94+ const handleMemberRemoved = (userId : TeamMember [ ' user ' ][ ' id ' ]) : void => {
95+ emit (' teamMemberRemoved' , userId );
9696};
9797 </script >
9898
Original file line number Diff line number Diff line change @@ -112,6 +112,7 @@ import { getTimeFromNow } from '@/infrastructure/utils/date';
112112import InviteLink from ' @/presentation/components/noteSettings/InviteLink.vue' ;
113113import useNavbar from ' @/application/services/useNavbar' ;
114114import { useRoute } from ' vue-router' ;
115+ import { TeamMember } from ' @/domain/entities/Team' ;
115116
116117const { t } = useI18n ();
117118
@@ -223,12 +224,18 @@ onMounted(async () => {
223224});
224225
225226/**
226- * Handle team member removal by refreshing the note settings
227+ * Handle team member removal by refreshing the note settings and removing the member from the team
228+ *
229+ * @param userId - user id of the member to remove
227230 */
228- async function handleTeamMemberRemoved() {
229- await loadSettings (props .id );
231+ async function handleTeamMemberRemoved(userId : TeamMember [' user' ][' id' ]) {
232+ if (noteSettings .value !== null ) {
233+ noteSettings .value = {
234+ ... noteSettings .value ,
235+ team: noteSettings .value .team .filter (member => member .user .id !== userId ),
236+ };
237+ }
230238}
231-
232239 </script >
233240
234241<style setup lang="postcss" scoped>
You can’t perform that action at this time.
0 commit comments