Implement quick access note config options
authorAdam Dullage <redacted>
Fri, 13 Sep 2024 12:00:57 +0000 (13:00 +0100)
committerAdam Dullage <redacted>
Fri, 13 Sep 2024 12:00:57 +0000 (13:00 +0100)
client/views/Home.vue
server/global_config.py
server/main.py

index 8b82aaee4c8b7f0b194741c8cb15cde6d18b9887..a81b4d99002bd654a135690582b7a38a37c67d79 100644 (file)
@@ -1,6 +1,6 @@
 <template>
-  <div class="flex h-full items-center justify-center">
-    <div class="flex max-w-[500px] flex-1 flex-col items-center">
+  <div class="flex h-full justify-center">
+    <div class="flex max-w-[500px] flex-1 flex-col items-center pt-[25vh]">
       <Logo class="mb-5" />
       <SearchInput class="mb-5 shadow-[0_0_20px] shadow-theme-shadow" />
       <LoadingIndicator
@@ -10,9 +10,9 @@
       >
         <p
           v-if="notes.length > 0"
-          class="mb-2 text-xs font-bold text-theme-text-very-muted"
+          class="mb-2 text-xs font-bold uppercase text-theme-text-very-muted"
         >
-          RECENTLY MODIFIED
+          {{ globalStore.config.quickAccessTitle }}
         </p>
         <RouterLink
           v-for="note in notes"
@@ -31,7 +31,6 @@ import { useToast } from "primevue/usetoast";
 import { onMounted, ref, watch } from "vue";
 import { RouterLink } from "vue-router";
 
-import { mdiPencil } from "@mdi/js";
 import { apiErrorHandler, getNotes } from "../api.js";
 import CustomButton from "../components/CustomButton.vue";
 import LoadingIndicator from "../components/LoadingIndicator.vue";
@@ -41,23 +40,22 @@ import SearchInput from "../partials/SearchInput.vue";
 
 const globalStore = useGlobalStore();
 const loadingIndicator = ref();
