💄 Better speed dial
This commit is contained in:
		| @@ -83,22 +83,6 @@ | |||||||
|   <v-main id="main"> |   <v-main id="main"> | ||||||
|     <router-view /> |     <router-view /> | ||||||
|   </v-main> |   </v-main> | ||||||
|  |  | ||||||
|   <v-menu open-on-hover open-on-click :open-delay="0" :close-delay="0" location="top" |  | ||||||
|           transition="scroll-y-reverse-transition"> |  | ||||||
|     <template v-slot:activator="{ props }"> |  | ||||||
|       <v-fab v-bind="props" appear class="editor-fab" icon="mdi-pencil" color="primary" size="64" |  | ||||||
|              :active="id.userinfo.isLoggedIn" /> |  | ||||||
|     </template> |  | ||||||
|  |  | ||||||
|     <div class="flex flex-col items-center gap-4 mb-4"> |  | ||||||
|       <v-btn variant="elevated" color="secondary" icon="mdi-newspaper-variant" @click="editor.show.article = true" /> |  | ||||||
|       <v-btn variant="elevated" color="accent" icon="mdi-camera-iris" @click="editor.show.moment = true" /> |  | ||||||
|     </div> |  | ||||||
|   </v-menu> |  | ||||||
|  |  | ||||||
|   <post-tools /> |  | ||||||
|   <realm-tools /> |  | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||||
| @@ -123,7 +107,6 @@ const safeAreaBottom = computed(() => { | |||||||
| }) | }) | ||||||
|  |  | ||||||
| const id = useUserinfo() | const id = useUserinfo() | ||||||
| const editor = useEditor() |  | ||||||
|  |  | ||||||
| const username = computed(() => { | const username = computed(() => { | ||||||
|   if (id.userinfo.isLoggedIn) { |   if (id.userinfo.isLoggedIn) { | ||||||
| @@ -154,10 +137,3 @@ const drawerOpen = ref(true) | |||||||
| const drawerMini = ref(false) | const drawerMini = ref(false) | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <style scoped> |  | ||||||
| .editor-fab { |  | ||||||
|   position: fixed !important; |  | ||||||
|   bottom: 16px; |  | ||||||
|   right: 20px; |  | ||||||
| } |  | ||||||
| </style> |  | ||||||
|   | |||||||
							
								
								
									
										65
									
								
								src/layouts/plaza.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								src/layouts/plaza.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | |||||||
|  | <template> | ||||||
|  |   <router-view /> | ||||||
|  |  | ||||||
|  |   <v-fab | ||||||
|  |     appear | ||||||
|  |     class="editor-fab" | ||||||
|  |     color="primary" | ||||||
|  |     size="64" | ||||||
|  |     :active="id.userinfo.isLoggedIn" | ||||||
|  |   > | ||||||
|  |     <v-icon icon="mdi-pencil" /> | ||||||
|  |  | ||||||
|  |     <v-speed-dial | ||||||
|  |       target=".editor-fab" | ||||||
|  |       activator="parent" | ||||||
|  |       location="top center" | ||||||
|  |       class="editor-speed-dial" | ||||||
|  |       transition="slide-y-reverse-transition" | ||||||
|  |       open-on-hover | ||||||
|  |       open-on-click | ||||||
|  |     > | ||||||
|  |       <v-btn | ||||||
|  |         key="article" | ||||||
|  |         variant="elevated" | ||||||
|  |         color="secondary" | ||||||
|  |         icon="mdi-newspaper-variant" | ||||||
|  |         @click="editor.show.article = true" | ||||||
|  |       /> | ||||||
|  |       <v-btn | ||||||
|  |         key="moment" | ||||||
|  |         variant="elevated" | ||||||
|  |         color="accent" | ||||||
|  |         icon="mdi-camera-iris" | ||||||
|  |         @click="editor.show.moment = true" | ||||||
|  |       /> | ||||||
|  |     </v-speed-dial> | ||||||
|  |   </v-fab> | ||||||
|  |  | ||||||
|  |   <post-tools /> | ||||||
|  |   <realm-tools /> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script setup lang="ts"> | ||||||
|  | import PostTools from "@/components/publish/PostTools.vue" | ||||||
|  | import RealmTools from "@/components/realms/RealmTools.vue" | ||||||
|  | import { useEditor } from "@/stores/editor" | ||||||
|  | import { useUserinfo } from "@/stores/userinfo" | ||||||
|  |  | ||||||
|  | const id = useUserinfo() | ||||||
|  | const editor = useEditor() | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped> | ||||||
|  | .editor-fab { | ||||||
|  |   position: fixed !important; | ||||||
|  |   bottom: 16px; | ||||||
|  |   right: 20px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .editor-speed-dial { | ||||||
|  |   position: fixed !important; | ||||||
|  |   bottom: 16px; | ||||||
|  |   right: 20px; | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @@ -7,6 +7,10 @@ const router = createRouter({ | |||||||
|     { |     { | ||||||
|       path: "/", |       path: "/", | ||||||
|       component: MasterLayout, |       component: MasterLayout, | ||||||
|  |       children: [ | ||||||
|  |         { | ||||||
|  |           path: "/", | ||||||
|  |           component: () => import("@/layouts/plaza.vue"), | ||||||
|           children: [ |           children: [ | ||||||
|             { |             { | ||||||
|               path: "/", |               path: "/", | ||||||
| @@ -29,6 +33,19 @@ const router = createRouter({ | |||||||
|               path: "/realms/:realmId", |               path: "/realms/:realmId", | ||||||
|               name: "realms.page", |               name: "realms.page", | ||||||
|               component: () => import("@/views/realms/page.vue") |               component: () => import("@/views/realms/page.vue") | ||||||
|  |             } | ||||||
|  |           ] | ||||||
|  |         }, | ||||||
|  |  | ||||||
|  |         { | ||||||
|  |           path: "/chat", | ||||||
|  |           children: [ | ||||||
|  |             { | ||||||
|  |               path: ":channel", | ||||||
|  |               name: "chat.channel", | ||||||
|  |               component: () => import("@/views/chat/channel.vue") | ||||||
|  |             } | ||||||
|  |           ] | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|         { |         { | ||||||
|   | |||||||
| @@ -3,7 +3,8 @@ import { Preferences } from "@capacitor/preferences" | |||||||
|  |  | ||||||
| const serviceMap: { [id: string]: string } = { | const serviceMap: { [id: string]: string } = { | ||||||
|   interactive: "https://co.solsynth.dev", |   interactive: "https://co.solsynth.dev", | ||||||
|   identity: "https://id.solsynth.dev" |   identity: "https://id.solsynth.dev", | ||||||
|  |   messaging: "http://localhost:8447", | ||||||
| } | } | ||||||
|  |  | ||||||
| export async function request(service: string, input: string, init?: RequestInit, noRetry?: boolean) { | export async function request(service: string, input: string, init?: RequestInit, noRetry?: boolean) { | ||||||
|   | |||||||
							
								
								
									
										41
									
								
								src/views/chat/channel.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/views/chat/channel.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | |||||||
|  | <template> | ||||||
|  |   <v-app-bar :order="5" color="grey-lighten-3"> | ||||||
|  |     <div class="max-md:px-5 md:px-12 flex flex-grow-1 items-center"> | ||||||
|  |       <v-app-bar-nav-icon icon="mdi-chat" :loading="loading" /> | ||||||
|  |  | ||||||
|  |       <h2 class="ml-2 text-lg font-500">{{ metadata?.name }}</h2> | ||||||
|  |  | ||||||
|  |       <p class="ml-3 text-xs opacity-80">{{ metadata?.description }}</p> | ||||||
|  |     </div> | ||||||
|  |   </v-app-bar> | ||||||
|  |  | ||||||
|  |   <!-- @vue-ignore --> | ||||||
|  |   <v-snackbar v-model="error" :timeout="5000">Something went wrong... {{ error }}</v-snackbar> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script setup lang="ts"> | ||||||
|  | import { request } from "@/scripts/request" | ||||||
|  | import { useRoute } from "vue-router" | ||||||
|  | import { ref } from "vue" | ||||||
|  |  | ||||||
|  | const route = useRoute() | ||||||
|  |  | ||||||
|  | const error = ref<string | null>(null) | ||||||
|  | const loading = ref(false) | ||||||
|  |  | ||||||
|  | const metadata = ref<any>(null) | ||||||
|  |  | ||||||
|  | async function readMetadata() { | ||||||
|  |   loading.value = true | ||||||
|  |   const res = await request("messaging", `/api/channels/${route.params.channel}`) | ||||||
|  |   if (res.status !== 200) { | ||||||
|  |     error.value = await res.text() | ||||||
|  |   } else { | ||||||
|  |     error.value = null | ||||||
|  |     metadata.value = await res.json() | ||||||
|  |   } | ||||||
|  |   loading.value = false | ||||||
|  | } | ||||||
|  |  | ||||||
|  | readMetadata() | ||||||
|  | </script> | ||||||
		Reference in New Issue
	
	Block a user