mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-18 08:12:15 +00:00
add sorting for every getData and navigator, Favourites need to be fixed
This commit is contained in:
@@ -36,6 +36,7 @@ class BrowseController extends Controller
|
||||
->with(['parent'])
|
||||
->where('user_id', $user_id)
|
||||
->whereIn('unique_id', filter_folders_ids($folders_trashed))
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
// Get files trashed
|
||||
@@ -43,6 +44,7 @@ class BrowseController extends Controller
|
||||
->with(['parent'])
|
||||
->where('user_id', $user_id)
|
||||
->whereNotIn('folder_id', array_values(array_unique(recursiveFind($folders_trashed->toArray(), 'unique_id'))))
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
// Collect folders and files to single array
|
||||
@@ -72,11 +74,13 @@ class BrowseController extends Controller
|
||||
$folders = FileManagerFolder::with(['parent', 'shared:token,id,item_id,permission,protected,expire_in'])
|
||||
->where('user_id', $user_id)
|
||||
->whereIn('unique_id', $folder_ids)
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
$files = FileManagerFile::with(['parent', 'shared:token,id,item_id,permission,protected,expire_in'])
|
||||
->where('user_id', $user_id)
|
||||
->whereIn('unique_id', $file_ids)
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
// Collect folders and files to single array
|
||||
@@ -91,7 +95,8 @@ class BrowseController extends Controller
|
||||
public function latest() {
|
||||
|
||||
// Get User
|
||||
$user = User::with(['latest_uploads'])
|
||||
$user = User::with(['latest_uploads' => function($query) {
|
||||
$query->sortable(); }])
|
||||
->where('id', Auth::id())
|
||||
->first();
|
||||
|
||||
@@ -107,7 +112,7 @@ class BrowseController extends Controller
|
||||
|
||||
// Get User
|
||||
$uploads = FileManagerFile::with(['parent'])->where('user_id', Auth::id())
|
||||
->whereUserScope('editor')->orderBy('created_at', 'DESC')->get();
|
||||
->whereUserScope('editor')->sortable()->get();
|
||||
|
||||
return $uploads;
|
||||
}
|
||||
@@ -148,14 +153,12 @@ class BrowseController extends Controller
|
||||
$folders = FileManagerFolder::with(['parent', 'shared:token,id,item_id,permission,protected,expire_in'])
|
||||
->where('user_id', $user_id)
|
||||
->where('parent_id', $unique_id)
|
||||
// ->orderBy('created_at', 'DESC')
|
||||
->sortable(['name', 'DESC'])
|
||||
->get();
|
||||
|
||||
$files = FileManagerFile::with(['parent', 'shared:token,id,item_id,permission,protected,expire_in'])
|
||||
->where('user_id', $user_id)
|
||||
->where('folder_id', $unique_id)
|
||||
// ->orderBy('created_at', 'DESC')
|
||||
->sortable(['name', 'DESC'])
|
||||
->get();
|
||||
|
||||
|
||||
13
app/User.php
13
app/User.php
@@ -195,10 +195,14 @@ class User extends Authenticatable
|
||||
*/
|
||||
public function getFolderTreeAttribute()
|
||||
{
|
||||
|
||||
$sort = strtolower(request()->input('sort'));
|
||||
$direction = strtolower(request()->input('direction'));
|
||||
|
||||
return FileManagerFolder::with(['folders.shared', 'shared:token,id,item_id,permission,protected,expire_in'])
|
||||
->where('parent_id', 0)
|
||||
->where('user_id', $this->id)
|
||||
->orderByDesc('created_at')
|
||||
->orderBy($sort , $direction)
|
||||
->get();
|
||||
}
|
||||
|
||||
@@ -301,7 +305,10 @@ class User extends Authenticatable
|
||||
*/
|
||||
public function favourite_folders()
|
||||
{
|
||||
return $this->belongsToMany(FileManagerFolder::class, 'favourite_folder', 'user_id', 'folder_unique_id', 'id', 'unique_id')->with('shared:token,id,item_id,permission,protected,expire_in');
|
||||
$sort = strtolower(request()->input('sort') ? request()->input('sort') : 'created_at' );
|
||||
$direction = strtolower(request()->input('direction') ? request()->input('direction') : 'desc');
|
||||
|
||||
return $this->belongsToMany(FileManagerFolder::class, 'favourite_folder', 'user_id', 'folder_unique_id', 'id', 'unique_id')->with('shared:token,id,item_id,permission,protected,expire_in')->orderBy($sort , $direction);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -311,7 +318,7 @@ class User extends Authenticatable
|
||||
*/
|
||||
public function latest_uploads()
|
||||
{
|
||||
return $this->hasMany(FileManagerFile::class)->with(['parent'])->orderBy('created_at', 'DESC')->take(40);
|
||||
return $this->hasMany(FileManagerFile::class)->with(['parent'])->take(40);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -27,10 +27,9 @@
|
||||
"/chunks/database.js": "/chunks/database.js?id=0b21e6ff3bac5c963d9a",
|
||||
"/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=464c8e70974d492ce7f6",
|
||||
"/chunks/environment-setup.js": "/chunks/environment-setup.js?id=826fbaa6cc4acab69f5d",
|
||||
"/chunks/files.js": "/chunks/files.js?id=35936c1c34e3290a6072",
|
||||
"/chunks/files.js": "/chunks/files.js?id=76b46f43df974e899836",
|
||||
"/chunks/files~chunks/settings-subscription~chunks/shared-files~chunks/shared-page~chunks/user-subscription.js": "/chunks/files~chunks/settings-subscription~chunks/shared-files~chunks/shared-page~chunks/user-subscription.js?id=8ccd35de575e8a91d02f",
|
||||
"/chunks/files~chunks/shared-files.js": "/chunks/files~chunks/shared-files.js?id=b0fbc9ca0e4f56538924",
|
||||
"/chunks/files~chunks/shared-files~chunks/shared-page.js": "/chunks/files~chunks/shared-files~chunks/shared-page.js?id=b7a5e83f69ec780a8a8a",
|
||||
"/chunks/files~chunks/shared-files~chunks/shared-page.js": "/chunks/files~chunks/shared-files~chunks/shared-page.js?id=ac7424fc44caf9e64d1a",
|
||||
"/chunks/files~chunks/shared-page.js": "/chunks/files~chunks/shared-page.js?id=ed167949ea9398f0fbeb",
|
||||
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=aba8c662fbc234892216",
|
||||
"/chunks/installation-disclaimer.js": "/chunks/installation-disclaimer.js?id=7dfffa0f25308ba70b7a",
|
||||
@@ -56,8 +55,8 @@
|
||||
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=22e7978fe8a5cb488e52",
|
||||
"/chunks/settings-subscription.js": "/chunks/settings-subscription.js?id=367c9478591c7a4a2889",
|
||||
"/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=7da589bd335deefd5f65",
|
||||
"/chunks/shared-files.js": "/chunks/shared-files.js?id=07bf2c32935e1d8b9dac",
|
||||
"/chunks/shared-page.js": "/chunks/shared-page.js?id=19e7fdb00a89d06ee29f",
|
||||
"/chunks/shared-files.js": "/chunks/shared-files.js?id=5d9381e60cc1307f715a",
|
||||
"/chunks/shared-page.js": "/chunks/shared-page.js?id=f0e6fb1cf70035c49362",
|
||||
"/chunks/sign-in.js": "/chunks/sign-in.js?id=703fbd23d18816590337",
|
||||
"/chunks/sign-up.js": "/chunks/sign-up.js?id=cedca52c29abfb3c58f1",
|
||||
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=b99eb91043d1321187b9",
|
||||
@@ -76,12 +75,8 @@
|
||||
"/chunks/user-storage.js": "/chunks/user-storage.js?id=a99910f95c3e39caa78b",
|
||||
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=e8ea1e67f9ac0a835ed0",
|
||||
"/chunks/users.js": "/chunks/users.js?id=aba8837f40fbb79f99b4",
|
||||
"/js/main.a76097b1c16b210f4474.hot-update.js": "/js/main.a76097b1c16b210f4474.hot-update.js",
|
||||
"/chunks/files.a76097b1c16b210f4474.hot-update.js": "/chunks/files.a76097b1c16b210f4474.hot-update.js",
|
||||
"/chunks/files~chunks/shared-files~chunks/shared-page.a76097b1c16b210f4474.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared-page.a76097b1c16b210f4474.hot-update.js",
|
||||
"/chunks/shared-files.a76097b1c16b210f4474.hot-update.js": "/chunks/shared-files.a76097b1c16b210f4474.hot-update.js",
|
||||
"/js/main.417c204635751bec57ca.hot-update.js": "/js/main.417c204635751bec57ca.hot-update.js",
|
||||
"/chunks/files.417c204635751bec57ca.hot-update.js": "/chunks/files.417c204635751bec57ca.hot-update.js",
|
||||
"/chunks/files~chunks/shared-files~chunks/shared-page.417c204635751bec57ca.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared-page.417c204635751bec57ca.hot-update.js",
|
||||
"/chunks/shared-files.417c204635751bec57ca.hot-update.js": "/chunks/shared-files.417c204635751bec57ca.hot-update.js"
|
||||
"/js/main.1f3d44f14db2262cc1c6.hot-update.js": "/js/main.1f3d44f14db2262cc1c6.hot-update.js",
|
||||
"/js/main.3681a718c84b2523e874.hot-update.js": "/js/main.3681a718c84b2523e874.hot-update.js",
|
||||
"/chunks/files~chunks/shared-files~chunks/shared-page.16e87dbca64505b5cfac.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared-page.16e87dbca64505b5cfac.hot-update.js",
|
||||
"/js/main.9e6c37da83e8132013f6.hot-update.js": "/js/main.9e6c37da83e8132013f6.hot-update.js"
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
</ul>
|
||||
<ul class="menu-option-group">
|
||||
<li class="menu-option" @click="sort('date')">
|
||||
<li class="menu-option" @click="sort('created_at')">
|
||||
<div class="icon">
|
||||
<calendar-icon size="17"/>
|
||||
</div>
|
||||
@@ -36,7 +36,7 @@
|
||||
{{$t('preview_sorting.sort_date')}}
|
||||
</div>
|
||||
<div class="show-icon" >
|
||||
<arrow-up-icon size="17" v-if="filter.field === 'date'" :class="{ 'arrow-down': filter.sort === 'ASC' }"/>
|
||||
<arrow-up-icon size="17" v-if="filter.field === 'created_at'" :class="{ 'arrow-down': filter.sort === 'ASC' }"/>
|
||||
</div>
|
||||
</li>
|
||||
<li class="menu-option" @click="sort('name')" >
|
||||
@@ -114,8 +114,8 @@
|
||||
|
||||
let sorting = JSON.parse(localStorage.getItem('sorting'))
|
||||
|
||||
this.filter.sort = sorting ? sorting.sort : undefined
|
||||
this.filter.field = sorting ? sorting.field : undefined
|
||||
this.filter.sort = sorting ? sorting.sort : 'DESC'
|
||||
this.filter.field = sorting ? sorting.field : 'created_at'
|
||||
|
||||
events.$on('sortingAndPreview-open', () => {
|
||||
this.isVisible = true
|
||||
|
||||
24
resources/js/helpers.js
vendored
24
resources/js/helpers.js
vendored
@@ -308,11 +308,29 @@ const Helpers = {
|
||||
return validated
|
||||
}
|
||||
Vue.prototype.$getDataByLocation = function() {
|
||||
let previousFolder = store.getters.currentFolder
|
||||
let folder = store.getters.currentFolder
|
||||
|
||||
if(this.$isThisLocation('base')){
|
||||
this.$store.dispatch('getFolder', [{folder: previousFolder, back: false, init: false}])
|
||||
if(this.$isThisLocation('base') || this.$isThisLocation('public')){
|
||||
this.$store.dispatch('getFolder', [{ folder: folder, back: true, init: false, sorting:true}])
|
||||
}
|
||||
|
||||
if(this.$isThisLocation('latest')) {
|
||||
this.$store.dispatch('getLatest')
|
||||
}
|
||||
|
||||
if(this.$isThisLocation('shared')) {
|
||||
this.$store.dispatch('getShared')
|
||||
}
|
||||
|
||||
if(this.$isThisLocation('participant_uploads')) {
|
||||
this.$store.dispatch('getParticipantUploads')
|
||||
}
|
||||
|
||||
if(this.$isThisLocation('trash-root')) {
|
||||
this.$store.dispatch('getTrash')
|
||||
}
|
||||
|
||||
this.$store.dispatch('getAppData')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
41
resources/js/store/modules/fileBrowser.js
vendored
41
resources/js/store/modules/fileBrowser.js
vendored
@@ -20,6 +20,10 @@ const actions = {
|
||||
getFolder: ({commit, getters}, [payload]) => {
|
||||
commit('LOADING_STATE', {loading: true, data: []})
|
||||
|
||||
let getSort = JSON.parse(localStorage.getItem('sorting'))
|
||||
let sorting = {sort : getSort ? getSort.sort : 'DESC' , field:getSort ? getSort.field : 'created_at'}
|
||||
let sortingUrl = '?sort=' + sorting.field + '&direction=' + sorting.sort
|
||||
|
||||
if (payload.init)
|
||||
commit('FLUSH_FOLDER_HISTORY')
|
||||
|
||||
@@ -32,7 +36,7 @@ const actions = {
|
||||
// Set folder location
|
||||
payload.folder.location = payload.folder.deleted_at || payload.folder.location === 'trash' ? 'trash' : 'base'
|
||||
|
||||
if (! payload.back)
|
||||
if (! payload.back && !payload.sorting)
|
||||
commit('STORE_PREVIOUS_FOLDER', getters.currentFolder)
|
||||
|
||||
let url = payload.folder.location === 'trash'
|
||||
@@ -40,12 +44,12 @@ const actions = {
|
||||
: '/folders/' + payload.folder.unique_id
|
||||
|
||||
axios
|
||||
.get(getters.api + url)
|
||||
.get(getters.api + url + sortingUrl)
|
||||
.then(response => {
|
||||
commit('LOADING_STATE', {loading: false, data: response.data})
|
||||
commit('STORE_CURRENT_FOLDER', payload.folder)
|
||||
|
||||
if (payload.back)
|
||||
if (payload.back && !payload.sorting)
|
||||
commit('REMOVE_BROWSER_HISTORY')
|
||||
|
||||
events.$emit('scrollTop')
|
||||
@@ -71,6 +75,10 @@ const actions = {
|
||||
getLatest: ({commit, getters}) => {
|
||||
commit('LOADING_STATE', {loading: true, data: []})
|
||||
|
||||
let getSort = JSON.parse(localStorage.getItem('sorting'))
|
||||
let sorting = {sort : getSort ? getSort.sort : 'DESC' , field:getSort ? getSort.field : 'created_at'}
|
||||
let sortingUrl = '?sort=' + sorting.field + '&direction=' + sorting.sort
|
||||
|
||||
commit('STORE_PREVIOUS_FOLDER', getters.currentFolder)
|
||||
commit('STORE_CURRENT_FOLDER', {
|
||||
name: i18n.t('sidebar.latest'),
|
||||
@@ -79,7 +87,7 @@ const actions = {
|
||||
})
|
||||
|
||||
axios
|
||||
.get(getters.api + '/latest')
|
||||
.get(getters.api + '/latest' + sortingUrl)
|
||||
.then(response => {
|
||||
commit('LOADING_STATE', {loading: false, data: response.data})
|
||||
events.$emit('scrollTop')
|
||||
@@ -90,6 +98,10 @@ const actions = {
|
||||
commit('LOADING_STATE', {loading: true, data: []})
|
||||
commit('FLUSH_FOLDER_HISTORY')
|
||||
|
||||
let getSort = JSON.parse(localStorage.getItem('sorting'))
|
||||
let sorting = {sort : getSort ? getSort.sort : 'DESC' , field:getSort ? getSort.field : 'created_at'}
|
||||
let sortingUrl = '?sort=' + sorting.field + '&direction=' + sorting.sort
|
||||
|
||||
let currentFolder = {
|
||||
name: i18n.t('sidebar.my_shared'),
|
||||
location: 'shared',
|
||||
@@ -99,7 +111,7 @@ const actions = {
|
||||
commit('STORE_CURRENT_FOLDER', currentFolder)
|
||||
|
||||
axios
|
||||
.get(getters.api + '/shared-all')
|
||||
.get(getters.api + '/shared-all' + sortingUrl)
|
||||
.then(response => {
|
||||
commit('LOADING_STATE', {loading: false, data: response.data})
|
||||
commit('STORE_PREVIOUS_FOLDER', currentFolder)
|
||||
@@ -111,6 +123,10 @@ const actions = {
|
||||
getParticipantUploads: ({commit, getters}) => {
|
||||
commit('LOADING_STATE', {loading: true, data: []})
|
||||
|
||||
let getSort = JSON.parse(localStorage.getItem('sorting'))
|
||||
let sorting = {sort : getSort ? getSort.sort : 'DESC' , field:getSort ? getSort.field : 'created_at'}
|
||||
let sortingUrl = '?sort=' + sorting.field + '&direction=' + sorting.sort
|
||||
|
||||
commit('STORE_PREVIOUS_FOLDER', getters.currentFolder)
|
||||
commit('STORE_CURRENT_FOLDER', {
|
||||
name: i18n.t('sidebar.participant_uploads'),
|
||||
@@ -119,7 +135,7 @@ const actions = {
|
||||
})
|
||||
|
||||
axios
|
||||
.get(getters.api + '/participant-uploads')
|
||||
.get(getters.api + '/participant-uploads' + sortingUrl)
|
||||
.then(response => {
|
||||
commit('LOADING_STATE', {loading: false, data: response.data})
|
||||
|
||||
@@ -131,6 +147,11 @@ const actions = {
|
||||
commit('LOADING_STATE', {loading: true, data: []})
|
||||
commit('FLUSH_FOLDER_HISTORY')
|
||||
|
||||
let getSort = JSON.parse(localStorage.getItem('sorting'))
|
||||
let sorting = {sort : getSort ? getSort.sort : 'DESC' , field:getSort ? getSort.field : 'created_at'}
|
||||
let sortingUrl = '?sort=' + sorting.field + '&direction=' + sorting.sort
|
||||
|
||||
|
||||
let trash = {
|
||||
name: i18n.t('locations.trash'),
|
||||
unique_id: undefined,
|
||||
@@ -140,7 +161,7 @@ const actions = {
|
||||
commit('STORE_CURRENT_FOLDER', trash)
|
||||
|
||||
axios
|
||||
.get(getters.api + '/trash')
|
||||
.get(getters.api + '/trash' + sortingUrl)
|
||||
.then(response => {
|
||||
commit('LOADING_STATE', {loading: false, data: response.data})
|
||||
commit('STORE_PREVIOUS_FOLDER', trash)
|
||||
@@ -174,6 +195,10 @@ const actions = {
|
||||
},
|
||||
getFolderTree: ({commit, getters}) => {
|
||||
|
||||
let getSort = JSON.parse(localStorage.getItem('sorting'))
|
||||
let sorting = {sort : getSort ? getSort.sort : 'DESC' , field:getSort ? getSort.field : 'created_at'}
|
||||
let sortingUrl = '?sort=' + sorting.field + '&direction=' + sorting.sort
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
// Get route
|
||||
@@ -187,7 +212,7 @@ const actions = {
|
||||
route = '/api/navigation'
|
||||
|
||||
axios
|
||||
.get(route)
|
||||
.get(route + sortingUrl)
|
||||
.then(response => {
|
||||
resolve(response)
|
||||
|
||||
|
||||
6
resources/js/store/modules/userAuth.js
vendored
6
resources/js/store/modules/userAuth.js
vendored
@@ -11,9 +11,13 @@ const defaultState = {
|
||||
|
||||
const actions = {
|
||||
getAppData: ({commit, getters}) => {
|
||||
let getSort = JSON.parse(localStorage.getItem('sorting'))
|
||||
let sorting = {sort : getSort ? getSort.sort : 'DESC' , field:getSort ? getSort.field : 'created_at'}
|
||||
let sortingUrl = '?sort=' + sorting.field + '&direction=' + sorting.sort
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
axios
|
||||
.get(getters.api + '/user')
|
||||
.get(getters.api + '/user' + sortingUrl)
|
||||
.then((response) => {
|
||||
resolve(response)
|
||||
|
||||
|
||||
@@ -101,6 +101,9 @@
|
||||
|
||||
<!--File browser-->
|
||||
<FileBrowser/>
|
||||
|
||||
<!-- Selecting preview list and sorting -->
|
||||
<SortingAndPreview/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -109,6 +112,7 @@
|
||||
<script>
|
||||
import {ValidationProvider, ValidationObserver} from 'vee-validate/dist/vee-validate.full'
|
||||
import MobileMultiSelectMenu from '@/components/FilesView/MobileMultiSelectMenu'
|
||||
import SortingAndPreview from '@/components/FilesView/SortingAndPreview'
|
||||
import TreeMenuNavigator from '@/components/Others/TreeMenuNavigator'
|
||||
import FileFullPreview from '@/components/FilesView/FileFullPreview'
|
||||
import DesktopToolbar from '@/components/FilesView/DesktopToolbar'
|
||||
@@ -140,6 +144,7 @@
|
||||
components: {
|
||||
MobileMultiSelectMenu,
|
||||
ValidationProvider,
|
||||
SortingAndPreview,
|
||||
ValidationObserver,
|
||||
TreeMenuNavigator,
|
||||
FileFullPreview,
|
||||
|
||||
Reference in New Issue
Block a user