Skip to content
Snippets Groups Projects
DataBrowserController.js 2.71 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * Copyright ETH 2023 Zürich, Scientific IT Services
     *
     *  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 ComponentController from '@src/js/components/common/ComponentController.js'
    import autoBind from 'auto-bind'
    
    export default class DataBrowserController extends ComponentController {
    
      constructor() {
        super()
        autoBind(this)
    
        this.owner = 'demo-sample'
    
        this.gridController = null
    
      setSessionToken(sessionToken) {
        this.component.datastoreServer.useSession(sessionToken)
    
      async listFiles() {
        return new Promise((resolve, reject) => {
    
          this.component.datastoreServer.list(this.owner, this.path, false, (data) => {
    
            if (!data.error) {
              const results = data.result[1]
              const files = results.map(result => result[1])
              resolve(files)
            } else {
              reject(data.error)
            }
          })
        })
      }
    
      async load() {
        const files = await this.listFiles()
        await this.setState({ files })
    
        return files.map(file => ({ id: file.name, ...file }))
    
      async createNewFolder(name) {
        return new Promise((resolve, reject) => {
    
          this.component.datastoreServer.create(this.owner, this.path + name, true, async (success) => {
    
            if (success) {
              if (this.gridController) {
                await this.gridController.load()
              }
              resolve()
            } else {
              reject()
            }
          })
        })
    
      async delete(paths) {
        return new Promise((resolve, reject) => {
          const pathsLength = paths.length
          let responsesCount = 0
          let hasError = false
          paths.forEach((path) => {
            this.component.datastoreServer.delete(this.owner, path, async (success) => {
              if (!success) {
                hasError = true
              }
    
              if (++responsesCount === pathsLength) {
                if (this.gridController) {
                  await this.gridController.load()
                }
    
                if (!hasError) {
                  resolve()
                } else {
                  reject()
                }
              }
            })
          })
        })
      }
    
    
      handleUploadClick(event) {
        console.log(event.target)
      }