tabsProvider top-level property
final
Implementation
final tabsProvider =
FutureProvider.family<List<TabEntry>, String>((ref, spaceId) async {
final space = await ref.watch(spaceProvider(spaceId).future);
List<TabEntry> tabs = [];
final spaceTopic = space.topic();
if (spaceTopic != null) {
tabs.add(TabEntry.overview);
}
if ((await space.isActerSpace()) == true) {
final appSettings = await space.appSettings();
if (appSettings.pins().active()) {
final pinsList = await ref.watch(pinListProvider(spaceId).future);
if (pinsList.isNotEmpty) {
tabs.add(TabEntry.pins);
}
}
if (appSettings.tasks().active()) {
final taskList = await ref.watch(taskListProvider(spaceId).future);
if (taskList.isNotEmpty) {
tabs.add(TabEntry.tasks);
}
}
if (appSettings.events().active()) {
final eventList = await ref.watch(allEventListProvider(spaceId).future);
if (eventList.isNotEmpty) {
tabs.add(TabEntry.events);
}
}
}
final hasSpaces = await ref.watch(hasSubSpacesProvider(spaceId).future);
if (hasSpaces) {
tabs.add(TabEntry.spaces);
}
final hasChats = await ref.watch(hasSubChatsProvider(spaceId).future);
if (hasChats) {
tabs.add(TabEntry.chats);
}
tabs.add(TabEntry.members);
final membership = ref.watch(roomMembershipProvider(spaceId));
bool canAddPin = membership.valueOrNull?.canString('CanPostPin') == true;
bool canAddEvent = membership.valueOrNull?.canString('CanPostEvent') == true;
bool canAddTask =
membership.valueOrNull?.canString('CanPostTaskList') == true;
bool canLinkSpaces =
membership.valueOrNull?.canString('CanLinkSpaces') == true;
//Show action menu only if you have at lease one permission
if (canAddPin | canAddEvent | canAddTask | canLinkSpaces) {
tabs.add(TabEntry.actions);
}
return tabs;
});