refactor(client): Refine routing (#8846)

This commit is contained in:
syuilo 2022-06-20 17:38:49 +09:00 committed by GitHub
parent 30a39a296d
commit 699f24f3dc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
149 changed files with 6312 additions and 6670 deletions

View file

@ -12,11 +12,7 @@
<div class="contents">
<XHeader v-if="!root" class="header" :info="pageInfo"/>
<main>
<router-view v-slot="{ Component }">
<transition :name="$store.state.animation ? 'page' : ''" mode="out-in" @enter="onTransition">
<component :is="Component" :ref="changePage"/>
</transition>
</router-view>
<RouterView/>
</main>
<div v-if="!root" class="powered-by">
<b><MkA to="/">{{ host }}</MkA></b>
@ -26,7 +22,8 @@
</div>
<transition :name="$store.state.animation ? 'tray-back' : ''">
<div v-if="showMenu"
<div
v-if="showMenu"
class="menu-back _modalBg"
@click="showMenu = false"
@touchstart.passive="showMenu = false"
@ -48,8 +45,10 @@
</div>
</template>
<script lang="ts">
import { defineComponent, defineAsyncComponent } from 'vue';
<script lang="ts" setup>
import { ComputedRef, onMounted, provide } from 'vue';
import XHeader from './header.vue';
import XKanban from './kanban.vue';
import { host, instanceName } from '@/config';
import { search } from '@/scripts/search';
import * as os from '@/os';
@ -57,101 +56,64 @@ import MkPagination from '@/components/ui/pagination.vue';
import XSigninDialog from '@/components/signin-dialog.vue';
import XSignupDialog from '@/components/signup-dialog.vue';
import MkButton from '@/components/ui/button.vue';
import XHeader from './header.vue';
import XKanban from './kanban.vue';
import { ColdDeviceStorage } from '@/store';
import * as symbols from '@/symbols';
import { ColdDeviceStorage, defaultStore } from '@/store';
import { mainRouter } from '@/router';
import { PageMetadata, provideMetadataReceiver, setPageMetadata } from '@/scripts/page-metadata';
const DESKTOP_THRESHOLD = 1100;
export default defineComponent({
components: {
XHeader,
XKanban,
MkPagination,
MkButton,
},
let pageMetadata = $ref<null | ComputedRef<PageMetadata>>();
data() {
return {
host,
instanceName,
pageInfo: null,
meta: null,
showMenu: false,
narrow: window.innerWidth < 1280,
announcements: {
endpoint: 'announcements',
limit: 10,
},
isDesktop: window.innerWidth >= DESKTOP_THRESHOLD,
};
},
provide('router', mainRouter);
provideMetadataReceiver((info) => {
pageMetadata = info;
if (pageMetadata.value) {
document.title = `${pageMetadata.value.title} | ${instanceName}`;
}
});
computed: {
keymap(): any {
return {
'd': () => {
if (ColdDeviceStorage.get('syncDeviceDarkMode')) return;
this.$store.set('darkMode', !this.$store.state.darkMode);
},
's': search,
'h|/': this.help
};
const announcements = {
endpoint: 'announcements',
limit: 10,
};
let showMenu = $ref(false);
let isDesktop = $ref(window.innerWidth >= DESKTOP_THRESHOLD);
let narrow = $ref(window.innerWidth < 1280);
let meta = $ref();
const keymap = $computed(() => {
return {
'd': () => {
if (ColdDeviceStorage.get('syncDeviceDarkMode')) return;
defaultStore.set('darkMode', !defaultStore.state.darkMode);
},
's': search,
};
});
root(): boolean {
return this.$route.path === '/';
},
},
const root = $computed(() => mainRouter.currentRoute.value.name === 'index');
created() {
//document.documentElement.style.overflowY = 'scroll';
os.api('meta', { detail: true }).then(res => {
meta = res;
});
os.api('meta', { detail: true }).then(meta => {
this.meta = meta;
});
},
function signin() {
os.popup(XSigninDialog, {
autoSet: true,
}, {}, 'closed');
}
mounted() {
if (!this.isDesktop) {
window.addEventListener('resize', () => {
if (window.innerWidth >= DESKTOP_THRESHOLD) this.isDesktop = true;
}, { passive: true });
}
},
function signup() {
os.popup(XSignupDialog, {
autoSet: true,
}, {}, 'closed');
}
methods: {
changePage(page) {
if (page == null) return;
if (page[symbols.PAGE_INFO]) {
this.pageInfo = page[symbols.PAGE_INFO];
}
},
top() {
window.scroll({ top: 0, behavior: 'smooth' });
},
help() {
window.open(`https://misskey-hub.net/docs/keyboard-shortcut.md`, '_blank');
},
onTransition() {
if (window._scroll) window._scroll();
},
signin() {
os.popup(XSigninDialog, {
autoSet: true
}, {}, 'closed');
},
signup() {
os.popup(XSignupDialog, {
autoSet: true
}, {}, 'closed');
}
onMounted(() => {
if (!isDesktop) {
window.addEventListener('resize', () => {
if (window.innerWidth >= DESKTOP_THRESHOLD) isDesktop = true;
}, { passive: true });
}
});
</script>