]> OzVa Git service - ozva-cloud/commitdiff
feat: add empty state placeholder to page(#30)
authorJoe Koop <joe@joekoop.com>
Thu, 9 Jun 2022 23:41:09 +0000 (18:41 -0500)
committerGitHub <noreply@github.com>
Thu, 9 Jun 2022 23:41:09 +0000 (07:41 +0800)
* added "Empty folder" text to the page

* added text for nonexistent directory and no search results

assets/index.css
assets/index.js
src/server.rs

index 9a0fe000507bb6075a6c78543a3ae990333bb306..a4fa414bbd2f7a757d2ca79c113161b3f4787fea 100644 (file)
@@ -97,6 +97,11 @@ body {
   padding: 0 1em;
 }
 
+.empty-folder {
+  display: block;
+  padding-top: 1rem;
+}
+
 .uploaders-table th,
 .paths-table th {
   text-align: left;
@@ -208,4 +213,4 @@ body {
   .path a {
     color: #3191ff;
   }
-} 
\ No newline at end of file
+} 
index 39a62945496bd8045fe49997d1cce923f76ca23b..4e3d9d34fc184e08e0157cb10400e6fa5bc8b8a8 100644 (file)
@@ -7,6 +7,12 @@
  * @property {number} size
  */
 
+// https://stackoverflow.com/a/901144/3642588
+const params = new Proxy(new URLSearchParams(window.location.search), {
+  get: (searchParams, prop) => searchParams.get(prop),
+});
+
+const dirEmptyNote = params.q ? 'No results' : DATA.dir_exists ? 'Empty folder' : 'Folder will be created when a file is uploaded';
 
 /**
  * @type Element
@@ -54,6 +60,7 @@ class Uploader {
   </tr>`);
     $uploadersTable.classList.remove("hidden");
     this.$uploadStatus = document.getElementById(`uploadStatus${idx}`);
+    document.querySelector('.main i.empty-folder').remove();
 
     const ajax = new XMLHttpRequest();
     ajax.upload.addEventListener("progress", e => this.progress(e), false);
@@ -180,6 +187,8 @@ async function deletePath(index) {
         DATA.paths[index] = null;
         if (!DATA.paths.find(v => !!v)) {
           $pathsTable.classList.add("hidden");
+          document.querySelector('.main').insertAdjacentHTML("afterbegin", '<i class="empty-folder"></i>');
+          document.querySelector('.main .empty-folder').textContent = dirEmptyNote;
         }
     } else {
       throw new Error(await res.text())
@@ -275,6 +284,10 @@ function ready() {
   $pathsTableBody = document.querySelector(".paths-table tbody");
   $uploadersTable = document.querySelector(".uploaders-table");
 
+  if (params.q) {
+    document.getElementById('search').value = params.q;
+  }
+
   addBreadcrumb(DATA.breadcrumb);
   if (Array.isArray(DATA.paths)) {
     const len = DATA.paths.length;
@@ -284,6 +297,10 @@ function ready() {
     for (let i = 0; i < len; i++) {
       addPath(DATA.paths[i], i);
     }
+    if (len == 0) {
+      document.querySelector('.main').insertAdjacentHTML("afterbegin", '<i class="empty-folder"></i>');
+      document.querySelector('.main .empty-folder').textContent = dirEmptyNote;
+    }
   }
   if (DATA.allow_upload) {
     dropzone();
index f8029c5567931af78e4ae570e357f436e1fcfb81..d63d808f1290e71165a9fb410aff6053c76de52d 100644 (file)
@@ -325,7 +325,7 @@ impl InnerService {
                 }
             }
         };
-        self.send_index(path, paths, res)
+        self.send_index(path, paths, res, exist)
     }
 
     async fn handle_query_dir(
@@ -354,7 +354,7 @@ impl InnerService {
                 }
             }
         }
-        self.send_index(path, paths, res)
+        self.send_index(path, paths, res, true)
     }
 
     async fn handle_zip_dir(&self, path: &Path, res: &mut Response) -> BoxResult<()> {
@@ -645,6 +645,7 @@ impl InnerService {
         path: &Path,
         mut paths: Vec<PathItem>,
         res: &mut Response,
+        exist: bool,
     ) -> BoxResult<()> {
         paths.sort_unstable();
         let rel_path = match self.args.path.parent() {
@@ -656,6 +657,7 @@ impl InnerService {
             paths,
             allow_upload: self.args.allow_upload,
             allow_delete: self.args.allow_delete,
+            dir_exists: exist,
         };
         let data = serde_json::to_string(&data).unwrap();
         let output = INDEX_HTML.replace(
@@ -802,6 +804,7 @@ struct IndexData {
     paths: Vec<PathItem>,
     allow_upload: bool,
     allow_delete: bool,
+    dir_exists: bool,
 }
 
 #[derive(Debug, Serialize, Eq, PartialEq, Ord, PartialOrd)]