fix overlay bug, share bug (#161)

This commit is contained in:
Graham Steffaniak 2024-08-03 15:04:50 -05:00 committed by GitHub
parent fa3ed6b948
commit 0479670c52
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 107 additions and 67 deletions

View File

@ -27,6 +27,9 @@ export async function update(user, which = ["all"]) {
if (which[0] != "password") { if (which[0] != "password") {
user.password = ""; user.password = "";
} }
if (user.username == "publicUser") {
return
}
console.log("updating user",user,which) console.log("updating user",user,which)
await fetchURL(`/api/users/${user.id}`, { await fetchURL(`/api/users/${user.id}`, {
method: "PUT", method: "PUT",

View File

@ -29,7 +29,12 @@
</div> </div>
<!-- Search results for mobile --> <!-- Search results for mobile -->
<div v-if="isMobile && active" id="result" :class="{ hidden: !active }" ref="result"> <div
v-if="state.isMobile && active"
id="result"
:class="{ hidden: !active }"
ref="result"
>
<div id="result-list"> <div id="result-list">
<div class="button" style="width: 100%">Search Context: {{ getContext }}</div> <div class="button" style="width: 100%">Search Context: {{ getContext }}</div>
<!-- List of search results --> <!-- List of search results -->
@ -97,7 +102,7 @@
</div> </div>
<!-- Search results for desktop --> <!-- Search results for desktop -->
<div v-show="!isMobile && active" id="result-desktop" ref="result"> <div v-show="!state.isMobile && active" id="result-desktop" ref="result">
<div class="searchContext">Search Context: {{ getContext }}</div> <div class="searchContext">Search Context: {{ getContext }}</div>
<div id="result-list"> <div id="result-list">
<div> <div>
@ -241,7 +246,6 @@ export default {
{ label: "Archives", value: "type:archive" }, { label: "Archives", value: "type:archive" },
], ],
value: "", value: "",
width: window.innerWidth,
ongoing: false, ongoing: false,
results: [], results: [],
reload: false, reload: false,
@ -299,7 +303,8 @@ export default {
return this.isTypeSelectDisabled; return this.isTypeSelectDisabled;
}, },
active() { active() {
return getters.currentPromptName() === "search"; console.log("calling active ", getters.currentPromptName());
return getters.currentPromptName() == "search";
}, },
showOverlay() { showOverlay() {
return getters.currentPrompt() !== null && getters.currentPromptName() !== "more"; return getters.currentPrompt() !== null && getters.currentPromptName() !== "more";
@ -342,11 +347,7 @@ export default {
return path; return path;
}, },
}, },
methods: { methods: {
handleResize() {
this.width = window.innerWidth;
},
async navigateTo(url) { async navigateTo(url) {
mutations.closeHovers(); mutations.closeHovers();
await this.$nextTick(); await this.$nextTick();
@ -403,7 +404,7 @@ export default {
return false; return false;
} }
this.searchTypes = this.searchTypes.replace(string + " ", ""); this.searchTypes = this.searchTypes.replace(string + " ", "");
if (this.isMobile) { if (state.isMobile) {
this.$refs.input.focus(); this.$refs.input.focus();
} }
}, },
@ -447,12 +448,6 @@ export default {
this.showHelp = !this.showHelp; this.showHelp = !this.showHelp;
}, },
}, },
mounted() {
window.addEventListener("resize", this.handleResize);
},
beforeUnmount() {
window.removeEventListener("resize", this.handleResize);
},
}; };
</script> </script>

View File

