]> source.dussan.org Git - nextcloud-server.git/commitdiff
feat(trashbin): Show original location of deleted file
authorChristopher Ng <chrng8@gmail.com>
Wed, 27 Mar 2024 22:08:08 +0000 (15:08 -0700)
committerChristopher Ng <chrng8@gmail.com>
Thu, 28 Mar 2024 18:00:22 +0000 (11:00 -0700)
Signed-off-by: Christopher Ng <chrng8@gmail.com>
apps/files_trashbin/src/main.ts
apps/files_trashbin/src/trashbin.scss [new file with mode: 0644]

index 5c625e7bf4fe89e96ae6e8ed09379b1f24d7b0ab..d7a8ff48c18aec0a5ca06c184f1db3aa15eb42f7 100644 (file)
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  *
  */
-import { translate as t, translate } from '@nextcloud/l10n'
+
+import './trashbin.scss'
+
+import { translate as t } from '@nextcloud/l10n'
 import DeleteSvg from '@mdi/svg/svg/delete.svg?raw'
 import moment from '@nextcloud/moment'
 
@@ -27,7 +30,20 @@ import { getContents } from './services/trashbin'
 
 // Register restore action
 import './actions/restoreAction'
-import { Column, View, getNavigation } from '@nextcloud/files'
+import { Column, Node, View, getNavigation } from '@nextcloud/files'
+import { dirname, joinPaths } from '@nextcloud/paths'
+
+const parseOriginalLocation = (node: Node): string => {
+       const path = node.attributes?.['trashbin-original-location'] !== undefined ? String(node.attributes?.['trashbin-original-location']) : null
+       if (!path) {
+               return t('files_trashbin', 'Unknown')
+       }
+       const dir = dirname(path)
+       if (dir === path) { // Node is in root folder
+               return t('files_trashbin', 'All files')
+       }
+       return joinPaths(t('files_trashbin', 'All files'), dir)
+}
 
 const Navigation = getNavigation()
 Navigation.register(new View({
@@ -45,6 +61,23 @@ Navigation.register(new View({
        defaultSortKey: 'deleted',
 
        columns: [
+               new Column({
+                       id: 'original-location',
+                       title: t('files_trashbin', 'Original location'),
+                       render(node) {
+                               const originalLocation = parseOriginalLocation(node)
+                               const span = document.createElement('span')
+                               span.title = originalLocation
+                               span.textContent = originalLocation
+                               return span
+                       },
+                       sort(nodeA, nodeB) {
+                               const locationA = parseOriginalLocation(nodeA)
+                               const locationB = parseOriginalLocation(nodeB)
+                               return locationA.localeCompare(locationB)
+                       },
+               }),
+
                new Column({
                        id: 'deleted',
                        title: t('files_trashbin', 'Deleted'),
@@ -58,7 +91,7 @@ Navigation.register(new View({
                                }
 
                                // Unknown deletion time
-                               span.textContent = translate('files_trashbin', 'A long time ago')
+                               span.textContent = t('files_trashbin', 'A long time ago')
                                return span
                        },
                        sort(nodeA, nodeB) {
diff --git a/apps/files_trashbin/src/trashbin.scss b/apps/files_trashbin/src/trashbin.scss
new file mode 100644 (file)
index 0000000..4fa54c4
--- /dev/null
@@ -0,0 +1,3 @@
+.files-list__row-trashbin-original-location {
+  width: 150px !important;
+}