api resource refactoring part 3

This commit is contained in:
Peter Papp
2021-08-27 11:01:44 +02:00
parent 174f2a2c1f
commit d299183ecd
16 changed files with 101 additions and 91 deletions

View File

@@ -12,7 +12,7 @@
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~f312a84e.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~f312a84e.js?id=004c11df35e63517608d", "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~f312a84e.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~f312a84e.js?id=004c11df35e63517608d",
"/chunks/admin~chunks/platform.js": "/chunks/admin~chunks/platform.js?id=0e511f0ceaac7257bf25", "/chunks/admin~chunks/platform.js": "/chunks/admin~chunks/platform.js?id=0e511f0ceaac7257bf25",
"/chunks/admin~chunks/platform~chunks/settings.js": "/chunks/admin~chunks/platform~chunks/settings.js?id=f3bc2f8030f1dd06472a", "/chunks/admin~chunks/platform~chunks/settings.js": "/chunks/admin~chunks/platform~chunks/settings.js?id=f3bc2f8030f1dd06472a",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js?id=8a92b1d0d66e0dc8fb71", "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js?id=99b4e9845e03f9d2e8ed",
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=5f8d3e698c1fd5b9b5a5", "/chunks/app-appearance.js": "/chunks/app-appearance.js?id=5f8d3e698c1fd5b9b5a5",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js?id=055d17c4463d3ef30218", "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js?id=055d17c4463d3ef30218",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js?id=fd6936cca8f3b8b4de9a", "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js?id=fd6936cca8f3b8b4de9a",
@@ -204,8 +204,8 @@
"/js/main.eed73e10bc48ddd70f77.hot-update.js": "/js/main.eed73e10bc48ddd70f77.hot-update.js", "/js/main.eed73e10bc48ddd70f77.hot-update.js": "/js/main.eed73e10bc48ddd70f77.hot-update.js",
"/js/main.06f03f5764345d4a21ae.hot-update.js": "/js/main.06f03f5764345d4a21ae.hot-update.js", "/js/main.06f03f5764345d4a21ae.hot-update.js": "/js/main.06f03f5764345d4a21ae.hot-update.js",
"/chunks/admin~chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-item~0919ded8.js": "/chunks/admin~chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-item~0919ded8.js?id=e08424c8b2e29269c282", "/chunks/admin~chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-item~0919ded8.js": "/chunks/admin~chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-item~0919ded8.js?id=e08424c8b2e29269c282",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~6dc4969c.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~6dc4969c.js?id=52a5d33ca4b4749dd679", "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~6dc4969c.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~6dc4969c.js?id=4746e578131ec5449693",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.js?id=5e36dcf07975aa1955fb", "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.js?id=fc74f2c33b38bd414bca",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~860e9aef.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~860e9aef.js?id=285952e7d81a73c1b366", "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~860e9aef.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~860e9aef.js?id=285952e7d81a73c1b366",
"/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-items~chunks/page~9b5759a9.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-items~chunks/page~9b5759a9.js?id=eb26643e072aa1f2b4b5", "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-items~chunks/page~9b5759a9.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-items~chunks/page~9b5759a9.js?id=eb26643e072aa1f2b4b5",
"/chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared/files~chunks/trash.js": "/chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared/files~chunks/trash.js?id=854ed8a5f3a883f6d4c5", "/chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared/files~chunks/trash.js": "/chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared/files~chunks/trash.js?id=854ed8a5f3a883f6d4c5",
@@ -275,5 +275,15 @@
"/js/main.ab10910fe063d675001a.hot-update.js": "/js/main.ab10910fe063d675001a.hot-update.js", "/js/main.ab10910fe063d675001a.hot-update.js": "/js/main.ab10910fe063d675001a.hot-update.js",
"/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared/files~chunks/trash.67dbc41f14111befc449.hot-update.js": "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared/files~chunks/trash.67dbc41f14111befc449.hot-update.js", "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared/files~chunks/trash.67dbc41f14111befc449.hot-update.js": "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared/files~chunks/trash.67dbc41f14111befc449.hot-update.js",
"/js/main.742b35a7325a1164ece6.hot-update.js": "/js/main.742b35a7325a1164ece6.hot-update.js", "/js/main.742b35a7325a1164ece6.hot-update.js": "/js/main.742b35a7325a1164ece6.hot-update.js",
"/js/main.c17fbc0fc4ce44a45291.hot-update.js": "/js/main.c17fbc0fc4ce44a45291.hot-update.js" "/js/main.c17fbc0fc4ce44a45291.hot-update.js": "/js/main.c17fbc0fc4ce44a45291.hot-update.js",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.7ecca405e896e99c7399.hot-update.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.7ecca405e896e99c7399.hot-update.js",
"/js/main.aacf02735be6683380cb.hot-update.js": "/js/main.aacf02735be6683380cb.hot-update.js",
"/js/main.7aadf25c13d1dd531752.hot-update.js": "/js/main.7aadf25c13d1dd531752.hot-update.js",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~6dc4969c.c0c029c2523ca0cf38fb.hot-update.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~6dc4969c.c0c029c2523ca0cf38fb.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.027c39918be3318827b9.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.027c39918be3318827b9.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.64becd27fa67df342538.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.64becd27fa67df342538.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.0712655bd72af19a44db.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.0712655bd72af19a44db.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.0d0a3ec768afdd56172b.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.0d0a3ec768afdd56172b.hot-update.js",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.79e795629c63b8c2bd6f.hot-update.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.79e795629c63b8c2bd6f.hot-update.js",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.805e066dbc352fc4f11f.hot-update.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~8d246649.805e066dbc352fc4f11f.hot-update.js"
} }