-const noNotesMessage =
-  "Click the 'New Note' button at the top of the page to get started.";
 const notes = ref([]);
 const toast = useToast();
 
 function init() {
-  if (globalStore.config.hideRecentlyModified) {
+  if (globalStore.config.quickAccessHide) {
     return;
   }
-  getNotes("*", "lastModified", "desc", 5)
+  getNotes(
+    globalStore.config.quickAccessTerm,
+    globalStore.config.quickAccessSort,
+    globalStore.config.quickAccessOrder,
+    globalStore.config.quickAccessLimit,
+  )
     .then((data) => {
       notes.value = data;
-      if (notes.value.length > 0) {
-        loadingIndicator.value.setLoaded();
-      } else {
-        loadingIndicator.value.setFailed(noNotesMessage, mdiPencil);
-      }
+      loadingIndicator.value.setLoaded();
     })
     .catch((error) => {
       loadingIndicator.value.setFailed();
index dd1022ad7f25ab6ba66303912da06bfd5e130ee9..df696c29473bbd5e599f3cb13f078247a7454ac5 100644 (file)
@@ -9,7 +9,12 @@ class GlobalConfig:
     def __init__(self) -> None:\r
         logger.debug("Loading global config...")\r
         self.auth_type: AuthType = self._load_auth_type()\r
-        self.hide_recently_modified: bool = self._load_hide_recently_modified()\r
+        self.quick_access_hide: bool = self._quick_access_hide()\r
+        self.quick_access_title: str = self._quick_access_title()\r
+        self.quick_access_term: str = self._quick_access_term()\r
+        self.quick_access_sort: str = self._quick_access_sort()\r
+        self.quick_access_order: str = self._quick_access_order()\r
+        self.quick_access_limit: int = self._quick_access_limit()\r
         self.path_prefix: str = self._load_path_prefix()\r
 \r
     def load_auth(self):\r
@@ -47,9 +52,57 @@ class GlobalConfig:
             sys.exit(1)\r
         return auth_type\r
 \r
-    def _load_hide_recently_modified(self):\r
-        key = "FLATNOTES_HIDE_RECENTLY_MODIFIED"\r
-        return get_env(key, mandatory=False, default=False, cast_bool=True)\r
+    def _quick_access_hide(self):\r
+        key = "FLATNOTES_QUICK_ACCESS_HIDE"\r
+        value = get_env(key, mandatory=False, default=False, cast_bool=True)\r
+        if value is False:\r
+            depricated_key = "FLATNOTES_HIDE_RECENTLY_MODIFIED"\r
+            value = get_env(\r
+                depricated_key, mandatory=False, default=False, cast_bool=True\r
+            )\r
+            if value is True:\r
+                logger.warning(\r
+                    f"{depricated_key} is depricated. Please use {key} instead."\r
+                )\r
+        return value\r
+\r
+    def _quick_access_title(self):\r
+        key = "FLATNOTES_QUICK_ACCESS_TITLE"\r
+        return get_env(key, mandatory=False, default="RECENTLY MODIFIED")\r
+\r
+    def _quick_access_term(self):\r
+        key = "FLATNOTES_QUICK_ACCESS_TERM"\r
+        return get_env(key, mandatory=False, default="*")\r
+\r
+    def _quick_access_sort(self):\r
+        key = "FLATNOTES_QUICK_ACCESS_SORT"\r
+        value = get_env(key, mandatory=False, default="lastModified")\r
+        valid_values = ["score", "title", "lastModified"]\r
+        if value not in valid_values:\r
+            logger.error(\r
+                f"Invalid value '{value}' for {key}. "\r
+                + "Must be one of: "\r
+                + ", ".join(valid_values)\r
+            )\r
+            sys.exit(1)\r
+        return value\r
+\r
+    def _quick_access_order(self):\r
+        key = "FLATNOTES_QUICK_ACCESS_ORDER"\r
+        value = get_env(key, mandatory=False, default="desc")\r
+        valid_values = ["asc", "desc"]\r
+        if value not in valid_values:\r
+            logger.error(\r
+                f"Invalid value '{value}' for {key}. "\r
+                + "Must be one of: "\r
+                + ", ".join(valid_values)\r
+            )\r
+            sys.exit(1)\r
+        return value\r
+\r
+    def _quick_access_limit(self):\r
+        key = "FLATNOTES_QUICK_ACCESS_LIMIT"\r
+        return get_env(key, mandatory=False, default=5, cast_int=True)\r
 \r
     def _load_path_prefix(self):\r
         key = "FLATNOTES_PATH_PREFIX"\r
@@ -72,4 +125,9 @@ class AuthType(str, Enum):
 \r
 class GlobalConfigResponseModel(CustomBaseModel):\r
     auth_type: AuthType\r
-    hide_recently_modified: bool\r
+    quick_access_hide: bool\r
+    quick_access_title: str\r
+    quick_access_term: str\r
+    quick_access_sort: str\r
+    quick_access_order: str\r
+    quick_access_limit: int\r
index aa3ef92c86cd03e2d054cb1e510915fd1c2ce103..4ec52ffe107f2b440039a43cc4c3adccb6f77ec1 100644 (file)
@@ -178,7 +178,12 @@ def get_config():
     """Retrieve server-side config required for the UI."""\r
     return GlobalConfigResponseModel(\r
         auth_type=global_config.auth_type,\r
-        hide_recently_modified=global_config.hide_recently_modified,\r
+        quick_access_hide=global_config.quick_access_hide,\r
+        quick_access_title=global_config.quick_access_title,\r
+        quick_access_term=global_config.quick_access_term,\r
+        quick_access_sort=global_config.quick_access_sort,\r
+        quick_access_order=global_config.quick_access_order,\r
+        quick_access_limit=global_config.quick_access_limit,\r
     )\r
 \r
 \r
git clone https://git.99rst.org/PROJECT