mirror of https://github.com/minio/minio.git
				
				
				
			
		
			
				
	
	
		
			130 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| /*
 | |
|  * Minio Cloud Storage (C) 2018 Minio, Inc.
 | |
|  *
 | |
|  * Licensed under the Apache License, Version 2.0 (the "License");
 | |
|  * you may not use this file except in compliance with the License.
 | |
|  * You may obtain a copy of the License at
 | |
|  *
 | |
|  *     http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  * Unless required by applicable law or agreed to in writing, software
 | |
|  * distributed under the License is distributed on an "AS IS" BASIS,
 | |
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  * See the License for the specific language governing permissions and
 | |
|  * limitations under the License.
 | |
|  */
 | |
| 
 | |
| import web from "../web"
 | |
| import history from "../history"
 | |
| import {
 | |
|   sortObjectsByName,
 | |
|   sortObjectsBySize,
 | |
|   sortObjectsByDate
 | |
| } from "../utils"
 | |
| import { getCurrentBucket } from "../buckets/selectors"
 | |
| 
 | |
| export const SET_LIST = "objects/SET_LIST"
 | |
| export const APPEND_LIST = "objects/APPEND_LIST"
 | |
| export const RESET = "objects/RESET"
 | |
| export const SET_SORT_BY = "objects/SET_SORT_BY"
 | |
| export const SET_SORT_ORDER = "objects/SET_SORT_ORDER"
 | |
| export const SET_CURRENT_PREFIX = "objects/SET_CURRENT_PREFIX"
 | |
| 
 | |
| export const setList = (objects, marker, isTruncated) => ({
 | |
|   type: SET_LIST,
 | |
|   objects,
 | |
|   marker,
 | |
|   isTruncated
 | |
| })
 | |
| 
 | |
| export const appendList = (objects, marker, isTruncated) => ({
 | |
|   type: APPEND_LIST,
 | |
|   objects,
 | |
|   marker,
 | |
|   isTruncated
 | |
| })
 | |
| 
 | |
| export const fetchObjects = append => {
 | |
|   return function(dispatch, getState) {
 | |
|     const {
 | |
|       buckets: { currentBucket },
 | |
|       objects: { currentPrefix, marker }
 | |
|     } = getState()
 | |
|     return web
 | |
|       .ListObjects({
 | |
|         bucketName: currentBucket,
 | |
|         prefix: currentPrefix,
 | |
|         marker: append ? marker : ""
 | |
|       })
 | |
|       .then(res => {
 | |
|         let objects = []
 | |
|         if (res.objects) {
 | |
|           objects = res.objects.map(object => {
 | |
|             return {
 | |
|               ...object,
 | |
|               name: object.name.replace(currentPrefix, "")
 | |
|             }
 | |
|           })
 | |
|         }
 | |
|         if (append) {
 | |
|           dispatch(appendList(objects, res.nextmarker, res.istruncated))
 | |
|         } else {
 | |
|           dispatch(setList(objects, res.nextmarker, res.istruncated))
 | |
|           dispatch(setSortBy(""))
 | |
|           dispatch(setSortOrder(false))
 | |
|         }
 | |
|       })
 | |
|   }
 | |
| }
 | |
| 
 | |
| export const sortObjects = sortBy => {
 | |
|   return function(dispatch, getState) {
 | |
|     const { objects } = getState()
 | |
|     const sortOrder = objects.sortBy == sortBy ? !objects.sortOrder : true
 | |
|     dispatch(setSortBy(sortBy))
 | |
|     dispatch(setSortOrder(sortOrder))
 | |
|     let list
 | |
|     switch (sortBy) {
 | |
|       case "name":
 | |
|         list = sortObjectsByName(objects.list, sortOrder)
 | |
|         break
 | |
|       case "size":
 | |
|         list = sortObjectsBySize(objects.list, sortOrder)
 | |
|         break
 | |
|       case "last-modified":
 | |
|         list = sortObjectsByDate(objects.list, sortOrder)
 | |
|         break
 | |
|       default:
 | |
|         list = objects.list
 | |
|         break
 | |
|     }
 | |
|     dispatch(setList(list, objects.marker, objects.isTruncated))
 | |
|   }
 | |
| }
 | |
| 
 | |
| export const setSortBy = sortBy => ({
 | |
|   type: SET_SORT_BY,
 | |
|   sortBy
 | |
| })
 | |
| 
 | |
| export const setSortOrder = sortOrder => ({
 | |
|   type: SET_SORT_ORDER,
 | |
|   sortOrder
 | |
| })
 | |
| 
 | |
| export const selectPrefix = prefix => {
 | |
|   return function(dispatch, getState) {
 | |
|     dispatch(setCurrentPrefix(prefix))
 | |
|     dispatch(fetchObjects())
 | |
|     const currentBucket = getCurrentBucket(getState())
 | |
|     history.replace(`/${currentBucket}/${prefix}`)
 | |
|   }
 | |
| }
 | |
| 
 | |
| export const setCurrentPrefix = prefix => {
 | |
|   return {
 | |
|     type: SET_CURRENT_PREFIX,
 | |
|     prefix
 | |
|   }
 | |
| }
 |