-
Notifications
You must be signed in to change notification settings - Fork 265
Description
🙂 Looking for an issue? Welcome! This issue is open for contribution. If this is the first time you’re requesting an issue, please:
- Read Contributing guidelines carefully. Pay extra attention to Using generative AI. Pull requests and comments that don’t follow the guidelines won’t be answered.
- Confirm that you’ve read the guidelines in your comment.
Sub-issue of #5060.
Complexity: High
Summary
Remove Vuetify from the main navigation (top bar + user menu + side panel) in Channels:
![]() |
![]() |
![]() |
Currently, AppBar that is built with several Vuetify components is used:
studio/contentcuration/contentcuration/frontend/channelList/views/ChannelListIndex.vue
Lines 30 to 64 in 0b06a91
| <AppBar v-else> | |
| <template | |
| v-if="loggedIn" | |
| #tabs | |
| > | |
| <VTab | |
| v-for="listType in lists" | |
| :key="listType.id" | |
| :to="getChannelLink(listType)" | |
| @click="trackTabClick(listType)" | |
| > | |
| <VBadge | |
| :value="invitationsByListCounts[listType]" | |
| color="black" | |
| > | |
| <template #badge> | |
| <span>{{ $formatNumber(invitationsByListCounts[listType]) }}</span> | |
| </template> | |
| <span>{{ translateConstant(listType) }}</span> | |
| </VBadge> | |
| </VTab> | |
| <VTab | |
| :to="catalogLink" | |
| @click="publicTabClick" | |
| > | |
| {{ $tr('catalog') }} | |
| </VTab> | |
| <VTab | |
| :to="channelSetLink" | |
| @click="channelSetsTabClick" | |
| > | |
| {{ $tr('channelSets') }} | |
| </VTab> | |
| </template> | |
| </AppBar> |
To remove these Vuetify dependencies:
- Build new components
frontend/shared/views/StudioNavigation.vueandfrontend/shared/views/StudioNavigationTab.vuewithout Vuetify and then update the above place to:
<StudioNavigation v-else>
<template v-if="loggedIn" #tabs>
<StudioNavigationTab ... >
...
</StudioNavigationTab>
<StudioNavigationTab ... >
...
</StudioNavigationTab>
...
</template>
</StudioNavigation>- For side panel, utilize existing
SidePanelModal - Remove
VBadgein favor of a custom implementation.
There should be no changes in before / after user experience - examine AppBar and its sub-components for details of what features need to be re-implemented.
Don't refactor AppBar, MainNavigationDrawer, other sub-components of AppBar, or any other areas of the codebase (StudioNavigation will be introduced to other plugins in the scope of upcoming issues).
How to get there
- Login as
a@a.comwith passworda - Go to Channels
Guidance
- Read the project this issue is part of
- KDS components that will be handy:
KToolbar,KDropdownMenu,KButton,KRouterLink,KExternalLink, and possibly others - Note that KDS
KTabs...components are not suitable for use as it's a different a11y pattern than the main navigation, e.g. keyboard navigation differs - Use
shared/views/SidePanelModalfor the side navigation - it contains backdrop as well as all important a11y patterns - Kolibri has a very similar main navigation - there will likely be plenty of useful code, or can serve as reference
/kolibri/packages/kolibri/components/pages/AppBarPage/internal/AppBar.vue- Also would be nice to have skip navigation-like functionality (
kolibri/packages/kolibri/components/SkipNavigationLink.vue)
Out of Scope
- Do not refactor
AppBar,MainNavigationDrawer, and other sub-components ofAppBar - Do not use the new
StudioNavigationin other plugins, such as Settings or Admin. - Do not refactor any other areas of the codebase
Expected UI/UX changes
- Minor visual differences naturally stemming from the use of KDS
Acceptance criteria
General
- The specification above is followed.
- Except for "Expected UI/UX changes," there are no functional or visual differences in user experience.
- All user interactions are manually tested with no regressions.
- Pull request includes screenshots.
a11y and i18n
See the project's "Guidance" for useful references.
- Implementation meets a11y standards
- All components are LTR and RTL compliant (preview with
pnpm run devserversince:hotdoesn't render RTL properly) - All user-facing strings are translated properly
- The
notranslateclass been added to elements that shouldn't be translated by Google Chrome's automatic translation feature (e.g. user-generated text) - Mobile experience is reasonable
Unit tests
- If there is a unit test suite already, it is meaningfully updated (even if tests don't fail)
- If there is no unit test suite, a new one is created. Do not use obsolete
@vue/test-utilsapproach. Instead, use@testing-library/vue(Vue Testing Library).