@ -4,45 +4,49 @@
:class="{ active: active, 'dark-mode': isDarkMode, sticky: user?.stickySidebar }" :class="{ active: active, 'dark-mode': isDarkMode, sticky: user?.stickySidebar }"
> >
<div class="card"> <div class="card">
<button <div class="card-wrapper">
v-if="user.username" <button
@click="navigateTo('/settings/profile')" v-if="user.username"
class="action" @click="navigateTo('/settings/profile')"
> class="action"
<i class="material-icons">person</i> >
<span>{{ user.username }}</span> <i class="material-icons">person</i>
</button> <span>{{ user.username }}</span>
</button>
</div>
</div> </div>
<div class="card">
<div class="card card-wrapper" @mouseleave="resetHoverTextToDefault"> <div class="card-wrapper" @mouseleave="resetHoverTextToDefault">
<span>{{ hoverText }}</span> <span>{{ hoverText }}</span>
<div class="quick-toggles"> <div class="quick-toggles">
<div <div
:class="{ active: user?.singleClick }" :class="{ active: user?.singleClick }"
@click="toggleClick" @click="toggleClick"
@mouseover="updateHoverText('Toggle single click')" @mouseover="updateHoverText('Toggle single click')"
> >
<i class="material-icons">ads_click</i> <i class="material-icons">ads_click</i>
</div> </div>
<div <div
:class="{ active: user?.darkMode }" :class="{ active: user?.darkMode }"
@click="toggleDarkMode" @click="toggleDarkMode"
@mouseover="updateHoverText('Toggle dark mode')" @mouseover="updateHoverText('Toggle dark mode')"
> >
<i class="material-icons">dark_mode</i> <i class="material-icons">dark_mode</i>
</div> </div>
<div <div
:class="{ active: user?.stickySidebar }" :class="{ active: user?.stickySidebar }"
@click="toggleSticky" @click="toggleSticky"
@mouseover="updateHoverText('Toggle sticky sidebar')" @mouseover="updateHoverText('Toggle sticky sidebar')"
> v-if="!isMobile"
<i class="material-icons">push_pin</i> >
<i class="material-icons">push_pin</i>
</div>
</div> </div>
</div> </div>
</div> </div>
<!-- Section for logged-in users --> <!-- Section for logged-in users -->
<div v-if="isLoggedIn"> <div v-if="isLoggedIn" class="sidebar-scroll-list">
<!-- Buttons visible if user has create permission --> <!-- Buttons visible if user has create permission -->
<div v-if="user.perm?.create"> <div v-if="user.perm?.create">
<!-- New Folder button --> <!-- New Folder button -->
@ -97,7 +101,7 @@
<span>{{ $t("sidebar.logout") }}</span> <span>{{ $t("sidebar.logout") }}</span>
</button> </button>
</div> </div>
<div class="sources card card-wrapper"> <div v-if="isLoggedIn" class="sources card">
<span>Sources</span> <span>Sources</span>
<div class="inner-card"> <div class="inner-card">
<!-- My Files button --> <!-- My Files button -->
@ -120,7 +124,7 @@
</div> </div>
<!-- Section for non-logged-in users --> <!-- Section for non-logged-in users -->
<div v-else> <div v-else class="sidebar-scroll-list">
<!-- Login button --> <!-- Login button -->
<router-link <router-link
class="action" class="action"
@ -145,10 +149,8 @@
</div> </div>
<div class="buffer"></div> <div class="buffer"></div>
<!-- Credits and usage information section --> <div class="credits">
<div class="credits" v-if="isFiles && !disableUsedPercentage && usage"> <span>
<span v-if="disableExternal">File Browser</span>
<span v-else>
<a <a
rel="noopener noreferrer" rel="noopener noreferrer"
target="_blank" target="_blank"
@ -192,9 +194,14 @@ export default {
}; };
}, },
mounted() { mounted() {
this.updateUsage(); if (getters.isLoggedIn()) {
this.updateUsage();
}
}, },
computed: { computed: {
isMobile() {
return getters.isMobile();
},
isFiles() { isFiles() {
return getters.isFiles(); return getters.isFiles();
}, },
@ -294,6 +301,10 @@ export default {
</script> </script>
<style> <style>
.sidebar-scroll-list {
overflow: scroll;
margin-bottom: 0px !important;
}
#sidebar { #sidebar {
top: 0; top: 0;
display: flex; display: flex;
@ -344,10 +355,13 @@ body.rtl nav {
margin-bottom: 0.5em; margin-bottom: 0.5em;
} }
#sidebar .card {
overflow: unset !important;
}
#sidebar .action { #sidebar .action {
width: 100%; width: 100%;
display: block; display: block;
padding: 0.5em;
white-space: nowrap; white-space: nowrap;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
@ -369,7 +383,7 @@ body.rtl .action {
.credits { .credits {
font-size: 1em; font-size: 1em;
color: var(--textSecondary); color: var(--textSecondary);
padding: 1em; padding-left: 1em;
} }
.credits > span { .credits > span {
@ -392,7 +406,7 @@ body.rtl .action {
display: flex; display: flex;
justify-content: space-evenly; justify-content: space-evenly;
width: 100%; width: 100%;
padding-bottom: 1em !important; margin-top: 0.5em !important;
} }
.quick-toggles button { .quick-toggles button {
@ -402,16 +416,20 @@ body.rtl .action {
} }
.card-wrapper { .card-wrapper {
display: flex; display: flex !important;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
padding: 0.5em; padding: 1em !important;
min-height: 4em;
box-shadow: 0 2px 2px #00000024, 0 1px 5px #0000001f, 0 3px 1px -2px #0003;
/* overflow: auto; */
border-radius: 1em;
height: 100%;
} }
.sources { .sources {
padding: 0.5em; padding: 1em;
margin-top: 0.5em;
} }
.inner-card { .inner-card {

View File

@ -1,7 +1,7 @@
import { state } from "./state.js"; import { state } from "./state.js";
export const getters = { export const getters = {
isMobile: () => window.innerWidth <= 800, isMobile: () => state.isMobile,
isDarkMode: () => { isDarkMode: () => {
if (state.user == null) { if (state.user == null) {
return true; return true;
@ -24,15 +24,23 @@ export const getters = {
if (!getters.isLoggedIn()) { if (!getters.isLoggedIn()) {
return false return false
} }
return state.showSidebar || state.user.stickySidebar return state.showSidebar || getters.isStickySidebar()
},
isStickySidebar: () => {
if (getters.isMobile()) {
return false
}
if (!getters.isLoggedIn()) {
return true
}
return state.user?.stickySidebar
}, },
showOverlay: () => { showOverlay: () => {
if (!getters.isLoggedIn()) { if (!getters.isLoggedIn()) {
return false return false
} }
const hasPrompt = getters.currentPrompt() !== null && getters.currentPromptName() !== "more"; const hasPrompt = getters.currentPrompt() !== null && getters.currentPromptName() !== "more";
const sidebarHover = (!state.user.stickySidebar && state.showSidebar) || getters.isMobile(); return hasPrompt || getters.isSidebarVisible();
return hasPrompt || sidebarHover;
}, },
getRoutePath: () => { getRoutePath: () => {
return state.route.path.endsWith("/") return state.route.path.endsWith("/")

View File

@ -4,6 +4,11 @@ import { emitStateChanged } from './eventBus'; // Import the function from event
import { users } from "@/api"; import { users } from "@/api";
export const mutations = { export const mutations = {
setMobile() {
state.mobile = window.innerWidth <= 800
console.log("state updated",state.mobile)
emitStateChanged();
},
toggleDarkMode() { toggleDarkMode() {
mutations.updateUser({ "darkMode": !state.user.darkMode }); mutations.updateUser({ "darkMode": !state.user.darkMode });
emitStateChanged(); emitStateChanged();

View File

@ -2,6 +2,7 @@ import { reactive } from 'vue';
import { detectLocale } from "@/i18n"; import { detectLocale } from "@/i18n";
export const state = reactive({ export const state = reactive({
isMobile: window.innerWidth <= 800,
showSidebar: false, showSidebar: false,
usage: { usage: {
used: "0 B", used: "0 B",

View File

@ -14,7 +14,7 @@
></editorBar> ></editorBar>
<defaultBar :class="{ 'dark-mode-header': isDarkMode }" v-else></defaultBar> <defaultBar :class="{ 'dark-mode-header': isDarkMode }" v-else></defaultBar>
<sidebar></sidebar> <sidebar></sidebar>
<search v-if="currentView == 'listingView'"></search> <search v-if="showSearch"></search>
<main :class="{ 'dark-mode': isDarkMode, moveWithSidebar: moveWithSidebar }"> <main :class="{ 'dark-mode': isDarkMode, moveWithSidebar: moveWithSidebar }">
<router-view></router-view> <router-view></router-view>
</main> </main>
@ -58,7 +58,13 @@ export default {
itemWeight: 0, itemWeight: 0,
}; };
}, },
mounted() {
window.addEventListener("resize", this.updateIsMobile);
},
computed: { computed: {
showSearch() {
return getters.isFiles() && getters.isLoggedIn();
},
isLoggedIn() { isLoggedIn() {
return getters.isLoggedIn(); return getters.isLoggedIn();
}, },
@ -114,6 +120,10 @@ export default {
}, },
}, },
methods: { methods: {
updateIsMobile() {
console.log("setting");
mutations.setMobile();
},
resetPrompts() { resetPrompts() {
mutations.closeSidebar(); mutations.closeSidebar();
mutations.closeHovers(); mutations.closeHovers();