Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
Prev Previous commit
Next Next commit
Add support for Material icon in files sidebar
Signed-off-by: Carl Schwan <[email protected]>
Signed-off-by: Louis Chemineau <[email protected]>
  • Loading branch information
CarlSchwan authored and artonge committed Nov 28, 2022
commit 8829019101e2aba587a32f6c04cb2befc5de0f2b
2 changes: 2 additions & 0 deletions apps/comments/src/comments-tab.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
*
*/

import MessageReplyText from 'vue-material-design-icons/MessageReplyText.vue'

// Init Comments tab component
let TabInstance = null
const commentTab = new OCA.Files.Sidebar.Tab({
Expand Down
5 changes: 4 additions & 1 deletion apps/files/src/components/SidebarTab.vue
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@
:name="name"
:icon="icon"
@bottomReached="onScrollBottomReached">
<template #icon>
<slot name="icon" />
</template>
<!-- Fallback loading -->
<NcEmptyContent v-if="loading" icon="icon-loading" />

Expand Down Expand Up @@ -63,7 +66,7 @@ export default {
},
icon: {
type: String,
required: true,
required: false,
},

/**
Expand Down
8 changes: 6 additions & 2 deletions apps/files/src/models/Tab.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ export default class Tab {
if (typeof name !== 'string' || name.trim() === '') {
throw new Error('The name argument is not a valid string')
}
if (typeof icon !== 'string' || icon.trim() === '') {
throw new Error('The icon argument is not a valid string')
if ((typeof icon !== 'string' || icon.trim() === '') && typeof icon !== 'object') {
throw new Error('The icon argument is not a valid string or vuejs component')
}
if (typeof mount !== 'function') {
throw new Error('The mount argument should be a function')
Expand Down Expand Up @@ -97,6 +97,10 @@ export default class Tab {
return this._name
}

get isIconClass() {
return typeof this._icon === 'string'
}

get icon() {
return this._icon
}
Expand Down
8 changes: 6 additions & 2 deletions apps/files/src/views/Sidebar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,16 @@
:id="tab.id"
:key="tab.id"
:name="tab.name"
:icon="tab.icon"
:icon="tab.isIconClass ? tab.icon : undefined"
:on-mount="tab.mount"
:on-update="tab.update"
:on-destroy="tab.destroy"
:on-scroll-bottom-reached="tab.scrollBottomReached"
:file-info="fileInfo" />
:file-info="fileInfo">
<template #icon v-if="!tab.isIconClass">
<component :is="tab.icon" />
</template>
</SidebarTab>
</template>
</NcAppSidebar>
</template>
Expand Down
14 changes: 8 additions & 6 deletions apps/files_sharing/src/files_sharing_tab.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,13 @@ import Vue from 'vue'
import VueClipboard from 'vue-clipboard2'
import { translate as t, translatePlural as n } from '@nextcloud/l10n'

import SharingTab from './views/SharingTab'
import ShareSearch from './services/ShareSearch'
import ExternalLinkActions from './services/ExternalLinkActions'
import ExternalShareActions from './services/ExternalShareActions'
import TabSections from './services/TabSections'
import SharingTab from './views/SharingTab.vue'
import ShareSearch from './services/ShareSearch.js'
import ExternalLinkActions from './services/ExternalLinkActions.js'
import ExternalShareActions from './services/ExternalShareActions.js'
import TabSections from './services/TabSections.js'

import ShareVariant from 'vue-material-design-icons/ShareVariant.vue'

// Init Sharing Tab Service
if (!window.OCA.Sharing) {
Expand All @@ -53,7 +55,7 @@ window.addEventListener('DOMContentLoaded', function() {
OCA.Files.Sidebar.registerTab(new OCA.Files.Sidebar.Tab({
id: 'sharing',
name: t('files_sharing', 'Sharing'),
icon: 'icon-share',
icon: ShareVariant,

async mount(el, fileInfo, context) {
if (TabInstance) {
Expand Down
3 changes: 2 additions & 1 deletion apps/files_versions/src/files_versions_tab.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { translate as t, translatePlural as n } from '@nextcloud/l10n'

import VersionTab from './views/VersionTab.vue'
import VTooltip from 'v-tooltip'
import BackupRestore from 'vue-material-design-icons/BackupRestore.vue'

Vue.prototype.t = t
Vue.prototype.n = n
Expand All @@ -37,7 +38,7 @@ window.addEventListener('DOMContentLoaded', function() {
OCA.Files.Sidebar.registerTab(new OCA.Files.Sidebar.Tab({
id: 'version_vue',
name: t('files_versions', 'Version'),
icon: 'icon-history',
icon: BackupRestore,

async mount(el, fileInfo, context) {
if (TabInstance) {
Expand Down