Jelajahi Sumber

fix: Dashboard directories will now use their icon

jamesread 6 bulan lalu
induk
melakukan
9256b5c756

+ 38 - 1
frontend/resources/vue/components/DashboardComponentDirectory.vue

@@ -1,11 +1,13 @@
 <template>
     <button @click="navigateToDirectory">
-        {{ component.title }}
+        <span class="icon" v-html="unicodeIcon"></span>
+        <span class="title">{{ component.title }}</span>
     </button>
 </template>
 
 <script setup>
 import { useRouter } from 'vue-router'
+import { computed } from 'vue'
 
 const router = useRouter()
 
@@ -16,6 +18,18 @@ const props = defineProps({
     }
 })
 
+function getUnicodeIcon(icon) {
+    if (icon === '' || !icon) {
+        return '&#x1f4c1;' // Default folder icon
+    } else {
+        return unescape(icon)
+    }
+}
+
+const unicodeIcon = computed(() => {
+    return getUnicodeIcon(props.component.icon)
+})
+
 function navigateToDirectory() {
     const params = { title: props.component.title }
     
@@ -34,9 +48,18 @@ function navigateToDirectory() {
 }
 
 button {
+    display: flex;
+    flex-direction: column;
+    flex-grow: 1;
+    justify-content: center;
+    padding: 0.5em;
     box-shadow: 0 0 .6em #aaa;
     background-color: #fff;
     border-radius: .7em;
+    border: 1px solid #ccc;
+    cursor: pointer;
+    transition: all 0.2s ease;
+    font-size: .85em;
 }
 
 button:hover {
@@ -44,16 +67,30 @@ button:hover {
     border-color: #999;
 }
 
+button .icon {
+    font-size: 3em;
+    flex-grow: 1;
+    align-content: center;
+}
+
+button .title {
+    font-weight: 500;
+    padding: 0.2em;
+}
+
 @media (prefers-color-scheme: dark) {
     button {
         box-shadow: 0 0 .6em #000;
         background-color: #111;
         border-color: #000;
+        color: #fff;
     }
 
     button:hover {
         background-color: #222;
         border-color: #000;
+        box-shadow: 0 0 6px #444;
+        color: #fff;
     }
 }