Skip to content

Commit

Permalink
sidebar: compat for Nextcloud 28
Browse files Browse the repository at this point in the history
Signed-off-by: Varun Patil <radialapps@gmail.com>
  • Loading branch information
pulsejet committed Oct 17, 2023
1 parent 728efea commit 2ea45cd
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 32 deletions.
31 changes: 1 addition & 30 deletions src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
</template>

<script lang="ts">
import Vue, { defineComponent } from 'vue';
import { defineComponent } from 'vue';
import NcContent from '@nextcloud/vue/dist/Components/NcContent';
import NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent';
Expand All @@ -78,14 +78,12 @@ import { translate as t } from '@nextcloud/l10n';
import * as utils from './services/utils';
import * as nativex from './native';
import router from './router';
import staticConfig from './services/static-config';
import UserConfig from './mixins/UserConfig';
import Timeline from './components/Timeline.vue';
import Settings from './components/Settings.vue';
import FirstStart from './components/FirstStart.vue';
import Viewer from './components/viewer/Viewer.vue';
import Metadata from './components/Metadata.vue';
import Sidebar from './components/Sidebar.vue';
import MobileNav from './components/MobileNav.vue';
import MobileHeader from './components/MobileHeader.vue';
Expand Down Expand Up @@ -158,7 +156,6 @@ export default defineComponent({
data: () => ({
navItems: [] as NavItem[],
metadataComponent: null as any,
settingsOpen: false,
}),
Expand Down Expand Up @@ -254,32 +251,6 @@ export default defineComponent({
// Set theme color to default
nativex.setTheme();
// Register sidebar metadata tab
globalThis.OCA?.Files?.Sidebar?.registerTab(
new globalThis.OCA.Files.Sidebar.Tab({
id: 'memories-metadata',
name: this.t('memories', 'Info'),
icon: 'icon-details',
mount(el: HTMLElement, fileInfo: { id: string | number }, context: any) {
this.metadataComponent?.$destroy?.();
this.metadataComponent = new Vue({
render: (h) => h(Metadata),
router,
});
this.metadataComponent.$mount(el);
this.metadataComponent.$children[0].update(Number(fileInfo.id));
},
update(fileInfo: { id: string | number }) {
this.metadataComponent.$children[0].update(Number(fileInfo.id));
},
destroy() {
this.metadataComponent?.$destroy?.();
this.metadataComponent = null;
},
}),
);
// Check for native interface
if (this.native) {
document.documentElement.classList.add('native');
Expand Down
3 changes: 3 additions & 0 deletions src/assets/info.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
50 changes: 48 additions & 2 deletions src/components/Sidebar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,18 @@
</template>

<script lang="ts">
import { defineComponent } from 'vue';
import Vue, { defineComponent } from 'vue';
import NcActions from '@nextcloud/vue/dist/Components/NcActions';
import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton';
import Metadata from './Metadata.vue';
import { IImageInfo, IPhoto } from '../types';
import { IPhoto } from '../types';
import * as utils from '../services/utils';
import CloseIcon from 'vue-material-design-icons/Close.vue';
import InfoSvg from '../assets/info.svg';
export default defineComponent({
name: 'Sidebar',
Expand Down Expand Up @@ -89,6 +90,13 @@ export default defineComponent({
setTab: this.setTab.bind(this),
getWidth: this.getWidth.bind(this),
};
// Register native tab after DOMContentLoaded
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', this.registerNative.bind(this)); // wait for it
} else {
this.registerNative(); // already fired
}
},
beforeDestroy() {
Expand Down Expand Up @@ -161,6 +169,44 @@ export default defineComponent({
this.native?.setFullScreenMode?.(false);
this.handleClose();
},
/** Register the Nextcloud Sidebar component */
async registerNative() {
// Wait just in case the sidebar isn't avaialble yet
await new Promise((resolve) => setTimeout(resolve, 100));
// Pass router to the component
const router = this.$router;
// Component instance
let component: (Vue & { $children: readonly [InstanceType<typeof Metadata>] }) | null;
// Register sidebar tab
globalThis.OCA?.Files?.Sidebar?.registerTab(
new globalThis.OCA.Files.Sidebar.Tab({
id: 'memories-metadata',
name: this.t('memories', 'Info'),
icon: 'icon-details',
iconSvg: window.atob(InfoSvg.split(',')[1]), // base64 to svg
mount(el: HTMLElement, fileInfo: { id: string | number }, context: any) {
component?.$destroy?.();
component = new Vue({ render: (h) => h(Metadata), router });
component.$mount(el);
component.$children[0].update(Number(fileInfo.id));
},
update(fileInfo: { id: string | number }) {
component?.$children[0].update(Number(fileInfo.id));
},
destroy() {
component?.$destroy?.();
component = null;
},
}),
);
},
},
});
</script>
Expand Down

0 comments on commit 2ea45cd

Please sign in to comment.