feat: mobile responsive right sidbars + composable window size
This commit is contained in:
@@ -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"),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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"),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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"),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
25
helpers/utils/useWindowSize.ts
Normal file
25
helpers/utils/useWindowSize.ts
Normal 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
|
||||||
@@ -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>
|
||||||
|
|||||||
@@ -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),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user