Skip to content

Channel cards to unstable#5696

Open
MisRob wants to merge 36 commits intolearningequality:unstablefrom
MisRob:channel-cards
Open

Channel cards to unstable#5696
MisRob wants to merge 36 commits intolearningequality:unstablefrom
MisRob:channel-cards

Conversation

@MisRob
Copy link
Member

@MisRob MisRob commented Feb 10, 2026

Summary

Replaces Vuetify-based implementation by KCard on My Channels, Starred Channels, View-only Channels, and Content Library pages. On this opportunity introduces a new architecture of the related pages and resolves problems with understanding & maintaining monolithic and condition-heavy ChannelList + ChannelItem.

Before After
my-channels-before my-channels-after
starred-channels-before starred-channels-after
view-channels-before view-channels-after
content-library-before content-library-after

References

Closes #5227
Closes #5524
Closes #5525
Closes #5526

Reviewer guidance

Code review:

  • 80% of work are community contributions that were reviewed by myself and some also by @rtibbles. Then I added a final layer of work: abstractions, cleanup, user experience as well as internal architecture optimizations, fixes for few regressions, ... => I think it'd most meaningful to review affected files as a whole.

Local preview:

  • Run pnpm install first
  • Preview My Channels, Starred Channels, and View-only Channels pages
  • Preview Content Library when logged in and logged out

Notes

Before merging, [TODO REVERT] Temporarily install KDS fork commit needs to be reverted and a newly released KDS version with learningequality/kolibri-design-system#1203 installed.

@MisRob MisRob force-pushed the channel-cards branch 3 times, most recently from 4176428 to 3a07c26 Compare February 14, 2026 14:07
calculations. The feature is not needed in these
use-cases.
@MisRob MisRob force-pushed the channel-cards branch 2 times, most recently from 3b2e264 to cc563d2 Compare February 15, 2026 17:45
@MisRob MisRob marked this pull request as ready for review February 16, 2026 08:14
@MisRob MisRob changed the title [WIP] Channel cards to unstable Channel cards to unstable Feb 16, 2026
Copy link
Member

@bjester bjester left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some review comments

loading.value = true;
store.dispatch('channel/loadChannelList', { listType }).then(() => {
loading.value = false;
});
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this fails to load (like it times out), what happens from the user perspective?

});
},
onCardClick(channel) {
window.location.href = window.Urls.channel(channel.id);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nitpick: I prefer window.location.assign()

@MisRob
Copy link
Member Author

MisRob commented Feb 18, 2026

I've just noticed on screenshots that I lost the invitations box being a bit wider than cards. Will fix this ~ is good for visual priority.

Resolved.

<h1 class="visuallyhidden">{{ $tr('title') }}</h1>
<!-- minHeight to prevent layout shifts when loading state changes -->
<p
class="mb-2 ml-1 title"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder whether we should continue to use Vuetify's styling classes especially when we want to move away from them (I see other places where its used as well). This is more of a thought than a comment and something to think about long term?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, thank you. Since we decided not to use helper classes like these in our ecosystem (it wasn't discussed in the context of Vuetify ~ rather was a broader discussion) , I think it will make sense to cleanup whenever we can.

},
onCardClick(channel) {
if (this.loggedIn) {
window.location.href = window.Urls.channel(channel.id);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

@akolson akolson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think code is clear and understandable. Thanks Misha for this refactor!

to prevent unnecessary memory usage
and to improve architecture.

Relatedly remove props for configuring
footer in favor of the footer slot to
make communication between the modals
and footer buttons straightforward.
in channel token modal and remove unnecessary
token tracking handlers from components (StudioCopyToken
handles tracking)
appendToOverlay
data-testid="copy-modal"
:channel="tokenChannel"
@input="
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO use method (same on other pages)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

6 participants