feat: mobile responsive right sidbars + composable window size

This commit is contained in:
liyasthomas
2021-09-08 12:27:46 +05:30
parent dbae90a193
commit 73f22abf56
8 changed files with 70 additions and 25 deletions

View File

@@ -1,5 +1,9 @@
<template> <template>
<Splitpanes class="smart-splitter" :dbl-click-splitter="false" vertical> <Splitpanes
class="smart-splitter"
:dbl-click-splitter="false"
:horizontal="!(windowInnerWidth.x.value >= 768)"
>
<Pane class="hide-scrollbar !overflow-auto"> <Pane class="hide-scrollbar !overflow-auto">
<Splitpanes class="smart-splitter" :dbl-click-splitter="false" horizontal> <Splitpanes class="smart-splitter" :dbl-click-splitter="false" horizontal>
<Pane class="hide-scrollbar !overflow-auto"> <Pane class="hide-scrollbar !overflow-auto">
@@ -144,11 +148,13 @@ import Paho from "paho-mqtt"
import debounce from "~/helpers/utils/debounce" import debounce from "~/helpers/utils/debounce"
import { logHoppRequestRunToAnalytics } from "~/helpers/fb/analytics" import { logHoppRequestRunToAnalytics } from "~/helpers/fb/analytics"
import { useSetting } from "~/newstore/settings" import { useSetting } from "~/newstore/settings"
import useWindowSize from "~/helpers/utils/useWindowSize"
export default defineComponent({ export default defineComponent({
components: { Splitpanes, Pane }, components: { Splitpanes, Pane },
setup() { setup() {
return { return {
windowInnerWidth: useWindowSize(),
RIGHT_SIDEBAR: useSetting("RIGHT_SIDEBAR"), RIGHT_SIDEBAR: useSetting("RIGHT_SIDEBAR"),
} }
}, },

View File

@@ -1,5 +1,9 @@
<template> <template>
<Splitpanes class="smart-splitter" :dbl-click-splitter="false" vertical> <Splitpanes
class="smart-splitter"
:dbl-click-splitter="false"
:horizontal="!(windowInnerWidth.x.value >= 768)"
>
<Pane class="hide-scrollbar !overflow-auto"> <Pane class="hide-scrollbar !overflow-auto">
<Splitpanes class="smart-splitter" :dbl-click-splitter="false" horizontal> <Splitpanes class="smart-splitter" :dbl-click-splitter="false" horizontal>
<Pane class="hide-scrollbar !overflow-auto"> <Pane class="hide-scrollbar !overflow-auto">
@@ -164,11 +168,13 @@ import wildcard from "socketio-wildcard"
import debounce from "~/helpers/utils/debounce" import debounce from "~/helpers/utils/debounce"
import { logHoppRequestRunToAnalytics } from "~/helpers/fb/analytics" import { logHoppRequestRunToAnalytics } from "~/helpers/fb/analytics"
import { useSetting } from "~/newstore/settings" import { useSetting } from "~/newstore/settings"
import useWindowSize from "~/helpers/utils/useWindowSize"
export default defineComponent({ export default defineComponent({
components: { Splitpanes, Pane }, components: { Splitpanes, Pane },
setup() { setup() {
return { return {
windowInnerWidth: useWindowSize(),
RIGHT_SIDEBAR: useSetting("RIGHT_SIDEBAR"), RIGHT_SIDEBAR: useSetting("RIGHT_SIDEBAR"),
} }
}, },

View File

@@ -1,5 +1,9 @@
<template> <template>
<Splitpanes class="smart-splitter" :dbl-click-splitter="false" vertical> <Splitpanes
class="smart-splitter"
:dbl-click-splitter="false"
:horizontal="!(windowInnerWidth.x.value >= 768)"
>
<Pane class="hide-scrollbar !overflow-auto"> <Pane class="hide-scrollbar !overflow-auto">
<Splitpanes class="smart-splitter" :dbl-click-splitter="false" horizontal> <Splitpanes class="smart-splitter" :dbl-click-splitter="false" horizontal>
<Pane class="hide-scrollbar !overflow-auto"> <Pane class="hide-scrollbar !overflow-auto">
@@ -203,12 +207,14 @@ import { Splitpanes, Pane } from "splitpanes"
import "splitpanes/dist/splitpanes.css" import "splitpanes/dist/splitpanes.css"
import { logHoppRequestRunToAnalytics } from "~/helpers/fb/analytics" import { logHoppRequestRunToAnalytics } from "~/helpers/fb/analytics"
import debounce from "~/helpers/utils/debounce" import debounce from "~/helpers/utils/debounce"
import useWindowSize from "~/helpers/utils/useWindowSize"
import { useSetting } from "~/newstore/settings" import { useSetting } from "~/newstore/settings"
export default defineComponent({ export default defineComponent({
components: { Splitpanes, Pane }, components: { Splitpanes, Pane },
setup() { setup() {
return { return {
windowInnerWidth: useWindowSize(),
RIGHT_SIDEBAR: useSetting("RIGHT_SIDEBAR"), RIGHT_SIDEBAR: useSetting("RIGHT_SIDEBAR"),
} }
}, },

View File

@@ -0,0 +1,25 @@
import {
Ref,
onMounted,
onUnmounted,
reactive,
toRefs,
} from "@nuxtjs/composition-api"
interface WindowSize {
x: Ref<number>
y: Ref<number>
}
export function useWindowSize(): WindowSize {
const windowSize = reactive({ x: 0, y: 0 })
const resizeListener = () => {
;({ innerWidth: windowSize.x, innerHeight: windowSize.y } = window)
}
onMounted(() => window.addEventListener("resize", resizeListener))
onUnmounted(() => window.removeEventListener("resize", resizeListener))
resizeListener()
return toRefs(windowSize)
}
export default useWindowSize

View File

@@ -8,7 +8,7 @@
<Splitpanes <Splitpanes
class="no-splitter" class="no-splitter"
:dbl-click-splitter="false" :dbl-click-splitter="false"
:horizontal="!(windowInnerWidth >= 768)" :horizontal="!(windowInnerWidth.x.value >= 768)"
> >
<Pane <Pane
style="width: auto; height: auto" style="width: auto; height: auto"
@@ -57,6 +57,7 @@ import { useSetting } from "~/newstore/settings"
import { logPageView } from "~/helpers/fb/analytics" import { logPageView } from "~/helpers/fb/analytics"
import { hookKeybindingsListener } from "~/helpers/keybindings" import { hookKeybindingsListener } from "~/helpers/keybindings"
import { defineActionHandler } from "~/helpers/actions" import { defineActionHandler } from "~/helpers/actions"
import useWindowSize from "~/helpers/utils/useWindowSize"
function updateThemes() { function updateThemes() {
const { $colorMode } = useContext() as any const { $colorMode } = useContext() as any
@@ -119,14 +120,10 @@ export default defineComponent({
updateThemes() updateThemes()
return { return {
windowInnerWidth: useWindowSize(),
ZEN_MODE: useSetting("ZEN_MODE"), ZEN_MODE: useSetting("ZEN_MODE"),
} }
}, },
data() {
return {
windowInnerWidth: 0,
}
},
head() { head() {
return this.$nuxtI18nHead({ addSeoAttributes: true }) return this.$nuxtI18nHead({ addSeoAttributes: true })
}, },
@@ -141,8 +138,6 @@ export default defineComponent({
registerApolloAuthUpdate() registerApolloAuthUpdate()
}, },
async mounted() { async mounted() {
window.addEventListener("resize", this.handleResize)
this.handleResize()
performMigrations() performMigrations()
console.log( console.log(
"%cWe ❤︎ open source!", "%cWe ❤︎ open source!",
@@ -179,13 +174,5 @@ export default defineComponent({
logPageView(this.$router.currentRoute.fullPath) logPageView(this.$router.currentRoute.fullPath)
}, },
destroyed() {
window.removeEventListener("resize", this.handleResize)
},
methods: {
handleResize() {
this.windowInnerWidth = window.innerWidth
},
},
}) })
</script> </script>

View File

@@ -1,5 +1,9 @@
<template> <template>
<Splitpanes class="smart-splitter" :dbl-click-splitter="false" vertical> <Splitpanes
class="smart-splitter"
:dbl-click-splitter="false"
:horizontal="!(windowInnerWidth.x.value >= 768)"
>
<Pane class="hide-scrollbar !overflow-auto"> <Pane class="hide-scrollbar !overflow-auto">
<Splitpanes class="smart-splitter" :dbl-click-splitter="false" horizontal> <Splitpanes class="smart-splitter" :dbl-click-splitter="false" horizontal>
<Pane class="hide-scrollbar !overflow-auto"> <Pane class="hide-scrollbar !overflow-auto">
@@ -183,11 +187,13 @@ import folderContents from "~/assets/md/folderContents.md"
import folderBody from "~/assets/md/folderBody.md" import folderBody from "~/assets/md/folderBody.md"
import { useSetting } from "~/newstore/settings" import { useSetting } from "~/newstore/settings"
import { useReadonlyStream } from "~/helpers/utils/composables" import { useReadonlyStream } from "~/helpers/utils/composables"
import useWindowSize from "~/helpers/utils/useWindowSize"
export default defineComponent({ export default defineComponent({
components: { Splitpanes, Pane }, components: { Splitpanes, Pane },
setup() { setup() {
return { return {
windowInnerWidth: useWindowSize(),
RIGHT_SIDEBAR: useSetting("RIGHT_SIDEBAR"), RIGHT_SIDEBAR: useSetting("RIGHT_SIDEBAR"),
currentUser: useReadonlyStream(currentUser$, null), currentUser: useReadonlyStream(currentUser$, null),
} }

View File

@@ -1,6 +1,10 @@
<template> <template>
<div> <div>
<Splitpanes class="smart-splitter" :dbl-click-splitter="false" vertical> <Splitpanes
class="smart-splitter"
:dbl-click-splitter="false"
:horizontal="!(windowInnerWidth.x.value >= 768)"
>
<Pane class="hide-scrollbar !overflow-auto"> <Pane class="hide-scrollbar !overflow-auto">
<Splitpanes <Splitpanes
class="smart-splitter" class="smart-splitter"
@@ -36,6 +40,7 @@ import "splitpanes/dist/splitpanes.css"
import { useSetting } from "~/newstore/settings" import { useSetting } from "~/newstore/settings"
import { GQLConnection } from "~/helpers/GQLConnection" import { GQLConnection } from "~/helpers/GQLConnection"
import { useNuxt, useReadonlyStream } from "~/helpers/utils/composables" import { useNuxt, useReadonlyStream } from "~/helpers/utils/composables"
import useWindowSize from "~/helpers/utils/useWindowSize"
export default defineComponent({ export default defineComponent({
components: { Splitpanes, Pane }, components: { Splitpanes, Pane },
@@ -58,6 +63,7 @@ export default defineComponent({
}) })
return { return {
windowInnerWidth: useWindowSize(),
RIGHT_SIDEBAR: useSetting("RIGHT_SIDEBAR"), RIGHT_SIDEBAR: useSetting("RIGHT_SIDEBAR"),
gqlConn, gqlConn,
} }

View File

@@ -1,5 +1,9 @@
<template> <template>
<Splitpanes class="smart-splitter" :dbl-click-splitter="false" vertical> <Splitpanes
class="smart-splitter"
:dbl-click-splitter="false"
:horizontal="!(windowInnerWidth.x.value >= 768)"
>
<Pane class="hide-scrollbar !overflow-auto"> <Pane class="hide-scrollbar !overflow-auto">
<Splitpanes class="smart-splitter" :dbl-click-splitter="false" horizontal> <Splitpanes class="smart-splitter" :dbl-click-splitter="false" horizontal>
<Pane class="hide-scrollbar !overflow-auto"> <Pane class="hide-scrollbar !overflow-auto">
@@ -117,6 +121,7 @@ import { onLoggedIn } from "~/helpers/fb/auth"
import { HoppRESTRequest } from "~/helpers/types/HoppRESTRequest" import { HoppRESTRequest } from "~/helpers/types/HoppRESTRequest"
import { oauthRedirect } from "~/helpers/oauth" import { oauthRedirect } from "~/helpers/oauth"
import { HoppRESTAuthOAuth2 } from "~/helpers/types/HoppRESTAuth" import { HoppRESTAuthOAuth2 } from "~/helpers/types/HoppRESTAuth"
import useWindowSize from "~/helpers/utils/useWindowSize"
function bindRequestToURLParams() { function bindRequestToURLParams() {
const { const {
@@ -240,6 +245,7 @@ export default defineComponent({
bindRequestToURLParams() bindRequestToURLParams()
return { return {
windowInnerWidth: useWindowSize(),
newActiveParamsCount$: useReadonlyStream( newActiveParamsCount$: useReadonlyStream(
restActiveParamsCount$.pipe( restActiveParamsCount$.pipe(
map((e) => { map((e) => {
@@ -259,9 +265,6 @@ export default defineComponent({
null null
), ),
RIGHT_SIDEBAR: useSetting("RIGHT_SIDEBAR"), RIGHT_SIDEBAR: useSetting("RIGHT_SIDEBAR"),
PROXY_ENABLED: useSetting("PROXY_ENABLED"),
URL_EXCLUDES: useSetting("URL_EXCLUDES"),
EXPERIMENTAL_URL_BAR_ENABLED: useSetting("EXPERIMENTAL_URL_BAR_ENABLED"),
confirmSync, confirmSync,
syncRequest, syncRequest,
oAuthURL, oAuthURL,