Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BC-8581 - Add Menu Actions for Room Permissions #3495

Merged
merged 68 commits into from
Jan 27, 2025
Merged
Show file tree
Hide file tree
Changes from 53 commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
3a7b9bb
implement visible options generic method
muratmerdoglu-dp Jan 14, 2025
4afec96
chore: remove extra option
muratmerdoglu-dp Jan 14, 2025
0fe1f81
remove 'hidden' option
muratmerdoglu-dp Jan 14, 2025
0b9c016
add current userId as a parameter
muratmerdoglu-dp Jan 15, 2025
58c91a0
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 15, 2025
b5b29da
Merge remote-tracking branch 'refs/remotes/origin/bc-8581-change-role…
muratmerdoglu-dp Jan 15, 2025
cd7a0f1
remove inheritAttr definition on KebabMenu
muratmerdoglu-dp Jan 16, 2025
ed3d92c
chore: revert back inheritAttrs option
muratmerdoglu-dp Jan 16, 2025
17bdfd8
add KebabMenu in the table row actions
muratmerdoglu-dp Jan 16, 2025
ef3e648
add options for the visibility options
muratmerdoglu-dp Jan 16, 2025
42ee93b
add currentUserId as main parameter
muratmerdoglu-dp Jan 17, 2025
2846607
chore: rename method name
muratmerdoglu-dp Jan 17, 2025
00f6943
chore: remove console.log in error handler
muratmerdoglu-dp Jan 17, 2025
08b8a01
chore: cast currentMember as RoomMemberResponse
muratmerdoglu-dp Jan 17, 2025
c1570e1
chore: remove leftover casting
muratmerdoglu-dp Jan 17, 2025
1c763a3
chore: rename method name
muratmerdoglu-dp Jan 17, 2025
39b0d85
set visibility of row action button value false for Roomowner
muratmerdoglu-dp Jan 17, 2025
2b0e64b
add onLeaveRoom method in page component
muratmerdoglu-dp Jan 17, 2025
cf92c36
add i18n keys for leaving room action
muratmerdoglu-dp Jan 20, 2025
cc0c9be
add confirmation dialog on leaving the room
muratmerdoglu-dp Jan 20, 2025
1550498
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 20, 2025
7411d29
add i18n key for menu action
muratmerdoglu-dp Jan 20, 2025
b68a68b
add leave-menu at RoomDetails page
muratmerdoglu-dp Jan 20, 2025
6591f84
fix RoomMenu unit tests
muratmerdoglu-dp Jan 20, 2025
16da7c7
fix RoomMembers page's unit tests
muratmerdoglu-dp Jan 20, 2025
3e338c5
add multiple user removing unit test case
muratmerdoglu-dp Jan 20, 2025
8462ba9
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 20, 2025
456bd00
chore: remove the same property after solving the conflicts
muratmerdoglu-dp Jan 20, 2025
8e41e3f
adjust 'roomRoleName' property on memberVisibleOption
muratmerdoglu-dp Jan 20, 2025
be6ede0
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 20, 2025
02ac7b9
add change-role-button visibility option
muratmerdoglu-dp Jan 20, 2025
601ec0d
refactor membersVisibleOptions
muratmerdoglu-dp Jan 21, 2025
634c532
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 21, 2025
dadbac9
add i18n keys
muratmerdoglu-dp Jan 21, 2025
59a0017
fix unit test for RoomMembers page
muratmerdoglu-dp Jan 21, 2025
00d3842
fix unit tests of MembersTable
muratmerdoglu-dp Jan 21, 2025
a683429
add unit test case for Room.state
muratmerdoglu-dp Jan 21, 2025
17da949
change file name to composable
muratmerdoglu-dp Jan 22, 2025
f18b22e
revert showing dialog process into MemberTable component
muratmerdoglu-dp Jan 22, 2025
ce78e0c
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 22, 2025
9993ac3
add unit tests for memberVisibleOptions.composable file
muratmerdoglu-dp Jan 22, 2025
c2816a8
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 22, 2025
3a0ae45
fix failing unit tests
muratmerdoglu-dp Jan 22, 2025
dc4f387
chore: remove double importing
muratmerdoglu-dp Jan 22, 2025
e6d0d45
add 'canLeaveRoom' control in roomAuthorization
muratmerdoglu-dp Jan 22, 2025
100a275
add more unit test for RoomMembers page
muratmerdoglu-dp Jan 22, 2025
55f43ae
add visibility unit test cases for MembersTable
muratmerdoglu-dp Jan 22, 2025
eefc600
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 22, 2025
89d38ec
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 22, 2025
c0ff29e
chore: remove console.log
muratmerdoglu-dp Jan 23, 2025
0d02988
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 23, 2025
ae98e7c
add table header 'Actions' title
muratmerdoglu-dp Jan 23, 2025
195ab14
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 23, 2025
fb881b7
chore: remove spaces
muratmerdoglu-dp Jan 23, 2025
d667150
add computed properties in composable
muratmerdoglu-dp Jan 24, 2025
450dacb
mock options in test file
muratmerdoglu-dp Jan 24, 2025
0d3fed8
implement KebabMenuAction components
muratmerdoglu-dp Jan 24, 2025
3dfa0bd
rename visibility options key names
muratmerdoglu-dp Jan 24, 2025
f9789ae
use KebabMenuAction components in template
muratmerdoglu-dp Jan 24, 2025
264f4b4
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 24, 2025
abfc927
add aria-label for changePermission menu item
muratmerdoglu-dp Jan 24, 2025
20c6c5e
chore: remove unnecessary importings in MembersTable
muratmerdoglu-dp Jan 24, 2025
26499c5
change data-testids in menu-action components
muratmerdoglu-dp Jan 24, 2025
c9312c9
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 24, 2025
14fe78e
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 24, 2025
1e0a384
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 27, 2025
f92cba0
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 27, 2025
3d937cc
Merge branch 'main' into bc-8581-change-role
muratmerdoglu-dp Jan 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/components/icons/material/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ import {
mdiKeyboardReturn,
mdiLightbulbOnOutline,
mdiLink,
mdiLocationExit,
mdiLock,
mdiLockOutline,
mdiLogin,
Expand Down Expand Up @@ -233,6 +234,7 @@ export {
mdiImport,
mdiInformation,
mdiKeyboardReturn,
mdiLocationExit,
mdiLightbulbOnOutline,
mdiLink,
mdiLock,
Expand Down
5 changes: 5 additions & 0 deletions src/locales/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export default {
"common.actions.logout": "Abmelden",
"common.actions.ok": "OK",
"common.actions.pickColor": "Hintergrundfarbe auswählen",
"common.actions.leave": "Verlassen",
"common.actions.remove": "Entfernen",
"common.actions.rename": "Umbenennen",
"common.actions.save": "Speichern",
Expand Down Expand Up @@ -1800,6 +1801,8 @@ export default {
"Räume sind vorerst nur für Lehrkräfte sichtbar und werden weiter ausgebaut. Weitere Information gibt es auf unserer {helpLink}. Wir freuen uns über {feedbackLink} zum aktuellen Stand.",
"pages.rooms.infoAlert.welcome.visibility.help": "Hilfeseite",
"pages.rooms.infoAlert.welcome.visibility.feedback": "Rückmeldungen",
"pages.rooms.leaveRoom.confirmation": 'Raum "{roomName}" wirklich verlassen?',
muratmerdoglu-dp marked this conversation as resolved.
Show resolved Hide resolved
"pages.rooms.leaveRoom.menu": "Raum verlassen",
"pages.rooms.members.error.load":
"Die Teilnehmenden-Liste konnte nicht geladen werden.",
"pages.rooms.members.error.add":
Expand All @@ -1811,6 +1814,7 @@ export default {
"pages.rooms.members.infoText.moreInformation": "weitere Informationen",
"pages.rooms.members.label": "Teilnehmende",
"pages.rooms.members.add": "Mitglieder hinzufügen",
"pages.rooms.members.changePermission": "Raumberechtigungen ändern",
"pages.rooms.members.manage": "Raum-Mitglieder",
"pages.rooms.members.remove.ariaLabel": "{memberName} aus Raum entfernen",
"pages.rooms.members.resetSelection.ariaLabel":
Expand All @@ -1827,6 +1831,7 @@ export default {
"pages.rooms.members.roomPermissions.viewer": "Lesen",
"pages.rooms.members.tableHeader.roomRole": "Raumberechtigungen",
"pages.rooms.members.tableHeader.schoolRole": "Schulrolle",
"pages.rooms.members.tableHeader.actions": "Aktionen",
"pages.rooms.title": "Räume",
"pages.taskCard.addElement": "Element hinzufügen",
"pages.taskCard.deleteElement.text":
Expand Down
5 changes: 5 additions & 0 deletions src/locales/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export default {
"common.actions.logout": "Logout",
"common.actions.ok": "OK",
"common.actions.pickColor": "Select background colour",
"common.actions.leave": "Leave",
"common.actions.remove": "Remove",
"common.actions.rename": "Rename",
"common.actions.save": "Save",
Expand Down Expand Up @@ -1771,6 +1772,8 @@ export default {
"Rooms are currently only visible to teachers and will be further developed. Further information can be found on our {helpLink}. We look forward to receiving {feedbackLink} on the current status.",
"pages.rooms.infoAlert.welcome.visibility.help": "help page",
"pages.rooms.infoAlert.welcome.visibility.feedback": "feedback",
"pages.rooms.leaveRoom.confirmation": 'Leave room "{roomName}"?',
"pages.rooms.leaveRoom.menu": "Leave room",
"pages.rooms.members.error.load": "The participant list could not be loaded.",
"pages.rooms.members.error.add": "Adding participants failed.",
"pages.rooms.members.error.remove": "Deleting participants failed.",
Expand All @@ -1779,6 +1782,7 @@ export default {
"pages.rooms.members.infoText.moreInformation": "more information",
"pages.rooms.members.label": "Participants",
"pages.rooms.members.add": "Add members",
"pages.rooms.members.changePermission": "Change permissions",
"pages.rooms.members.manage": "Room members",
"pages.rooms.members.remove.ariaLabel": "Remove {memberName} from the room",
"pages.rooms.members.resetSelection.ariaLabel":
Expand All @@ -1795,6 +1799,7 @@ export default {
"pages.rooms.members.roomPermissions.viewer": "Read",
"pages.rooms.members.tableHeader.roomRole": "Room Permissions",
"pages.rooms.members.tableHeader.schoolRole": "School Role",
"pages.rooms.members.tableHeader.actions": "Actions",
"pages.rooms.title": "Rooms",
"pages.taskCard.addElement": "Add element",
"pages.taskCard.deleteElement.text":
Expand Down
5 changes: 5 additions & 0 deletions src/locales/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export default {
"common.actions.logout": "Desconectar",
"common.actions.ok": "Aceptar",
"common.actions.pickColor": "Seleccione el color de fondo",
"common.actions.leave": "Dejar",
"common.actions.remove": "Eliminar",
"common.actions.rename": "Renombrar",
"common.actions.save": "Guardar",
Expand Down Expand Up @@ -1820,6 +1821,8 @@ export default {
"Las salas son actualmente visibles solo para los profesores y se seguirán desarrollando. Puede encontrar más información en nuestro {helpLink}. Agradecemos sus {feedbackLink} sobre el estado actual.",
"pages.rooms.infoAlert.welcome.visibility.help": "página de ayuda",
"pages.rooms.infoAlert.welcome.visibility.feedback": "comentarios",
"pages.rooms.leaveRoom.confirmation": 'Dejar la sala "{roomName}"?',
"pages.rooms.leaveRoom.menu": "Salir de la sala",
"pages.rooms.members.error.load":
"No se pudo cargar la lista de participantes.",
"pages.rooms.members.error.add": "Error al agregar participantes.",
Expand All @@ -1829,6 +1832,7 @@ export default {
"pages.rooms.members.infoText.moreInformation": "más información",
"pages.rooms.members.label": "Participantes",
"pages.rooms.members.add": "Añadir miembros",
"pages.rooms.members.changePermission": "Cambiar permisos",
"pages.rooms.members.manage": "Miembros de la sala",
"pages.rooms.members.remove.ariaLabel": "Eliminar {memberName} de la sala",
"pages.rooms.members.resetSelection.ariaLabel":
Expand All @@ -1847,6 +1851,7 @@ export default {
"pages.rooms.members.roomPermissions.viewer": "Leer",
"pages.rooms.members.tableHeader.roomRole": "Permisos de la sala",
"pages.rooms.members.tableHeader.schoolRole": "Rol en la escuela",
"pages.rooms.members.tableHeader.actions": "Acciones",
"pages.rooms.title": "Salas",
"pages.taskCard.addElement": "Añadir artículo",
"pages.taskCard.deleteElement.text":
Expand Down
5 changes: 5 additions & 0 deletions src/locales/uk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export default {
"common.actions.logout": "Вийти з аккаунта",
"common.actions.ok": "ОК",
"common.actions.pickColor": "Вибрати колір тла",
"common.actions.leave": "Залиште",
"common.actions.remove": "Вилучити",
"common.actions.rename": "перейменувати",
"common.actions.save": "Зберегти",
Expand Down Expand Up @@ -1800,6 +1801,8 @@ export default {
"Кімнати наразі видимі лише для вчителів і будуть далі розвиватися. Додаткову інформацію можна знайти на нашій {helpLink}. Ми будемо вдячні за ваші {feedbackLink} щодо поточного стану.",
"pages.rooms.infoAlert.welcome.visibility.help": "Сторінка допомоги",
"pages.rooms.infoAlert.welcome.visibility.feedback": "відгуки",
"pages.rooms.leaveRoom.confirmation": 'Дійсно залишити місце "{roomName}"?',
"pages.rooms.leaveRoom.menu": "Залиште кімнату",
"pages.rooms.members.error.load": "Не вдалося завантажити список учасників.",
"pages.rooms.members.error.add": "Не вдалося додати учасників.",
"pages.rooms.members.error.remove": "Не вдалося видалити учасників.",
Expand All @@ -1808,6 +1811,7 @@ export default {
"pages.rooms.members.infoText.moreInformation": "більше інформації",
"pages.rooms.members.label": "Учасники",
"pages.rooms.members.add": "Додайте члени",
"pages.rooms.members.changePermission": "Змінити дозволи",
"pages.rooms.members.manage": "Учасник кімнати",
"pages.rooms.members.remove.ariaLabel": "Видалити {memberName} з кімнати",
"pages.rooms.members.resetSelection.ariaLabel":
Expand All @@ -1824,6 +1828,7 @@ export default {
"pages.rooms.members.roomPermissions.viewer": "Читати",
"pages.rooms.members.tableHeader.roomRole": "Дозволи кімнати",
"pages.rooms.members.tableHeader.schoolRole": "Роль у школі",
"pages.rooms.members.tableHeader.actions": "Дії",
"pages.rooms.title": "Кімнати",
"pages.taskCard.addElement": "Додати елемент",
"pages.taskCard.deleteElement.text":
Expand Down
14 changes: 14 additions & 0 deletions src/modules/data/room/Rooms.state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,19 @@ export const useRoomsState = () => {
}
};

const leaveRoom = async (roomId: string, userId: string) => {
isLoading.value = true;
try {
await roomApi.roomControllerRemoveMembers(roomId, { userIds: [userId] });
} catch (error) {
const responseError = mapAxiosErrorToResponseError(error);

throw createApplicationError(responseError.code);
} finally {
isLoading.value = false;
}
};

const isEmpty = computed(() => {
return rooms.value.length === 0;
});
Expand All @@ -46,5 +59,6 @@ export const useRoomsState = () => {
isEmpty,
fetchRooms,
deleteRoom,
leaveRoom,
};
};
28 changes: 28 additions & 0 deletions src/modules/data/room/Rooms.state.unit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,34 @@ describe("useRoomsState", () => {
});
});

describe("leaveRoom", () => {
it("should call leaveRoom api", async () => {
const { leaveRoom, isLoading } = useRoomsState();
const roomId = "room-id";
const userId = "user-id";

await leaveRoom(roomId, userId);
expect(roomApiMock.roomControllerRemoveMembers).toHaveBeenCalledWith(
roomId,
{ userIds: [userId] }
);
expect(isLoading.value).toBe(false);
});

it("should throw an error when leaving room fails", async () => {
const { leaveRoom, isLoading } = useRoomsState();
const roomId = "room-id";
const userId = "user-id";

roomApiMock.roomControllerRemoveMembers.mockRejectedValue({
code: 404,
});

await expect(leaveRoom(roomId, userId)).rejects.toThrow();
expect(isLoading.value).toBe(false);
});
});

describe("isEmpty", () => {
it("should return true when there are no rooms", () => {
const { isEmpty, rooms } = useRoomsState();
Expand Down
1 change: 1 addition & 0 deletions src/modules/data/room/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ export { useRoomCreateState } from "./RoomCreate.state";
export { useRoomEditState } from "./RoomEdit.state";

export { useRoomMembers } from "./roomMembers/roomMembers.composable";
export { useRoomMemberVisibilityOptions } from "./roomMembers/membersVisibleOptions.composable";
export type { RoomMember } from "./roomMembers/types";
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import { RoleName, RoomMemberResponse } from "@/serverApi/v3";
import { ComputedRef } from "vue";
import { ENV_CONFIG_MODULE_KEY, injectStrict } from "@/utils/inject";

type VisibilityOptions = {
isSelectionColumnVisible: boolean;
isActionColumnVisible: boolean;
isAddMemberButtonVisible: boolean;
isActionInRowVisible: boolean;
isChangeRoleButtonVisible: boolean;
isLeaveRoomButtonVisible: boolean;
};

type RoomRoles =
| RoleName.Roomowner
| RoleName.Roomadmin
| RoleName.Roomeditor
| RoleName.Roomviewer;

const defaultOptions: VisibilityOptions = {
isSelectionColumnVisible: false,
isActionColumnVisible: false,
isAddMemberButtonVisible: false,
isActionInRowVisible: false,
isChangeRoleButtonVisible: false,
isLeaveRoomButtonVisible: true,
};

const roleConfigMap: Record<RoomRoles, VisibilityOptions> = {
[RoleName.Roomowner]: {
isSelectionColumnVisible: true,
isActionColumnVisible: true,
isActionInRowVisible: false,
isAddMemberButtonVisible: true,
isChangeRoleButtonVisible: true,
isLeaveRoomButtonVisible: false,
},
[RoleName.Roomadmin]: {
isSelectionColumnVisible: true,
isActionColumnVisible: true,
isAddMemberButtonVisible: true,
isActionInRowVisible: true,
isChangeRoleButtonVisible: true,
isLeaveRoomButtonVisible: true,
},
[RoleName.Roomeditor]: defaultOptions,
[RoleName.Roomviewer]: defaultOptions,
};

export const useRoomMemberVisibilityOptions = (
currentUser: ComputedRef<RoomMemberResponse>
) => {
const envConfigModule = injectStrict(ENV_CONFIG_MODULE_KEY);
const { FEATURE_ROOMS_CHANGE_PERMISSIONS_ENABLED } = envConfigModule.getEnv;

const isSelectionColumnVisible = () => {
return roleConfigMap[currentUser?.value?.roomRoleName as RoomRoles]
?.isSelectionColumnVisible;
};

const isActionColumnVisible = () => {
return roleConfigMap[currentUser?.value?.roomRoleName as RoomRoles]
?.isActionColumnVisible;
};

const isAddMemberButtonVisible = () => {
return roleConfigMap[currentUser?.value?.roomRoleName as RoomRoles]
?.isAddMemberButtonVisible;
};

const isActionInRowVisible = (user: RoomMemberResponse) => {
if (user.roomRoleName === RoleName.Roomowner) return false;
return user.userId !== currentUser?.value.userId;
};

const isChangeRoleButtonVisible = () => {
return (
roleConfigMap[currentUser?.value?.roomRoleName as RoomRoles]
?.isChangeRoleButtonVisible && FEATURE_ROOMS_CHANGE_PERMISSIONS_ENABLED
);
};

const isLeaveRoomButtonVisible = () => {
return roleConfigMap[currentUser?.value?.roomRoleName as RoomRoles]
?.isLeaveRoomButtonVisible;
};
muratmerdoglu-dp marked this conversation as resolved.
Show resolved Hide resolved

return {
isSelectionColumnVisible,
isActionColumnVisible,
isAddMemberButtonVisible,
isActionInRowVisible,
isChangeRoleButtonVisible,
isLeaveRoomButtonVisible,
};
};
Loading
Loading