View File

@@ -161,7 +161,7 @@ export default {
events.$emit('mobile-context-menu:show', this.item) events.$emit('mobile-context-menu:show', this.item)
}, },
dragEnter() { dragEnter() {
if (this.item.type !== 'folder') return if (this.item.data.type !== 'folder') return
this.area = true this.area = true
}, },
@@ -226,7 +226,7 @@ export default {
this.$router.push({name: 'Public', params: {token: this.$route.params.token, id: this.item.data.id}}) this.$router.push({name: 'Public', params: {token: this.$route.params.token, id: this.item.data.id}})
} else if (route === 'Trash') { } else if (route === 'Trash') {
this.$router.push({name: 'Trash', params: {id: this.item.data.id}}) this.$router.push({name: 'Trash', params: {id: this.item.data.id}})
} else if (route === 'Files') { } else if (['Files', 'MySharedItems'].includes(route)) {
this.$router.push({name: 'Files', params: {id: this.item.data.id}}) this.$router.push({name: 'Files', params: {id: this.item.data.id}})
} else if (route === 'TeamFolders') { } else if (route === 'TeamFolders') {
this.$router.push({name: 'TeamFolders', params: {id: this.item.data.id}}) this.$router.push({name: 'TeamFolders', params: {id: this.item.data.id}})
@@ -269,7 +269,7 @@ export default {
this.$router.push({name: 'Public', params: {token: this.$route.params.token, id: this.item.data.id}}) this.$router.push({name: 'Public', params: {token: this.$route.params.token, id: this.item.data.id}})
} else if (route === 'Trash') { } else if (route === 'Trash') {
this.$router.push({name: 'Trash', params: {id: this.item.data.id}}) this.$router.push({name: 'Trash', params: {id: this.item.data.id}})
} else if (route === 'Files') { } else if (['Files', 'MySharedItems'].includes(route)) {
this.$router.push({name: 'Files', params: {id: this.item.data.id}}) this.$router.push({name: 'Files', params: {id: this.item.data.id}})
} else if (route === 'TeamFolders') { } else if (route === 'TeamFolders') {
this.$router.push({name: 'TeamFolders', params: {id: this.item.data.id}}) this.$router.push({name: 'TeamFolders', params: {id: this.item.data.id}})

View File

@@ -29,7 +29,7 @@
}, },
computed: { computed: {
isDeleted() { isDeleted() {
return this.item.data.attributes.deleted_at ? true : false return this.item.data.attributes.deleted_at
}, },
emoji() { emoji() {
// Return emoji if is changed from rename popup // Return emoji if is changed from rename popup

View File

@@ -22,7 +22,7 @@
<div v-if="isEmptyQuery" class="spotlight-results"> <div v-if="isEmptyQuery" class="spotlight-results">
<!--Show results--> <!--Show results-->
<div v-if="results.length !== 0" v-for="(item, i) in results" :key="item.id" class="result-item"> <div v-if="results.length !== 0" v-for="(item, i) in results" :key="item.data.id" class="result-item">
<FileItemList <FileItemList
:item="item" :item="item"
class="file-item" class="file-item"
@@ -105,17 +105,17 @@ export default {
let file = this.results[this.index] let file = this.results[this.index]
// Show folder // Show folder
if (file.type === 'folder') { if (file.data.type === 'folder') {
this.$router.push({name: 'Files', params: {id: this.results[this.index].id}}) this.$router.push({name: 'Files', params: {id: this.results[this.index].data.id}})
} else { } else {
// Show file // Show file
if (['video', 'audio', 'image'].includes(file.type) || file.mimetype === 'pdf'){ if (['video', 'audio', 'image'].includes(file.data.type) || file.data.attributes.mimetype === 'pdf'){
this.$store.commit('ADD_TO_FAST_PREVIEW', this.results[this.index]) this.$store.commit('ADD_TO_FAST_PREVIEW', this.results[this.index])
events.$emit('file-preview:show') events.$emit('file-preview:show')
} else { } else {
this.$downloadFile(file.file_url, file.name + '.' + file.mimetype) this.$downloadFile(file.data.attributes.file_url, file.data.attributes.name + '.' + file.data.attributes.mimetype)
} }
} }
@@ -138,7 +138,7 @@ export default {
let route = undefined let route = undefined
if (this.$store.getters.sharedDetail) { if (this.$store.getters.sharedDetail) {
let permission = this.$store.getters.sharedDetail.is_protected let permission = this.$store.getters.sharedDetail.data.attributes.protected
? 'private' ? 'private'
: 'public' : 'public'
@@ -153,7 +153,13 @@ export default {
params: {query: value} params: {query: value}
}) })
.then(response => { .then(response => {
this.results = response.data
let files = response.data.files.data
let folders = response.data.folders.data
console.log(files);
this.results = folders.concat(files)
}) })
.catch(() => this.$isSomethingWrong()) .catch(() => this.$isSomethingWrong())
.finally(() => this.isLoading = false) .finally(() => this.isLoading = false)

View File

@@ -81,7 +81,7 @@ const actions = {
axios axios
.get(getters.api + '/browse/latest') .get(getters.api + '/browse/latest')
.then(response => { .then(response => {
commit('LOADING_STATE', {loading: false, data: response.data}) commit('LOADING_STATE', {loading: false, data: response.data.files.data})
commit('SET_CURRENT_FOLDER', undefined) commit('SET_CURRENT_FOLDER', undefined)
events.$emit('scrollTop') events.$emit('scrollTop')
@@ -94,7 +94,11 @@ const actions = {
axios axios
.get(getters.api + '/browse/share' + getters.sorting.URI) .get(getters.api + '/browse/share' + getters.sorting.URI)
.then(response => { .then(response => {
commit('LOADING_STATE', {loading: false, data: response.data})
let folders = response.data.folders.data
let files = response.data.files.data
commit('LOADING_STATE', {loading: false, data: folders.concat(files)})
commit('SET_CURRENT_FOLDER', undefined) commit('SET_CURRENT_FOLDER', undefined)
events.$emit('scrollTop') events.$emit('scrollTop')
@@ -107,7 +111,11 @@ const actions = {
axios axios
.get(`${getters.api}/browse/trash/${id}/${getters.sorting.URI}`) .get(`${getters.api}/browse/trash/${id}/${getters.sorting.URI}`)
.then(response => { .then(response => {
commit('LOADING_STATE', {loading: false, data: response.data.content})
let folders = response.data.folders.data
let files = response.data.files.data
commit('LOADING_STATE', {loading: false, data: folders.concat(files)})
commit('SET_CURRENT_FOLDER', response.data.folder) commit('SET_CURRENT_FOLDER', response.data.folder)
events.$emit('scrollTop') events.$emit('scrollTop')

View File

@@ -1,4 +1,5 @@
<?php <?php
namespace App\Users\Models; namespace App\Users\Models;
use ByteUnits\Metric; use ByteUnits\Metric;
@@ -95,7 +96,7 @@ class User extends Authenticatable implements MustVerifyEmail
{ {
$is_storage_limit = get_settings('storage_limitation') ?? 1; $is_storage_limit = get_settings('storage_limitation') ?? 1;
if (! $is_storage_limit) { if (!$is_storage_limit) {
return [ return [
'used' => $this->usedCapacity, 'used' => $this->usedCapacity,
'used_formatted' => Metric::bytes($this->usedCapacity)->format(), 'used_formatted' => Metric::bytes($this->usedCapacity)->format(),
@@ -103,7 +104,7 @@ class User extends Authenticatable implements MustVerifyEmail
} }
return [ return [
'used' => (float) get_storage_fill_percentage($this->usedCapacity, $this->settings->storage_capacity), 'used' => (float)get_storage_fill_percentage($this->usedCapacity, $this->settings->storage_capacity),
'used_formatted' => get_storage_fill_percentage($this->usedCapacity, $this->settings->storage_capacity) . '%', 'used_formatted' => get_storage_fill_percentage($this->usedCapacity, $this->settings->storage_capacity) . '%',
'capacity' => $this->settings->storage_capacity, 'capacity' => $this->settings->storage_capacity,
'capacity_formatted' => format_gigabytes($this->settings->storage_capacity), 'capacity_formatted' => format_gigabytes($this->settings->storage_capacity),
@@ -116,7 +117,7 @@ class User extends Authenticatable implements MustVerifyEmail
public function getUsedCapacityAttribute(): int public function getUsedCapacityAttribute(): int
{ {
return $this->filesWithTrashed return $this->filesWithTrashed
->map(fn ($item) => $item->getRawOriginal())->sum('filesize'); ->map(fn($item) => $item->getRawOriginal())->sum('filesize');
} }
/** /**
@@ -165,7 +166,10 @@ class User extends Authenticatable implements MustVerifyEmail
public function latestUploads(): HasMany public function latestUploads(): HasMany
{ {
return $this->hasMany(File::class) return $this->hasMany(File::class)
->with(['parent:id,name']) ->with([
'parent:id,name',
'shared:token,id,item_id,permission,is_protected,expire_in',
])
->take(40); ->take(40);
} }

View File

@@ -2,12 +2,12 @@
namespace Domain\Browsing\Controllers; namespace Domain\Browsing\Controllers;
use App\Users\Models\User; use App\Users\Models\User;
use Illuminate\Support\Collection; use Domain\Files\Resources\FilesCollection;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
class BrowseLatestFilesController class BrowseLatestFilesController
{ {
public function __invoke(): Collection public function __invoke(): array
{ {
$user = User::with([ $user = User::with([
'latestUploads' => fn ($query) => $query->sortable(['created_at' => 'desc']), 'latestUploads' => fn ($query) => $query->sortable(['created_at' => 'desc']),
@@ -15,6 +15,9 @@ class BrowseLatestFilesController
->where('id', Auth::id()) ->where('id', Auth::id())
->first(); ->first();
return $user->latestUploads; return [
'files' => new FilesCollection($user->latestUploads),
'root' => null,
];
} }
} }

View File

@@ -2,14 +2,15 @@
namespace Domain\Browsing\Controllers; namespace Domain\Browsing\Controllers;
use Domain\Files\Models\File; use Domain\Files\Models\File;
use Domain\Files\Resources\FilesCollection;
use Domain\Folders\Resources\FolderCollection;
use Domain\Sharing\Models\Share; use Domain\Sharing\Models\Share;
use Domain\Folders\Models\Folder; use Domain\Folders\Models\Folder;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
class BrowseSharedItemsController class BrowseSharedItemsController
{ {
public function __invoke(): Collection public function __invoke(): array
{ {
$user_id = Auth::id(); $user_id = Auth::id();
@@ -36,7 +37,10 @@ class BrowseSharedItemsController
->get(); ->get();
// Collect folders and files to single array // Collect folders and files to single array
return collect([$folders, $files]) return [
->collapse(); 'folders' => new FolderCollection($folders),
'files' => new FilesCollection($files),
'root' => null,
];
} }
} }

View File

@@ -2,7 +2,10 @@
namespace Domain\Browsing\Controllers; namespace Domain\Browsing\Controllers;
use Domain\Files\Models\File; use Domain\Files\Models\File;
use Domain\Files\Resources\FilesCollection;
use Domain\Folders\Models\Folder; use Domain\Folders\Models\Folder;
use Domain\Folders\Resources\FolderCollection;
use Illuminate\Http\Resources\Json\ResourceCollection;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
class BrowseTrashContentController class BrowseTrashContentController
@@ -60,8 +63,9 @@ class BrowseTrashContentController
// Collect folders and files to single array // Collect folders and files to single array
return [ return [
'content' => collect([$folders, $files_trashed])->collapse(), 'folders' => new FolderCollection($folders),
'folder' => $requestedFolder, 'files' => new FilesCollection($files_trashed),
'root' => $requestedFolder,
]; ];
} }
} }

View File

@@ -2,8 +2,9 @@
namespace Domain\Browsing\Controllers; namespace Domain\Browsing\Controllers;
use Domain\Files\Models\File; use Domain\Files\Models\File;
use Domain\Files\Resources\FilesCollection;
use Domain\Folders\Models\Folder; use Domain\Folders\Models\Folder;
use Illuminate\Support\Collection; use Domain\Folders\Resources\FolderCollection;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Domain\Items\Requests\SearchRequest; use Domain\Items\Requests\SearchRequest;
@@ -11,7 +12,7 @@ class SearchFilesAndFoldersController
{ {
public function __invoke( public function __invoke(
SearchRequest $request SearchRequest $request
): Collection { ): array {
$user_id = Auth::id(); $user_id = Auth::id();
$query = remove_accents( $query = remove_accents(
@@ -19,17 +20,18 @@ class SearchFilesAndFoldersController
); );
// Search files id db // Search files id db
$searched_files = File::search($query) $files = File::search($query)
->where('user_id', $user_id) ->where('user_id', $user_id)
->get(); ->get();
$searched_folders = Folder::search($query) $folders = Folder::search($query)
->where('user_id', $user_id) ->where('user_id', $user_id)
->get(); ->get();
// Collect folders and files to single array // Collect folders and files to single array
return collect([$searched_folders, $searched_files]) return [
->collapse() 'folders' => new FolderCollection($folders),
->take(10); 'files' => new FilesCollection($files),
];
} }
} }

View File

@@ -2,10 +2,13 @@
namespace Domain\Browsing\Controllers; namespace Domain\Browsing\Controllers;
use Domain\Files\Models\File; use Domain\Files\Models\File;
use Domain\Files\Resources\FilesCollection;
use Domain\Folders\Resources\FolderCollection;
use Domain\Sharing\Models\Share; use Domain\Sharing\Models\Share;
use Domain\Folders\Models\Folder; use Domain\Folders\Models\Folder;
use Domain\Sharing\Actions\ProtectShareRecordAction; use Domain\Sharing\Actions\ProtectShareRecordAction;
use Domain\Sharing\Actions\VerifyAccessToItemAction; use Domain\Sharing\Actions\VerifyAccessToItemAction;
use Illuminate\Http\Resources\Json\ResourceCollection;
/** /**
* Browse shared folder * Browse shared folder
@@ -44,10 +47,10 @@ class VisitorBrowseFolderController
// Set thumbnail links for public files // Set thumbnail links for public files
$files->map(fn ($file) => $file->setPublicUrl($shared->token)); $files->map(fn ($file) => $file->setPublicUrl($shared->token));
// Collect folders and files to single array
return [ return [
'content' => collect([$folders, $files])->collapse(), 'folders' => new FolderCollection($folders),
'folder' => $requestedFolder, 'files' => new FilesCollection($files),
'root' => $requestedFolder,
]; ];
} }
} }

View File

@@ -1,12 +1,13 @@
<?php <?php
namespace Domain\Browsing\Controllers; namespace Domain\Browsing\Controllers;
use Domain\Files\Resources\FilesCollection;
use Domain\Folders\Resources\FolderCollection;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Domain\Files\Models\File; use Domain\Files\Models\File;
use Domain\Sharing\Models\Share; use Domain\Sharing\Models\Share;
use Domain\Folders\Models\Folder; use Domain\Folders\Models\Folder;
use Illuminate\Support\Collection;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Domain\Sharing\Actions\ProtectShareRecordAction; use Domain\Sharing\Actions\ProtectShareRecordAction;
@@ -23,7 +24,7 @@ class VisitorSearchFilesAndFoldersController extends Controller
public function __invoke( public function __invoke(
Request $request, Request $request,
Share $shared, Share $shared,
): Collection { ): array {
// Check ability to access protected share record // Check ability to access protected share record
($this->protectShareRecord)($shared); ($this->protectShareRecord)($shared);
@@ -64,8 +65,9 @@ class VisitorSearchFilesAndFoldersController extends Controller
}); });
// Collect folders and files to single array // Collect folders and files to single array
return collect([$folders, $files]) return [
->collapse() 'folders' => new FolderCollection($folders),
->take(10); 'files' => new FilesCollection($files),
];
} }
} }

View File

@@ -84,32 +84,6 @@ class File extends Model
$this->public_access = $token; $this->public_access = $token;
} }
/**
* Format created at date
*/
public function getCreatedAtAttribute(): string
{
return format_date(
set_time_by_user_timezone($this->attributes['created_at']),
__t('time')
);
}
/**
* Format deleted at date reformat
*/
public function getDeletedAtAttribute(): string | null
{
if (! $this->attributes['deleted_at']) {
return null;
}
return format_date(
set_time_by_user_timezone($this->attributes['deleted_at']),
__t('time')
);
}
/** /**
* Format fileSize * Format fileSize
*/ */

View File

@@ -29,12 +29,15 @@ class FileResource extends JsonResource
'thumbnail' => $this->thumbnail, 'thumbnail' => $this->thumbnail,
'metadata' => $this->metadata, 'metadata' => $this->metadata,
'folder_id' => $this->folder_id, 'folder_id' => $this->folder_id,
'updated_at' => format_date( 'updated_at' => $this->updated_at,
'created_at' => $this->created_at,
'deleted_at' => $this->deleted_at,
/*'updated_at' => format_date(
set_time_by_user_timezone($this->updated_at), __t('time') set_time_by_user_timezone($this->updated_at), __t('time')
), ),
'created_at' => format_date( 'created_at' => format_date(
set_time_by_user_timezone($this->created_at), __t('time') set_time_by_user_timezone($this->created_at), __t('time')
), ),*/
], ],
'relationships' => [ 'relationships' => [
$this->mergeWhen($this->shared, fn() => [ $this->mergeWhen($this->shared, fn() => [

View File

@@ -116,21 +116,6 @@ class Folder extends Model
return $folders + $files; return $folders + $files;
} }
/**
* Format deleted at date reformat
*/
public function getDeletedAtAttribute(): string | null
{
if (! $this->attributes['deleted_at']) {
return null;
}
return format_date(
set_time_by_user_timezone($this->attributes['deleted_at']),
__t('time')
);
}
/** /**
* Get parent * Get parent
*/ */

View File

@@ -24,12 +24,14 @@ class FolderResource extends JsonResource
'isTeamFolder' => $this->team_folder, 'isTeamFolder' => $this->team_folder,
'items' => $this->items, 'items' => $this->items,
'trashed_items' => $this->trashed_items, 'trashed_items' => $this->trashed_items,
'updated_at' => format_date( 'updated_at' => $this->updated_at,
'created_at' => $this->created_at,
/*'updated_at' => format_date(
set_time_by_user_timezone($this->updated_at), __t('time') set_time_by_user_timezone($this->updated_at), __t('time')
), ),
'created_at' => format_date( 'created_at' => format_date(
set_time_by_user_timezone($this->created_at), __t('time') set_time_by_user_timezone($this->created_at), __t('time')
), ),*/
], ],
'relationships' => [ 'relationships' => [
$this->mergeWhen($this->teamMembers, fn() => [ $this->mergeWhen($this->teamMembers, fn() => [