Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
0be0e93
[Remove Vuetify from Studio] Cards in My Channels
yeshwanth235 Nov 7, 2025
ad0d85f
[Remove Vuetify from Studio] Cards in Starred channels changes
yeshwanth235 Dec 8, 2025
b7c3b45
[Remove Vuetify from Studio] Cards in View-only channels changes
yeshwanth235 Dec 17, 2025
2213979
Merge branch 'unstable' into channel-cards
MisRob Jan 21, 2026
d3f3a17
Merge pull request #5657 from MisRob/channel-cards
MisRob Jan 21, 2026
fbfe7c6
Merge branch 'unstable' into channel-cards-finalize
MisRob Feb 9, 2026
07c0e13
Use 16:9 ratio for thumbnails
MisRob Feb 9, 2026
04f1ab8
Remove unnecessary style definition
MisRob Feb 10, 2026
d69002a
Fix token reference
MisRob Feb 10, 2026
ec17f60
Do not add KTooltip to DOM when not necessary
MisRob Feb 10, 2026
32093d9
Abstract page layout into a component
MisRob Feb 10, 2026
217c912
Move invitations box to StudioMyChannels
MisRob Feb 10, 2026
6840bdd
[Remove Vuetify from Studio] Cards in Content Library
vtushar06 Feb 10, 2026
c277e85
Merge branch 'channel-cards-finalize' into channel-cards
MisRob Feb 10, 2026
eefe23f
Remove handler call
MisRob Feb 10, 2026
5327a26
Configure skeleton loaders to reflect
MisRob Feb 10, 2026
36f359e
Add bottom padding
MisRob Feb 10, 2026
b0cfdcb
Add local claude settings to gitignore
MisRob Feb 10, 2026
e52d071
Align test suite with other suites regarding channel cards
MisRob Feb 10, 2026
a79502a
Rename method
MisRob Feb 10, 2026
3aded04
Fix semantics
MisRob Feb 10, 2026
c837c95
Show view-only invitations
MisRob Feb 10, 2026
512e2f1
Fix card click targets
MisRob Feb 10, 2026
4d66ec2
Footer configuration
MisRob Feb 12, 2026
841257a
Optimize card orientation in catalog
MisRob Feb 10, 2026
7ee25b9
Optimize card loading
MisRob Feb 14, 2026
bc092cd
Disable syncCardMetrics to prevent unnecessary
MisRob Feb 14, 2026
aa8b0a9
Fix typo
MisRob Feb 14, 2026
cc563d2
Remove unused code
MisRob Feb 14, 2026
b0479ef
Merge branch 'unstable' into channel-cards
MisRob Feb 15, 2026
a820fb4
Docstrings cleanup
MisRob Feb 16, 2026
18f4f26
[TODO REVERT] Temporarily install KDS fork
MisRob Feb 16, 2026
82f701b
Fix string
MisRob Feb 16, 2026
f8c7d53
Remove modals from card component
MisRob Feb 26, 2026
f780f83
Use StudioCopyToken instead of CopyToken
MisRob Feb 26, 2026
52535eb
Fix invitation box width regression
MisRob Feb 27, 2026
57e8806
Use location.assign
MisRob Mar 4, 2026
93d02ea
Cleanup styles
MisRob Mar 4, 2026
92bf22b
Use method instead of inline handler
MisRob Mar 4, 2026
f278d6a
Use location.assign
MisRob Mar 4, 2026
f51d15a
Cleanup uneccesarry key
MisRob Mar 4, 2026
a2ddd21
Fix catalog channel details URL
MisRob Mar 4, 2026
f59ebd5
Fix missing dir and notranslate
MisRob Mar 4, 2026
82f6de2
Render slot conditionally to ensure empty message displayes properly
MisRob Mar 4, 2026
eeef03b
Handle error state
MisRob Mar 6, 2026
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ var/

# Ignore editor / IDE related data
.vscode/
.claude/

# IntelliJ IDE, except project config
.idea/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import { ref, computed, onMounted, getCurrentInstance } from 'vue';
import orderBy from 'lodash/orderBy';

/**
* Composable for channel list functionality
*
* @param {Object} options - Configuration options
* @param {string} options.listType - Type of channel list (from ChannelListTypes)
* @param {Array<string>} options.sortFields - Fields to sort by (default: ['modified'])
* @param {Array<string>} options.orderFields - Sort order (default: ['desc'])
* @returns {Object} Loading state and filtered & sorted channels
*/
export function useChannelList(options = {}) {
const { listType, sortFields = ['modified'], orderFields = ['desc'] } = options;

const instance = getCurrentInstance();
const store = instance.proxy.$store;

const loading = ref(false);

const allChannels = computed(() => store.getters['channel/channels'] || []);

const channels = computed(() => {
if (!allChannels.value || allChannels.value.length === 0) {
return [];
}

const filtered = allChannels.value.filter(channel => channel[listType] && !channel.deleted);

return orderBy(filtered, sortFields, orderFields);
});

onMounted(() => {
loading.value = true;
store
.dispatch('channel/loadChannelList', { listType })
.then(() => {
loading.value = false;
})
.catch(error => {
loading.value = false;
if (error && error.response) {
store.dispatch('errors/handleAxiosError', error);
} else {
store.dispatch('errors/handleGenericError', error || {});
}
});
});

return {
loading,
channels,
};
}
15 changes: 6 additions & 9 deletions contentcuration/contentcuration/frontend/channelList/router.js
Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
import VueRouter from 'vue-router';
import ChannelList from './views/Channel/ChannelList';
import StudioMyChannels from './views/Channel/StudioMyChannels';
import StudioStarredChannels from './views/Channel/StudioStarredChannels';
import StudioViewOnlyChannels from './views/Channel/StudioViewOnlyChannels';
import StudioCollectionsTable from './views/ChannelSet/StudioCollectionsTable';
import ChannelSetModal from './views/ChannelSet/ChannelSetModal';
import CatalogList from './views/Channel/CatalogList';
import { RouteNames } from './constants';
import CatalogFAQ from './views/Channel/CatalogFAQ';
import ChannelModal from 'shared/views/channel/ChannelModal';
import ChannelDetailsModal from 'shared/views/channel/ChannelDetailsModal';
import { ChannelListTypes } from 'shared/constants';

const router = new VueRouter({
routes: [
{
name: RouteNames.CHANNELS_EDITABLE,
path: '/my-channels',
component: ChannelList,
props: { listType: ChannelListTypes.EDITABLE },
component: StudioMyChannels,
},

{
name: RouteNames.CHANNEL_SETS,
path: '/collections',
Expand All @@ -38,14 +37,12 @@ const router = new VueRouter({
{
name: RouteNames.CHANNELS_STARRED,
path: '/starred',
component: ChannelList,
props: { listType: ChannelListTypes.STARRED },
component: StudioStarredChannels,
},
{
name: RouteNames.CHANNELS_VIEW_ONLY,
path: '/view-only',
component: ChannelList,
props: { listType: ChannelListTypes.VIEW_ONLY },
component: StudioViewOnlyChannels,
},
{
name: RouteNames.CHANNEL_DETAILS,
Expand Down
Loading